public void restoreState(Program newProgram, SaveState obj) {

		if (hasBeenRestored) {
			// ProgramLoations are intended to be immutable.  Calling this repeatedly breaks that.
			Msg.debug(this, "restoreState() has been called multiple times");
			return;
		}
		hasBeenRestored = true;

		program = newProgram;
		String addrStr = obj.getString("_ADDRESS", "0");
		String byteAddrStr = obj.getString("_BYTE_ADDR", addrStr);
		String refAddrStr = obj.getString("_REF_ADDRESS", null);
		componentPath = obj.getInts("_COMP_PATH", null);
		addr = ProgramUtilities.parseAddress(program, addrStr);
		byteAddr = ProgramUtilities.parseAddress(program, byteAddrStr);
		if (refAddrStr != null) {
			refAddr = ProgramUtilities.parseAddress(program, refAddrStr);
		}
		col = obj.getInt("_COLUMN", 0);
		row = obj.getInt("_ROW", 0);
		charOffset = obj.getInt("_CHAR_OFFSET", 0);
	}
Restore this program location using the given program and save state object.

@param newProgram program to restore from
@param obj the save state to restore from
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/ProgramLocation.java