@SuppressWarnings("unchecked")
	@Override
	public void autoMerge(int progressMin, int progressMax, TaskMonitor monitor)
			throws ProgramConflictException, MemoryAccessException, CancelledException {

		if (mergeManager != null) {
			latestResolvedDts = (Map<Long, DataType>) mergeManager
					.getResolveInformation(MergeConstants.RESOLVED_LATEST_DTS);
			myResolvedDts = (Map<Long, DataType>) mergeManager
					.getResolveInformation(MergeConstants.RESOLVED_MY_DTS);
			origResolvedDts = (Map<Long, DataType>) mergeManager
					.getResolveInformation(MergeConstants.RESOLVED_ORIGINAL_DTS);

			latestResolvedSymbols = (LongLongHashtable) mergeManager
					.getResolveInformation(MergeConstants.RESOLVED_LATEST_SYMBOLS);
			myResolvedSymbols = (LongLongHashtable) mergeManager
					.getResolveInformation(MergeConstants.RESOLVED_MY_SYMBOLS);
			originalResolvedSymbols = (LongLongHashtable) mergeManager
					.getResolveInformation(MergeConstants.RESOLVED_ORIGINAL_SYMBOLS);
		}

		initializeAutoMerge("Auto-merging External Labels and Functions and determining conflicts.",
			progressMin, progressMax, monitor);

		monitor.checkCancelled();
		clearResolveInfo();

		setupSymbolChanges(monitor); // Creates ID arrays used by processing methods.

		monitor.setMessage("Auto-merging Externals and determining conflicts.");

		getAddsRemovesChangesForExternals(monitor);

		saveInitialIDHashInfo();

//		mergeManager.updateProgress(25, "Finding conflicts for removed externals.");
		determineExternalRemoveConflicts(monitor);

//		mergeManager.updateProgress(35, "Finding conflicts for changed externals.");
		determineExternalChangeConflicts(monitor);

//		mergeManager.updateProgress(85, "Finding conflicts for added externals.");
		determineExternalAddConflicts(monitor);

		mergeManager.updateProgress(100, "Done auto-merging Externals and determining conflicts.");

		showResolveErrors(ERROR_TITLE);
		showResolveInfo(INFO_TITLE);
	}
Determine the type of changes to the symbols in the LATEST and MY (CheckedOut) program.
Changes can be symbol removed, added, changed, renamed, and set to primary.
@param monitor task monitor for displaying progress to the user
@throws CancelledException if the user cancels the merge.
Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ExternalFunctionMerger.java