private void handleAddressConflict(ListingMergePanel listingPanel, Address addr,
			int chosenConflictOption) throws CancelledException {
		currentConflictType = SymbolConflictType.ADDRESS_SYMBOL_CONFLICT;
		boolean askUser = (addressSymbolChoice == ASK_USER) && (chosenConflictOption == ASK_USER);
		// At address get the symbol name ArrayList for each address conflict.
		if (addressConflicts.contains(addr)) {
			ArrayList<SymbolPath> addressConflictList = symbolAddressConflicts.get(addr);
			for (SymbolPath symbolPath : addressConflictList) {
				Symbol mySymbol = getSymbol(myPgm, symbolPath, addr);
				currentAddress = addr;
				currentSymbol = mySymbol;
				currentNamespace = mySymbol.getParentNamespace();
				currentSymbolName = mySymbol.getName();
				Namespace resultNamespace = DiffUtility.getNamespace(currentNamespace, resultPgm);
				uniqueName = ProgramMerge.getUniqueName(resultSymTab, currentSymbolName,
					currentAddress, resultNamespace, mySymbol.getSymbolType());
				currentBackgroundSet = new AddressSet(addr, addr);
				if (askUser && mergeManager != null) {
					showConflictPanel(listingPanel, ADDRESS_CONFLICT, addressSymbolChoice,
						"Symbol Address");
				}
				else {
					int optionToUse = (addressSymbolChoice == ASK_USER) ? chosenConflictOption
							: addressSymbolChoice;
					mergeSymbol(currentSymbol, optionToUse);
				}
			}
		}
	}
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/SymbolMerger.java