@Override
	public void merge(TaskMonitor monitor) {

		mergeManager.setInProgress(PROPERTY_LIST_PHASE);
		this.currentMonitor = monitor;

		currentConflict = 0;
		totalConflictCount = 0;
		List<String> myNames = myProgram.getOptionsNames();
		List<String> latestNames = latestProgram.getOptionsNames();
		List<String> origNames = originalProgram.getOptionsNames();
		int myNamesCount = myNames.size();
		mergeManager.updateProgress(0, "Merging Property Lists...");
		int transactionID = resultProgram.startTransaction("Merge Property Lists");
		boolean commit = false;
		try {
			currentMonitor.initialize(myNamesCount);
			for (int i = 0; i < myNamesCount; i++) {
				if (monitor.isCancelled()) {
					return;
				}
				currentMonitor.setProgress(i);
				String myName = myNames.get(i);
				int progress = (int) (((float) (i / myNamesCount)) * 100);
				mergeManager.updateProgress(progress,
					"Merging property list for " + myName + "...");
				boolean isInLatest = latestNames.contains(myName);
				boolean isInOrig = origNames.contains(myName);
				if (!isInLatest && !isInOrig) {
					// add the new property list
					addPropertyList(myName);
				}
				else if (isInLatest) {
					// if latest value did not change but source value did
					// change, update resultProgram with source value
					checkValues(myName);
				}
			}
			mergeManager.updateProgress(100);

			try {
				processConflicts();
				commit = true;
			}
			catch (CancelledException e) {
				commit = false;
			}
		}
		finally {
			resultProgram.endTransaction(transactionID, commit);
		}
		mergeManager.setCompleted(PROPERTY_LIST_PHASE);
		currentMonitor.initialize(0);
	}
Construct a new PropertyListMergeManager.

@param mergeManager manages each stage of the merge/resolve conflict process
@param resultProgram latest version of the Program that is the 
destination for changes that will be applied from the source program
@param myProgram source of changes to apply to the result
program
@param originalProgram program that was originally checked out
@param latestProgram program that that is the latest version; the
resultProgram and latestProgram start out the same
Ghidra/Features/Base/src/main/java/ghidra/app/merge/propertylist/PropertyListMergeManager.java