@Override
	public boolean parse() throws IOException {
		reader.setPointerIndex(offset);

		reader.readNextInt(); // reserved
		majorVersion = reader.readNextByte();
		minorVersion = reader.readNextByte();
		heapSizes = reader.readNextByte();
		reader.readNextByte(); // reserved
		valid = reader.readNextLong();
		sorted = reader.readNextLong();

		// Next is an array of n 4-byte unsigned integers indicating the number of rows for each present table
		for (int i = 0; i < 64; i++) {
			if ((valid & (1L << i)) != 0) {
				CliTypeTable tableType = CliTypeTable.fromId(i);
				if (tableType != null) {
					rows.put(tableType, reader.readNextInt());
				}
				else {
					Msg.warn(this, "CLI metadata table with id " + i + " is not supported");
				}
			}
		}

		// Now the tables follow directly after
		for (int i = 0; i < 64; i++) {
			if ((valid & (1L << i)) != 0) {
				CliTypeTable tableType = CliTypeTable.fromId(i);
				if (tableType != null) {
					long origIndex = reader.getPointerIndex();
					CliAbstractTable table = createTableObject(tableType);
					tables.add(table);
					reader.setPointerIndex(origIndex + table.toDataType().getLength());
				}
			}
		}

		return true;
	}
Creates a new Metadata stream.

@param header The stream header associated with this stream.
@param guidStream The GUID stream.
@param userStringsStream The user strings stream.
@param stringsStream The strings stream.
@param blobStream The blob stream.
@param fileOffset The file offset where this stream starts.
@param rva The relative virtual address where this stream starts.
@param reader A reader that is set to the start of the stream.
@throws IOException if there is a problem reading the stream.
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/cli/streams/CliStreamMetadata.java