void mount(TaskMonitor monitor) throws IOException, CancelledException {
		try (TarArchiveInputStream tarInput =
			new TarArchiveInputStream(provider.getInputStream(0))) {
			TarArchiveEntry tarEntry;
			while ((tarEntry = tarInput.getNextTarEntry()) != null) {
				monitor.setMessage(tarEntry.getName());
				monitor.checkCancelled();

				int fileNum = fileCount++;
				String linkName = tarEntry.getLinkName();
				GFile newFile = !tarEntry.isSymbolicLink()
						? fsIndex.storeFile(tarEntry.getName(), fileCount, tarEntry.isDirectory(),
							tarEntry.getSize(), new TarMetadata(tarEntry, fileNum))
						: fsIndex.storeSymlink(tarEntry.getName(), fileCount,
							linkName, linkName.length(), new TarMetadata(tarEntry, fileNum));

				if (!tarEntry.isSymbolicLink() &&
					tarEntry.getSize() < FileCache.MAX_INMEM_FILESIZE) {
					// because tar files are sequential access, we cache smaller files if they
					// will fit in a in-memory ByteProvider
					try (ByteProvider bp =
						fsService.getDerivedByteProvider(fsFSRL.getContainer(), newFile.getFSRL(),
							newFile.getPath(), tarEntry.getSize(), () -> tarInput, monitor)) {
						fsIndex.updateFSRL(newFile,
							newFile.getFSRL().withMD5(bp.getFSRL().getMD5()));
					}
				}
			}
		}
	}
Creates a new TarFileSystem instance.

@param fsrl {@link FSRLRoot} of the new filesystem.
@param provider {@link ByteProvider} container file
@param fsService reference to the {@link FileSystemService}.
Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/tar/TarFileSystem.java