protected void doPutBytes(OffsetSnap loc, ByteBuffer buf, int dstOffset, int maxLen)
			throws IOException {
		// Cases:
		// 1) An entry does not exist
		// 2) An entry does exist, but it's not "present"
		// 2a) The update does not cause a change
		// 2b) The update does cause a change
		// 3) An entry exists, and it's present
		DBTraceMemoryBlockEntry ent = findMostRecentBlockEntry(loc, true);
		if (ent != null) { // Deal with (1) later
			if (ent.getSnap() == loc.snap) { // (3) Just update it.
				// No need to compare, because a NOP set won't hurt.
				ent.setBytes(buf, dstOffset, maxLen);
				return;
			}
			// (2)...
			if (ent.cmpBytes(buf, dstOffset, maxLen) == 0) {
				// (2a)
				buf.position(buf.position() + maxLen);
				return;
			}
			ent = ent.copy(loc);
			ent.setBytes(buf, dstOffset, maxLen);
			return;
		}
		// (1) or (2b)
		ent = blockStore.create();
		ent.setLoc(loc);
		blockCacheMostRecent.clear();
		blockCacheMostRecent.put(loc, ent);
		if (ent.cmpBytes(buf, dstOffset, maxLen) == 0) {
			// Keep the entry, but don't allocate storage in a buffer
			buf.position(buf.position() + maxLen);
			return;
		}
		ent.setBytes(buf, dstOffset, maxLen);
	}
Locate the soonest block entry for the given offset-snap pair

<p>
To qualify, the entry must have a snap greater than (or optionally equal to) that given and
an offset exactly equal to that given. That is, it is the earliest in time, but most follow
the given snap. Additionally, if the given snap is in scratch space, the found entry must
also be in scratch space.

@param loc the offset-snap pair
@param inclusive true to allow equal snap
@return the found entry, or null
Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/DBTraceMemorySpace.java