private void getChanges(SymbolTable newSymTab) {
		long[] symbolAddIDs;
		long[] symbolChangeIDs;
		AddressSet setPrimary;

		if (newSymTab == latestSymTab) {
			symbolAddIDs = this.latestAddIDs;
			symbolChangeIDs = this.latestChangeIDs;
			setPrimary = this.latestSetPrimary;
		}
		else if (newSymTab == mySymTab) {
			symbolAddIDs = this.myAddIDs;
			symbolChangeIDs = this.myChangeIDs;
			setPrimary = this.mySetPrimary;
		}
		else {
			return;
		}

		LongArrayList tempRemoves = new LongArrayList();
		LongArrayList modifies = new LongArrayList();
		LongArrayList renameChanges = new LongArrayList();
		LongArrayList primaryChanges = new LongArrayList();
//		LongArrayList commentChanges = new LongArrayList();
		LongArrayList sourceChanges = new LongArrayList();
		LongArrayList anchorChanges = new LongArrayList();

		boolean changeSymbolErrorOccurred = false;
		for (long id : symbolChangeIDs) {
			Symbol newSym = newSymTab.getSymbol(id);
			int index = indexOf(symbolAddIDs, id);
			if (index >= 0 && index < symbolAddIDs.length) {
				if (newSym == null) {
					// If it was added and then removed, it's like it was never added or removed.
					symbolAddIDs[index] = -1L; // Put -1 in the array to indicate to remove it.
				}
				// Else added and changed; all we care about is added, so ignore changed.
				continue;
			}
			Symbol oldSym = originalSymTab.getSymbol(id);
			if (newSym == null) {
				if (oldSym != null) {
					// Symbol was removed.
					tempRemoves.add(id);
				}
				// The following check for the id < 400000000L is to ignore default symbols
				// incorrectly being put in the change set for the 4.3 thru 4.3.2 versions.
				else if (id < 400000000L) {
					Msg.warn(this,
						"Symbol Merge Error: Could not find removed symbol in original program.\n" +
							"  Symbol ID = " + id);
					changeSymbolErrorOccurred = true;
				}
				continue;
			}
			if (oldSym == null) {
				Msg.warn(this,
					"Symbol Merge Error: Could not find changed symbol in original program.\n" +
						"  Symbol ID = " + id + "  Symbol Name = " + newSym.getName(true) +
						"  Address = " + newSym.getAddress().toString());
				changeSymbolErrorOccurred = true;
				continue;
			}
			boolean renamed = false;
			if (!newSym.getName().equals(oldSym.getName())) {
				renameChanges.add(id);
				renamed = true;
			}
			else if (!newSym.getParentNamespace().equals(oldSym.getParentNamespace())) {
				renameChanges.add(id);
				renamed = true;
			}
//			boolean commentChanged =
//				!SystemUtilities.isEqual(newSym.getSymbolStringData(), oldSym.getSymbolStringData());
			boolean sourceChanged = newSym.getSource() != oldSym.getSource();
//			if (commentChanged) {
//				commentChanges.add(id);
//			}
			if (sourceChanged) {
				sourceChanges.add(id);
			}
			if (renamed || sourceChanged) { // if (renamed || commentChanged || sourceChanged) {
				modifies.add(id);
			}
			if (newSym.isPinned() != oldSym.isPinned()) {
				anchorChanges.add(id);
			}
			if (newSym.isPrimary() && !oldSym.isPrimary()) {
				primaryChanges.add(id);
				Address addr = newSym.getAddress();
				setPrimary.addRange(addr, addr);
			}
		}
		if (newSymTab == latestSymTab) {
			latestRemoveIDs = tempRemoves.toLongArray();
			latestModifiedIDs = modifies.toLongArray();
			latestRenameIDs = renameChanges.toLongArray();
//			latestCommentChangeIDs = commentChanges.toLongArray();
			latestSourceChangeIDs = sourceChanges.toLongArray();
			latestAnchorChangeIDs = anchorChanges.toLongArray();
			latestPrimaryChangeIDs = primaryChanges.toLongArray();
		}
		else if (newSymTab == mySymTab) {
			myRemoveIDs = tempRemoves.toLongArray();
			myModifiedIDs = modifies.toLongArray();
			myRenameIDs = renameChanges.toLongArray();
//			myCommentChangeIDs = commentChanges.toLongArray();
			mySourceChangeIDs = sourceChanges.toLongArray();
			myAnchorChangeIDs = anchorChanges.toLongArray();
			myPrimaryChangeIDs = primaryChanges.toLongArray();
		}
		// Only pop up one error dialog due to bad IDs in the symbol change set.
		if (changeSymbolErrorOccurred) {
			Msg.error(this,
				"Symbol Merge Error: Could not find changed symbol in original program.\n" +
					"  See log for more details.");
		}
	}
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