public void addManagers() {
		int mgrCount = 0;
		mgrs = new SarifMgr[N_MANAGERS+1];
		opts = new Boolean[N_MANAGERS+1];
		mgrs[mgrCount] = new DataTypesSarifMgr(program, log);
		opts[mgrCount++] = options.isData();
		mgrs[mgrCount] = new MemoryMapSarifMgr(this, program, log);
		opts[mgrCount++] = options.isMemoryBlocks();
		mgrs[mgrCount] = new RegisterValuesSarifMgr(program, log);
		opts[mgrCount++] = options.isRegisters();
		mgrs[mgrCount] = new CodeSarifMgr(program, log);
		opts[mgrCount++] = options.isInstructions();
		mgrs[mgrCount] = new DefinedDataSarifMgr(program, log);
		opts[mgrCount++] = options.isData();
		mgrs[mgrCount] = new EquatesSarifMgr(program, log);
		opts[mgrCount++] = options.isEquates();
		mgrs[mgrCount] = new CommentsSarifMgr(program, log);
		opts[mgrCount++] = options.isComments();
		mgrs[mgrCount] = new PropertiesSarifMgr(program, log);
		opts[mgrCount++] = options.isProperties();
		mgrs[mgrCount] = new BookmarksSarifMgr(program, log);
		opts[mgrCount++] = options.isBookmarks();
		mgrs[mgrCount] = new ProgramTreeSarifMgr(program, log);
		opts[mgrCount++] = options.isTrees();
		mgrs[mgrCount] = new ExtEntryPointSarifMgr(program, log);
		opts[mgrCount++] = options.isEntryPoints();
		mgrs[mgrCount] = new RelocationTableSarifMgr(program, log);
		opts[mgrCount++] = options.isRelocationTable();
		mgrs[mgrCount] = new SymbolTableSarifMgr(program, log, true);
		opts[mgrCount++] = options.isSymbols();
		mgrs[mgrCount] = new ExternalLibSarifMgr(program, log);
		opts[mgrCount++] = options.isExternalLibraries();
		mgrs[mgrCount] = new FunctionsSarifMgr(program, log);
		opts[mgrCount++] = options.isFunctions();
		mgrs[mgrCount] = new SymbolTableSarifMgr(program, log, false);
		opts[mgrCount++] = options.isSymbols();
		mgrs[mgrCount] = new MarkupSarifMgr(program, log);
		opts[mgrCount++] = options.isReferences();
		assert (mgrCount == N_MANAGERS+1);

		Map<String, Boolean> columnKeys = SarifMgr.getColumnKeys();
		for (String k : columnKeys.keySet()) {
			keys.put(k, columnKeys.get(k));
		}
	}
Returns the program info from the underlying file. T``his method does not
make sense to invoke if a write is being performed to a new file.

@return the program info
@throws IOException if an I/O error occurs
Ghidra/Features/Sarif/src/main/java/sarif/managers/ProgramSarifMgr.java