private Map<Register, RegisterValue> getFutureRegisterStateMap(Address fromAddr, Address destAddr, boolean remove) {
		// if we don't know the fromAddr for this flow, then just use the simple map
		//    the flow map from NO_ADDRES is always indexed on destAddr
		if (fromAddr == Address.NO_ADDRESS) {
			Map<Address, Map<Register, RegisterValue>> futureRegisterStateMap = noAddressFutureRegisterStateMap;
			
			Map<Register, RegisterValue> futureStateMap = null;
			if (remove) {
				futureStateMap = futureRegisterStateMap.remove(destAddr);
			} else {
				futureStateMap = futureRegisterStateMap.get(destAddr);
			}
			return futureStateMap;
		}

		// if we have a fromAddr for this flow, then it looks up the destAddr
		//   then looks in a sub-map to find the address we flowed from
		Map<Address, Map<Register, RegisterValue>> futureRegisterStateMap = futureFlowRegisterStateMaps.get(destAddr);
	
		Map<Register, RegisterValue> futureStateMap = null;
		if (futureRegisterStateMap != null) {
			if (remove) {
				futureStateMap = futureRegisterStateMap.remove(fromAddr);
				if (futureStateMap != null && futureStateMap.isEmpty()) {
					futureFlowRegisterStateMaps.remove(destAddr);
				}
			} else {
				futureStateMap = futureRegisterStateMap.get(fromAddr);
			}
		}
		return futureStateMap;
	}
Get the future Register state map and conditionally remove the map

@param fromAddr Address flowing from
@param destAddr Address flowing to
@param remove true to remove the entry
@return State Map or null if not found
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/DisassemblerContextImpl.java