private void pinAssociates() {
		DataGraph.Associate associate1 = new DataGraph.Associate(null, 0);
		for (Entry<DataGraph.Associate, ArrayList<DataVertex>> entry : graphLeft.associates
				.entrySet()) {
			ArrayList<DataVertex> side0 = entry.getValue();
			associate1.node = pinMap.get(entry.getKey().node);
			if (associate1.node == null) {
				continue;
			}
			associate1.slot = entry.getKey().slot;
			ArrayList<DataVertex> side1 = graphRight.associates.get(associate1);
			if (side1 == null) {
				continue;
			}
			if (side0.size() != side1.size() || side0.size() > 4) {
				continue;
			}
			boolean matching = true;
			for (int i = 0; i < side0.size(); i += 2) {
				DataVertex op0 = side0.get(i);
				DataVertex op1 = side1.get(i);
				if (op0.op.getOpcode() != op1.op.getOpcode()) {
					matching = false;
					break;
				}
			}
			if (matching) {
				for (int i = 0; i < side0.size(); ++i) {
					DataVertex v0 = side0.get(i);
					DataVertex v1 = side1.get(i);
					if (v0.paired || v1.paired) {
						continue;
					}
					establishMatch(v0, v1);
				}
			}
		}
	}
Go back through data-flow vertices that were collapsed out of the original graphs.
Each collapsed DataVertex is associated to an uncollapsed vertex. If an uncollapsed vertex
has a match in the other graph also with associated collapsed vertices, we attempt
to pair the two sets of collapsed vertices, just based on PcodeOp opcodes.
Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/Pinning.java