See `8.11.2.2 Optional Content Membership Dictionaries` -> `VE` entry. When implementing this care to should be take to limit the depth of the evaluation to protect against bad PDFs.
constructor(data) {
    this.name = null;
    this.creator = null;
    this._order = null;
    this._groups = new Map();
    if (data === null) {
      return;
    }
    this.name = data.name;
    this.creator = data.creator;
    this._order = data.order;
    for (const group of data.groups) {
      this._groups.set(
        group.id,
        new OptionalContentGroup(group.name, group.intent)
      );
    }
    if (data.baseState === "OFF") {
      for (const group of this._groups) {
        group.visible = false;
      }
    }
    for (const on of data.on) {
      this._groups.get(on).visible = true;
    }
    for (const off of data.off) {
      this._groups.get(off).visible = false;
    }
  }
  isVisible(group) {