// @__NO_SIDE_EFFECTS__
function makeMap(str) {
  const map2 = /* @__PURE__ */ Object.create(null);
  for (const key of str.split(",")) map2[key] = 1;
  return (val) => val in map2;
}
const EMPTY_OBJ = {};
const EMPTY_ARR = [];
const NOOP = () => {
};
const NO = () => false;
const isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter
(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97);
const isModelListener = (key) => key.startsWith("onUpdate:");
const extend = Object.assign;
const remove = (arr, el) => {
  const i = arr.indexOf(el);
  if (i > -1) {
    arr.splice(i, 1);
  }
};
const hasOwnProperty$1 = Object.prototype.hasOwnProperty;
const hasOwn = (val, key) => hasOwnProperty$1.call(val, key);
const isArray$1 = Array.isArray;
const isMap = (val) => toTypeString(val) === "[object Map]";
const isSet = (val) => toTypeString(val) === "[object Set]";
const isDate = (val) => toTypeString(val) === "[object Date]";
const isFunction$2 = (val) => typeof val === "function";
const isString = (val) => typeof val === "string";
const isSymbol = (val) => typeof val === "symbol";
const isObject$1 = (val) => val !== null && typeof val === "object";
const isPromise = (val) => {
  return (isObject$1(val) || isFunction$2(val)) && isFunction$2(val.then) && isFunction$2(val.catch);
};
const objectToString = Object.prototype.toString;
const toTypeString = (value) => objectToString.call(value);
const toRawType = (value) => {
  return toTypeString(value).slice(8, -1);
};
const isPlainObject$1 = (val) => toTypeString(val) === "[object Object]";
const isIntegerKey = (key) => isString(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key;
const isReservedProp = /* @__PURE__ */ makeMap(
  // the leading comma is intentional so empty string "" is also included
  ",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"
);
const cacheStringFunction = (fn) => {
  const cache = /* @__PURE__ */ Object.create(null);
  return ((str) => {
    const hit = cache[str];
    return hit || (cache[str] = fn(str));
  });
};
const camelizeRE = /-\w/g;
const camelize = cacheStringFunction(
  (str) => {
    return str.replace(camelizeRE, (c2) => c2.slice(1).toUpperCase());
  }
);
const hyphenateRE = /\B([A-Z])/g;
const hyphenate = cacheStringFunction(
  (str) => str.replace(hyphenateRE, "-$1").toLowerCase()
);
const capitalize = cacheStringFunction((str) => {
  return str.charAt(0).toUpperCase() + str.slice(1);
});
const toHandlerKey = cacheStringFunction(
  (str) => {
    const s2 = str ? `on${capitalize(str)}` : ``;
    return s2;
  }
);
const hasChanged = (value, oldValue) => !Object.is(value, oldValue);
const invokeArrayFns = (fns, ...arg) => {
  for (let i = 0; i < fns.length; i++) {
    fns[i](...arg);
  }
};
const def = (obj, key, value, writable = false) => {
  Object.defineProperty(obj, key, {
    configurable: true,
    enumerable: false,
    writable,
    value
  });
};
const looseToNumber = (val) => {
  const n2 = parseFloat(val);
  return isNaN(n2) ? val : n2;
};
const toNumber = (val) => {
  const n2 = isString(val) ? Number(val) : NaN;
  return isNaN(n2) ? val : n2;
};
let _globalThis;
const getGlobalThis = () => {
  return _globalThis || (_globalThis = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {});
};
function normalizeStyle(value) {
  if (isArray$1(value)) {
    const res = {};
    for (let i = 0; i < value.length; i++) {
      const item = value[i];
      const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);
      if (normalized) {
        for (const key in normalized) {
          res[key] = normalized[key];
        }
      }
    }
    return res;
  } else if (isString(value) || isObject$1(value)) {
    return value;
  }
}
const listDelimiterRE = /;(?![^(]*\))/g;
const propertyDelimiterRE = /:([^]+)/;
const styleCommentRE = /\/\*[^]*?\*\//g;
function parseStringStyle(cssText) {
  const ret = {};
  cssText.replace(styleCommentRE, "").split(listDelimiterRE).forEach((item) => {
    if (item) {
      const tmp = item.split(propertyDelimiterRE);
      tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());
    }
  });
  return ret;
}
function normalizeClass(value) {
  let res = "";
  if (isString(value)) {
    res = value;
  } else if (isArray$1(value)) {
    for (let i = 0; i < value.length; i++) {
      const normalized = normalizeClass(value[i]);
      if (normalized) {
        res += normalized + " ";
      }
    }
  } else if (isObject$1(value)) {
    for (const name in value) {
      if (value[name]) {
        res += name + " ";
      }
    }
  }
  return res.trim();
}
const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;
const isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs);
function includeBooleanAttr(value) {
  return !!value || value === "";
}
function looseCompareArrays(a2, b2) {
  if (a2.length !== b2.length) return false;
  let equal = true;
  for (let i = 0; equal && i < a2.length; i++) {
    equal = looseEqual(a2[i], b2[i]);
  }
  return equal;
}
function looseEqual(a2, b2) {
  if (a2 === b2) return true;
  let aValidType = isDate(a2);
  let bValidType = isDate(b2);
  if (aValidType || bValidType) {
    return aValidType && bValidType ? a2.getTime() === b2.getTime() : false;
  }
  aValidType = isSymbol(a2);
  bValidType = isSymbol(b2);
  if (aValidType || bValidType) {
    return a2 === b2;
  }
  aValidType = isArray$1(a2);
  bValidType = isArray$1(b2);
  if (aValidType || bValidType) {
    return aValidType && bValidType ? looseCompareArrays(a2, b2) : false;
  }
  aValidType = isObject$1(a2);
  bValidType = isObject$1(b2);
  if (aValidType || bValidType) {
    if (!aValidType || !bValidType) {
      return false;
    }
    const aKeysCount = Object.keys(a2).length;
    const bKeysCount = Object.keys(b2).length;
    if (aKeysCount !== bKeysCount) {
      return false;
    }
    for (const key in a2) {
      const aHasKey = a2.hasOwnProperty(key);
      const bHasKey = b2.hasOwnProperty(key);
      if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a2[key], b2[key])) {
        return false;
      }
    }
  }
  return String(a2) === String(b2);
}
const isRef$1 = (val) => {
  return !!(val && val["__v_isRef"] === true);
};
const toDisplayString = (val) => {
  return isString(val) ? val : val == null ? "" : isArray$1(val) || isObject$1(val) && (val.toString === objectToString || !isFunction$2(val.toString)) ? isRef$1(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val);
};
const replacer = (_key, val) => {
  if (isRef$1(val)) {
    return replacer(_key, val.value);
  } else if (isMap(val)) {
    return {
      [`Map(${val.size})`]: [...val.entries()].reduce(
        (entries, [key, val2], i) => {
          entries[stringifySymbol(key, i) + " =>"] = val2;
          return entries;
        },
        {}
      )
    };
  } else if (isSet(val)) {
    return {
      [`Set(${val.size})`]: [...val.values()].map((v2) => stringifySymbol(v2))
    };
  } else if (isSymbol(val)) {
    return stringifySymbol(val);
  } else if (isObject$1(val) && !isArray$1(val) && !isPlainObject$1(val)) {
    return String(val);
  }
  return val;
};
const stringifySymbol = (v2, i = "") => {
  var _a2;
  return (
    // Symbol.description in es2019+ so we need to cast here to pass
    // the lib: es2016 check
    isSymbol(v2) ? `Symbol(${(_a2 = v2.description) != null ? _a2 : i})` : v2
  );
};
let activeEffectScope;
class EffectScope {
  // TODO isolatedDeclarations "__v_skip"
  constructor(detached = false) {
    this.detached = detached;
    this._active = true;
    this._on = 0;
    this.effects = [];
    this.cleanups = [];
    this._isPaused = false;
    this.__v_skip = true;
    this.parent = activeEffectScope;
    if (!detached && activeEffectScope) {
      this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(
        this
      ) - 1;
    }
  }
  get active() {
    return this._active;
  }
  pause() {
    if (this._active) {
      this._isPaused = true;
      let i, l2;
      if (this.scopes) {
        for (i = 0, l2 = this.scopes.length; i < l2; i++) {
          this.scopes[i].pause();
        }
      }
      for (i = 0, l2 = this.effects.length; i < l2; i++) {
        this.effects[i].pause();
      }
    }
  }
  /**
   * Resumes the effect scope, including all child scopes and effects.
   */
  resume() {
    if (this._active) {
      if (this._isPaused) {
        this._isPaused = false;
        let i, l2;
        if (this.scopes) {
          for (i = 0, l2 = this.scopes.length; i < l2; i++) {
            this.scopes[i].resume();
          }
        }
        for (i = 0, l2 = this.effects.length; i < l2; i++) {
          this.effects[i].resume();
        }
      }
    }
  }
  run(fn) {
    if (this._active) {
      const currentEffectScope = activeEffectScope;
      try {
        activeEffectScope = this;
        return fn();
      } finally {
        activeEffectScope = currentEffectScope;
      }
    }
  }
  /**
   * This should only be called on non-detached scopes
   * @internal
   */
  on() {
    if (++this._on === 1) {
      this.prevScope = activeEffectScope;
      activeEffectScope = this;
    }
  }
  /**
   * This should only be called on non-detached scopes
   * @internal
   */
  off() {
    if (this._on > 0 && --this._on === 0) {
      activeEffectScope = this.prevScope;
      this.prevScope = void 0;
    }
  }
  stop(fromParent) {
    if (this._active) {
      this._active = false;
      let i, l2;
      for (i = 0, l2 = this.effects.length; i < l2; i++) {
        this.effects[i].stop();
      }
      this.effects.length = 0;
      for (i = 0, l2 = this.cleanups.length; i < l2; i++) {
        this.cleanups[i]();
      }
      this.cleanups.length = 0;
      if (this.scopes) {
        for (i = 0, l2 = this.scopes.length; i < l2; i++) {
          this.scopes[i].stop(true);
        }
        this.scopes.length = 0;
      }
      if (!this.detached && this.parent && !fromParent) {
        const last = this.parent.scopes.pop();
        if (last && last !== this) {
          this.parent.scopes[this.index] = last;
          last.index = this.index;
        }
      }
      this.parent = void 0;
    }
  }
}
function effectScope(detached) {
  return new EffectScope(detached);
}
function getCurrentScope() {
  return activeEffectScope;
}
function onScopeDispose(fn, failSilently = false) {
  if (activeEffectScope) {
    activeEffectScope.cleanups.push(fn);
  }
}
let activeSub;
const pausedQueueEffects = /* @__PURE__ */ new WeakSet();
class ReactiveEffect {
  constructor(fn) {
    this.fn = fn;
    this.deps = void 0;
    this.depsTail = void 0;
    this.flags = 1 | 4;
    this.next = void 0;
    this.cleanup = void 0;
    this.scheduler = void 0;
    if (activeEffectScope && activeEffectScope.active) {
      activeEffectScope.effects.push(this);
    }
  }
  pause() {
    this.flags |= 64;
  }
  resume() {
    if (this.flags & 64) {
      this.flags &= -65;
      if (pausedQueueEffects.has(this)) {
        pausedQueueEffects.delete(this);
        this.trigger();
      }
    }
  }
  /**
   * @internal
   */
  notify() {
    if (this.flags & 2 && !(this.flags & 32)) {
      return;
    }
    if (!(this.flags & 8)) {
      batch(this);
    }
  }
  run() {
    if (!(this.flags & 1)) {
      return this.fn();
    }
    this.flags |= 2;
    cleanupEffect(this);
    prepareDeps(this);
    const prevEffect = activeSub;
    const prevShouldTrack = shouldTrack;
    activeSub = this;
    shouldTrack = true;
    try {
      return this.fn();
    } finally {
      cleanupDeps(this);
      activeSub = prevEffect;
      shouldTrack = prevShouldTrack;
      this.flags &= -3;
    }
  }
  stop() {
    if (this.flags & 1) {
      for (let link = this.deps; link; link = link.nextDep) {
        removeSub(link);
      }
      this.deps = this.depsTail = void 0;
      cleanupEffect(this);
      this.onStop && this.onStop();
      this.flags &= -2;
    }
  }
  trigger() {
    if (this.flags & 64) {
      pausedQueueEffects.add(this);
    } else if (this.scheduler) {
      this.scheduler();
    } else {
      this.runIfDirty();
    }
  }
  /**
   * @internal
   */
  runIfDirty() {
    if (isDirty(this)) {
      this.run();
    }
  }
  get dirty() {
    return isDirty(this);
  }
}
let batchDepth = 0;
let batchedSub;
let batchedComputed;
function batch(sub, isComputed = false) {
  sub.flags |= 8;
  if (isComputed) {
    sub.next = batchedComputed;
    batchedComputed = sub;
    return;
  }
  sub.next = batchedSub;
  batchedSub = sub;
}
function startBatch() {
  batchDepth++;
}
function endBatch() {
  if (--batchDepth > 0) {
    return;
  }
  if (batchedComputed) {
    let e = batchedComputed;
    batchedComputed = void 0;
    while (e) {
      const next = e.next;
      e.next = void 0;
      e.flags &= -9;
      e = next;
    }
  }
  let error;
  while (batchedSub) {
    let e = batchedSub;
    batchedSub = void 0;
    while (e) {
      const next = e.next;
      e.next = void 0;
      e.flags &= -9;
      if (e.flags & 1) {
        try {
          ;
          e.trigger();
        } catch (err) {
          if (!error) error = err;
        }
      }
      e = next;
    }
  }
  if (error) throw error;
}
function prepareDeps(sub) {
  for (let link = sub.deps; link; link = link.nextDep) {
    link.version = -1;
    link.prevActiveLink = link.dep.activeLink;
    link.dep.activeLink = link;
  }
}
function cleanupDeps(sub) {
  let head;
  let tail = sub.depsTail;
  let link = tail;
  while (link) {
    const prev = link.prevDep;
    if (link.version === -1) {
      if (link === tail) tail = prev;
      removeSub(link);
      removeDep(link);
    } else {
      head = link;
    }
    link.dep.activeLink = link.prevActiveLink;
    link.prevActiveLink = void 0;
    link = prev;
  }
  sub.deps = head;
  sub.depsTail = tail;
}
function isDirty(sub) {
  for (let link = sub.deps; link; link = link.nextDep) {
    if (link.dep.version !== link.version || link.dep.computed && (refreshComputed(link.dep.computed) || link.dep.version !== link.version)) {
      return true;
    }
  }
  if (sub._dirty) {
    return true;
  }
  return false;
}
function refreshComputed(computed2) {
  if (computed2.flags & 4 && !(computed2.flags & 16)) {
    return;
  }
  computed2.flags &= -17;
  if (computed2.globalVersion === globalVersion) {
    return;
  }
  computed2.globalVersion = globalVersion;
  if (!computed2.isSSR && computed2.flags & 128 && (!computed2.deps && !computed2._dirty || !isDirty(computed2))) {
    return;
  }
  computed2.flags |= 2;
  const dep = computed2.dep;
  const prevSub = activeSub;
  const prevShouldTrack = shouldTrack;
  activeSub = computed2;
  shouldTrack = true;
  try {
    prepareDeps(computed2);
    const value = computed2.fn(computed2._value);
    if (dep.version === 0 || hasChanged(value, computed2._value)) {
      computed2.flags |= 128;
      computed2._value = value;
      dep.version++;
    }
  } catch (err) {
    dep.version++;
    throw err;
  } finally {
    activeSub = prevSub;
    shouldTrack = prevShouldTrack;
    cleanupDeps(computed2);
    computed2.flags &= -3;
  }
}
function removeSub(link, soft = false) {
  const { dep, prevSub, nextSub } = link;
  if (prevSub) {
    prevSub.nextSub = nextSub;
    link.prevSub = void 0;
  }
  if (nextSub) {
    nextSub.prevSub = prevSub;
    link.nextSub = void 0;
  }
  if (dep.subs === link) {
    dep.subs = prevSub;
    if (!prevSub && dep.computed) {
      dep.computed.flags &= -5;
      for (let l2 = dep.computed.deps; l2; l2 = l2.nextDep) {
        removeSub(l2, true);
      }
    }
  }
  if (!soft && !--dep.sc && dep.map) {
    dep.map.delete(dep.key);
  }
}
function removeDep(link) {
  const { prevDep, nextDep } = link;
  if (prevDep) {
    prevDep.nextDep = nextDep;
    link.prevDep = void 0;
  }
  if (nextDep) {
    nextDep.prevDep = prevDep;
    link.nextDep = void 0;
  }
}
let shouldTrack = true;
const trackStack = [];
function pauseTracking() {
  trackStack.push(shouldTrack);
  shouldTrack = false;
}
function resetTracking() {
  const last = trackStack.pop();
  shouldTrack = last === void 0 ? true : last;
}
function cleanupEffect(e) {
  const { cleanup } = e;
  e.cleanup = void 0;
  if (cleanup) {
    const prevSub = activeSub;
    activeSub = void 0;
    try {
      cleanup();
    } finally {
      activeSub = prevSub;
    }
  }
}
let globalVersion = 0;
let Link$1 = class Link {
  constructor(sub, dep) {
    this.sub = sub;
    this.dep = dep;
    this.version = dep.version;
    this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0;
  }
};
class Dep {
  // TODO isolatedDeclarations "__v_skip"
  constructor(computed2) {
    this.computed = computed2;
    this.version = 0;
    this.activeLink = void 0;
    this.subs = void 0;
    this.map = void 0;
    this.key = void 0;
    this.sc = 0;
    this.__v_skip = true;
  }
  track(debugInfo) {
    if (!activeSub || !shouldTrack || activeSub === this.computed) {
      return;
    }
    let link = this.activeLink;
    if (link === void 0 || link.sub !== activeSub) {
      link = this.activeLink = new Link$1(activeSub, this);
      if (!activeSub.deps) {
        activeSub.deps = activeSub.depsTail = link;
      } else {
        link.prevDep = activeSub.depsTail;
        activeSub.depsTail.nextDep = link;
        activeSub.depsTail = link;
      }
      addSub(link);
    } else if (link.version === -1) {
      link.version = this.version;
      if (link.nextDep) {
        const next = link.nextDep;
        next.prevDep = link.prevDep;
        if (link.prevDep) {
          link.prevDep.nextDep = next;
        }
        link.prevDep = activeSub.depsTail;
        link.nextDep = void 0;
        activeSub.depsTail.nextDep = link;
        activeSub.depsTail = link;
        if (activeSub.deps === link) {
          activeSub.deps = next;
        }
      }
    }
    return link;
  }
  trigger(debugInfo) {
    this.version++;
    globalVersion++;
    this.notify(debugInfo);
  }
  notify(debugInfo) {
    startBatch();
    try {
      if (false) ;
      for (let link = this.subs; link; link = link.prevSub) {
        if (link.sub.notify()) {
          ;
          link.sub.dep.notify();
        }
      }
    } finally {
      endBatch();
    }
  }
}
function addSub(link) {
  link.dep.sc++;
  if (link.sub.flags & 4) {
    const computed2 = link.dep.computed;
    if (computed2 && !link.dep.subs) {
      computed2.flags |= 4 | 16;
      for (let l2 = computed2.deps; l2; l2 = l2.nextDep) {
        addSub(l2);
      }
    }
    const currentTail = link.dep.subs;
    if (currentTail !== link) {
      link.prevSub = currentTail;
      if (currentTail) currentTail.nextSub = link;
    }
    link.dep.subs = link;
  }
}
const targetMap = /* @__PURE__ */ new WeakMap();
const ITERATE_KEY = /* @__PURE__ */ Symbol(
  ""
);
const MAP_KEY_ITERATE_KEY = /* @__PURE__ */ Symbol(
  ""
);
const ARRAY_ITERATE_KEY = /* @__PURE__ */ Symbol(
  ""
);
function track(target, type, key) {
  if (shouldTrack && activeSub) {
    let depsMap = targetMap.get(target);
    if (!depsMap) {
      targetMap.set(target, depsMap = /* @__PURE__ */ new Map());
    }
    let dep = depsMap.get(key);
    if (!dep) {
      depsMap.set(key, dep = new Dep());
      dep.map = depsMap;
      dep.key = key;
    }
    {
      dep.track();
    }
  }
}
function trigger(target, type, key, newValue, oldValue, oldTarget) {
  const depsMap = targetMap.get(target);
  if (!depsMap) {
    globalVersion++;
    return;
  }
  const run3 = (dep) => {
    if (dep) {
      {
        dep.trigger();
      }
    }
  };
  startBatch();
  if (type === "clear") {
    depsMap.forEach(run3);
  } else {
    const targetIsArray = isArray$1(target);
    const isArrayIndex = targetIsArray && isIntegerKey(key);
    if (targetIsArray && key === "length") {
      const newLength = Number(newValue);
      depsMap.forEach((dep, key2) => {
        if (key2 === "length" || key2 === ARRAY_ITERATE_KEY || !isSymbol(key2) && key2 >= newLength) {
          run3(dep);
        }
      });
    } else {
      if (key !== void 0 || depsMap.has(void 0)) {
        run3(depsMap.get(key));
      }
      if (isArrayIndex) {
        run3(depsMap.get(ARRAY_ITERATE_KEY));
      }
      switch (type) {
        case "add":
          if (!targetIsArray) {
            run3(depsMap.get(ITERATE_KEY));
            if (isMap(target)) {
              run3(depsMap.get(MAP_KEY_ITERATE_KEY));
            }
          } else if (isArrayIndex) {
            run3(depsMap.get("length"));
          }
          break;
        case "delete":
          if (!targetIsArray) {
            run3(depsMap.get(ITERATE_KEY));
            if (isMap(target)) {
              run3(depsMap.get(MAP_KEY_ITERATE_KEY));
            }
          }
          break;
        case "set":
          if (isMap(target)) {
            run3(depsMap.get(ITERATE_KEY));
          }
          break;
      }
    }
  }
  endBatch();
}
function getDepFromReactive(object, key) {
  const depMap = targetMap.get(object);
  return depMap && depMap.get(key);
}
function reactiveReadArray(array) {
  const raw = /* @__PURE__ */ toRaw(array);
  if (raw === array) return raw;
  track(raw, "iterate", ARRAY_ITERATE_KEY);
  return /* @__PURE__ */ isShallow(array) ? raw : raw.map(toReactive);
}
function shallowReadArray(arr) {
  track(arr = /* @__PURE__ */ toRaw(arr), "iterate", ARRAY_ITERATE_KEY);
  return arr;
}
function toWrapped(target, item) {
  if (/* @__PURE__ */ isReadonly(target)) {
    return /* @__PURE__ */ isReactive(target) ? toReadonly(toReactive(item)) : toReadonly(item);
  }
  return toReactive(item);
}
const arrayInstrumentations = {
  __proto__: null,
  [Symbol.iterator]() {
    return iterator(this, Symbol.iterator, (item) => toWrapped(this, item));
  },
  concat(...args) {
    return reactiveReadArray(this).concat(
      ...args.map((x2) => isArray$1(x2) ? reactiveReadArray(x2) : x2)
    );
  },
  entries() {
    return iterator(this, "entries", (value) => {
      value[1] = toWrapped(this, value[1]);
      return value;
    });
  },
  every(fn, thisArg) {
    return apply$1(this, "every", fn, thisArg, void 0, arguments);
  },
  filter(fn, thisArg) {
    return apply$1(
      this,
      "filter",
      fn,
      thisArg,
      (v2) => v2.map((item) => toWrapped(this, item)),
      arguments
    );
  },
  find(fn, thisArg) {
    return apply$1(
      this,
      "find",
      fn,
      thisArg,
      (item) => toWrapped(this, item),
      arguments
    );
  },
  findIndex(fn, thisArg) {
    return apply$1(this, "findIndex", fn, thisArg, void 0, arguments);
  },
  findLast(fn, thisArg) {
    return apply$1(
      this,
      "findLast",
      fn,
      thisArg,
      (item) => toWrapped(this, item),
      arguments
    );
  },
  findLastIndex(fn, thisArg) {
    return apply$1(this, "findLastIndex", fn, thisArg, void 0, arguments);
  },
  // flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement
  forEach(fn, thisArg) {
    return apply$1(this, "forEach", fn, thisArg, void 0, arguments);
  },
  includes(...args) {
    return searchProxy(this, "includes", args);
  },
  indexOf(...args) {
    return searchProxy(this, "indexOf", args);
  },
  join(separator) {
    return reactiveReadArray(this).join(separator);
  },
  // keys() iterator only reads `length`, no optimization required
  lastIndexOf(...args) {
    return searchProxy(this, "lastIndexOf", args);
  },
  map(fn, thisArg) {
    return apply$1(this, "map", fn, thisArg, void 0, arguments);
  },
  pop() {
    return noTracking(this, "pop");
  },
  push(...args) {
    return noTracking(this, "push", args);
  },
  reduce(fn, ...args) {
    return reduce(this, "reduce", fn, args);
  },
  reduceRight(fn, ...args) {
    return reduce(this, "reduceRight", fn, args);
  },
  shift() {
    return noTracking(this, "shift");
  },
  // slice could use ARRAY_ITERATE but also seems to beg for range tracking
  some(fn, thisArg) {
    return apply$1(this, "some", fn, thisArg, void 0, arguments);
  },
  splice(...args) {
    return noTracking(this, "splice", args);
  },
  toReversed() {
    return reactiveReadArray(this).toReversed();
  },
  toSorted(comparer) {
    return reactiveReadArray(this).toSorted(comparer);
  },
  toSpliced(...args) {
    return reactiveReadArray(this).toSpliced(...args);
  },
  unshift(...args) {
    return noTracking(this, "unshift", args);
  },
  values() {
    return iterator(this, "values", (item) => toWrapped(this, item));
  }
};
function iterator(self2, method, wrapValue) {
  const arr = shallowReadArray(self2);
  const iter = arr[method]();
  if (arr !== self2 && !/* @__PURE__ */ isShallow(self2)) {
    iter._next = iter.next;
    iter.next = () => {
      const result = iter._next();
      if (!result.done) {
        result.value = wrapValue(result.value);
      }
      return result;
    };
  }
  return iter;
}
const arrayProto = Array.prototype;
function apply$1(self2, method, fn, thisArg, wrappedRetFn, args) {
  const arr = shallowReadArray(self2);
  const needsWrap = arr !== self2 && !/* @__PURE__ */ isShallow(self2);
  const methodFn = arr[method];
  if (methodFn !== arrayProto[method]) {
    const result2 = methodFn.apply(self2, args);
    return needsWrap ? toReactive(result2) : result2;
  }
  let wrappedFn = fn;
  if (arr !== self2) {
    if (needsWrap) {
      wrappedFn = function(item, index2) {
        return fn.call(this, toWrapped(self2, item), index2, self2);
      };
    } else if (fn.length > 2) {
      wrappedFn = function(item, index2) {
        return fn.call(this, item, index2, self2);
      };
    }
  }
  const result = methodFn.call(arr, wrappedFn, thisArg);
  return needsWrap && wrappedRetFn ? wrappedRetFn(result) : result;
}
function reduce(self2, method, fn, args) {
  const arr = shallowReadArray(self2);
  let wrappedFn = fn;
  if (arr !== self2) {
    if (!/* @__PURE__ */ isShallow(self2)) {
      wrappedFn = function(acc, item, index2) {
        return fn.call(this, acc, toWrapped(self2, item), index2, self2);
      };
    } else if (fn.length > 3) {
      wrappedFn = function(acc, item, index2) {
        return fn.call(this, acc, item, index2, self2);
      };
    }
  }
  return arr[method](wrappedFn, ...args);
}
function searchProxy(self2, method, args) {
  const arr = /* @__PURE__ */ toRaw(self2);
  track(arr, "iterate", ARRAY_ITERATE_KEY);
  const res = arr[method](...args);
  if ((res === -1 || res === false) && /* @__PURE__ */ isProxy(args[0])) {
    args[0] = /* @__PURE__ */ toRaw(args[0]);
    return arr[method](...args);
  }
  return res;
}
function noTracking(self2, method, args = []) {
  pauseTracking();
  startBatch();
  const res = (/* @__PURE__ */ toRaw(self2))[method].apply(self2, args);
  endBatch();
  resetTracking();
  return res;
}
const isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);
const builtInSymbols = new Set(
  /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== "arguments" && key !== "caller").map((key) => Symbol[key]).filter(isSymbol)
);
function hasOwnProperty(key) {
  if (!isSymbol(key)) key = String(key);
  const obj = /* @__PURE__ */ toRaw(this);
  track(obj, "has", key);
  return obj.hasOwnProperty(key);
}
class BaseReactiveHandler {
  constructor(_isReadonly = false, _isShallow = false) {
    this._isReadonly = _isReadonly;
    this._isShallow = _isShallow;
  }
  get(target, key, receiver) {
    if (key === "__v_skip") return target["__v_skip"];
    const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow;
    if (key === "__v_isReactive") {
      return !isReadonly2;
    } else if (key === "__v_isReadonly") {
      return isReadonly2;
    } else if (key === "__v_isShallow") {
      return isShallow2;
    } else if (key === "__v_raw") {
      if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype
      // this means the receiver is a user proxy of the reactive proxy
      Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) {
        return target;
      }
      return;
    }
    const targetIsArray = isArray$1(target);
    if (!isReadonly2) {
      let fn;
      if (targetIsArray && (fn = arrayInstrumentations[key])) {
        return fn;
      }
      if (key === "hasOwnProperty") {
        return hasOwnProperty;
      }
    }
    const res = Reflect.get(
      target,
      key,
      // if this is a proxy wrapping a ref, return methods using the raw ref
      // as receiver so that we don't have to call `toRaw` on the ref in all
      // its class methods
      /* @__PURE__ */ isRef(target) ? target : receiver
    );
    if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {
      return res;
    }
    if (!isReadonly2) {
      track(target, "get", key);
    }
    if (isShallow2) {
      return res;
    }
    if (/* @__PURE__ */ isRef(res)) {
      const value = targetIsArray && isIntegerKey(key) ? res : res.value;
      return isReadonly2 && isObject$1(value) ? /* @__PURE__ */ readonly(value) : value;
    }
    if (isObject$1(res)) {
      return isReadonly2 ? /* @__PURE__ */ readonly(res) : /* @__PURE__ */ reactive(res);
    }
    return res;
  }
}
class MutableReactiveHandler extends BaseReactiveHandler {
  constructor(isShallow2 = false) {
    super(false, isShallow2);
  }
  set(target, key, value, receiver) {
    let oldValue = target[key];
    const isArrayWithIntegerKey = isArray$1(target) && isIntegerKey(key);
    if (!this._isShallow) {
      const isOldValueReadonly = /* @__PURE__ */ isReadonly(oldValue);
      if (!/* @__PURE__ */ isShallow(value) && !/* @__PURE__ */ isReadonly(value)) {
        oldValue = /* @__PURE__ */ toRaw(oldValue);
        value = /* @__PURE__ */ toRaw(value);
      }
      if (!isArrayWithIntegerKey && /* @__PURE__ */ isRef(oldValue) && !/* @__PURE__ */ isRef(value)) {
        if (isOldValueReadonly) {
          return true;
        } else {
          oldValue.value = value;
          return true;
        }
      }
    }
    const hadKey = isArrayWithIntegerKey ? Number(key) < target.length : hasOwn(target, key);
    const result = Reflect.set(
      target,
      key,
      value,
      /* @__PURE__ */ isRef(target) ? target : receiver
    );
    if (target === /* @__PURE__ */ toRaw(receiver)) {
      if (!hadKey) {
        trigger(target, "add", key, value);
      } else if (hasChanged(value, oldValue)) {
        trigger(target, "set", key, value);
      }
    }
    return result;
  }
  deleteProperty(target, key) {
    const hadKey = hasOwn(target, key);
    target[key];
    const result = Reflect.deleteProperty(target, key);
    if (result && hadKey) {
      trigger(target, "delete", key, void 0);
    }
    return result;
  }
  has(target, key) {
    const result = Reflect.has(target, key);
    if (!isSymbol(key) || !builtInSymbols.has(key)) {
      track(target, "has", key);
    }
    return result;
  }
  ownKeys(target) {
    track(
      target,
      "iterate",
      isArray$1(target) ? "length" : ITERATE_KEY
    );
    return Reflect.ownKeys(target);
  }
}
class ReadonlyReactiveHandler extends BaseReactiveHandler {
  constructor(isShallow2 = false) {
    super(true, isShallow2);
  }
  set(target, key) {
    return true;
  }
  deleteProperty(target, key) {
    return true;
  }
}
const mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler();
const readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler();
const shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler(true);
const shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true);
const toShallow = (value) => value;
const getProto = (v2) => Reflect.getPrototypeOf(v2);
function createIterableMethod(method, isReadonly2, isShallow2) {
  return function(...args) {
    const target = this["__v_raw"];
    const rawTarget = /* @__PURE__ */ toRaw(target);
    const targetIsMap = isMap(rawTarget);
    const isPair = method === "entries" || method === Symbol.iterator && targetIsMap;
    const isKeyOnly = method === "keys" && targetIsMap;
    const innerIterator = target[method](...args);
    const wrap2 = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;
    !isReadonly2 && track(
      rawTarget,
      "iterate",
      isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY
    );
    return extend(
      // inheriting all iterator properties
      Object.create(innerIterator),
      {
        // iterator protocol
        next() {
          const { value, done } = innerIterator.next();
          return done ? { value, done } : {
            value: isPair ? [wrap2(value[0]), wrap2(value[1])] : wrap2(value),
            done
          };
        }
      }
    );
  };
}
function createReadonlyMethod(type) {
  return function(...args) {
    return type === "delete" ? false : type === "clear" ? void 0 : this;
  };
}
function createInstrumentations(readonly2, shallow) {
  const instrumentations = {
    get(key) {
      const target = this["__v_raw"];
      const rawTarget = /* @__PURE__ */ toRaw(target);
      const rawKey = /* @__PURE__ */ toRaw(key);
      if (!readonly2) {
        if (hasChanged(key, rawKey)) {
          track(rawTarget, "get", key);
        }
        track(rawTarget, "get", rawKey);
      }
      const { has } = getProto(rawTarget);
      const wrap2 = shallow ? toShallow : readonly2 ? toReadonly : toReactive;
      if (has.call(rawTarget, key)) {
        return wrap2(target.get(key));
      } else if (has.call(rawTarget, rawKey)) {
        return wrap2(target.get(rawKey));
      } else if (target !== rawTarget) {
        target.get(key);
      }
    },
    get size() {
      const target = this["__v_raw"];
      !readonly2 && track(/* @__PURE__ */ toRaw(target), "iterate", ITERATE_KEY);
      return target.size;
    },
    has(key) {
      const target = this["__v_raw"];
      const rawTarget = /* @__PURE__ */ toRaw(target);
      const rawKey = /* @__PURE__ */ toRaw(key);
      if (!readonly2) {
        if (hasChanged(key, rawKey)) {
          track(rawTarget, "has", key);
        }
        track(rawTarget, "has", rawKey);
      }
      return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);
    },
    forEach(callback, thisArg) {
      const observed = this;
      const target = observed["__v_raw"];
      const rawTarget = /* @__PURE__ */ toRaw(target);
      const wrap2 = shallow ? toShallow : readonly2 ? toReadonly : toReactive;
      !readonly2 && track(rawTarget, "iterate", ITERATE_KEY);
      return target.forEach((value, key) => {
        return callback.call(thisArg, wrap2(value), wrap2(key), observed);
      });
    }
  };
  extend(
    instrumentations,
    readonly2 ? {
      add: createReadonlyMethod("add"),
      set: createReadonlyMethod("set"),
      delete: createReadonlyMethod("delete"),
      clear: createReadonlyMethod("clear")
    } : {
      add(value) {
        if (!shallow && !/* @__PURE__ */ isShallow(value) && !/* @__PURE__ */ isReadonly(value)) {
          value = /* @__PURE__ */ toRaw(value);
        }
        const target = /* @__PURE__ */ toRaw(this);
        const proto = getProto(target);
        const hadKey = proto.has.call(target, value);
        if (!hadKey) {
          target.add(value);
          trigger(target, "add", value, value);
        }
        return this;
      },
      set(key, value) {
        if (!shallow && !/* @__PURE__ */ isShallow(value) && !/* @__PURE__ */ isReadonly(value)) {
          value = /* @__PURE__ */ toRaw(value);
        }
        const target = /* @__PURE__ */ toRaw(this);
        const { has, get: get2 } = getProto(target);
        let hadKey = has.call(target, key);
        if (!hadKey) {
          key = /* @__PURE__ */ toRaw(key);
          hadKey = has.call(target, key);
        }
        const oldValue = get2.call(target, key);
        target.set(key, value);
        if (!hadKey) {
          trigger(target, "add", key, value);
        } else if (hasChanged(value, oldValue)) {
          trigger(target, "set", key, value);
        }
        return this;
      },
      delete(key) {
        const target = /* @__PURE__ */ toRaw(this);
        const { has, get: get2 } = getProto(target);
        let hadKey = has.call(target, key);
        if (!hadKey) {
          key = /* @__PURE__ */ toRaw(key);
          hadKey = has.call(target, key);
        }
        get2 ? get2.call(target, key) : void 0;
        const result = target.delete(key);
        if (hadKey) {
          trigger(target, "delete", key, void 0);
        }
        return result;
      },
      clear() {
        const target = /* @__PURE__ */ toRaw(this);
        const hadItems = target.size !== 0;
        const result = target.clear();
        if (hadItems) {
          trigger(
            target,
            "clear",
            void 0,
            void 0
          );
        }
        return result;
      }
    }
  );
  const iteratorMethods = [
    "keys",
    "values",
    "entries",
    Symbol.iterator
  ];
  iteratorMethods.forEach((method) => {
    instrumentations[method] = createIterableMethod(method, readonly2, shallow);
  });
  return instrumentations;
}
function createInstrumentationGetter(isReadonly2, shallow) {
  const instrumentations = createInstrumentations(isReadonly2, shallow);
  return (target, key, receiver) => {
    if (key === "__v_isReactive") {
      return !isReadonly2;
    } else if (key === "__v_isReadonly") {
      return isReadonly2;
    } else if (key === "__v_raw") {
      return target;
    }
    return Reflect.get(
      hasOwn(instrumentations, key) && key in target ? instrumentations : target,
      key,
      receiver
    );
  };
}
const mutableCollectionHandlers = {
  get: /* @__PURE__ */ createInstrumentationGetter(false, false)
};
const shallowCollectionHandlers = {
  get: /* @__PURE__ */ createInstrumentationGetter(false, true)
};
const readonlyCollectionHandlers = {
  get: /* @__PURE__ */ createInstrumentationGetter(true, false)
};
const shallowReadonlyCollectionHandlers = {
  get: /* @__PURE__ */ createInstrumentationGetter(true, true)
};
const reactiveMap = /* @__PURE__ */ new WeakMap();
const shallowReactiveMap = /* @__PURE__ */ new WeakMap();
const readonlyMap = /* @__PURE__ */ new WeakMap();
const shallowReadonlyMap = /* @__PURE__ */ new WeakMap();
function targetTypeMap(rawType) {
  switch (rawType) {
    case "Object":
    case "Array":
      return 1;
    case "Map":
    case "Set":
    case "WeakMap":
    case "WeakSet":
      return 2;
    default:
      return 0;
  }
}
function getTargetType(value) {
  return value["__v_skip"] || !Object.isExtensible(value) ? 0 : targetTypeMap(toRawType(value));
}
// @__NO_SIDE_EFFECTS__
function reactive(target) {
  if (/* @__PURE__ */ isReadonly(target)) {
    return target;
  }
  return createReactiveObject(
    target,
    false,
    mutableHandlers,
    mutableCollectionHandlers,
    reactiveMap
  );
}
// @__NO_SIDE_EFFECTS__
function shallowReactive(target) {
  return createReactiveObject(
    target,
    false,
    shallowReactiveHandlers,
    shallowCollectionHandlers,
    shallowReactiveMap
  );
}
// @__NO_SIDE_EFFECTS__
function readonly(target) {
  return createReactiveObject(
    target,
    true,
    readonlyHandlers,
    readonlyCollectionHandlers,
    readonlyMap
  );
}
// @__NO_SIDE_EFFECTS__
function shallowReadonly(target) {
  return createReactiveObject(
    target,
    true,
    shallowReadonlyHandlers,
    shallowReadonlyCollectionHandlers,
    shallowReadonlyMap
  );
}
function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {
  if (!isObject$1(target)) {
    return target;
  }
  if (target["__v_raw"] && !(isReadonly2 && target["__v_isReactive"])) {
    return target;
  }
  const targetType = getTargetType(target);
  if (targetType === 0) {
    return target;
  }
  const existingProxy = proxyMap.get(target);
  if (existingProxy) {
    return existingProxy;
  }
  const proxy = new Proxy(
    target,
    targetType === 2 ? collectionHandlers : baseHandlers
  );
  proxyMap.set(target, proxy);
  return proxy;
}
// @__NO_SIDE_EFFECTS__
function isReactive(value) {
  if (/* @__PURE__ */ isReadonly(value)) {
    return /* @__PURE__ */ isReactive(value["__v_raw"]);
  }
  return !!(value && value["__v_isReactive"]);
}
// @__NO_SIDE_EFFECTS__
function isReadonly(value) {
  return !!(value && value["__v_isReadonly"]);
}
// @__NO_SIDE_EFFECTS__
function isShallow(value) {
  return !!(value && value["__v_isShallow"]);
}
// @__NO_SIDE_EFFECTS__
function isProxy(value) {
  return value ? !!value["__v_raw"] : false;
}
// @__NO_SIDE_EFFECTS__
function toRaw(observed) {
  const raw = observed && observed["__v_raw"];
  return raw ? /* @__PURE__ */ toRaw(raw) : observed;
}
function markRaw(value) {
  if (!hasOwn(value, "__v_skip") && Object.isExtensible(value)) {
    def(value, "__v_skip", true);
  }
  return value;
}
const toReactive = (value) => isObject$1(value) ? /* @__PURE__ */ reactive(value) : value;
const toReadonly = (value) => isObject$1(value) ? /* @__PURE__ */ readonly(value) : value;
// @__NO_SIDE_EFFECTS__
function isRef(r2) {
  return r2 ? r2["__v_isRef"] === true : false;
}
// @__NO_SIDE_EFFECTS__
function ref(value) {
  return createRef(value, false);
}
// @__NO_SIDE_EFFECTS__
function shallowRef(value) {
  return createRef(value, true);
}
function createRef(rawValue, shallow) {
  if (/* @__PURE__ */ isRef(rawValue)) {
    return rawValue;
  }
  return new RefImpl(rawValue, shallow);
}
class RefImpl {
  constructor(value, isShallow2) {
    this.dep = new Dep();
    this["__v_isRef"] = true;
    this["__v_isShallow"] = false;
    this._rawValue = isShallow2 ? value : /* @__PURE__ */ toRaw(value);
    this._value = isShallow2 ? value : toReactive(value);
    this["__v_isShallow"] = isShallow2;
  }
  get value() {
    {
      this.dep.track();
    }
    return this._value;
  }
  set value(newValue) {
    const oldValue = this._rawValue;
    const useDirectValue = this["__v_isShallow"] || /* @__PURE__ */ isShallow(newValue) || /* @__PURE__ */ isReadonly(newValue);
    newValue = useDirectValue ? newValue : /* @__PURE__ */ toRaw(newValue);
    if (hasChanged(newValue, oldValue)) {
      this._rawValue = newValue;
      this._value = useDirectValue ? newValue : toReactive(newValue);
      {
        this.dep.trigger();
      }
    }
  }
}
function unref(ref2) {
  return /* @__PURE__ */ isRef(ref2) ? ref2.value : ref2;
}
function toValue(source2) {
  return isFunction$2(source2) ? source2() : unref(source2);
}
const shallowUnwrapHandlers = {
  get: (target, key, receiver) => key === "__v_raw" ? target : unref(Reflect.get(target, key, receiver)),
  set: (target, key, value, receiver) => {
    const oldValue = target[key];
    if (/* @__PURE__ */ isRef(oldValue) && !/* @__PURE__ */ isRef(value)) {
      oldValue.value = value;
      return true;
    } else {
      return Reflect.set(target, key, value, receiver);
    }
  }
};
function proxyRefs(objectWithRefs) {
  return /* @__PURE__ */ isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);
}
class CustomRefImpl {
  constructor(factory) {
    this["__v_isRef"] = true;
    this._value = void 0;
    const dep = this.dep = new Dep();
    const { get: get2, set } = factory(dep.track.bind(dep), dep.trigger.bind(dep));
    this._get = get2;
    this._set = set;
  }
  get value() {
    return this._value = this._get();
  }
  set value(newVal) {
    this._set(newVal);
  }
}
function customRef(factory) {
  return new CustomRefImpl(factory);
}
class ObjectRefImpl {
  constructor(_object, _key, _defaultValue) {
    this._object = _object;
    this._key = _key;
    this._defaultValue = _defaultValue;
    this["__v_isRef"] = true;
    this._value = void 0;
    this._raw = /* @__PURE__ */ toRaw(_object);
    let shallow = true;
    let obj = _object;
    if (!isArray$1(_object) || !isIntegerKey(String(_key))) {
      do {
        shallow = !/* @__PURE__ */ isProxy(obj) || /* @__PURE__ */ isShallow(obj);
      } while (shallow && (obj = obj["__v_raw"]));
    }
    this._shallow = shallow;
  }
  get value() {
    let val = this._object[this._key];
    if (this._shallow) {
      val = unref(val);
    }
    return this._value = val === void 0 ? this._defaultValue : val;
  }
  set value(newVal) {
    if (this._shallow && /* @__PURE__ */ isRef(this._raw[this._key])) {
      const nestedRef = this._object[this._key];
      if (/* @__PURE__ */ isRef(nestedRef)) {
        nestedRef.value = newVal;
        return;
      }
    }
    this._object[this._key] = newVal;
  }
  get dep() {
    return getDepFromReactive(this._raw, this._key);
  }
}
class GetterRefImpl {
  constructor(_getter) {
    this._getter = _getter;
    this["__v_isRef"] = true;
    this["__v_isReadonly"] = true;
    this._value = void 0;
  }
  get value() {
    return this._value = this._getter();
  }
}
// @__NO_SIDE_EFFECTS__
function toRef$1(source2, key, defaultValue) {
  if (/* @__PURE__ */ isRef(source2)) {
    return source2;
  } else if (isFunction$2(source2)) {
    return new GetterRefImpl(source2);
  } else if (isObject$1(source2) && arguments.length > 1) {
    return propertyToRef(source2, key, defaultValue);
  } else {
    return /* @__PURE__ */ ref(source2);
  }
}
function propertyToRef(source2, key, defaultValue) {
  return new ObjectRefImpl(source2, key, defaultValue);
}
class ComputedRefImpl {
  constructor(fn, setter, isSSR) {
    this.fn = fn;
    this.setter = setter;
    this._value = void 0;
    this.dep = new Dep(this);
    this.__v_isRef = true;
    this.deps = void 0;
    this.depsTail = void 0;
    this.flags = 16;
    this.globalVersion = globalVersion - 1;
    this.next = void 0;
    this.effect = this;
    this["__v_isReadonly"] = !setter;
    this.isSSR = isSSR;
  }
  /**
   * @internal
   */
  notify() {
    this.flags |= 16;
    if (!(this.flags & 8) && // avoid infinite self recursion
    activeSub !== this) {
      batch(this, true);
      return true;
    }
  }
  get value() {
    const link = this.dep.track();
    refreshComputed(this);
    if (link) {
      link.version = this.dep.version;
    }
    return this._value;
  }
  set value(newValue) {
    if (this.setter) {
      this.setter(newValue);
    }
  }
}
// @__NO_SIDE_EFFECTS__
function computed$1(getterOrOptions, debugOptions, isSSR = false) {
  let getter;
  let setter;
  if (isFunction$2(getterOrOptions)) {
    getter = getterOrOptions;
  } else {
    getter = getterOrOptions.get;
    setter = getterOrOptions.set;
  }
  const cRef = new ComputedRefImpl(getter, setter, isSSR);
  return cRef;
}
const INITIAL_WATCHER_VALUE = {};
const cleanupMap = /* @__PURE__ */ new WeakMap();
let activeWatcher = void 0;
function onWatcherCleanup(cleanupFn, failSilently = false, owner = activeWatcher) {
  if (owner) {
    let cleanups = cleanupMap.get(owner);
    if (!cleanups) cleanupMap.set(owner, cleanups = []);
    cleanups.push(cleanupFn);
  }
}
function watch$1(source2, cb2, options = EMPTY_OBJ) {
  const { immediate, deep, once, scheduler, augmentJob, call } = options;
  const reactiveGetter = (source22) => {
    if (deep) return source22;
    if (/* @__PURE__ */ isShallow(source22) || deep === false || deep === 0)
      return traverse(source22, 1);
    return traverse(source22);
  };
  let effect2;
  let getter;
  let cleanup;
  let boundCleanup;
  let forceTrigger = false;
  let isMultiSource = false;
  if (/* @__PURE__ */ isRef(source2)) {
    getter = () => source2.value;
    forceTrigger = /* @__PURE__ */ isShallow(source2);
  } else if (/* @__PURE__ */ isReactive(source2)) {
    getter = () => reactiveGetter(source2);
    forceTrigger = true;
  } else if (isArray$1(source2)) {
    isMultiSource = true;
    forceTrigger = source2.some((s2) => /* @__PURE__ */ isReactive(s2) || /* @__PURE__ */ isShallow(s2));
    getter = () => source2.map((s2) => {
      if (/* @__PURE__ */ isRef(s2)) {
        return s2.value;
      } else if (/* @__PURE__ */ isReactive(s2)) {
        return reactiveGetter(s2);
      } else if (isFunction$2(s2)) {
        return call ? call(s2, 2) : s2();
      } else ;
    });
  } else if (isFunction$2(source2)) {
    if (cb2) {
      getter = call ? () => call(source2, 2) : source2;
    } else {
      getter = () => {
        if (cleanup) {
          pauseTracking();
          try {
            cleanup();
          } finally {
            resetTracking();
          }
        }
        const currentEffect = activeWatcher;
        activeWatcher = effect2;
        try {
          return call ? call(source2, 3, [boundCleanup]) : source2(boundCleanup);
        } finally {
          activeWatcher = currentEffect;
        }
      };
    }
  } else {
    getter = NOOP;
  }
  if (cb2 && deep) {
    const baseGetter = getter;
    const depth = deep === true ? Infinity : deep;
    getter = () => traverse(baseGetter(), depth);
  }
  const scope = getCurrentScope();
  const watchHandle = () => {
    effect2.stop();
    if (scope && scope.active) {
      remove(scope.effects, effect2);
    }
  };
  if (once && cb2) {
    const _cb = cb2;
    cb2 = (...args) => {
      _cb(...args);
      watchHandle();
    };
  }
  let oldValue = isMultiSource ? new Array(source2.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE;
  const job = (immediateFirstRun) => {
    if (!(effect2.flags & 1) || !effect2.dirty && !immediateFirstRun) {
      return;
    }
    if (cb2) {
      const newValue = effect2.run();
      if (deep || forceTrigger || (isMultiSource ? newValue.some((v2, i) => hasChanged(v2, oldValue[i])) : hasChanged(newValue, oldValue))) {
        if (cleanup) {
          cleanup();
        }
        const currentWatcher = activeWatcher;
        activeWatcher = effect2;
        try {
          const args = [
            newValue,
            // pass undefined as the old value when it's changed for the first time
            oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue,
            boundCleanup
          ];
          oldValue = newValue;
          call ? call(cb2, 3, args) : (
            // @ts-expect-error
            cb2(...args)
          );
        } finally {
          activeWatcher = currentWatcher;
        }
      }
    } else {
      effect2.run();
    }
  };
  if (augmentJob) {
    augmentJob(job);
  }
  effect2 = new ReactiveEffect(getter);
  effect2.scheduler = scheduler ? () => scheduler(job, false) : job;
  boundCleanup = (fn) => onWatcherCleanup(fn, false, effect2);
  cleanup = effect2.onStop = () => {
    const cleanups = cleanupMap.get(effect2);
    if (cleanups) {
      if (call) {
        call(cleanups, 4);
      } else {
        for (const cleanup2 of cleanups) cleanup2();
      }
      cleanupMap.delete(effect2);
    }
  };
  if (cb2) {
    if (immediate) {
      job(true);
    } else {
      oldValue = effect2.run();
    }
  } else if (scheduler) {
    scheduler(job.bind(null, true), true);
  } else {
    effect2.run();
  }
  watchHandle.pause = effect2.pause.bind(effect2);
  watchHandle.resume = effect2.resume.bind(effect2);
  watchHandle.stop = watchHandle;
  return watchHandle;
}
function traverse(value, depth = Infinity, seen2) {
  if (depth <= 0 || !isObject$1(value) || value["__v_skip"]) {
    return value;
  }
  seen2 = seen2 || /* @__PURE__ */ new Map();
  if ((seen2.get(value) || 0) >= depth) {
    return value;
  }
  seen2.set(value, depth);
  depth--;
  if (/* @__PURE__ */ isRef(value)) {
    traverse(value.value, depth, seen2);
  } else if (isArray$1(value)) {
    for (let i = 0; i < value.length; i++) {
      traverse(value[i], depth, seen2);
    }
  } else if (isSet(value) || isMap(value)) {
    value.forEach((v2) => {
      traverse(v2, depth, seen2);
    });
  } else if (isPlainObject$1(value)) {
    for (const key in value) {
      traverse(value[key], depth, seen2);
    }
    for (const key of Object.getOwnPropertySymbols(value)) {
      if (Object.prototype.propertyIsEnumerable.call(value, key)) {
        traverse(value[key], depth, seen2);
      }
    }
  }
  return value;
}
const stack = [];
let isWarning = false;
function warn$1(msg, ...args) {
  if (isWarning) return;
  isWarning = true;
  pauseTracking();
  const instance = stack.length ? stack[stack.length - 1].component : null;
  const appWarnHandler = instance && instance.appContext.config.warnHandler;
  const trace = getComponentTrace();
  if (appWarnHandler) {
    callWithErrorHandling(
      appWarnHandler,
      instance,
      11,
      [
        // eslint-disable-next-line no-restricted-syntax
        msg + args.map((a2) => {
          var _a2, _b;
          return (_b = (_a2 = a2.toString) == null ? void 0 : _a2.call(a2)) != null ? _b : JSON.stringify(a2);
        }).join(""),
        instance && instance.proxy,
        trace.map(
          ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`
        ).join("\n"),
        trace
      ]
    );
  } else {
    const warnArgs = [`[Vue warn]: ${msg}`, ...args];
    if (trace.length && // avoid spamming console during tests
    true) {
      warnArgs.push(`
`, ...formatTrace(trace));
    }
    console.warn(...warnArgs);
  }
  resetTracking();
  isWarning = false;
}
function getComponentTrace() {
  let currentVNode = stack[stack.length - 1];
  if (!currentVNode) {
    return [];
  }
  const normalizedStack = [];
  while (currentVNode) {
    const last = normalizedStack[0];
    if (last && last.vnode === currentVNode) {
      last.recurseCount++;
    } else {
      normalizedStack.push({
        vnode: currentVNode,
        recurseCount: 0
      });
    }
    const parentInstance = currentVNode.component && currentVNode.component.parent;
    currentVNode = parentInstance && parentInstance.vnode;
  }
  return normalizedStack;
}
function formatTrace(trace) {
  const logs = [];
  trace.forEach((entry, i) => {
    logs.push(...i === 0 ? [] : [`
`], ...formatTraceEntry(entry));
  });
  return logs;
}
function formatTraceEntry({ vnode, recurseCount }) {
  const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;
  const isRoot = vnode.component ? vnode.component.parent == null : false;
  const open = ` at <${formatComponentName(
    vnode.component,
    vnode.type,
    isRoot
  )}`;
  const close2 = `>` + postfix;
  return vnode.props ? [open, ...formatProps(vnode.props), close2] : [open + close2];
}
function formatProps(props) {
  const res = [];
  const keys2 = Object.keys(props);
  keys2.slice(0, 3).forEach((key) => {
    res.push(...formatProp(key, props[key]));
  });
  if (keys2.length > 3) {
    res.push(` ...`);
  }
  return res;
}
function formatProp(key, value, raw) {
  if (isString(value)) {
    value = JSON.stringify(value);
    return raw ? value : [`${key}=${value}`];
  } else if (typeof value === "number" || typeof value === "boolean" || value == null) {
    return raw ? value : [`${key}=${value}`];
  } else if (/* @__PURE__ */ isRef(value)) {
    value = formatProp(key, /* @__PURE__ */ toRaw(value.value), true);
    return raw ? value : [`${key}=Ref<`, value, `>`];
  } else if (isFunction$2(value)) {
    return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];
  } else {
    value = /* @__PURE__ */ toRaw(value);
    return raw ? value : [`${key}=`, value];
  }
}
function callWithErrorHandling(fn, instance, type, args) {
  try {
    return args ? fn(...args) : fn();
  } catch (err) {
    handleError(err, instance, type);
  }
}
function callWithAsyncErrorHandling(fn, instance, type, args) {
  if (isFunction$2(fn)) {
    const res = callWithErrorHandling(fn, instance, type, args);
    if (res && isPromise(res)) {
      res.catch((err) => {
        handleError(err, instance, type);
      });
    }
    return res;
  }
  if (isArray$1(fn)) {
    const values = [];
    for (let i = 0; i < fn.length; i++) {
      values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));
    }
    return values;
  }
}
function handleError(err, instance, type, throwInDev = true) {
  const contextVNode = instance ? instance.vnode : null;
  const { errorHandler, throwUnhandledErrorInProduction } = instance && instance.appContext.config || EMPTY_OBJ;
  if (instance) {
    let cur = instance.parent;
    const exposedInstance = instance.proxy;
    const errorInfo = `https://vuejs.org/error-reference/#runtime-${type}`;
    while (cur) {
      const errorCapturedHooks = cur.ec;
      if (errorCapturedHooks) {
        for (let i = 0; i < errorCapturedHooks.length; i++) {
          if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {
            return;
          }
        }
      }
      cur = cur.parent;
    }
    if (errorHandler) {
      pauseTracking();
      callWithErrorHandling(errorHandler, null, 10, [
        err,
        exposedInstance,
        errorInfo
      ]);
      resetTracking();
      return;
    }
  }
  logError(err, type, contextVNode, throwInDev, throwUnhandledErrorInProduction);
}
function logError(err, type, contextVNode, throwInDev = true, throwInProd = false) {
  if (throwInProd) {
    throw err;
  } else {
    console.error(err);
  }
}
const queue = [];
let flushIndex = -1;
const pendingPostFlushCbs = [];
let activePostFlushCbs = null;
let postFlushIndex = 0;
const resolvedPromise = /* @__PURE__ */ Promise.resolve();
let currentFlushPromise = null;
function nextTick(fn) {
  const p2 = currentFlushPromise || resolvedPromise;
  return fn ? p2.then(this ? fn.bind(this) : fn) : p2;
}
function findInsertionIndex$1(id) {
  let start = flushIndex + 1;
  let end = queue.length;
  while (start < end) {
    const middle = start + end >>> 1;
    const middleJob = queue[middle];
    const middleJobId = getId(middleJob);
    if (middleJobId < id || middleJobId === id && middleJob.flags & 2) {
      start = middle + 1;
    } else {
      end = middle;
    }
  }
  return start;
}
function queueJob(job) {
  if (!(job.flags & 1)) {
    const jobId = getId(job);
    const lastJob = queue[queue.length - 1];
    if (!lastJob || // fast path when the job id is larger than the tail
    !(job.flags & 2) && jobId >= getId(lastJob)) {
      queue.push(job);
    } else {
      queue.splice(findInsertionIndex$1(jobId), 0, job);
    }
    job.flags |= 1;
    queueFlush();
  }
}
function queueFlush() {
  if (!currentFlushPromise) {
    currentFlushPromise = resolvedPromise.then(flushJobs);
  }
}
function queuePostFlushCb(cb2) {
  if (!isArray$1(cb2)) {
    if (activePostFlushCbs && cb2.id === -1) {
      activePostFlushCbs.splice(postFlushIndex + 1, 0, cb2);
    } else if (!(cb2.flags & 1)) {
      pendingPostFlushCbs.push(cb2);
      cb2.flags |= 1;
    }
  } else {
    pendingPostFlushCbs.push(...cb2);
  }
  queueFlush();
}
function flushPreFlushCbs(instance, seen2, i = flushIndex + 1) {
  for (; i < queue.length; i++) {
    const cb2 = queue[i];
    if (cb2 && cb2.flags & 2) {
      if (instance && cb2.id !== instance.uid) {
        continue;
      }
      queue.splice(i, 1);
      i--;
      if (cb2.flags & 4) {
        cb2.flags &= -2;
      }
      cb2();
      if (!(cb2.flags & 4)) {
        cb2.flags &= -2;
      }
    }
  }
}
function flushPostFlushCbs(seen2) {
  if (pendingPostFlushCbs.length) {
    const deduped = [...new Set(pendingPostFlushCbs)].sort(
      (a2, b2) => getId(a2) - getId(b2)
    );
    pendingPostFlushCbs.length = 0;
    if (activePostFlushCbs) {
      activePostFlushCbs.push(...deduped);
      return;
    }
    activePostFlushCbs = deduped;
    for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {
      const cb2 = activePostFlushCbs[postFlushIndex];
      if (cb2.flags & 4) {
        cb2.flags &= -2;
      }
      if (!(cb2.flags & 8)) cb2();
      cb2.flags &= -2;
    }
    activePostFlushCbs = null;
    postFlushIndex = 0;
  }
}
const getId = (job) => job.id == null ? job.flags & 2 ? -1 : Infinity : job.id;
function flushJobs(seen2) {
  try {
    for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {
      const job = queue[flushIndex];
      if (job && !(job.flags & 8)) {
        if (false) ;
        if (job.flags & 4) {
          job.flags &= ~1;
        }
        callWithErrorHandling(
          job,
          job.i,
          job.i ? 15 : 14
        );
        if (!(job.flags & 4)) {
          job.flags &= ~1;
        }
      }
    }
  } finally {
    for (; flushIndex < queue.length; flushIndex++) {
      const job = queue[flushIndex];
      if (job) {
        job.flags &= -2;
      }
    }
    flushIndex = -1;
    queue.length = 0;
    flushPostFlushCbs();
    currentFlushPromise = null;
    if (queue.length || pendingPostFlushCbs.length) {
      flushJobs();
    }
  }
}
let currentRenderingInstance = null;
let currentScopeId = null;
function setCurrentRenderingInstance(instance) {
  const prev = currentRenderingInstance;
  currentRenderingInstance = instance;
  currentScopeId = instance && instance.type.__scopeId || null;
  return prev;
}
function withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) {
  if (!ctx) return fn;
  if (fn._n) {
    return fn;
  }
  const renderFnWithContext = (...args) => {
    if (renderFnWithContext._d) {
      setBlockTracking(-1);
    }
    const prevInstance = setCurrentRenderingInstance(ctx);
    let res;
    try {
      res = fn(...args);
    } finally {
      setCurrentRenderingInstance(prevInstance);
      if (renderFnWithContext._d) {
        setBlockTracking(1);
      }
    }
    return res;
  };
  renderFnWithContext._n = true;
  renderFnWithContext._c = true;
  renderFnWithContext._d = true;
  return renderFnWithContext;
}
function withDirectives(vnode, directives) {
  if (currentRenderingInstance === null) {
    return vnode;
  }
  const instance = getComponentPublicInstance(currentRenderingInstance);
  const bindings = vnode.dirs || (vnode.dirs = []);
  for (let i = 0; i < directives.length; i++) {
    let [dir, value, arg, modifiers2 = EMPTY_OBJ] = directives[i];
    if (dir) {
      if (isFunction$2(dir)) {
        dir = {
          mounted: dir,
          updated: dir
        };
      }
      if (dir.deep) {
        traverse(value);
      }
      bindings.push({
        dir,
        instance,
        value,
        oldValue: void 0,
        arg,
        modifiers: modifiers2
      });
    }
  }
  return vnode;
}
function invokeDirectiveHook(vnode, prevVNode, instance, name) {
  const bindings = vnode.dirs;
  const oldBindings = prevVNode && prevVNode.dirs;
  for (let i = 0; i < bindings.length; i++) {
    const binding = bindings[i];
    if (oldBindings) {
      binding.oldValue = oldBindings[i].value;
    }
    let hook = binding.dir[name];
    if (hook) {
      pauseTracking();
      callWithAsyncErrorHandling(hook, instance, 8, [
        vnode.el,
        binding,
        vnode,
        prevVNode
      ]);
      resetTracking();
    }
  }
}
function provide(key, value) {
  if (currentInstance) {
    let provides = currentInstance.provides;
    const parentProvides = currentInstance.parent && currentInstance.parent.provides;
    if (parentProvides === provides) {
      provides = currentInstance.provides = Object.create(parentProvides);
    }
    provides[key] = value;
  }
}
function inject(key, defaultValue, treatDefaultAsFactory = false) {
  const instance = getCurrentInstance();
  if (instance || currentApp) {
    let provides = currentApp ? currentApp._context.provides : instance ? instance.parent == null || instance.ce ? instance.vnode.appContext && instance.vnode.appContext.provides : instance.parent.provides : void 0;
    if (provides && key in provides) {
      return provides[key];
    } else if (arguments.length > 1) {
      return treatDefaultAsFactory && isFunction$2(defaultValue) ? defaultValue.call(instance && instance.proxy) : defaultValue;
    } else ;
  }
}
function hasInjectionContext() {
  return !!(getCurrentInstance() || currentApp);
}
const ssrContextKey = /* @__PURE__ */ Symbol.for("v-scx");
const useSSRContext = () => {
  {
    const ctx = inject(ssrContextKey);
    return ctx;
  }
};
function watchEffect(effect2, options) {
  return doWatch(effect2, null, options);
}
function watch(source2, cb2, options) {
  return doWatch(source2, cb2, options);
}
function doWatch(source2, cb2, options = EMPTY_OBJ) {
  const { immediate, deep, flush, once } = options;
  const baseWatchOptions = extend({}, options);
  const runsImmediately = cb2 && immediate || !cb2 && flush !== "post";
  let ssrCleanup;
  if (isInSSRComponentSetup) {
    if (flush === "sync") {
      const ctx = useSSRContext();
      ssrCleanup = ctx.__watcherHandles || (ctx.__watcherHandles = []);
    } else if (!runsImmediately) {
      const watchStopHandle = () => {
      };
      watchStopHandle.stop = NOOP;
      watchStopHandle.resume = NOOP;
      watchStopHandle.pause = NOOP;
      return watchStopHandle;
    }
  }
  const instance = currentInstance;
  baseWatchOptions.call = (fn, type, args) => callWithAsyncErrorHandling(fn, instance, type, args);
  let isPre = false;
  if (flush === "post") {
    baseWatchOptions.scheduler = (job) => {
      queuePostRenderEffect(job, instance && instance.suspense);
    };
  } else if (flush !== "sync") {
    isPre = true;
    baseWatchOptions.scheduler = (job, isFirstRun) => {
      if (isFirstRun) {
        job();
      } else {
        queueJob(job);
      }
    };
  }
  baseWatchOptions.augmentJob = (job) => {
    if (cb2) {
      job.flags |= 4;
    }
    if (isPre) {
      job.flags |= 2;
      if (instance) {
        job.id = instance.uid;
        job.i = instance;
      }
    }
  };
  const watchHandle = watch$1(source2, cb2, baseWatchOptions);
  if (isInSSRComponentSetup) {
    if (ssrCleanup) {
      ssrCleanup.push(watchHandle);
    } else if (runsImmediately) {
      watchHandle();
    }
  }
  return watchHandle;
}
function instanceWatch(source2, value, options) {
  const publicThis = this.proxy;
  const getter = isString(source2) ? source2.includes(".") ? createPathGetter(publicThis, source2) : () => publicThis[source2] : source2.bind(publicThis, publicThis);
  let cb2;
  if (isFunction$2(value)) {
    cb2 = value;
  } else {
    cb2 = value.handler;
    options = value;
  }
  const reset2 = setCurrentInstance(this);
  const res = doWatch(getter, cb2.bind(publicThis), options);
  reset2();
  return res;
}
function createPathGetter(ctx, path) {
  const segments = path.split(".");
  return () => {
    let cur = ctx;
    for (let i = 0; i < segments.length && cur; i++) {
      cur = cur[segments[i]];
    }
    return cur;
  };
}
const TeleportEndKey = /* @__PURE__ */ Symbol("_vte");
const isTeleport = (type) => type.__isTeleport;
const leaveCbKey = /* @__PURE__ */ Symbol("_leaveCb");
const enterCbKey = /* @__PURE__ */ Symbol("_enterCb");
function useTransitionState() {
  const state = {
    isMounted: false,
    isLeaving: false,
    isUnmounting: false,
    leavingVNodes: /* @__PURE__ */ new Map()
  };
  onMounted(() => {
    state.isMounted = true;
  });
  onBeforeUnmount(() => {
    state.isUnmounting = true;
  });
  return state;
}
const TransitionHookValidator = [Function, Array];
const BaseTransitionPropsValidators = {
  mode: String,
  appear: Boolean,
  persisted: Boolean,
  // enter
  onBeforeEnter: TransitionHookValidator,
  onEnter: TransitionHookValidator,
  onAfterEnter: TransitionHookValidator,
  onEnterCancelled: TransitionHookValidator,
  // leave
  onBeforeLeave: TransitionHookValidator,
  onLeave: TransitionHookValidator,
  onAfterLeave: TransitionHookValidator,
  onLeaveCancelled: TransitionHookValidator,
  // appear
  onBeforeAppear: TransitionHookValidator,
  onAppear: TransitionHookValidator,
  onAfterAppear: TransitionHookValidator,
  onAppearCancelled: TransitionHookValidator
};
const recursiveGetSubtree = (instance) => {
  const subTree = instance.subTree;
  return subTree.component ? recursiveGetSubtree(subTree.component) : subTree;
};
const BaseTransitionImpl = {
  name: `BaseTransition`,
  props: BaseTransitionPropsValidators,
  setup(props, { slots }) {
    const instance = getCurrentInstance();
    const state = useTransitionState();
    return () => {
      const children = slots.default && getTransitionRawChildren(slots.default(), true);
      if (!children || !children.length) {
        return;
      }
      const child = findNonCommentChild(children);
      const rawProps = /* @__PURE__ */ toRaw(props);
      const { mode } = rawProps;
      if (state.isLeaving) {
        return emptyPlaceholder(child);
      }
      const innerChild = getInnerChild$1(child);
      if (!innerChild) {
        return emptyPlaceholder(child);
      }
      let enterHooks = resolveTransitionHooks(
        innerChild,
        rawProps,
        state,
        instance,
        // #11061, ensure enterHooks is fresh after clone
        (hooks) => enterHooks = hooks
      );
      if (innerChild.type !== Comment) {
        setTransitionHooks(innerChild, enterHooks);
      }
      let oldInnerChild = instance.subTree && getInnerChild$1(instance.subTree);
      if (oldInnerChild && oldInnerChild.type !== Comment && !isSameVNodeType(oldInnerChild, innerChild) && recursiveGetSubtree(instance).type !== Comment) {
        let leavingHooks = resolveTransitionHooks(
          oldInnerChild,
          rawProps,
          state,
          instance
        );
        setTransitionHooks(oldInnerChild, leavingHooks);
        if (mode === "out-in" && innerChild.type !== Comment) {
          state.isLeaving = true;
          leavingHooks.afterLeave = () => {
            state.isLeaving = false;
            if (!(instance.job.flags & 8)) {
              instance.update();
            }
            delete leavingHooks.afterLeave;
            oldInnerChild = void 0;
          };
          return emptyPlaceholder(child);
        } else if (mode === "in-out" && innerChild.type !== Comment) {
          leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => {
            const leavingVNodesCache = getLeavingNodesForType(
              state,
              oldInnerChild
            );
            leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild;
            el[leaveCbKey] = () => {
              earlyRemove();
              el[leaveCbKey] = void 0;
              delete enterHooks.delayedLeave;
              oldInnerChild = void 0;
            };
            enterHooks.delayedLeave = () => {
              delayedLeave();
              delete enterHooks.delayedLeave;
              oldInnerChild = void 0;
            };
          };
        } else {
          oldInnerChild = void 0;
        }
      } else if (oldInnerChild) {
        oldInnerChild = void 0;
      }
      return child;
    };
  }
};
function findNonCommentChild(children) {
  let child = children[0];
  if (children.length > 1) {
    for (const c2 of children) {
      if (c2.type !== Comment) {
        child = c2;
        break;
      }
    }
  }
  return child;
}
const BaseTransition = BaseTransitionImpl;
function getLeavingNodesForType(state, vnode) {
  const { leavingVNodes } = state;
  let leavingVNodesCache = leavingVNodes.get(vnode.type);
  if (!leavingVNodesCache) {
    leavingVNodesCache = /* @__PURE__ */ Object.create(null);
    leavingVNodes.set(vnode.type, leavingVNodesCache);
  }
  return leavingVNodesCache;
}
function resolveTransitionHooks(vnode, props, state, instance, postClone) {
  const {
    appear,
    mode,
    persisted = false,
    onBeforeEnter,
    onEnter,
    onAfterEnter,
    onEnterCancelled,
    onBeforeLeave,
    onLeave,
    onAfterLeave,
    onLeaveCancelled,
    onBeforeAppear,
    onAppear,
    onAfterAppear,
    onAppearCancelled
  } = props;
  const key = String(vnode.key);
  const leavingVNodesCache = getLeavingNodesForType(state, vnode);
  const callHook2 = (hook, args) => {
    hook && callWithAsyncErrorHandling(
      hook,
      instance,
      9,
      args
    );
  };
  const callAsyncHook = (hook, args) => {
    const done = args[1];
    callHook2(hook, args);
    if (isArray$1(hook)) {
      if (hook.every((hook2) => hook2.length <= 1)) done();
    } else if (hook.length <= 1) {
      done();
    }
  };
  const hooks = {
    mode,
    persisted,
    beforeEnter(el) {
      let hook = onBeforeEnter;
      if (!state.isMounted) {
        if (appear) {
          hook = onBeforeAppear || onBeforeEnter;
        } else {
          return;
        }
      }
      if (el[leaveCbKey]) {
        el[leaveCbKey](
          true
          /* cancelled */
        );
      }
      const leavingVNode = leavingVNodesCache[key];
      if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el[leaveCbKey]) {
        leavingVNode.el[leaveCbKey]();
      }
      callHook2(hook, [el]);
    },
    enter(el) {
      let hook = onEnter;
      let afterHook = onAfterEnter;
      let cancelHook = onEnterCancelled;
      if (!state.isMounted) {
        if (appear) {
          hook = onAppear || onEnter;
          afterHook = onAfterAppear || onAfterEnter;
          cancelHook = onAppearCancelled || onEnterCancelled;
        } else {
          return;
        }
      }
      let called = false;
      el[enterCbKey] = (cancelled) => {
        if (called) return;
        called = true;
        if (cancelled) {
          callHook2(cancelHook, [el]);
        } else {
          callHook2(afterHook, [el]);
        }
        if (hooks.delayedLeave) {
          hooks.delayedLeave();
        }
        el[enterCbKey] = void 0;
      };
      const done = el[enterCbKey].bind(null, false);
      if (hook) {
        callAsyncHook(hook, [el, done]);
      } else {
        done();
      }
    },
    leave(el, remove2) {
      const key2 = String(vnode.key);
      if (el[enterCbKey]) {
        el[enterCbKey](
          true
          /* cancelled */
        );
      }
      if (state.isUnmounting) {
        return remove2();
      }
      callHook2(onBeforeLeave, [el]);
      let called = false;
      el[leaveCbKey] = (cancelled) => {
        if (called) return;
        called = true;
        remove2();
        if (cancelled) {
          callHook2(onLeaveCancelled, [el]);
        } else {
          callHook2(onAfterLeave, [el]);
        }
        el[leaveCbKey] = void 0;
        if (leavingVNodesCache[key2] === vnode) {
          delete leavingVNodesCache[key2];
        }
      };
      const done = el[leaveCbKey].bind(null, false);
      leavingVNodesCache[key2] = vnode;
      if (onLeave) {
        callAsyncHook(onLeave, [el, done]);
      } else {
        done();
      }
    },
    clone(vnode2) {
      const hooks2 = resolveTransitionHooks(
        vnode2,
        props,
        state,
        instance,
        postClone
      );
      if (postClone) postClone(hooks2);
      return hooks2;
    }
  };
  return hooks;
}
function emptyPlaceholder(vnode) {
  if (isKeepAlive(vnode)) {
    vnode = cloneVNode(vnode);
    vnode.children = null;
    return vnode;
  }
}
function getInnerChild$1(vnode) {
  if (!isKeepAlive(vnode)) {
    if (isTeleport(vnode.type) && vnode.children) {
      return findNonCommentChild(vnode.children);
    }
    return vnode;
  }
  if (vnode.component) {
    return vnode.component.subTree;
  }
  const { shapeFlag, children } = vnode;
  if (children) {
    if (shapeFlag & 16) {
      return children[0];
    }
    if (shapeFlag & 32 && isFunction$2(children.default)) {
      return children.default();
    }
  }
}
function setTransitionHooks(vnode, hooks) {
  if (vnode.shapeFlag & 6 && vnode.component) {
    vnode.transition = hooks;
    setTransitionHooks(vnode.component.subTree, hooks);
  } else if (vnode.shapeFlag & 128) {
    vnode.ssContent.transition = hooks.clone(vnode.ssContent);
    vnode.ssFallback.transition = hooks.clone(vnode.ssFallback);
  } else {
    vnode.transition = hooks;
  }
}
function getTransitionRawChildren(children, keepComment = false, parentKey) {
  let ret = [];
  let keyedFragmentCount = 0;
  for (let i = 0; i < children.length; i++) {
    let child = children[i];
    const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i);
    if (child.type === Fragment$1) {
      if (child.patchFlag & 128) keyedFragmentCount++;
      ret = ret.concat(
        getTransitionRawChildren(child.children, keepComment, key)
      );
    } else if (keepComment || child.type !== Comment) {
      ret.push(key != null ? cloneVNode(child, { key }) : child);
    }
  }
  if (keyedFragmentCount > 1) {
    for (let i = 0; i < ret.length; i++) {
      ret[i].patchFlag = -2;
    }
  }
  return ret;
}
// @__NO_SIDE_EFFECTS__
function defineComponent(options, extraOptions) {
  return isFunction$2(options) ? (
    // #8236: extend call and options.name access are considered side-effects
    // by Rollup, so we have to wrap it in a pure-annotated IIFE.
    /* @__PURE__ */ (() => extend({ name: options.name }, extraOptions, { setup: options }))()
  ) : options;
}
function markAsyncBoundary(instance) {
  instance.ids = [instance.ids[0] + instance.ids[2]++ + "-", 0, 0];
}
function isTemplateRefKey(refs, key) {
  let desc;
  return !!((desc = Object.getOwnPropertyDescriptor(refs, key)) && !desc.configurable);
}
const pendingSetRefMap = /* @__PURE__ */ new WeakMap();
function setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {
  if (isArray$1(rawRef)) {
    rawRef.forEach(
      (r2, i) => setRef(
        r2,
        oldRawRef && (isArray$1(oldRawRef) ? oldRawRef[i] : oldRawRef),
        parentSuspense,
        vnode,
        isUnmount
      )
    );
    return;
  }
  if (isAsyncWrapper(vnode) && !isUnmount) {
    if (vnode.shapeFlag & 512 && vnode.type.__asyncResolved && vnode.component.subTree.component) {
      setRef(rawRef, oldRawRef, parentSuspense, vnode.component.subTree);
    }
    return;
  }
  const refValue = vnode.shapeFlag & 4 ? getComponentPublicInstance(vnode.component) : vnode.el;
  const value = isUnmount ? null : refValue;
  const { i: owner, r: ref3 } = rawRef;
  const oldRef = oldRawRef && oldRawRef.r;
  const refs = owner.refs === EMPTY_OBJ ? owner.refs = {} : owner.refs;
  const setupState = owner.setupState;
  const rawSetupState = /* @__PURE__ */ toRaw(setupState);
  const canSetSetupRef = setupState === EMPTY_OBJ ? NO : (key) => {
    if (isTemplateRefKey(refs, key)) {
      return false;
    }
    return hasOwn(rawSetupState, key);
  };
  const canSetRef = (ref22, key) => {
    if (key && isTemplateRefKey(refs, key)) {
      return false;
    }
    return true;
  };
  if (oldRef != null && oldRef !== ref3) {
    invalidatePendingSetRef(oldRawRef);
    if (isString(oldRef)) {
      refs[oldRef] = null;
      if (canSetSetupRef(oldRef)) {
        setupState[oldRef] = null;
      }
    } else if (/* @__PURE__ */ isRef(oldRef)) {
      const oldRawRefAtom = oldRawRef;
      if (canSetRef(oldRef, oldRawRefAtom.k)) {
        oldRef.value = null;
      }
      if (oldRawRefAtom.k) refs[oldRawRefAtom.k] = null;
    }
  }
  if (isFunction$2(ref3)) {
    callWithErrorHandling(ref3, owner, 12, [value, refs]);
  } else {
    const _isString = isString(ref3);
    const _isRef = /* @__PURE__ */ isRef(ref3);
    if (_isString || _isRef) {
      const doSet = () => {
        if (rawRef.f) {
          const existing = _isString ? canSetSetupRef(ref3) ? setupState[ref3] : refs[ref3] : canSetRef() || !rawRef.k ? ref3.value : refs[rawRef.k];
          if (isUnmount) {
            isArray$1(existing) && remove(existing, refValue);
          } else {
            if (!isArray$1(existing)) {
              if (_isString) {
                refs[ref3] = [refValue];
                if (canSetSetupRef(ref3)) {
                  setupState[ref3] = refs[ref3];
                }
              } else {
                const newVal = [refValue];
                if (canSetRef(ref3, rawRef.k)) {
                  ref3.value = newVal;
                }
                if (rawRef.k) refs[rawRef.k] = newVal;
              }
            } else if (!existing.includes(refValue)) {
              existing.push(refValue);
            }
          }
        } else if (_isString) {
          refs[ref3] = value;
          if (canSetSetupRef(ref3)) {
            setupState[ref3] = value;
          }
        } else if (_isRef) {
          if (canSetRef(ref3, rawRef.k)) {
            ref3.value = value;
          }
          if (rawRef.k) refs[rawRef.k] = value;
        } else ;
      };
      if (value) {
        const job = () => {
          doSet();
          pendingSetRefMap.delete(rawRef);
        };
        job.id = -1;
        pendingSetRefMap.set(rawRef, job);
        queuePostRenderEffect(job, parentSuspense);
      } else {
        invalidatePendingSetRef(rawRef);
        doSet();
      }
    }
  }
}
function invalidatePendingSetRef(rawRef) {
  const pendingSetRef = pendingSetRefMap.get(rawRef);
  if (pendingSetRef) {
    pendingSetRef.flags |= 8;
    pendingSetRefMap.delete(rawRef);
  }
}
getGlobalThis().requestIdleCallback || ((cb2) => setTimeout(cb2, 1));
getGlobalThis().cancelIdleCallback || ((id) => clearTimeout(id));
const isAsyncWrapper = (i) => !!i.type.__asyncLoader;
const isKeepAlive = (vnode) => vnode.type.__isKeepAlive;
function onActivated(hook, target) {
  registerKeepAliveHook(hook, "a", target);
}
function onDeactivated(hook, target) {
  registerKeepAliveHook(hook, "da", target);
}
function registerKeepAliveHook(hook, type, target = currentInstance) {
  const wrappedHook = hook.__wdc || (hook.__wdc = () => {
    let current = target;
    while (current) {
      if (current.isDeactivated) {
        return;
      }
      current = current.parent;
    }
    return hook();
  });
  injectHook(type, wrappedHook, target);
  if (target) {
    let current = target.parent;
    while (current && current.parent) {
      if (isKeepAlive(current.parent.vnode)) {
        injectToKeepAliveRoot(wrappedHook, type, target, current);
      }
      current = current.parent;
    }
  }
}
function injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {
  const injected = injectHook(
    type,
    hook,
    keepAliveRoot,
    true
    /* prepend */
  );
  onUnmounted(() => {
    remove(keepAliveRoot[type], injected);
  }, target);
}
function injectHook(type, hook, target = currentInstance, prepend2 = false) {
  if (target) {
    const hooks = target[type] || (target[type] = []);
    const wrappedHook = hook.__weh || (hook.__weh = (...args) => {
      pauseTracking();
      const reset2 = setCurrentInstance(target);
      const res = callWithAsyncErrorHandling(hook, target, type, args);
      reset2();
      resetTracking();
      return res;
    });
    if (prepend2) {
      hooks.unshift(wrappedHook);
    } else {
      hooks.push(wrappedHook);
    }
    return wrappedHook;
  }
}
const createHook = (lifecycle) => (hook, target = currentInstance) => {
  if (!isInSSRComponentSetup || lifecycle === "sp") {
    injectHook(lifecycle, (...args) => hook(...args), target);
  }
};
const onBeforeMount = createHook("bm");
const onMounted = createHook("m");
const onBeforeUpdate = createHook(
  "bu"
);
const onUpdated = createHook("u");
const onBeforeUnmount = createHook(
  "bum"
);
const onUnmounted = createHook("um");
const onServerPrefetch = createHook(
  "sp"
);
const onRenderTriggered = createHook("rtg");
const onRenderTracked = createHook("rtc");
function onErrorCaptured(hook, target = currentInstance) {
  injectHook("ec", hook, target);
}
const COMPONENTS = "components";
function resolveComponent(name, maybeSelfReference) {
  return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;
}
const NULL_DYNAMIC_COMPONENT = /* @__PURE__ */ Symbol.for("v-ndc");
function resolveDynamicComponent(component) {
  if (isString(component)) {
    return resolveAsset(COMPONENTS, component, false) || component;
  } else {
    return component || NULL_DYNAMIC_COMPONENT;
  }
}
function resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) {
  const instance = currentRenderingInstance || currentInstance;
  if (instance) {
    const Component = instance.type;
    {
      const selfName = getComponentName(
        Component,
        false
      );
      if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) {
        return Component;
      }
    }
    const res = (
      // local registration
      // check instance[type] first which is resolved for options API
      resolve(instance[type] || Component[type], name) || // global registration
      resolve(instance.appContext[type], name)
    );
    if (!res && maybeSelfReference) {
      return Component;
    }
    return res;
  }
}
function resolve(registry, name) {
  return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]);
}
function renderList(source2, renderItem, cache, index2) {
  let ret;
  const cached = cache;
  const sourceIsArray = isArray$1(source2);
  if (sourceIsArray || isString(source2)) {
    const sourceIsReactiveArray = sourceIsArray && /* @__PURE__ */ isReactive(source2);
    let needsWrap = false;
    let isReadonlySource = false;
    if (sourceIsReactiveArray) {
      needsWrap = !/* @__PURE__ */ isShallow(source2);
      isReadonlySource = /* @__PURE__ */ isReadonly(source2);
      source2 = shallowReadArray(source2);
    }
    ret = new Array(source2.length);
    for (let i = 0, l2 = source2.length; i < l2; i++) {
      ret[i] = renderItem(
        needsWrap ? isReadonlySource ? toReadonly(toReactive(source2[i])) : toReactive(source2[i]) : source2[i],
        i,
        void 0,
        cached
      );
    }
  } else if (typeof source2 === "number") {
    ret = new Array(source2);
    for (let i = 0; i < source2; i++) {
      ret[i] = renderItem(i + 1, i, void 0, cached);
    }
  } else if (isObject$1(source2)) {
    if (source2[Symbol.iterator]) {
      ret = Array.from(
        source2,
        (item, i) => renderItem(item, i, void 0, cached)
      );
    } else {
      const keys2 = Object.keys(source2);
      ret = new Array(keys2.length);
      for (let i = 0, l2 = keys2.length; i < l2; i++) {
        const key = keys2[i];
        ret[i] = renderItem(source2[key], key, i, cached);
      }
    }
  } else {
    ret = [];
  }
  return ret;
}
const getPublicInstance = (i) => {
  if (!i) return null;
  if (isStatefulComponent(i)) return getComponentPublicInstance(i);
  return getPublicInstance(i.parent);
};
const publicPropertiesMap = (
  // Move PURE marker to new line to workaround compiler discarding it
  // due to type annotation
  /* @__PURE__ */ extend(/* @__PURE__ */ Object.create(null), {
    $: (i) => i,
    $el: (i) => i.vnode.el,
    $data: (i) => i.data,
    $props: (i) => i.props,
    $attrs: (i) => i.attrs,
    $slots: (i) => i.slots,
    $refs: (i) => i.refs,
    $parent: (i) => getPublicInstance(i.parent),
    $root: (i) => getPublicInstance(i.root),
    $host: (i) => i.ce,
    $emit: (i) => i.emit,
    $options: (i) => resolveMergedOptions(i),
    $forceUpdate: (i) => i.f || (i.f = () => {
      queueJob(i.update);
    }),
    $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)),
    $watch: (i) => instanceWatch.bind(i)
  })
);
const hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key);
const PublicInstanceProxyHandlers = {
  get({ _: instance }, key) {
    if (key === "__v_skip") {
      return true;
    }
    const { ctx, setupState, data, props, accessCache, type, appContext } = instance;
    if (key[0] !== "$") {
      const n2 = accessCache[key];
      if (n2 !== void 0) {
        switch (n2) {
          case 1:
            return setupState[key];
          case 2:
            return data[key];
          case 4:
            return ctx[key];
          case 3:
            return props[key];
        }
      } else if (hasSetupBinding(setupState, key)) {
        accessCache[key] = 1;
        return setupState[key];
      } else if (data !== EMPTY_OBJ && hasOwn(data, key)) {
        accessCache[key] = 2;
        return data[key];
      } else if (hasOwn(props, key)) {
        accessCache[key] = 3;
        return props[key];
      } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {
        accessCache[key] = 4;
        return ctx[key];
      } else if (shouldCacheAccess) {
        accessCache[key] = 0;
      }
    }
    const publicGetter = publicPropertiesMap[key];
    let cssModule, globalProperties;
    if (publicGetter) {
      if (key === "$attrs") {
        track(instance.attrs, "get", "");
      }
      return publicGetter(instance);
    } else if (
      // css module (injected by vue-loader)
      (cssModule = type.__cssModules) && (cssModule = cssModule[key])
    ) {
      return cssModule;
    } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {
      accessCache[key] = 4;
      return ctx[key];
    } else if (
      // global properties
      globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key)
    ) {
      {
        return globalProperties[key];
      }
    } else ;
  },
  set({ _: instance }, key, value) {
    const { data, setupState, ctx } = instance;
    if (hasSetupBinding(setupState, key)) {
      setupState[key] = value;
      return true;
    } else if (data !== EMPTY_OBJ && hasOwn(data, key)) {
      data[key] = value;
      return true;
    } else if (hasOwn(instance.props, key)) {
      return false;
    }
    if (key[0] === "$" && key.slice(1) in instance) {
      return false;
    } else {
      {
        ctx[key] = value;
      }
    }
    return true;
  },
  has({
    _: { data, setupState, accessCache, ctx, appContext, props, type }
  }, key) {
    let cssModules;
    return !!(accessCache[key] || data !== EMPTY_OBJ && key[0] !== "$" && hasOwn(data, key) || hasSetupBinding(setupState, key) || hasOwn(props, key) || hasOwn(ctx, key) || hasOwn(publicPropertiesMap, key) || hasOwn(appContext.config.globalProperties, key) || (cssModules = type.__cssModules) && cssModules[key]);
  },
  defineProperty(target, key, descriptor) {
    if (descriptor.get != null) {
      target._.accessCache[key] = 0;
    } else if (hasOwn(descriptor, "value")) {
      this.set(target, key, descriptor.value, null);
    }
    return Reflect.defineProperty(target, key, descriptor);
  }
};
function normalizePropsOrEmits(props) {
  return isArray$1(props) ? props.reduce(
    (normalized, p2) => (normalized[p2] = null, normalized),
    {}
  ) : props;
}
let shouldCacheAccess = true;
function applyOptions(instance) {
  const options = resolveMergedOptions(instance);
  const publicThis = instance.proxy;
  const ctx = instance.ctx;
  shouldCacheAccess = false;
  if (options.beforeCreate) {
    callHook$1(options.beforeCreate, instance, "bc");
  }
  const {
    // state
    data: dataOptions,
    computed: computedOptions,
    methods,
    watch: watchOptions,
    provide: provideOptions,
    inject: injectOptions,
    // lifecycle
    created,
    beforeMount,
    mounted,
    beforeUpdate,
    updated,
    activated,
    deactivated,
    beforeDestroy,
    beforeUnmount,
    destroyed,
    unmounted,
    render,
    renderTracked,
    renderTriggered,
    errorCaptured,
    serverPrefetch,
    // public API
    expose,
    inheritAttrs,
    // assets
    components,
    directives,
    filters
  } = options;
  const checkDuplicateProperties = null;
  if (injectOptions) {
    resolveInjections(injectOptions, ctx, checkDuplicateProperties);
  }
  if (methods) {
    for (const key in methods) {
      const methodHandler = methods[key];
      if (isFunction$2(methodHandler)) {
        {
          ctx[key] = methodHandler.bind(publicThis);
        }
      }
    }
  }
  if (dataOptions) {
    const data = dataOptions.call(publicThis, publicThis);
    if (!isObject$1(data)) ;
    else {
      instance.data = /* @__PURE__ */ reactive(data);
    }
  }
  shouldCacheAccess = true;
  if (computedOptions) {
    for (const key in computedOptions) {
      const opt = computedOptions[key];
      const get2 = isFunction$2(opt) ? opt.bind(publicThis, publicThis) : isFunction$2(opt.get) ? opt.get.bind(publicThis, publicThis) : NOOP;
      const set = !isFunction$2(opt) && isFunction$2(opt.set) ? opt.set.bind(publicThis) : NOOP;
      const c2 = computed({
        get: get2,
        set
      });
      Object.defineProperty(ctx, key, {
        enumerable: true,
        configurable: true,
        get: () => c2.value,
        set: (v2) => c2.value = v2
      });
    }
  }
  if (watchOptions) {
    for (const key in watchOptions) {
      createWatcher(watchOptions[key], ctx, publicThis, key);
    }
  }
  if (provideOptions) {
    const provides = isFunction$2(provideOptions) ? provideOptions.call(publicThis) : provideOptions;
    Reflect.ownKeys(provides).forEach((key) => {
      provide(key, provides[key]);
    });
  }
  if (created) {
    callHook$1(created, instance, "c");
  }
  function registerLifecycleHook(register, hook) {
    if (isArray$1(hook)) {
      hook.forEach((_hook) => register(_hook.bind(publicThis)));
    } else if (hook) {
      register(hook.bind(publicThis));
    }
  }
  registerLifecycleHook(onBeforeMount, beforeMount);
  registerLifecycleHook(onMounted, mounted);
  registerLifecycleHook(onBeforeUpdate, beforeUpdate);
  registerLifecycleHook(onUpdated, updated);
  registerLifecycleHook(onActivated, activated);
  registerLifecycleHook(onDeactivated, deactivated);
  registerLifecycleHook(onErrorCaptured, errorCaptured);
  registerLifecycleHook(onRenderTracked, renderTracked);
  registerLifecycleHook(onRenderTriggered, renderTriggered);
  registerLifecycleHook(onBeforeUnmount, beforeUnmount);
  registerLifecycleHook(onUnmounted, unmounted);
  registerLifecycleHook(onServerPrefetch, serverPrefetch);
  if (isArray$1(expose)) {
    if (expose.length) {
      const exposed = instance.exposed || (instance.exposed = {});
      expose.forEach((key) => {
        Object.defineProperty(exposed, key, {
          get: () => publicThis[key],
          set: (val) => publicThis[key] = val,
          enumerable: true
        });
      });
    } else if (!instance.exposed) {
      instance.exposed = {};
    }
  }
  if (render && instance.render === NOOP) {
    instance.render = render;
  }
  if (inheritAttrs != null) {
    instance.inheritAttrs = inheritAttrs;
  }
  if (components) instance.components = components;
  if (directives) instance.directives = directives;
  if (serverPrefetch) {
    markAsyncBoundary(instance);
  }
}
function resolveInjections(injectOptions, ctx, checkDuplicateProperties = NOOP) {
  if (isArray$1(injectOptions)) {
    injectOptions = normalizeInject(injectOptions);
  }
  for (const key in injectOptions) {
    const opt = injectOptions[key];
    let injected;
    if (isObject$1(opt)) {
      if ("default" in opt) {
        injected = inject(
          opt.from || key,
          opt.default,
          true
        );
      } else {
        injected = inject(opt.from || key);
      }
    } else {
      injected = inject(opt);
    }
    if (/* @__PURE__ */ isRef(injected)) {
      Object.defineProperty(ctx, key, {
        enumerable: true,
        configurable: true,
        get: () => injected.value,
        set: (v2) => injected.value = v2
      });
    } else {
      ctx[key] = injected;
    }
  }
}
function callHook$1(hook, instance, type) {
  callWithAsyncErrorHandling(
    isArray$1(hook) ? hook.map((h2) => h2.bind(instance.proxy)) : hook.bind(instance.proxy),
    instance,
    type
  );
}
function createWatcher(raw, ctx, publicThis, key) {
  let getter = key.includes(".") ? createPathGetter(publicThis, key) : () => publicThis[key];
  if (isString(raw)) {
    const handler = ctx[raw];
    if (isFunction$2(handler)) {
      {
        watch(getter, handler);
      }
    }
  } else if (isFunction$2(raw)) {
    {
      watch(getter, raw.bind(publicThis));
    }
  } else if (isObject$1(raw)) {
    if (isArray$1(raw)) {
      raw.forEach((r2) => createWatcher(r2, ctx, publicThis, key));
    } else {
      const handler = isFunction$2(raw.handler) ? raw.handler.bind(publicThis) : ctx[raw.handler];
      if (isFunction$2(handler)) {
        watch(getter, handler, raw);
      }
    }
  } else ;
}
function resolveMergedOptions(instance) {
  const base2 = instance.type;
  const { mixins, extends: extendsOptions } = base2;
  const {
    mixins: globalMixins,
    optionsCache: cache,
    config: { optionMergeStrategies }
  } = instance.appContext;
  const cached = cache.get(base2);
  let resolved;
  if (cached) {
    resolved = cached;
  } else if (!globalMixins.length && !mixins && !extendsOptions) {
    {
      resolved = base2;
    }
  } else {
    resolved = {};
    if (globalMixins.length) {
      globalMixins.forEach(
        (m2) => mergeOptions$1(resolved, m2, optionMergeStrategies, true)
      );
    }
    mergeOptions$1(resolved, base2, optionMergeStrategies);
  }
  if (isObject$1(base2)) {
    cache.set(base2, resolved);
  }
  return resolved;
}
function mergeOptions$1(to, from2, strats, asMixin = false) {
  const { mixins, extends: extendsOptions } = from2;
  if (extendsOptions) {
    mergeOptions$1(to, extendsOptions, strats, true);
  }
  if (mixins) {
    mixins.forEach(
      (m2) => mergeOptions$1(to, m2, strats, true)
    );
  }
  for (const key in from2) {
    if (asMixin && key === "expose") ;
    else {
      const strat = internalOptionMergeStrats[key] || strats && strats[key];
      to[key] = strat ? strat(to[key], from2[key]) : from2[key];
    }
  }
  return to;
}
const internalOptionMergeStrats = {
  data: mergeDataFn,
  props: mergeEmitsOrPropsOptions,
  emits: mergeEmitsOrPropsOptions,
  // objects
  methods: mergeObjectOptions,
  computed: mergeObjectOptions,
  // lifecycle
  beforeCreate: mergeAsArray,
  created: mergeAsArray,
  beforeMount: mergeAsArray,
  mounted: mergeAsArray,
  beforeUpdate: mergeAsArray,
  updated: mergeAsArray,
  beforeDestroy: mergeAsArray,
  beforeUnmount: mergeAsArray,
  destroyed: mergeAsArray,
  unmounted: mergeAsArray,
  activated: mergeAsArray,
  deactivated: mergeAsArray,
  errorCaptured: mergeAsArray,
  serverPrefetch: mergeAsArray,
  // assets
  components: mergeObjectOptions,
  directives: mergeObjectOptions,
  // watch
  watch: mergeWatchOptions,
  // provide / inject
  provide: mergeDataFn,
  inject: mergeInject
};
function mergeDataFn(to, from2) {
  if (!from2) {
    return to;
  }
  if (!to) {
    return from2;
  }
  return function mergedDataFn() {
    return extend(
      isFunction$2(to) ? to.call(this, this) : to,
      isFunction$2(from2) ? from2.call(this, this) : from2
    );
  };
}
function mergeInject(to, from2) {
  return mergeObjectOptions(normalizeInject(to), normalizeInject(from2));
}
function normalizeInject(raw) {
  if (isArray$1(raw)) {
    const res = {};
    for (let i = 0; i < raw.length; i++) {
      res[raw[i]] = raw[i];
    }
    return res;
  }
  return raw;
}
function mergeAsArray(to, from2) {
  return to ? [...new Set([].concat(to, from2))] : from2;
}
function mergeObjectOptions(to, from2) {
  return to ? extend(/* @__PURE__ */ Object.create(null), to, from2) : from2;
}
function mergeEmitsOrPropsOptions(to, from2) {
  if (to) {
    if (isArray$1(to) && isArray$1(from2)) {
      return [.../* @__PURE__ */ new Set([...to, ...from2])];
    }
    return extend(
      /* @__PURE__ */ Object.create(null),
      normalizePropsOrEmits(to),
      normalizePropsOrEmits(from2 != null ? from2 : {})
    );
  } else {
    return from2;
  }
}
function mergeWatchOptions(to, from2) {
  if (!to) return from2;
  if (!from2) return to;
  const merged = extend(/* @__PURE__ */ Object.create(null), to);
  for (const key in from2) {
    merged[key] = mergeAsArray(to[key], from2[key]);
  }
  return merged;
}
function createAppContext() {
  return {
    app: null,
    config: {
      isNativeTag: NO,
      performance: false,
      globalProperties: {},
      optionMergeStrategies: {},
      errorHandler: void 0,
      warnHandler: void 0,
      compilerOptions: {}
    },
    mixins: [],
    components: {},
    directives: {},
    provides: /* @__PURE__ */ Object.create(null),
    optionsCache: /* @__PURE__ */ new WeakMap(),
    propsCache: /* @__PURE__ */ new WeakMap(),
    emitsCache: /* @__PURE__ */ new WeakMap()
  };
}
let uid$1 = 0;
function createAppAPI(render, hydrate) {
  return function createApp2(rootComponent, rootProps = null) {
    if (!isFunction$2(rootComponent)) {
      rootComponent = extend({}, rootComponent);
    }
    if (rootProps != null && !isObject$1(rootProps)) {
      rootProps = null;
    }
    const context = createAppContext();
    const installedPlugins = /* @__PURE__ */ new WeakSet();
    const pluginCleanupFns = [];
    let isMounted = false;
    const app2 = context.app = {
      _uid: uid$1++,
      _component: rootComponent,
      _props: rootProps,
      _container: null,
      _context: context,
      _instance: null,
      version: version$1,
      get config() {
        return context.config;
      },
      set config(v2) {
      },
      use(plugin, ...options) {
        if (installedPlugins.has(plugin)) ;
        else if (plugin && isFunction$2(plugin.install)) {
          installedPlugins.add(plugin);
          plugin.install(app2, ...options);
        } else if (isFunction$2(plugin)) {
          installedPlugins.add(plugin);
          plugin(app2, ...options);
        } else ;
        return app2;
      },
      mixin(mixin) {
        {
          if (!context.mixins.includes(mixin)) {
            context.mixins.push(mixin);
          }
        }
        return app2;
      },
      component(name, component) {
        if (!component) {
          return context.components[name];
        }
        context.components[name] = component;
        return app2;
      },
      directive(name, directive) {
        if (!directive) {
          return context.directives[name];
        }
        context.directives[name] = directive;
        return app2;
      },
      mount(rootContainer, isHydrate, namespace) {
        if (!isMounted) {
          const vnode = app2._ceVNode || createVNode(rootComponent, rootProps);
          vnode.appContext = context;
          if (namespace === true) {
            namespace = "svg";
          } else if (namespace === false) {
            namespace = void 0;
          }
          {
            render(vnode, rootContainer, namespace);
          }
          isMounted = true;
          app2._container = rootContainer;
          rootContainer.__vue_app__ = app2;
          return getComponentPublicInstance(vnode.component);
        }
      },
      onUnmount(cleanupFn) {
        pluginCleanupFns.push(cleanupFn);
      },
      unmount() {
        if (isMounted) {
          callWithAsyncErrorHandling(
            pluginCleanupFns,
            app2._instance,
            16
          );
          render(null, app2._container);
          delete app2._container.__vue_app__;
        }
      },
      provide(key, value) {
        context.provides[key] = value;
        return app2;
      },
      runWithContext(fn) {
        const lastApp = currentApp;
        currentApp = app2;
        try {
          return fn();
        } finally {
          currentApp = lastApp;
        }
      }
    };
    return app2;
  };
}
let currentApp = null;
const getModelModifiers = (props, modelName) => {
  return modelName === "modelValue" || modelName === "model-value" ? props.modelModifiers : props[`${modelName}Modifiers`] || props[`${camelize(modelName)}Modifiers`] || props[`${hyphenate(modelName)}Modifiers`];
};
function emit(instance, event, ...rawArgs) {
  if (instance.isUnmounted) return;
  const props = instance.vnode.props || EMPTY_OBJ;
  let args = rawArgs;
  const isModelListener2 = event.startsWith("update:");
  const modifiers2 = isModelListener2 && getModelModifiers(props, event.slice(7));
  if (modifiers2) {
    if (modifiers2.trim) {
      args = rawArgs.map((a2) => isString(a2) ? a2.trim() : a2);
    }
    if (modifiers2.number) {
      args = rawArgs.map(looseToNumber);
    }
  }
  let handlerName;
  let handler = props[handlerName = toHandlerKey(event)] || // also try camelCase event handler (#2249)
  props[handlerName = toHandlerKey(camelize(event))];
  if (!handler && isModelListener2) {
    handler = props[handlerName = toHandlerKey(hyphenate(event))];
  }
  if (handler) {
    callWithAsyncErrorHandling(
      handler,
      instance,
      6,
      args
    );
  }
  const onceHandler = props[handlerName + `Once`];
  if (onceHandler) {
    if (!instance.emitted) {
      instance.emitted = {};
    } else if (instance.emitted[handlerName]) {
      return;
    }
    instance.emitted[handlerName] = true;
    callWithAsyncErrorHandling(
      onceHandler,
      instance,
      6,
      args
    );
  }
}
const mixinEmitsCache = /* @__PURE__ */ new WeakMap();
function normalizeEmitsOptions(comp, appContext, asMixin = false) {
  const cache = asMixin ? mixinEmitsCache : appContext.emitsCache;
  const cached = cache.get(comp);
  if (cached !== void 0) {
    return cached;
  }
  const raw = comp.emits;
  let normalized = {};
  let hasExtends = false;
  if (!isFunction$2(comp)) {
    const extendEmits = (raw2) => {
      const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true);
      if (normalizedFromExtend) {
        hasExtends = true;
        extend(normalized, normalizedFromExtend);
      }
    };
    if (!asMixin && appContext.mixins.length) {
      appContext.mixins.forEach(extendEmits);
    }
    if (comp.extends) {
      extendEmits(comp.extends);
    }
    if (comp.mixins) {
      comp.mixins.forEach(extendEmits);
    }
  }
  if (!raw && !hasExtends) {
    if (isObject$1(comp)) {
      cache.set(comp, null);
    }
    return null;
  }
  if (isArray$1(raw)) {
    raw.forEach((key) => normalized[key] = null);
  } else {
    extend(normalized, raw);
  }
  if (isObject$1(comp)) {
    cache.set(comp, normalized);
  }
  return normalized;
}
function isEmitListener(options, key) {
  if (!options || !isOn(key)) {
    return false;
  }
  key = key.slice(2).replace(/Once$/, "");
  return hasOwn(options, key[0].toLowerCase() + key.slice(1)) || hasOwn(options, hyphenate(key)) || hasOwn(options, key);
}
function markAttrsAccessed() {
}
function renderComponentRoot(instance) {
  const {
    type: Component,
    vnode,
    proxy,
    withProxy,
    propsOptions: [propsOptions],
    slots,
    attrs,
    emit: emit2,
    render,
    renderCache,
    props,
    data,
    setupState,
    ctx,
    inheritAttrs
  } = instance;
  const prev = setCurrentRenderingInstance(instance);
  let result;
  let fallthroughAttrs;
  try {
    if (vnode.shapeFlag & 4) {
      const proxyToUse = withProxy || proxy;
      const thisProxy = false ? new Proxy(proxyToUse, {
        get(target, key, receiver) {
          warn$1(
            `Property '${String(
              key
            )}' was accessed via 'this'. Avoid using 'this' in templates.`
          );
          return Reflect.get(target, key, receiver);
        }
      }) : proxyToUse;
      result = normalizeVNode(
        render.call(
          thisProxy,
          proxyToUse,
          renderCache,
          false ? /* @__PURE__ */ shallowReadonly(props) : props,
          setupState,
          data,
          ctx
        )
      );
      fallthroughAttrs = attrs;
    } else {
      const render2 = Component;
      if (false) ;
      result = normalizeVNode(
        render2.length > 1 ? render2(
          false ? /* @__PURE__ */ shallowReadonly(props) : props,
          false ? {
            get attrs() {
              markAttrsAccessed();
              return /* @__PURE__ */ shallowReadonly(attrs);
            },
            slots,
            emit: emit2
          } : { attrs, slots, emit: emit2 }
        ) : render2(
          false ? /* @__PURE__ */ shallowReadonly(props) : props,
          null
        )
      );
      fallthroughAttrs = Component.props ? attrs : getFunctionalFallthrough(attrs);
    }
  } catch (err) {
    blockStack.length = 0;
    handleError(err, instance, 1);
    result = createVNode(Comment);
  }
  let root = result;
  if (fallthroughAttrs && inheritAttrs !== false) {
    const keys2 = Object.keys(fallthroughAttrs);
    const { shapeFlag } = root;
    if (keys2.length) {
      if (shapeFlag & (1 | 6)) {
        if (propsOptions && keys2.some(isModelListener)) {
          fallthroughAttrs = filterModelListeners(
            fallthroughAttrs,
            propsOptions
          );
        }
        root = cloneVNode(root, fallthroughAttrs, false, true);
      }
    }
  }
  if (vnode.dirs) {
    root = cloneVNode(root, null, false, true);
    root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs;
  }
  if (vnode.transition) {
    setTransitionHooks(root, vnode.transition);
  }
  {
    result = root;
  }
  setCurrentRenderingInstance(prev);
  return result;
}
const getFunctionalFallthrough = (attrs) => {
  let res;
  for (const key in attrs) {
    if (key === "class" || key === "style" || isOn(key)) {
      (res || (res = {}))[key] = attrs[key];
    }
  }
  return res;
};
const filterModelListeners = (attrs, props) => {
  const res = {};
  for (const key in attrs) {
    if (!isModelListener(key) || !(key.slice(9) in props)) {
      res[key] = attrs[key];
    }
  }
  return res;
};
function shouldUpdateComponent(prevVNode, nextVNode, optimized) {
  const { props: prevProps, children: prevChildren, component } = prevVNode;
  const { props: nextProps, children: nextChildren, patchFlag } = nextVNode;
  const emits = component.emitsOptions;
  if (nextVNode.dirs || nextVNode.transition) {
    return true;
  }
  if (optimized && patchFlag >= 0) {
    if (patchFlag & 1024) {
      return true;
    }
    if (patchFlag & 16) {
      if (!prevProps) {
        return !!nextProps;
      }
      return hasPropsChanged(prevProps, nextProps, emits);
    } else if (patchFlag & 8) {
      const dynamicProps = nextVNode.dynamicProps;
      for (let i = 0; i < dynamicProps.length; i++) {
        const key = dynamicProps[i];
        if (hasPropValueChanged(nextProps, prevProps, key) && !isEmitListener(emits, key)) {
          return true;
        }
      }
    }
  } else {
    if (prevChildren || nextChildren) {
      if (!nextChildren || !nextChildren.$stable) {
        return true;
      }
    }
    if (prevProps === nextProps) {
      return false;
    }
    if (!prevProps) {
      return !!nextProps;
    }
    if (!nextProps) {
      return true;
    }
    return hasPropsChanged(prevProps, nextProps, emits);
  }
  return false;
}
function hasPropsChanged(prevProps, nextProps, emitsOptions) {
  const nextKeys = Object.keys(nextProps);
  if (nextKeys.length !== Object.keys(prevProps).length) {
    return true;
  }
  for (let i = 0; i < nextKeys.length; i++) {
    const key = nextKeys[i];
    if (hasPropValueChanged(nextProps, prevProps, key) && !isEmitListener(emitsOptions, key)) {
      return true;
    }
  }
  return false;
}
function hasPropValueChanged(nextProps, prevProps, key) {
  const nextProp = nextProps[key];
  const prevProp = prevProps[key];
  if (key === "style" && isObject$1(nextProp) && isObject$1(prevProp)) {
    return !looseEqual(nextProp, prevProp);
  }
  return nextProp !== prevProp;
}
function updateHOCHostEl({ vnode, parent }, el) {
  while (parent) {
    const root = parent.subTree;
    if (root.suspense && root.suspense.activeBranch === vnode) {
      root.el = vnode.el;
    }
    if (root === vnode) {
      (vnode = parent.vnode).el = el;
      parent = parent.parent;
    } else {
      break;
    }
  }
}
const internalObjectProto = {};
const createInternalObject = () => Object.create(internalObjectProto);
const isInternalObject = (obj) => Object.getPrototypeOf(obj) === internalObjectProto;
function initProps(instance, rawProps, isStateful, isSSR = false) {
  const props = {};
  const attrs = createInternalObject();
  instance.propsDefaults = /* @__PURE__ */ Object.create(null);
  setFullProps(instance, rawProps, props, attrs);
  for (const key in instance.propsOptions[0]) {
    if (!(key in props)) {
      props[key] = void 0;
    }
  }
  if (isStateful) {
    instance.props = isSSR ? props : /* @__PURE__ */ shallowReactive(props);
  } else {
    if (!instance.type.props) {
      instance.props = attrs;
    } else {
      instance.props = props;
    }
  }
  instance.attrs = attrs;
}
function updateProps(instance, rawProps, rawPrevProps, optimized) {
  const {
    props,
    attrs,
    vnode: { patchFlag }
  } = instance;
  const rawCurrentProps = /* @__PURE__ */ toRaw(props);
  const [options] = instance.propsOptions;
  let hasAttrsChanged = false;
  if (
    // always force full diff in dev
    // - #1942 if hmr is enabled with sfc component
    // - vite#872 non-sfc component used by sfc component
    (optimized || patchFlag > 0) && !(patchFlag & 16)
  ) {
    if (patchFlag & 8) {
      const propsToUpdate = instance.vnode.dynamicProps;
      for (let i = 0; i < propsToUpdate.length; i++) {
        let key = propsToUpdate[i];
        if (isEmitListener(instance.emitsOptions, key)) {
          continue;
        }
        const value = rawProps[key];
        if (options) {
          if (hasOwn(attrs, key)) {
            if (value !== attrs[key]) {
              attrs[key] = value;
              hasAttrsChanged = true;
            }
          } else {
            const camelizedKey = camelize(key);
            props[camelizedKey] = resolvePropValue(
              options,
              rawCurrentProps,
              camelizedKey,
              value,
              instance,
              false
            );
          }
        } else {
          if (value !== attrs[key]) {
            attrs[key] = value;
            hasAttrsChanged = true;
          }
        }
      }
    }
  } else {
    if (setFullProps(instance, rawProps, props, attrs)) {
      hasAttrsChanged = true;
    }
    let kebabKey;
    for (const key in rawCurrentProps) {
      if (!rawProps || // for camelCase
      !hasOwn(rawProps, key) && // it's possible the original props was passed in as kebab-case
      // and converted to camelCase (#955)
      ((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey))) {
        if (options) {
          if (rawPrevProps && // for camelCase
          (rawPrevProps[key] !== void 0 || // for kebab-case
          rawPrevProps[kebabKey] !== void 0)) {
            props[key] = resolvePropValue(
              options,
              rawCurrentProps,
              key,
              void 0,
              instance,
              true
            );
          }
        } else {
          delete props[key];
        }
      }
    }
    if (attrs !== rawCurrentProps) {
      for (const key in attrs) {
        if (!rawProps || !hasOwn(rawProps, key) && true) {
          delete attrs[key];
          hasAttrsChanged = true;
        }
      }
    }
  }
  if (hasAttrsChanged) {
    trigger(instance.attrs, "set", "");
  }
}
function setFullProps(instance, rawProps, props, attrs) {
  const [options, needCastKeys] = instance.propsOptions;
  let hasAttrsChanged = false;
  let rawCastValues;
  if (rawProps) {
    for (let key in rawProps) {
      if (isReservedProp(key)) {
        continue;
      }
      const value = rawProps[key];
      let camelKey;
      if (options && hasOwn(options, camelKey = camelize(key))) {
        if (!needCastKeys || !needCastKeys.includes(camelKey)) {
          props[camelKey] = value;
        } else {
          (rawCastValues || (rawCastValues = {}))[camelKey] = value;
        }
      } else if (!isEmitListener(instance.emitsOptions, key)) {
        if (!(key in attrs) || value !== attrs[key]) {
          attrs[key] = value;
          hasAttrsChanged = true;
        }
      }
    }
  }
  if (needCastKeys) {
    const rawCurrentProps = /* @__PURE__ */ toRaw(props);
    const castValues = rawCastValues || EMPTY_OBJ;
    for (let i = 0; i < needCastKeys.length; i++) {
      const key = needCastKeys[i];
      props[key] = resolvePropValue(
        options,
        rawCurrentProps,
        key,
        castValues[key],
        instance,
        !hasOwn(castValues, key)
      );
    }
  }
  return hasAttrsChanged;
}
function resolvePropValue(options, props, key, value, instance, isAbsent) {
  const opt = options[key];
  if (opt != null) {
    const hasDefault = hasOwn(opt, "default");
    if (hasDefault && value === void 0) {
      const defaultValue = opt.default;
      if (opt.type !== Function && !opt.skipFactory && isFunction$2(defaultValue)) {
        const { propsDefaults } = instance;
        if (key in propsDefaults) {
          value = propsDefaults[key];
        } else {
          const reset2 = setCurrentInstance(instance);
          value = propsDefaults[key] = defaultValue.call(
            null,
            props
          );
          reset2();
        }
      } else {
        value = defaultValue;
      }
      if (instance.ce) {
        instance.ce._setProp(key, value);
      }
    }
    if (opt[
      0
      /* shouldCast */
    ]) {
      if (isAbsent && !hasDefault) {
        value = false;
      } else if (opt[
        1
        /* shouldCastTrue */
      ] && (value === "" || value === hyphenate(key))) {
        value = true;
      }
    }
  }
  return value;
}
const mixinPropsCache = /* @__PURE__ */ new WeakMap();
function normalizePropsOptions(comp, appContext, asMixin = false) {
  const cache = asMixin ? mixinPropsCache : appContext.propsCache;
  const cached = cache.get(comp);
  if (cached) {
    return cached;
  }
  const raw = comp.props;
  const normalized = {};
  const needCastKeys = [];
  let hasExtends = false;
  if (!isFunction$2(comp)) {
    const extendProps = (raw2) => {
      hasExtends = true;
      const [props, keys2] = normalizePropsOptions(raw2, appContext, true);
      extend(normalized, props);
      if (keys2) needCastKeys.push(...keys2);
    };
    if (!asMixin && appContext.mixins.length) {
      appContext.mixins.forEach(extendProps);
    }
    if (comp.extends) {
      extendProps(comp.extends);
    }
    if (comp.mixins) {
      comp.mixins.forEach(extendProps);
    }
  }
  if (!raw && !hasExtends) {
    if (isObject$1(comp)) {
      cache.set(comp, EMPTY_ARR);
    }
    return EMPTY_ARR;
  }
  if (isArray$1(raw)) {
    for (let i = 0; i < raw.length; i++) {
      const normalizedKey = camelize(raw[i]);
      if (validatePropName(normalizedKey)) {
        normalized[normalizedKey] = EMPTY_OBJ;
      }
    }
  } else if (raw) {
    for (const key in raw) {
      const normalizedKey = camelize(key);
      if (validatePropName(normalizedKey)) {
        const opt = raw[key];
        const prop = normalized[normalizedKey] = isArray$1(opt) || isFunction$2(opt) ? { type: opt } : extend({}, opt);
        const propType = prop.type;
        let shouldCast = false;
        let shouldCastTrue = true;
        if (isArray$1(propType)) {
          for (let index2 = 0; index2 < propType.length; ++index2) {
            const type = propType[index2];
            const typeName = isFunction$2(type) && type.name;
            if (typeName === "Boolean") {
              shouldCast = true;
              break;
            } else if (typeName === "String") {
              shouldCastTrue = false;
            }
          }
        } else {
          shouldCast = isFunction$2(propType) && propType.name === "Boolean";
        }
        prop[
          0
          /* shouldCast */
        ] = shouldCast;
        prop[
          1
          /* shouldCastTrue */
        ] = shouldCastTrue;
        if (shouldCast || hasOwn(prop, "default")) {
          needCastKeys.push(normalizedKey);
        }
      }
    }
  }
  const res = [normalized, needCastKeys];
  if (isObject$1(comp)) {
    cache.set(comp, res);
  }
  return res;
}
function validatePropName(key) {
  if (key[0] !== "$" && !isReservedProp(key)) {
    return true;
  }
  return false;
}
const isInternalKey = (key) => key === "_" || key === "_ctx" || key === "$stable";
const normalizeSlotValue = (value) => isArray$1(value) ? value.map(normalizeVNode) : [normalizeVNode(value)];
const normalizeSlot$1 = (key, rawSlot, ctx) => {
  if (rawSlot._n) {
    return rawSlot;
  }
  const normalized = withCtx((...args) => {
    if (false) ;
    return normalizeSlotValue(rawSlot(...args));
  }, ctx);
  normalized._c = false;
  return normalized;
};
const normalizeObjectSlots = (rawSlots, slots, instance) => {
  const ctx = rawSlots._ctx;
  for (const key in rawSlots) {
    if (isInternalKey(key)) continue;
    const value = rawSlots[key];
    if (isFunction$2(value)) {
      slots[key] = normalizeSlot$1(key, value, ctx);
    } else if (value != null) {
      const normalized = normalizeSlotValue(value);
      slots[key] = () => normalized;
    }
  }
};
const normalizeVNodeSlots = (instance, children) => {
  const normalized = normalizeSlotValue(children);
  instance.slots.default = () => normalized;
};
const assignSlots = (slots, children, optimized) => {
  for (const key in children) {
    if (optimized || !isInternalKey(key)) {
      slots[key] = children[key];
    }
  }
};
const initSlots = (instance, children, optimized) => {
  const slots = instance.slots = createInternalObject();
  if (instance.vnode.shapeFlag & 32) {
    const type = children._;
    if (type) {
      assignSlots(slots, children, optimized);
      if (optimized) {
        def(slots, "_", type, true);
      }
    } else {
      normalizeObjectSlots(children, slots);
    }
  } else if (children) {
    normalizeVNodeSlots(instance, children);
  }
};
const updateSlots = (instance, children, optimized) => {
  const { vnode, slots } = instance;
  let needDeletionCheck = true;
  let deletionComparisonTarget = EMPTY_OBJ;
  if (vnode.shapeFlag & 32) {
    const type = children._;
    if (type) {
      if (optimized && type === 1) {
        needDeletionCheck = false;
      } else {
        assignSlots(slots, children, optimized);
      }
    } else {
      needDeletionCheck = !children.$stable;
      normalizeObjectSlots(children, slots);
    }
    deletionComparisonTarget = children;
  } else if (children) {
    normalizeVNodeSlots(instance, children);
    deletionComparisonTarget = { default: 1 };
  }
  if (needDeletionCheck) {
    for (const key in slots) {
      if (!isInternalKey(key) && deletionComparisonTarget[key] == null) {
        delete slots[key];
      }
    }
  }
};
const queuePostRenderEffect = queueEffectWithSuspense;
function createRenderer(options) {
  return baseCreateRenderer(options);
}
function baseCreateRenderer(options, createHydrationFns) {
  const target = getGlobalThis();
  target.__VUE__ = true;
  const {
    insert: hostInsert,
    remove: hostRemove,
    patchProp: hostPatchProp,
    createElement: hostCreateElement,
    createText: hostCreateText,
    createComment: hostCreateComment,
    setText: hostSetText,
    setElementText: hostSetElementText,
    parentNode: hostParentNode,
    nextSibling: hostNextSibling,
    setScopeId: hostSetScopeId = NOOP,
    insertStaticContent: hostInsertStaticContent
  } = options;
  const patch = (n1, n2, container, anchor = null, parentComponent = null, parentSuspense = null, namespace = void 0, slotScopeIds = null, optimized = !!n2.dynamicChildren) => {
    if (n1 === n2) {
      return;
    }
    if (n1 && !isSameVNodeType(n1, n2)) {
      anchor = getNextHostNode(n1);
      unmount(n1, parentComponent, parentSuspense, true);
      n1 = null;
    }
    if (n2.patchFlag === -2) {
      optimized = false;
      n2.dynamicChildren = null;
    }
    const { type, ref: ref3, shapeFlag } = n2;
    switch (type) {
      case Text$2:
        processText(n1, n2, container, anchor);
        break;
      case Comment:
        processCommentNode(n1, n2, container, anchor);
        break;
      case Static:
        if (n1 == null) {
          mountStaticNode(n2, container, anchor, namespace);
        }
        break;
      case Fragment$1:
        processFragment(
          n1,
          n2,
          container,
          anchor,
          parentComponent,
          parentSuspense,
          namespace,
          slotScopeIds,
          optimized
        );
        break;
      default:
        if (shapeFlag & 1) {
          processElement(
            n1,
            n2,
            container,
            anchor,
            parentComponent,
            parentSuspense,
            namespace,
            slotScopeIds,
            optimized
          );
        } else if (shapeFlag & 6) {
          processComponent(
            n1,
            n2,
            container,
            anchor,
            parentComponent,
            parentSuspense,
            namespace,
            slotScopeIds,
            optimized
          );
        } else if (shapeFlag & 64) {
          type.process(
            n1,
            n2,
            container,
            anchor,
            parentComponent,
            parentSuspense,
            namespace,
            slotScopeIds,
            optimized,
            internals
          );
        } else if (shapeFlag & 128) {
          type.process(
            n1,
            n2,
            container,
            anchor,
            parentComponent,
            parentSuspense,
            namespace,
            slotScopeIds,
            optimized,
            internals
          );
        } else ;
    }
    if (ref3 != null && parentComponent) {
      setRef(ref3, n1 && n1.ref, parentSuspense, n2 || n1, !n2);
    } else if (ref3 == null && n1 && n1.ref != null) {
      setRef(n1.ref, null, parentSuspense, n1, true);
    }
  };
  const processText = (n1, n2, container, anchor) => {
    if (n1 == null) {
      hostInsert(
        n2.el = hostCreateText(n2.children),
        container,
        anchor
      );
    } else {
      const el = n2.el = n1.el;
      if (n2.children !== n1.children) {
        hostSetText(el, n2.children);
      }
    }
  };
  const processCommentNode = (n1, n2, container, anchor) => {
    if (n1 == null) {
      hostInsert(
        n2.el = hostCreateComment(n2.children || ""),
        container,
        anchor
      );
    } else {
      n2.el = n1.el;
    }
  };
  const mountStaticNode = (n2, container, anchor, namespace) => {
    [n2.el, n2.anchor] = hostInsertStaticContent(
      n2.children,
      container,
      anchor,
      namespace,
      n2.el,
      n2.anchor
    );
  };
  const moveStaticNode = ({ el, anchor }, container, nextSibling) => {
    let next;
    while (el && el !== anchor) {
      next = hostNextSibling(el);
      hostInsert(el, container, nextSibling);
      el = next;
    }
    hostInsert(anchor, container, nextSibling);
  };
  const removeStaticNode = ({ el, anchor }) => {
    let next;
    while (el && el !== anchor) {
      next = hostNextSibling(el);
      hostRemove(el);
      el = next;
    }
    hostRemove(anchor);
  };
  const processElement = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {
    if (n2.type === "svg") {
      namespace = "svg";
    } else if (n2.type === "math") {
      namespace = "mathml";
    }
    if (n1 == null) {
      mountElement(
        n2,
        container,
        anchor,
        parentComponent,
        parentSuspense,
        namespace,
        slotScopeIds,
        optimized
      );
    } else {
      const customElement = n1.el && n1.el._isVueCE ? n1.el : null;
      try {
        if (customElement) {
          customElement._beginPatch();
        }
        patchElement(
          n1,
          n2,
          parentComponent,
          parentSuspense,
          namespace,
          slotScopeIds,
          optimized
        );
      } finally {
        if (customElement) {
          customElement._endPatch();
        }
      }
    }
  };
  const mountElement = (vnode, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {
    let el;
    let vnodeHook;
    const { props, shapeFlag, transition, dirs } = vnode;
    el = vnode.el = hostCreateElement(
      vnode.type,
      namespace,
      props && props.is,
      props
    );
    if (shapeFlag & 8) {
      hostSetElementText(el, vnode.children);
    } else if (shapeFlag & 16) {
      mountChildren(
        vnode.children,
        el,
        null,
        parentComponent,
        parentSuspense,
        resolveChildrenNamespace(vnode, namespace),
        slotScopeIds,
        optimized
      );
    }
    if (dirs) {
      invokeDirectiveHook(vnode, null, parentComponent, "created");
    }
    setScopeId(el, vnode, vnode.scopeId, slotScopeIds, parentComponent);
    if (props) {
      for (const key in props) {
        if (key !== "value" && !isReservedProp(key)) {
          hostPatchProp(el, key, null, props[key], namespace, parentComponent);
        }
      }
      if ("value" in props) {
        hostPatchProp(el, "value", null, props.value, namespace);
      }
      if (vnodeHook = props.onVnodeBeforeMount) {
        invokeVNodeHook(vnodeHook, parentComponent, vnode);
      }
    }
    if (dirs) {
      invokeDirectiveHook(vnode, null, parentComponent, "beforeMount");
    }
    const needCallTransitionHooks = needTransition(parentSuspense, transition);
    if (needCallTransitionHooks) {
      transition.beforeEnter(el);
    }
    hostInsert(el, container, anchor);
    if ((vnodeHook = props && props.onVnodeMounted) || needCallTransitionHooks || dirs) {
      queuePostRenderEffect(() => {
        vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);
        needCallTransitionHooks && transition.enter(el);
        dirs && invokeDirectiveHook(vnode, null, parentComponent, "mounted");
      }, parentSuspense);
    }
  };
  const setScopeId = (el, vnode, scopeId, slotScopeIds, parentComponent) => {
    if (scopeId) {
      hostSetScopeId(el, scopeId);
    }
    if (slotScopeIds) {
      for (let i = 0; i < slotScopeIds.length; i++) {
        hostSetScopeId(el, slotScopeIds[i]);
      }
    }
    if (parentComponent) {
      let subTree = parentComponent.subTree;
      if (vnode === subTree || isSuspense(subTree.type) && (subTree.ssContent === vnode || subTree.ssFallback === vnode)) {
        const parentVNode = parentComponent.vnode;
        setScopeId(
          el,
          parentVNode,
          parentVNode.scopeId,
          parentVNode.slotScopeIds,
          parentComponent.parent
        );
      }
    }
  };
  const mountChildren = (children, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, start = 0) => {
    for (let i = start; i < children.length; i++) {
      const child = children[i] = optimized ? cloneIfMounted(children[i]) : normalizeVNode(children[i]);
      patch(
        null,
        child,
        container,
        anchor,
        parentComponent,
        parentSuspense,
        namespace,
        slotScopeIds,
        optimized
      );
    }
  };
  const patchElement = (n1, n2, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {
    const el = n2.el = n1.el;
    let { patchFlag, dynamicChildren, dirs } = n2;
    patchFlag |= n1.patchFlag & 16;
    const oldProps = n1.props || EMPTY_OBJ;
    const newProps = n2.props || EMPTY_OBJ;
    let vnodeHook;
    parentComponent && toggleRecurse(parentComponent, false);
    if (vnodeHook = newProps.onVnodeBeforeUpdate) {
      invokeVNodeHook(vnodeHook, parentComponent, n2, n1);
    }
    if (dirs) {
      invokeDirectiveHook(n2, n1, parentComponent, "beforeUpdate");
    }
    parentComponent && toggleRecurse(parentComponent, true);
    if (oldProps.innerHTML && newProps.innerHTML == null || oldProps.textContent && newProps.textContent == null) {
      hostSetElementText(el, "");
    }
    if (dynamicChildren) {
      patchBlockChildren(
        n1.dynamicChildren,
        dynamicChildren,
        el,
        parentComponent,
        parentSuspense,
        resolveChildrenNamespace(n2, namespace),
        slotScopeIds
      );
    } else if (!optimized) {
      patchChildren(
        n1,
        n2,
        el,
        null,
        parentComponent,
        parentSuspense,
        resolveChildrenNamespace(n2, namespace),
        slotScopeIds,
        false
      );
    }
    if (patchFlag > 0) {
      if (patchFlag & 16) {
        patchProps(el, oldProps, newProps, parentComponent, namespace);
      } else {
        if (patchFlag & 2) {
          if (oldProps.class !== newProps.class) {
            hostPatchProp(el, "class", null, newProps.class, namespace);
          }
        }
        if (patchFlag & 4) {
          hostPatchProp(el, "style", oldProps.style, newProps.style, namespace);
        }
        if (patchFlag & 8) {
          const propsToUpdate = n2.dynamicProps;
          for (let i = 0; i < propsToUpdate.length; i++) {
            const key = propsToUpdate[i];
            const prev = oldProps[key];
            const next = newProps[key];
            if (next !== prev || key === "value") {
              hostPatchProp(el, key, prev, next, namespace, parentComponent);
            }
          }
        }
      }
      if (patchFlag & 1) {
        if (n1.children !== n2.children) {
          hostSetElementText(el, n2.children);
        }
      }
    } else if (!optimized && dynamicChildren == null) {
      patchProps(el, oldProps, newProps, parentComponent, namespace);
    }
    if ((vnodeHook = newProps.onVnodeUpdated) || dirs) {
      queuePostRenderEffect(() => {
        vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, n2, n1);
        dirs && invokeDirectiveHook(n2, n1, parentComponent, "updated");
      }, parentSuspense);
    }
  };
  const patchBlockChildren = (oldChildren, newChildren, fallbackContainer, parentComponent, parentSuspense, namespace, slotScopeIds) => {
    for (let i = 0; i < newChildren.length; i++) {
      const oldVNode = oldChildren[i];
      const newVNode = newChildren[i];
      const container = (
        // oldVNode may be an errored async setup() component inside Suspense
        // which will not have a mounted element
        oldVNode.el && // - In the case of a Fragment, we need to provide the actual parent
        // of the Fragment itself so it can move its children.
        (oldVNode.type === Fragment$1 || // - In the case of different nodes, there is going to be a replacement
        // which also requires the correct parent container
        !isSameVNodeType(oldVNode, newVNode) || // - In the case of a component, it could contain anything.
        oldVNode.shapeFlag & (6 | 64 | 128)) ? hostParentNode(oldVNode.el) : (
          // In other cases, the parent container is not actually used so we
          // just pass the block element here to avoid a DOM parentNode call.
          fallbackContainer
        )
      );
      patch(
        oldVNode,
        newVNode,
        container,
        null,
        parentComponent,
        parentSuspense,
        namespace,
        slotScopeIds,
        true
      );
    }
  };
  const patchProps = (el, oldProps, newProps, parentComponent, namespace) => {
    if (oldProps !== newProps) {
      if (oldProps !== EMPTY_OBJ) {
        for (const key in oldProps) {
          if (!isReservedProp(key) && !(key in newProps)) {
            hostPatchProp(
              el,
              key,
              oldProps[key],
              null,
              namespace,
              parentComponent
            );
          }
        }
      }
      for (const key in newProps) {
        if (isReservedProp(key)) continue;
        const next = newProps[key];
        const prev = oldProps[key];
        if (next !== prev && key !== "value") {
          hostPatchProp(el, key, prev, next, namespace, parentComponent);
        }
      }
      if ("value" in newProps) {
        hostPatchProp(el, "value", oldProps.value, newProps.value, namespace);
      }
    }
  };
  const processFragment = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {
    const fragmentStartAnchor = n2.el = n1 ? n1.el : hostCreateText("");
    const fragmentEndAnchor = n2.anchor = n1 ? n1.anchor : hostCreateText("");
    let { patchFlag, dynamicChildren, slotScopeIds: fragmentSlotScopeIds } = n2;
    if (fragmentSlotScopeIds) {
      slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds;
    }
    if (n1 == null) {
      hostInsert(fragmentStartAnchor, container, anchor);
      hostInsert(fragmentEndAnchor, container, anchor);
      mountChildren(
        // #10007
        // such fragment like `<></>` will be compiled into
        // a fragment which doesn't have a children.
        // In this case fallback to an empty array
        n2.children || [],
        container,
        fragmentEndAnchor,
        parentComponent,
        parentSuspense,
        namespace,
        slotScopeIds,
        optimized
      );
    } else {
      if (patchFlag > 0 && patchFlag & 64 && dynamicChildren && // #2715 the previous fragment could've been a BAILed one as a result
      // of renderSlot() with no valid children
      n1.dynamicChildren && n1.dynamicChildren.length === dynamicChildren.length) {
        patchBlockChildren(
          n1.dynamicChildren,
          dynamicChildren,
          container,
          parentComponent,
          parentSuspense,
          namespace,
          slotScopeIds
        );
        if (
          // #2080 if the stable fragment has a key, it's a <template v-for> that may
          //  get moved around. Make sure all root level vnodes inherit el.
          // #2134 or if it's a component root, it may also get moved around
          // as the component is being moved.
          n2.key != null || parentComponent && n2 === parentComponent.subTree
        ) {
          traverseStaticChildren(
            n1,
            n2,
            true
            /* shallow */
          );
        }
      } else {
        patchChildren(
          n1,
          n2,
          container,
          fragmentEndAnchor,
          parentComponent,
          parentSuspense,
          namespace,
          slotScopeIds,
          optimized
        );
      }
    }
  };
  const processComponent = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {
    n2.slotScopeIds = slotScopeIds;
    if (n1 == null) {
      if (n2.shapeFlag & 512) {
        parentComponent.ctx.activate(
          n2,
          container,
          anchor,
          namespace,
          optimized
        );
      } else {
        mountComponent(
          n2,
          container,
          anchor,
          parentComponent,
          parentSuspense,
          namespace,
          optimized
        );
      }
    } else {
      updateComponent(n1, n2, optimized);
    }
  };
  const mountComponent = (initialVNode, container, anchor, parentComponent, parentSuspense, namespace, optimized) => {
    const instance = initialVNode.component = createComponentInstance(
      initialVNode,
      parentComponent,
      parentSuspense
    );
    if (isKeepAlive(initialVNode)) {
      instance.ctx.renderer = internals;
    }
    {
      setupComponent(instance, false, optimized);
    }
    if (instance.asyncDep) {
      parentSuspense && parentSuspense.registerDep(instance, setupRenderEffect, optimized);
      if (!initialVNode.el) {
        const placeholder = instance.subTree = createVNode(Comment);
        processCommentNode(null, placeholder, container, anchor);
        initialVNode.placeholder = placeholder.el;
      }
    } else {
      setupRenderEffect(
        instance,
        initialVNode,
        container,
        anchor,
        parentSuspense,
        namespace,
        optimized
      );
    }
  };
  const updateComponent = (n1, n2, optimized) => {
    const instance = n2.component = n1.component;
    if (shouldUpdateComponent(n1, n2, optimized)) {
      if (instance.asyncDep && !instance.asyncResolved) {
        updateComponentPreRender(instance, n2, optimized);
        return;
      } else {
        instance.next = n2;
        instance.update();
      }
    } else {
      n2.el = n1.el;
      instance.vnode = n2;
    }
  };
  const setupRenderEffect = (instance, initialVNode, container, anchor, parentSuspense, namespace, optimized) => {
    const componentUpdateFn = () => {
      if (!instance.isMounted) {
        let vnodeHook;
        const { el, props } = initialVNode;
        const { bm, m: m2, parent, root, type } = instance;
        const isAsyncWrapperVNode = isAsyncWrapper(initialVNode);
        toggleRecurse(instance, false);
        if (bm) {
          invokeArrayFns(bm);
        }
        if (!isAsyncWrapperVNode && (vnodeHook = props && props.onVnodeBeforeMount)) {
          invokeVNodeHook(vnodeHook, parent, initialVNode);
        }
        toggleRecurse(instance, true);
        {
          if (root.ce && root.ce._hasShadowRoot()) {
            root.ce._injectChildStyle(type);
          }
          const subTree = instance.subTree = renderComponentRoot(instance);
          patch(
            null,
            subTree,
            container,
            anchor,
            instance,
            parentSuspense,
            namespace
          );
          initialVNode.el = subTree.el;
        }
        if (m2) {
          queuePostRenderEffect(m2, parentSuspense);
        }
        if (!isAsyncWrapperVNode && (vnodeHook = props && props.onVnodeMounted)) {
          const scopedInitialVNode = initialVNode;
          queuePostRenderEffect(
            () => invokeVNodeHook(vnodeHook, parent, scopedInitialVNode),
            parentSuspense
          );
        }
        if (initialVNode.shapeFlag & 256 || parent && isAsyncWrapper(parent.vnode) && parent.vnode.shapeFlag & 256) {
          instance.a && queuePostRenderEffect(instance.a, parentSuspense);
        }
        instance.isMounted = true;
        initialVNode = container = anchor = null;
      } else {
        let { next, bu, u: u2, parent, vnode } = instance;
        {
          const nonHydratedAsyncRoot = locateNonHydratedAsyncRoot(instance);
          if (nonHydratedAsyncRoot) {
            if (next) {
              next.el = vnode.el;
              updateComponentPreRender(instance, next, optimized);
            }
            nonHydratedAsyncRoot.asyncDep.then(() => {
              queuePostRenderEffect(() => {
                if (!instance.isUnmounted) update();
              }, parentSuspense);
            });
            return;
          }
        }
        let originNext = next;
        let vnodeHook;
        toggleRecurse(instance, false);
        if (next) {
          next.el = vnode.el;
          updateComponentPreRender(instance, next, optimized);
        } else {
          next = vnode;
        }
        if (bu) {
          invokeArrayFns(bu);
        }
        if (vnodeHook = next.props && next.props.onVnodeBeforeUpdate) {
          invokeVNodeHook(vnodeHook, parent, next, vnode);
        }
        toggleRecurse(instance, true);
        const nextTree = renderComponentRoot(instance);
        const prevTree = instance.subTree;
        instance.subTree = nextTree;
        patch(
          prevTree,
          nextTree,
          // parent may have changed if it's in a teleport
          hostParentNode(prevTree.el),
          // anchor may have changed if it's in a fragment
          getNextHostNode(prevTree),
          instance,
          parentSuspense,
          namespace
        );
        next.el = nextTree.el;
        if (originNext === null) {
          updateHOCHostEl(instance, nextTree.el);
        }
        if (u2) {
          queuePostRenderEffect(u2, parentSuspense);
        }
        if (vnodeHook = next.props && next.props.onVnodeUpdated) {
          queuePostRenderEffect(
            () => invokeVNodeHook(vnodeHook, parent, next, vnode),
            parentSuspense
          );
        }
      }
    };
    instance.scope.on();
    const effect2 = instance.effect = new ReactiveEffect(componentUpdateFn);
    instance.scope.off();
    const update = instance.update = effect2.run.bind(effect2);
    const job = instance.job = effect2.runIfDirty.bind(effect2);
    job.i = instance;
    job.id = instance.uid;
    effect2.scheduler = () => queueJob(job);
    toggleRecurse(instance, true);
    update();
  };
  const updateComponentPreRender = (instance, nextVNode, optimized) => {
    nextVNode.component = instance;
    const prevProps = instance.vnode.props;
    instance.vnode = nextVNode;
    instance.next = null;
    updateProps(instance, nextVNode.props, prevProps, optimized);
    updateSlots(instance, nextVNode.children, optimized);
    pauseTracking();
    flushPreFlushCbs(instance);
    resetTracking();
  };
  const patchChildren = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized = false) => {
    const c1 = n1 && n1.children;
    const prevShapeFlag = n1 ? n1.shapeFlag : 0;
    const c2 = n2.children;
    const { patchFlag, shapeFlag } = n2;
    if (patchFlag > 0) {
      if (patchFlag & 128) {
        patchKeyedChildren(
          c1,
          c2,
          container,
          anchor,
          parentComponent,
          parentSuspense,
          namespace,
          slotScopeIds,
          optimized
        );
        return;
      } else if (patchFlag & 256) {
        patchUnkeyedChildren(
          c1,
          c2,
          container,
          anchor,
          parentComponent,
          parentSuspense,
          namespace,
          slotScopeIds,
          optimized
        );
        return;
      }
    }
    if (shapeFlag & 8) {
      if (prevShapeFlag & 16) {
        unmountChildren(c1, parentComponent, parentSuspense);
      }
      if (c2 !== c1) {
        hostSetElementText(container, c2);
      }
    } else {
      if (prevShapeFlag & 16) {
        if (shapeFlag & 16) {
          patchKeyedChildren(
            c1,
            c2,
            container,
            anchor,
            parentComponent,
            parentSuspense,
            namespace,
            slotScopeIds,
            optimized
          );
        } else {
          unmountChildren(c1, parentComponent, parentSuspense, true);
        }
      } else {
        if (prevShapeFlag & 8) {
          hostSetElementText(container, "");
        }
        if (shapeFlag & 16) {
          mountChildren(
            c2,
            container,
            anchor,
            parentComponent,
            parentSuspense,
            namespace,
            slotScopeIds,
            optimized
          );
        }
      }
    }
  };
  const patchUnkeyedChildren = (c1, c2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {
    c1 = c1 || EMPTY_ARR;
    c2 = c2 || EMPTY_ARR;
    const oldLength = c1.length;
    const newLength = c2.length;
    const commonLength = Math.min(oldLength, newLength);
    let i;
    for (i = 0; i < commonLength; i++) {
      const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);
      patch(
        c1[i],
        nextChild,
        container,
        null,
        parentComponent,
        parentSuspense,
        namespace,
        slotScopeIds,
        optimized
      );
    }
    if (oldLength > newLength) {
      unmountChildren(
        c1,
        parentComponent,
        parentSuspense,
        true,
        false,
        commonLength
      );
    } else {
      mountChildren(
        c2,
        container,
        anchor,
        parentComponent,
        parentSuspense,
        namespace,
        slotScopeIds,
        optimized,
        commonLength
      );
    }
  };
  const patchKeyedChildren = (c1, c2, container, parentAnchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {
    let i = 0;
    const l2 = c2.length;
    let e1 = c1.length - 1;
    let e2 = l2 - 1;
    while (i <= e1 && i <= e2) {
      const n1 = c1[i];
      const n2 = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);
      if (isSameVNodeType(n1, n2)) {
        patch(
          n1,
          n2,
          container,
          null,
          parentComponent,
          parentSuspense,
          namespace,
          slotScopeIds,
          optimized
        );
      } else {
        break;
      }
      i++;
    }
    while (i <= e1 && i <= e2) {
      const n1 = c1[e1];
      const n2 = c2[e2] = optimized ? cloneIfMounted(c2[e2]) : normalizeVNode(c2[e2]);
      if (isSameVNodeType(n1, n2)) {
        patch(
          n1,
          n2,
          container,
          null,
          parentComponent,
          parentSuspense,
          namespace,
          slotScopeIds,
          optimized
        );
      } else {
        break;
      }
      e1--;
      e2--;
    }
    if (i > e1) {
      if (i <= e2) {
        const nextPos = e2 + 1;
        const anchor = nextPos < l2 ? c2[nextPos].el : parentAnchor;
        while (i <= e2) {
          patch(
            null,
            c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]),
            container,
            anchor,
            parentComponent,
            parentSuspense,
            namespace,
            slotScopeIds,
            optimized
          );
          i++;
        }
      }
    } else if (i > e2) {
      while (i <= e1) {
        unmount(c1[i], parentComponent, parentSuspense, true);
        i++;
      }
    } else {
      const s1 = i;
      const s2 = i;
      const keyToNewIndexMap = /* @__PURE__ */ new Map();
      for (i = s2; i <= e2; i++) {
        const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);
        if (nextChild.key != null) {
          keyToNewIndexMap.set(nextChild.key, i);
        }
      }
      let j2;
      let patched = 0;
      const toBePatched = e2 - s2 + 1;
      let moved = false;
      let maxNewIndexSoFar = 0;
      const newIndexToOldIndexMap = new Array(toBePatched);
      for (i = 0; i < toBePatched; i++) newIndexToOldIndexMap[i] = 0;
      for (i = s1; i <= e1; i++) {
        const prevChild = c1[i];
        if (patched >= toBePatched) {
          unmount(prevChild, parentComponent, parentSuspense, true);
          continue;
        }
        let newIndex;
        if (prevChild.key != null) {
          newIndex = keyToNewIndexMap.get(prevChild.key);
        } else {
          for (j2 = s2; j2 <= e2; j2++) {
            if (newIndexToOldIndexMap[j2 - s2] === 0 && isSameVNodeType(prevChild, c2[j2])) {
              newIndex = j2;
              break;
            }
          }
        }
        if (newIndex === void 0) {
          unmount(prevChild, parentComponent, parentSuspense, true);
        } else {
          newIndexToOldIndexMap[newIndex - s2] = i + 1;
          if (newIndex >= maxNewIndexSoFar) {
            maxNewIndexSoFar = newIndex;
          } else {
            moved = true;
          }
          patch(
            prevChild,
            c2[newIndex],
            container,
            null,
            parentComponent,
            parentSuspense,
            namespace,
            slotScopeIds,
            optimized
          );
          patched++;
        }
      }
      const increasingNewIndexSequence = moved ? getSequence(newIndexToOldIndexMap) : EMPTY_ARR;
      j2 = increasingNewIndexSequence.length - 1;
      for (i = toBePatched - 1; i >= 0; i--) {
        const nextIndex = s2 + i;
        const nextChild = c2[nextIndex];
        const anchorVNode = c2[nextIndex + 1];
        const anchor = nextIndex + 1 < l2 ? (
          // #13559, #14173 fallback to el placeholder for unresolved async component
          anchorVNode.el || resolveAsyncComponentPlaceholder(anchorVNode)
        ) : parentAnchor;
        if (newIndexToOldIndexMap[i] === 0) {
          patch(
            null,
            nextChild,
            container,
            anchor,
            parentComponent,
            parentSuspense,
            namespace,
            slotScopeIds,
            optimized
          );
        } else if (moved) {
          if (j2 < 0 || i !== increasingNewIndexSequence[j2]) {
            move(nextChild, container, anchor, 2);
          } else {
            j2--;
          }
        }
      }
    }
  };
  const move = (vnode, container, anchor, moveType, parentSuspense = null) => {
    const { el, type, transition, children, shapeFlag } = vnode;
    if (shapeFlag & 6) {
      move(vnode.component.subTree, container, anchor, moveType);
      return;
    }
    if (shapeFlag & 128) {
      vnode.suspense.move(container, anchor, moveType);
      return;
    }
    if (shapeFlag & 64) {
      type.move(vnode, container, anchor, internals);
      return;
    }
    if (type === Fragment$1) {
      hostInsert(el, container, anchor);
      for (let i = 0; i < children.length; i++) {
        move(children[i], container, anchor, moveType);
      }
      hostInsert(vnode.anchor, container, anchor);
      return;
    }
    if (type === Static) {
      moveStaticNode(vnode, container, anchor);
      return;
    }
    const needTransition2 = moveType !== 2 && shapeFlag & 1 && transition;
    if (needTransition2) {
      if (moveType === 0) {
        transition.beforeEnter(el);
        hostInsert(el, container, anchor);
        queuePostRenderEffect(() => transition.enter(el), parentSuspense);
      } else {
        const { leave, delayLeave, afterLeave } = transition;
        const remove22 = () => {
          if (vnode.ctx.isUnmounted) {
            hostRemove(el);
          } else {
            hostInsert(el, container, anchor);
          }
        };
        const performLeave = () => {
          if (el._isLeaving) {
            el[leaveCbKey](
              true
              /* cancelled */
            );
          }
          leave(el, () => {
            remove22();
            afterLeave && afterLeave();
          });
        };
        if (delayLeave) {
          delayLeave(el, remove22, performLeave);
        } else {
          performLeave();
        }
      }
    } else {
      hostInsert(el, container, anchor);
    }
  };
  const unmount = (vnode, parentComponent, parentSuspense, doRemove = false, optimized = false) => {
    const {
      type,
      props,
      ref: ref3,
      children,
      dynamicChildren,
      shapeFlag,
      patchFlag,
      dirs,
      cacheIndex
    } = vnode;
    if (patchFlag === -2) {
      optimized = false;
    }
    if (ref3 != null) {
      pauseTracking();
      setRef(ref3, null, parentSuspense, vnode, true);
      resetTracking();
    }
    if (cacheIndex != null) {
      parentComponent.renderCache[cacheIndex] = void 0;
    }
    if (shapeFlag & 256) {
      parentComponent.ctx.deactivate(vnode);
      return;
    }
    const shouldInvokeDirs = shapeFlag & 1 && dirs;
    const shouldInvokeVnodeHook = !isAsyncWrapper(vnode);
    let vnodeHook;
    if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeBeforeUnmount)) {
      invokeVNodeHook(vnodeHook, parentComponent, vnode);
    }
    if (shapeFlag & 6) {
      unmountComponent(vnode.component, parentSuspense, doRemove);
    } else {
      if (shapeFlag & 128) {
        vnode.suspense.unmount(parentSuspense, doRemove);
        return;
      }
      if (shouldInvokeDirs) {
        invokeDirectiveHook(vnode, null, parentComponent, "beforeUnmount");
      }
      if (shapeFlag & 64) {
        vnode.type.remove(
          vnode,
          parentComponent,
          parentSuspense,
          internals,
          doRemove
        );
      } else if (dynamicChildren && // #5154
      // when v-once is used inside a block, setBlockTracking(-1) marks the
      // parent block with hasOnce: true
      // so that it doesn't take the fast path during unmount - otherwise
      // components nested in v-once are never unmounted.
      !dynamicChildren.hasOnce && // #1153: fast path should not be taken for non-stable (v-for) fragments
      (type !== Fragment$1 || patchFlag > 0 && patchFlag & 64)) {
        unmountChildren(
          dynamicChildren,
          parentComponent,
          parentSuspense,
          false,
          true
        );
      } else if (type === Fragment$1 && patchFlag & (128 | 256) || !optimized && shapeFlag & 16) {
        unmountChildren(children, parentComponent, parentSuspense);
      }
      if (doRemove) {
        remove2(vnode);
      }
    }
    if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeUnmounted) || shouldInvokeDirs) {
      queuePostRenderEffect(() => {
        vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);
        shouldInvokeDirs && invokeDirectiveHook(vnode, null, parentComponent, "unmounted");
      }, parentSuspense);
    }
  };
  const remove2 = (vnode) => {
    const { type, el, anchor, transition } = vnode;
    if (type === Fragment$1) {
      {
        removeFragment(el, anchor);
      }
      return;
    }
    if (type === Static) {
      removeStaticNode(vnode);
      return;
    }
    const performRemove = () => {
      hostRemove(el);
      if (transition && !transition.persisted && transition.afterLeave) {
        transition.afterLeave();
      }
    };
    if (vnode.shapeFlag & 1 && transition && !transition.persisted) {
      const { leave, delayLeave } = transition;
      const performLeave = () => leave(el, performRemove);
      if (delayLeave) {
        delayLeave(vnode.el, performRemove, performLeave);
      } else {
        performLeave();
      }
    } else {
      performRemove();
    }
  };
  const removeFragment = (cur, end) => {
    let next;
    while (cur !== end) {
      next = hostNextSibling(cur);
      hostRemove(cur);
      cur = next;
    }
    hostRemove(end);
  };
  const unmountComponent = (instance, parentSuspense, doRemove) => {
    const { bum, scope, job, subTree, um, m: m2, a: a2 } = instance;
    invalidateMount(m2);
    invalidateMount(a2);
    if (bum) {
      invokeArrayFns(bum);
    }
    scope.stop();
    if (job) {
      job.flags |= 8;
      unmount(subTree, instance, parentSuspense, doRemove);
    }
    if (um) {
      queuePostRenderEffect(um, parentSuspense);
    }
    queuePostRenderEffect(() => {
      instance.isUnmounted = true;
    }, parentSuspense);
  };
  const unmountChildren = (children, parentComponent, parentSuspense, doRemove = false, optimized = false, start = 0) => {
    for (let i = start; i < children.length; i++) {
      unmount(children[i], parentComponent, parentSuspense, doRemove, optimized);
    }
  };
  const getNextHostNode = (vnode) => {
    if (vnode.shapeFlag & 6) {
      return getNextHostNode(vnode.component.subTree);
    }
    if (vnode.shapeFlag & 128) {
      return vnode.suspense.next();
    }
    const el = hostNextSibling(vnode.anchor || vnode.el);
    const teleportEnd = el && el[TeleportEndKey];
    return teleportEnd ? hostNextSibling(teleportEnd) : el;
  };
  let isFlushing = false;
  const render = (vnode, container, namespace) => {
    let instance;
    if (vnode == null) {
      if (container._vnode) {
        unmount(container._vnode, null, null, true);
        instance = container._vnode.component;
      }
    } else {
      patch(
        container._vnode || null,
        vnode,
        container,
        null,
        null,
        null,
        namespace
      );
    }
    container._vnode = vnode;
    if (!isFlushing) {
      isFlushing = true;
      flushPreFlushCbs(instance);
      flushPostFlushCbs();
      isFlushing = false;
    }
  };
  const internals = {
    p: patch,
    um: unmount,
    m: move,
    r: remove2,
    mt: mountComponent,
    mc: mountChildren,
    pc: patchChildren,
    pbc: patchBlockChildren,
    n: getNextHostNode,
    o: options
  };
  let hydrate;
  return {
    render,
    hydrate,
    createApp: createAppAPI(render)
  };
}
function resolveChildrenNamespace({ type, props }, currentNamespace) {
  return currentNamespace === "svg" && type === "foreignObject" || currentNamespace === "mathml" && type === "annotation-xml" && props && props.encoding && props.encoding.includes("html") ? void 0 : currentNamespace;
}
function toggleRecurse({ effect: effect2, job }, allowed) {
  if (allowed) {
    effect2.flags |= 32;
    job.flags |= 4;
  } else {
    effect2.flags &= -33;
    job.flags &= -5;
  }
}
function needTransition(parentSuspense, transition) {
  return (!parentSuspense || parentSuspense && !parentSuspense.pendingBranch) && transition && !transition.persisted;
}
function traverseStaticChildren(n1, n2, shallow = false) {
  const ch1 = n1.children;
  const ch2 = n2.children;
  if (isArray$1(ch1) && isArray$1(ch2)) {
    for (let i = 0; i < ch1.length; i++) {
      const c1 = ch1[i];
      let c2 = ch2[i];
      if (c2.shapeFlag & 1 && !c2.dynamicChildren) {
        if (c2.patchFlag <= 0 || c2.patchFlag === 32) {
          c2 = ch2[i] = cloneIfMounted(ch2[i]);
          c2.el = c1.el;
        }
        if (!shallow && c2.patchFlag !== -2)
          traverseStaticChildren(c1, c2);
      }
      if (c2.type === Text$2) {
        if (c2.patchFlag === -1) {
          c2 = ch2[i] = cloneIfMounted(c2);
        }
        c2.el = c1.el;
      }
      if (c2.type === Comment && !c2.el) {
        c2.el = c1.el;
      }
    }
  }
}
function getSequence(arr) {
  const p2 = arr.slice();
  const result = [0];
  let i, j2, u2, v2, c2;
  const len = arr.length;
  for (i = 0; i < len; i++) {
    const arrI = arr[i];
    if (arrI !== 0) {
      j2 = result[result.length - 1];
      if (arr[j2] < arrI) {
        p2[i] = j2;
        result.push(i);
        continue;
      }
      u2 = 0;
      v2 = result.length - 1;
      while (u2 < v2) {
        c2 = u2 + v2 >> 1;
        if (arr[result[c2]] < arrI) {
          u2 = c2 + 1;
        } else {
          v2 = c2;
        }
      }
      if (arrI < arr[result[u2]]) {
        if (u2 > 0) {
          p2[i] = result[u2 - 1];
        }
        result[u2] = i;
      }
    }
  }
  u2 = result.length;
  v2 = result[u2 - 1];
  while (u2-- > 0) {
    result[u2] = v2;
    v2 = p2[v2];
  }
  return result;
}
function locateNonHydratedAsyncRoot(instance) {
  const subComponent = instance.subTree.component;
  if (subComponent) {
    if (subComponent.asyncDep && !subComponent.asyncResolved) {
      return subComponent;
    } else {
      return locateNonHydratedAsyncRoot(subComponent);
    }
  }
}
function invalidateMount(hooks) {
  if (hooks) {
    for (let i = 0; i < hooks.length; i++)
      hooks[i].flags |= 8;
  }
}
function resolveAsyncComponentPlaceholder(anchorVnode) {
  if (anchorVnode.placeholder) {
    return anchorVnode.placeholder;
  }
  const instance = anchorVnode.component;
  if (instance) {
    return resolveAsyncComponentPlaceholder(instance.subTree);
  }
  return null;
}
const isSuspense = (type) => type.__isSuspense;
function queueEffectWithSuspense(fn, suspense) {
  if (suspense && suspense.pendingBranch) {
    if (isArray$1(fn)) {
      suspense.effects.push(...fn);
    } else {
      suspense.effects.push(fn);
    }
  } else {
    queuePostFlushCb(fn);
  }
}
const Fragment$1 = /* @__PURE__ */ Symbol.for("v-fgt");
const Text$2 = /* @__PURE__ */ Symbol.for("v-txt");
const Comment = /* @__PURE__ */ Symbol.for("v-cmt");
const Static = /* @__PURE__ */ Symbol.for("v-stc");
const blockStack = [];
let currentBlock = null;
function openBlock(disableTracking = false) {
  blockStack.push(currentBlock = disableTracking ? null : []);
}
function closeBlock() {
  blockStack.pop();
  currentBlock = blockStack[blockStack.length - 1] || null;
}
let isBlockTreeEnabled = 1;
function setBlockTracking(value, inVOnce = false) {
  isBlockTreeEnabled += value;
  if (value < 0 && currentBlock && inVOnce) {
    currentBlock.hasOnce = true;
  }
}
function setupBlock(vnode) {
  vnode.dynamicChildren = isBlockTreeEnabled > 0 ? currentBlock || EMPTY_ARR : null;
  closeBlock();
  if (isBlockTreeEnabled > 0 && currentBlock) {
    currentBlock.push(vnode);
  }
  return vnode;
}
function createElementBlock(type, props, children, patchFlag, dynamicProps, shapeFlag) {
  return setupBlock(
    createBaseVNode(
      type,
      props,
      children,
      patchFlag,
      dynamicProps,
      shapeFlag,
      true
    )
  );
}
function createBlock(type, props, children, patchFlag, dynamicProps) {
  return setupBlock(
    createVNode(
      type,
      props,
      children,
      patchFlag,
      dynamicProps,
      true
    )
  );
}
function isVNode(value) {
  return value ? value.__v_isVNode === true : false;
}
function isSameVNodeType(n1, n2) {
  return n1.type === n2.type && n1.key === n2.key;
}
const normalizeKey = ({ key }) => key != null ? key : null;
const normalizeRef = ({
  ref: ref3,
  ref_key,
  ref_for
}) => {
  if (typeof ref3 === "number") {
    ref3 = "" + ref3;
  }
  return ref3 != null ? isString(ref3) || /* @__PURE__ */ isRef(ref3) || isFunction$2(ref3) ? { i: currentRenderingInstance, r: ref3, k: ref_key, f: !!ref_for } : ref3 : null;
};
function createBaseVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, shapeFlag = type === Fragment$1 ? 0 : 1, isBlockNode2 = false, needFullChildrenNormalization = false) {
  const vnode = {
    __v_isVNode: true,
    __v_skip: true,
    type,
    props,
    key: props && normalizeKey(props),
    ref: props && normalizeRef(props),
    scopeId: currentScopeId,
    slotScopeIds: null,
    children,
    component: null,
    suspense: null,
    ssContent: null,
    ssFallback: null,
    dirs: null,
    transition: null,
    el: null,
    anchor: null,
    target: null,
    targetStart: null,
    targetAnchor: null,
    staticCount: 0,
    shapeFlag,
    patchFlag,
    dynamicProps,
    dynamicChildren: null,
    appContext: null,
    ctx: currentRenderingInstance
  };
  if (needFullChildrenNormalization) {
    normalizeChildren(vnode, children);
    if (shapeFlag & 128) {
      type.normalize(vnode);
    }
  } else if (children) {
    vnode.shapeFlag |= isString(children) ? 8 : 16;
  }
  if (isBlockTreeEnabled > 0 && // avoid a block node from tracking itself
  !isBlockNode2 && // has current parent block
  currentBlock && // presence of a patch flag indicates this node needs patching on updates.
  // component nodes also should always be patched, because even if the
  // component doesn't need to update, it needs to persist the instance on to
  // the next vnode so that it can be properly unmounted later.
  (vnode.patchFlag > 0 || shapeFlag & 6) && // the EVENTS flag is only for hydration and if it is the only flag, the
  // vnode should not be considered dynamic due to handler caching.
  vnode.patchFlag !== 32) {
    currentBlock.push(vnode);
  }
  return vnode;
}
const createVNode = _createVNode;
function _createVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, isBlockNode2 = false) {
  if (!type || type === NULL_DYNAMIC_COMPONENT) {
    type = Comment;
  }
  if (isVNode(type)) {
    const cloned = cloneVNode(
      type,
      props,
      true
      /* mergeRef: true */
    );
    if (children) {
      normalizeChildren(cloned, children);
    }
    if (isBlockTreeEnabled > 0 && !isBlockNode2 && currentBlock) {
      if (cloned.shapeFlag & 6) {
        currentBlock[currentBlock.indexOf(type)] = cloned;
      } else {
        currentBlock.push(cloned);
      }
    }
    cloned.patchFlag = -2;
    return cloned;
  }
  if (isClassComponent(type)) {
    type = type.__vccOpts;
  }
  if (props) {
    props = guardReactiveProps(props);
    let { class: klass, style: style2 } = props;
    if (klass && !isString(klass)) {
      props.class = normalizeClass(klass);
    }
    if (isObject$1(style2)) {
      if (/* @__PURE__ */ isProxy(style2) && !isArray$1(style2)) {
        style2 = extend({}, style2);
      }
      props.style = normalizeStyle(style2);
    }
  }
  const shapeFlag = isString(type) ? 1 : isSuspense(type) ? 128 : isTeleport(type) ? 64 : isObject$1(type) ? 4 : isFunction$2(type) ? 2 : 0;
  return createBaseVNode(
    type,
    props,
    children,
    patchFlag,
    dynamicProps,
    shapeFlag,
    isBlockNode2,
    true
  );
}
function guardReactiveProps(props) {
  if (!props) return null;
  return /* @__PURE__ */ isProxy(props) || isInternalObject(props) ? extend({}, props) : props;
}
function cloneVNode(vnode, extraProps, mergeRef = false, cloneTransition = false) {
  const { props, ref: ref3, patchFlag, children, transition } = vnode;
  const mergedProps = extraProps ? mergeProps(props || {}, extraProps) : props;
  const cloned = {
    __v_isVNode: true,
    __v_skip: true,
    type: vnode.type,
    props: mergedProps,
    key: mergedProps && normalizeKey(mergedProps),
    ref: extraProps && extraProps.ref ? (
      // #2078 in the case of <component :is="vnode" ref="extra"/>
      // if the vnode itself already has a ref, cloneVNode will need to merge
      // the refs so the single vnode can be set on multiple refs
      mergeRef && ref3 ? isArray$1(ref3) ? ref3.concat(normalizeRef(extraProps)) : [ref3, normalizeRef(extraProps)] : normalizeRef(extraProps)
    ) : ref3,
    scopeId: vnode.scopeId,
    slotScopeIds: vnode.slotScopeIds,
    children,
    target: vnode.target,
    targetStart: vnode.targetStart,
    targetAnchor: vnode.targetAnchor,
    staticCount: vnode.staticCount,
    shapeFlag: vnode.shapeFlag,
    // if the vnode is cloned with extra props, we can no longer assume its
    // existing patch flag to be reliable and need to add the FULL_PROPS flag.
    // note: preserve flag for fragments since they use the flag for children
    // fast paths only.
    patchFlag: extraProps && vnode.type !== Fragment$1 ? patchFlag === -1 ? 16 : patchFlag | 16 : patchFlag,
    dynamicProps: vnode.dynamicProps,
    dynamicChildren: vnode.dynamicChildren,
    appContext: vnode.appContext,
    dirs: vnode.dirs,
    transition,
    // These should technically only be non-null on mounted VNodes. However,
    // they *should* be copied for kept-alive vnodes. So we just always copy
    // them since them being non-null during a mount doesn't affect the logic as
    // they will simply be overwritten.
    component: vnode.component,
    suspense: vnode.suspense,
    ssContent: vnode.ssContent && cloneVNode(vnode.ssContent),
    ssFallback: vnode.ssFallback && cloneVNode(vnode.ssFallback),
    placeholder: vnode.placeholder,
    el: vnode.el,
    anchor: vnode.anchor,
    ctx: vnode.ctx,
    ce: vnode.ce
  };
  if (transition && cloneTransition) {
    setTransitionHooks(
      cloned,
      transition.clone(cloned)
    );
  }
  return cloned;
}
function createTextVNode(text = " ", flag = 0) {
  return createVNode(Text$2, null, text, flag);
}
function createCommentVNode(text = "", asBlock = false) {
  return asBlock ? (openBlock(), createBlock(Comment, null, text)) : createVNode(Comment, null, text);
}
function normalizeVNode(child) {
  if (child == null || typeof child === "boolean") {
    return createVNode(Comment);
  } else if (isArray$1(child)) {
    return createVNode(
      Fragment$1,
      null,
      // #3666, avoid reference pollution when reusing vnode
      child.slice()
    );
  } else if (isVNode(child)) {
    return cloneIfMounted(child);
  } else {
    return createVNode(Text$2, null, String(child));
  }
}
function cloneIfMounted(child) {
  return child.el === null && child.patchFlag !== -1 || child.memo ? child : cloneVNode(child);
}
function normalizeChildren(vnode, children) {
  let type = 0;
  const { shapeFlag } = vnode;
  if (children == null) {
    children = null;
  } else if (isArray$1(children)) {
    type = 16;
  } else if (typeof children === "object") {
    if (shapeFlag & (1 | 64)) {
      const slot = children.default;
      if (slot) {
        slot._c && (slot._d = false);
        normalizeChildren(vnode, slot());
        slot._c && (slot._d = true);
      }
      return;
    } else {
      type = 32;
      const slotFlag = children._;
      if (!slotFlag && !isInternalObject(children)) {
        children._ctx = currentRenderingInstance;
      } else if (slotFlag === 3 && currentRenderingInstance) {
        if (currentRenderingInstance.slots._ === 1) {
          children._ = 1;
        } else {
          children._ = 2;
          vnode.patchFlag |= 1024;
        }
      }
    }
  } else if (isFunction$2(children)) {
    children = { default: children, _ctx: currentRenderingInstance };
    type = 32;
  } else {
    children = String(children);
    if (shapeFlag & 64) {
      type = 16;
      children = [createTextVNode(children)];
    } else {
      type = 8;
    }
  }
  vnode.children = children;
  vnode.shapeFlag |= type;
}
function mergeProps(...args) {
  const ret = {};
  for (let i = 0; i < args.length; i++) {
    const toMerge = args[i];
    for (const key in toMerge) {
      if (key === "class") {
        if (ret.class !== toMerge.class) {
          ret.class = normalizeClass([ret.class, toMerge.class]);
        }
      } else if (key === "style") {
        ret.style = normalizeStyle([ret.style, toMerge.style]);
      } else if (isOn(key)) {
        const existing = ret[key];
        const incoming = toMerge[key];
        if (incoming && existing !== incoming && !(isArray$1(existing) && existing.includes(incoming))) {
          ret[key] = existing ? [].concat(existing, incoming) : incoming;
        }
      } else if (key !== "") {
        ret[key] = toMerge[key];
      }
    }
  }
  return ret;
}
function invokeVNodeHook(hook, instance, vnode, prevVNode = null) {
  callWithAsyncErrorHandling(hook, instance, 7, [
    vnode,
    prevVNode
  ]);
}
const emptyAppContext = createAppContext();
let uid = 0;
function createComponentInstance(vnode, parent, suspense) {
  const type = vnode.type;
  const appContext = (parent ? parent.appContext : vnode.appContext) || emptyAppContext;
  const instance = {
    uid: uid++,
    vnode,
    type,
    parent,
    appContext,
    root: null,
    // to be immediately set
    next: null,
    subTree: null,
    // will be set synchronously right after creation
    effect: null,
    update: null,
    // will be set synchronously right after creation
    job: null,
    scope: new EffectScope(
      true
      /* detached */
    ),
    render: null,
    proxy: null,
    exposed: null,
    exposeProxy: null,
    withProxy: null,
    provides: parent ? parent.provides : Object.create(appContext.provides),
    ids: parent ? parent.ids : ["", 0, 0],
    accessCache: null,
    renderCache: [],
    // local resolved assets
    components: null,
    directives: null,
    // resolved props and emits options
    propsOptions: normalizePropsOptions(type, appContext),
    emitsOptions: normalizeEmitsOptions(type, appContext),
    // emit
    emit: null,
    // to be set immediately
    emitted: null,
    // props default value
    propsDefaults: EMPTY_OBJ,
    // inheritAttrs
    inheritAttrs: type.inheritAttrs,
    // state
    ctx: EMPTY_OBJ,
    data: EMPTY_OBJ,
    props: EMPTY_OBJ,
    attrs: EMPTY_OBJ,
    slots: EMPTY_OBJ,
    refs: EMPTY_OBJ,
    setupState: EMPTY_OBJ,
    setupContext: null,
    // suspense related
    suspense,
    suspenseId: suspense ? suspense.pendingId : 0,
    asyncDep: null,
    asyncResolved: false,
    // lifecycle hooks
    // not using enums here because it results in computed properties
    isMounted: false,
    isUnmounted: false,
    isDeactivated: false,
    bc: null,
    c: null,
    bm: null,
    m: null,
    bu: null,
    u: null,
    um: null,
    bum: null,
    da: null,
    a: null,
    rtg: null,
    rtc: null,
    ec: null,
    sp: null
  };
  {
    instance.ctx = { _: instance };
  }
  instance.root = parent ? parent.root : instance;
  instance.emit = emit.bind(null, instance);
  if (vnode.ce) {
    vnode.ce(instance);
  }
  return instance;
}
let currentInstance = null;
const getCurrentInstance = () => currentInstance || currentRenderingInstance;
let internalSetCurrentInstance;
let setInSSRSetupState;
{
  const g2 = getGlobalThis();
  const registerGlobalSetter = (key, setter) => {
    let setters;
    if (!(setters = g2[key])) setters = g2[key] = [];
    setters.push(setter);
    return (v2) => {
      if (setters.length > 1) setters.forEach((set) => set(v2));
      else setters[0](v2);
    };
  };
  internalSetCurrentInstance = registerGlobalSetter(
    `__VUE_INSTANCE_SETTERS__`,
    (v2) => currentInstance = v2
  );
  setInSSRSetupState = registerGlobalSetter(
    `__VUE_SSR_SETTERS__`,
    (v2) => isInSSRComponentSetup = v2
  );
}
const setCurrentInstance = (instance) => {
  const prev = currentInstance;
  internalSetCurrentInstance(instance);
  instance.scope.on();
  return () => {
    instance.scope.off();
    internalSetCurrentInstance(prev);
  };
};
const unsetCurrentInstance = () => {
  currentInstance && currentInstance.scope.off();
  internalSetCurrentInstance(null);
};
function isStatefulComponent(instance) {
  return instance.vnode.shapeFlag & 4;
}
let isInSSRComponentSetup = false;
function setupComponent(instance, isSSR = false, optimized = false) {
  isSSR && setInSSRSetupState(isSSR);
  const { props, children } = instance.vnode;
  const isStateful = isStatefulComponent(instance);
  initProps(instance, props, isStateful, isSSR);
  initSlots(instance, children, optimized || isSSR);
  const setupResult = isStateful ? setupStatefulComponent(instance, isSSR) : void 0;
  isSSR && setInSSRSetupState(false);
  return setupResult;
}
function setupStatefulComponent(instance, isSSR) {
  const Component = instance.type;
  instance.accessCache = /* @__PURE__ */ Object.create(null);
  instance.proxy = new Proxy(instance.ctx, PublicInstanceProxyHandlers);
  const { setup } = Component;
  if (setup) {
    pauseTracking();
    const setupContext = instance.setupContext = setup.length > 1 ? createSetupContext(instance) : null;
    const reset2 = setCurrentInstance(instance);
    const setupResult = callWithErrorHandling(
      setup,
      instance,
      0,
      [
        instance.props,
        setupContext
      ]
    );
    const isAsyncSetup = isPromise(setupResult);
    resetTracking();
    reset2();
    if ((isAsyncSetup || instance.sp) && !isAsyncWrapper(instance)) {
      markAsyncBoundary(instance);
    }
    if (isAsyncSetup) {
      setupResult.then(unsetCurrentInstance, unsetCurrentInstance);
      if (isSSR) {
        return setupResult.then((resolvedResult) => {
          handleSetupResult(instance, resolvedResult);
        }).catch((e) => {
          handleError(e, instance, 0);
        });
      } else {
        instance.asyncDep = setupResult;
      }
    } else {
      handleSetupResult(instance, setupResult);
    }
  } else {
    finishComponentSetup(instance);
  }
}
function handleSetupResult(instance, setupResult, isSSR) {
  if (isFunction$2(setupResult)) {
    if (instance.type.__ssrInlineRender) {
      instance.ssrRender = setupResult;
    } else {
      instance.render = setupResult;
    }
  } else if (isObject$1(setupResult)) {
    instance.setupState = proxyRefs(setupResult);
  } else ;
  finishComponentSetup(instance);
}
function finishComponentSetup(instance, isSSR, skipOptions) {
  const Component = instance.type;
  if (!instance.render) {
    instance.render = Component.render || NOOP;
  }
  {
    const reset2 = setCurrentInstance(instance);
    pauseTracking();
    try {
      applyOptions(instance);
    } finally {
      resetTracking();
      reset2();
    }
  }
}
const attrsProxyHandlers = {
  get(target, key) {
    track(target, "get", "");
    return target[key];
  }
};
function createSetupContext(instance) {
  const expose = (exposed) => {
    instance.exposed = exposed || {};
  };
  {
    return {
      attrs: new Proxy(instance.attrs, attrsProxyHandlers),
      slots: instance.slots,
      emit: instance.emit,
      expose
    };
  }
}
function getComponentPublicInstance(instance) {
  if (instance.exposed) {
    return instance.exposeProxy || (instance.exposeProxy = new Proxy(proxyRefs(markRaw(instance.exposed)), {
      get(target, key) {
        if (key in target) {
          return target[key];
        } else if (key in publicPropertiesMap) {
          return publicPropertiesMap[key](instance);
        }
      },
      has(target, key) {
        return key in target || key in publicPropertiesMap;
      }
    }));
  } else {
    return instance.proxy;
  }
}
const classifyRE = /(?:^|[-_])\w/g;
const classify = (str) => str.replace(classifyRE, (c2) => c2.toUpperCase()).replace(/[-_]/g, "");
function getComponentName(Component, includeInferred = true) {
  return isFunction$2(Component) ? Component.displayName || Component.name : Component.name || includeInferred && Component.__name;
}
function formatComponentName(instance, Component, isRoot = false) {
  let name = getComponentName(Component);
  if (!name && Component.__file) {
    const match = Component.__file.match(/([^/\\]+)\.\w+$/);
    if (match) {
      name = match[1];
    }
  }
  if (!name && instance) {
    const inferFromRegistry = (registry) => {
      for (const key in registry) {
        if (registry[key] === Component) {
          return key;
        }
      }
    };
    name = inferFromRegistry(instance.components) || instance.parent && inferFromRegistry(
      instance.parent.type.components
    ) || inferFromRegistry(instance.appContext.components);
  }
  return name ? classify(name) : isRoot ? `App` : `Anonymous`;
}
function isClassComponent(value) {
  return isFunction$2(value) && "__vccOpts" in value;
}
const computed = (getterOrOptions, debugOptions) => {
  const c2 = /* @__PURE__ */ computed$1(getterOrOptions, debugOptions, isInSSRComponentSetup);
  return c2;
};
function h$2(type, propsOrChildren, children) {
  try {
    setBlockTracking(-1);
    const l2 = arguments.length;
    if (l2 === 2) {
      if (isObject$1(propsOrChildren) && !isArray$1(propsOrChildren)) {
        if (isVNode(propsOrChildren)) {
          return createVNode(type, null, [propsOrChildren]);
        }
        return createVNode(type, propsOrChildren);
      } else {
        return createVNode(type, null, propsOrChildren);
      }
    } else {
      if (l2 > 3) {
        children = Array.prototype.slice.call(arguments, 2);
      } else if (l2 === 3 && isVNode(children)) {
        children = [children];
      }
      return createVNode(type, propsOrChildren, children);
    }
  } finally {
    setBlockTracking(1);
  }
}
const version$1 = "3.5.28";
let policy = void 0;
const tt$2 = typeof window !== "undefined" && window.trustedTypes;
if (tt$2) {
  try {
    policy = /* @__PURE__ */ tt$2.createPolicy("vue", {
      createHTML: (val) => val
    });
  } catch (e) {
  }
}
const unsafeToTrustedHTML = policy ? (val) => policy.createHTML(val) : (val) => val;
const svgNS = "http://www.w3.org/2000/svg";
const mathmlNS = "http://www.w3.org/1998/Math/MathML";
const doc$2 = typeof document !== "undefined" ? document : null;
const templateContainer = doc$2 && /* @__PURE__ */ doc$2.createElement("template");
const nodeOps = {
  insert: (child, parent, anchor) => {
    parent.insertBefore(child, anchor || null);
  },
  remove: (child) => {
    const parent = child.parentNode;
    if (parent) {
      parent.removeChild(child);
    }
  },
  createElement: (tag, namespace, is, props) => {
    const el = namespace === "svg" ? doc$2.createElementNS(svgNS, tag) : namespace === "mathml" ? doc$2.createElementNS(mathmlNS, tag) : is ? doc$2.createElement(tag, { is }) : doc$2.createElement(tag);
    if (tag === "select" && props && props.multiple != null) {
      el.setAttribute("multiple", props.multiple);
    }
    return el;
  },
  createText: (text) => doc$2.createTextNode(text),
  createComment: (text) => doc$2.createComment(text),
  setText: (node, text) => {
    node.nodeValue = text;
  },
  setElementText: (el, text) => {
    el.textContent = text;
  },
  parentNode: (node) => node.parentNode,
  nextSibling: (node) => node.nextSibling,
  querySelector: (selector) => doc$2.querySelector(selector),
  setScopeId(el, id) {
    el.setAttribute(id, "");
  },
  // __UNSAFE__
  // Reason: innerHTML.
  // Static content here can only come from compiled templates.
  // As long as the user only uses trusted templates, this is safe.
  insertStaticContent(content, parent, anchor, namespace, start, end) {
    const before = anchor ? anchor.previousSibling : parent.lastChild;
    if (start && (start === end || start.nextSibling)) {
      while (true) {
        parent.insertBefore(start.cloneNode(true), anchor);
        if (start === end || !(start = start.nextSibling)) break;
      }
    } else {
      templateContainer.innerHTML = unsafeToTrustedHTML(
        namespace === "svg" ? `<svg>${content}</svg>` : namespace === "mathml" ? `<math>${content}</math>` : content
      );
      const template = templateContainer.content;
      if (namespace === "svg" || namespace === "mathml") {
        const wrapper = template.firstChild;
        while (wrapper.firstChild) {
          template.appendChild(wrapper.firstChild);
        }
        template.removeChild(wrapper);
      }
      parent.insertBefore(template, anchor);
    }
    return [
      // first
      before ? before.nextSibling : parent.firstChild,
      // last
      anchor ? anchor.previousSibling : parent.lastChild
    ];
  }
};
const TRANSITION = "transition";
const ANIMATION = "animation";
const vtcKey = /* @__PURE__ */ Symbol("_vtc");
const DOMTransitionPropsValidators = {
  name: String,
  type: String,
  css: {
    type: Boolean,
    default: true
  },
  duration: [String, Number, Object],
  enterFromClass: String,
  enterActiveClass: String,
  enterToClass: String,
  appearFromClass: String,
  appearActiveClass: String,
  appearToClass: String,
  leaveFromClass: String,
  leaveActiveClass: String,
  leaveToClass: String
};
const TransitionPropsValidators = /* @__PURE__ */ extend(
  {},
  BaseTransitionPropsValidators,
  DOMTransitionPropsValidators
);
const decorate$1 = (t2) => {
  t2.displayName = "Transition";
  t2.props = TransitionPropsValidators;
  return t2;
};
const Transition = /* @__PURE__ */ decorate$1(
  (props, { slots }) => h$2(BaseTransition, resolveTransitionProps(props), slots)
);
const callHook = (hook, args = []) => {
  if (isArray$1(hook)) {
    hook.forEach((h2) => h2(...args));
  } else if (hook) {
    hook(...args);
  }
};
const hasExplicitCallback = (hook) => {
  return hook ? isArray$1(hook) ? hook.some((h2) => h2.length > 1) : hook.length > 1 : false;
};
function resolveTransitionProps(rawProps) {
  const baseProps = {};
  for (const key in rawProps) {
    if (!(key in DOMTransitionPropsValidators)) {
      baseProps[key] = rawProps[key];
    }
  }
  if (rawProps.css === false) {
    return baseProps;
  }
  const {
    name = "v",
    type,
    duration,
    enterFromClass = `${name}-enter-from`,
    enterActiveClass = `${name}-enter-active`,
    enterToClass = `${name}-enter-to`,
    appearFromClass = enterFromClass,
    appearActiveClass = enterActiveClass,
    appearToClass = enterToClass,
    leaveFromClass = `${name}-leave-from`,
    leaveActiveClass = `${name}-leave-active`,
    leaveToClass = `${name}-leave-to`
  } = rawProps;
  const durations = normalizeDuration(duration);
  const enterDuration = durations && durations[0];
  const leaveDuration = durations && durations[1];
  const {
    onBeforeEnter,
    onEnter,
    onEnterCancelled,
    onLeave,
    onLeaveCancelled,
    onBeforeAppear = onBeforeEnter,
    onAppear = onEnter,
    onAppearCancelled = onEnterCancelled
  } = baseProps;
  const finishEnter = (el, isAppear, done, isCancelled) => {
    el._enterCancelled = isCancelled;
    removeTransitionClass(el, isAppear ? appearToClass : enterToClass);
    removeTransitionClass(el, isAppear ? appearActiveClass : enterActiveClass);
    done && done();
  };
  const finishLeave = (el, done) => {
    el._isLeaving = false;
    removeTransitionClass(el, leaveFromClass);
    removeTransitionClass(el, leaveToClass);
    removeTransitionClass(el, leaveActiveClass);
    done && done();
  };
  const makeEnterHook = (isAppear) => {
    return (el, done) => {
      const hook = isAppear ? onAppear : onEnter;
      const resolve2 = () => finishEnter(el, isAppear, done);
      callHook(hook, [el, resolve2]);
      nextFrame(() => {
        removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass);
        addTransitionClass(el, isAppear ? appearToClass : enterToClass);
        if (!hasExplicitCallback(hook)) {
          whenTransitionEnds(el, type, enterDuration, resolve2);
        }
      });
    };
  };
  return extend(baseProps, {
    onBeforeEnter(el) {
      callHook(onBeforeEnter, [el]);
      addTransitionClass(el, enterFromClass);
      addTransitionClass(el, enterActiveClass);
    },
    onBeforeAppear(el) {
      callHook(onBeforeAppear, [el]);
      addTransitionClass(el, appearFromClass);
      addTransitionClass(el, appearActiveClass);
    },
    onEnter: makeEnterHook(false),
    onAppear: makeEnterHook(true),
    onLeave(el, done) {
      el._isLeaving = true;
      const resolve2 = () => finishLeave(el, done);
      addTransitionClass(el, leaveFromClass);
      if (!el._enterCancelled) {
        forceReflow(el);
        addTransitionClass(el, leaveActiveClass);
      } else {
        addTransitionClass(el, leaveActiveClass);
        forceReflow(el);
      }
      nextFrame(() => {
        if (!el._isLeaving) {
          return;
        }
        removeTransitionClass(el, leaveFromClass);
        addTransitionClass(el, leaveToClass);
        if (!hasExplicitCallback(onLeave)) {
          whenTransitionEnds(el, type, leaveDuration, resolve2);
        }
      });
      callHook(onLeave, [el, resolve2]);
    },
    onEnterCancelled(el) {
      finishEnter(el, false, void 0, true);
      callHook(onEnterCancelled, [el]);
    },
    onAppearCancelled(el) {
      finishEnter(el, true, void 0, true);
      callHook(onAppearCancelled, [el]);
    },
    onLeaveCancelled(el) {
      finishLeave(el);
      callHook(onLeaveCancelled, [el]);
    }
  });
}
function normalizeDuration(duration) {
  if (duration == null) {
    return null;
  } else if (isObject$1(duration)) {
    return [NumberOf(duration.enter), NumberOf(duration.leave)];
  } else {
    const n2 = NumberOf(duration);
    return [n2, n2];
  }
}
function NumberOf(val) {
  const res = toNumber(val);
  return res;
}
function addTransitionClass(el, cls) {
  cls.split(/\s+/).forEach((c2) => c2 && el.classList.add(c2));
  (el[vtcKey] || (el[vtcKey] = /* @__PURE__ */ new Set())).add(cls);
}
function removeTransitionClass(el, cls) {
  cls.split(/\s+/).forEach((c2) => c2 && el.classList.remove(c2));
  const _vtc = el[vtcKey];
  if (_vtc) {
    _vtc.delete(cls);
    if (!_vtc.size) {
      el[vtcKey] = void 0;
    }
  }
}
function nextFrame(cb2) {
  requestAnimationFrame(() => {
    requestAnimationFrame(cb2);
  });
}
let endId = 0;
function whenTransitionEnds(el, expectedType, explicitTimeout, resolve2) {
  const id = el._endId = ++endId;
  const resolveIfNotStale = () => {
    if (id === el._endId) {
      resolve2();
    }
  };
  if (explicitTimeout != null) {
    return setTimeout(resolveIfNotStale, explicitTimeout);
  }
  const { type, timeout, propCount } = getTransitionInfo(el, expectedType);
  if (!type) {
    return resolve2();
  }
  const endEvent = type + "end";
  let ended = 0;
  const end = () => {
    el.removeEventListener(endEvent, onEnd);
    resolveIfNotStale();
  };
  const onEnd = (e) => {
    if (e.target === el && ++ended >= propCount) {
      end();
    }
  };
  setTimeout(() => {
    if (ended < propCount) {
      end();
    }
  }, timeout + 1);
  el.addEventListener(endEvent, onEnd);
}
function getTransitionInfo(el, expectedType) {
  const styles = window.getComputedStyle(el);
  const getStyleProperties = (key) => (styles[key] || "").split(", ");
  const transitionDelays = getStyleProperties(`${TRANSITION}Delay`);
  const transitionDurations = getStyleProperties(`${TRANSITION}Duration`);
  const transitionTimeout = getTimeout(transitionDelays, transitionDurations);
  const animationDelays = getStyleProperties(`${ANIMATION}Delay`);
  const animationDurations = getStyleProperties(`${ANIMATION}Duration`);
  const animationTimeout = getTimeout(animationDelays, animationDurations);
  let type = null;
  let timeout = 0;
  let propCount = 0;
  if (expectedType === TRANSITION) {
    if (transitionTimeout > 0) {
      type = TRANSITION;
      timeout = transitionTimeout;
      propCount = transitionDurations.length;
    }
  } else if (expectedType === ANIMATION) {
    if (animationTimeout > 0) {
      type = ANIMATION;
      timeout = animationTimeout;
      propCount = animationDurations.length;
    }
  } else {
    timeout = Math.max(transitionTimeout, animationTimeout);
    type = timeout > 0 ? transitionTimeout > animationTimeout ? TRANSITION : ANIMATION : null;
    propCount = type ? type === TRANSITION ? transitionDurations.length : animationDurations.length : 0;
  }
  const hasTransform = type === TRANSITION && /\b(?:transform|all)(?:,|$)/.test(
    getStyleProperties(`${TRANSITION}Property`).toString()
  );
  return {
    type,
    timeout,
    propCount,
    hasTransform
  };
}
function getTimeout(delays, durations) {
  while (delays.length < durations.length) {
    delays = delays.concat(delays);
  }
  return Math.max(...durations.map((d2, i) => toMs(d2) + toMs(delays[i])));
}
function toMs(s2) {
  if (s2 === "auto") return 0;
  return Number(s2.slice(0, -1).replace(",", ".")) * 1e3;
}
function forceReflow(el) {
  const targetDocument = el ? el.ownerDocument : document;
  return targetDocument.body.offsetHeight;
}
function patchClass(el, value, isSVG) {
  const transitionClasses = el[vtcKey];
  if (transitionClasses) {
    value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(" ");
  }
  if (value == null) {
    el.removeAttribute("class");
  } else if (isSVG) {
    el.setAttribute("class", value);
  } else {
    el.className = value;
  }
}
const vShowOriginalDisplay = /* @__PURE__ */ Symbol("_vod");
const vShowHidden = /* @__PURE__ */ Symbol("_vsh");
const CSS_VAR_TEXT = /* @__PURE__ */ Symbol("");
const displayRE = /(?:^|;)\s*display\s*:/;
function patchStyle(el, prev, next) {
  const style2 = el.style;
  const isCssString = isString(next);
  let hasControlledDisplay = false;
  if (next && !isCssString) {
    if (prev) {
      if (!isString(prev)) {
        for (const key in prev) {
          if (next[key] == null) {
            setStyle(style2, key, "");
          }
        }
      } else {
        for (const prevStyle of prev.split(";")) {
          const key = prevStyle.slice(0, prevStyle.indexOf(":")).trim();
          if (next[key] == null) {
            setStyle(style2, key, "");
          }
        }
      }
    }
    for (const key in next) {
      if (key === "display") {
        hasControlledDisplay = true;
      }
      setStyle(style2, key, next[key]);
    }
  } else {
    if (isCssString) {
      if (prev !== next) {
        const cssVarText = style2[CSS_VAR_TEXT];
        if (cssVarText) {
          next += ";" + cssVarText;
        }
        style2.cssText = next;
        hasControlledDisplay = displayRE.test(next);
      }
    } else if (prev) {
      el.removeAttribute("style");
    }
  }
  if (vShowOriginalDisplay in el) {
    el[vShowOriginalDisplay] = hasControlledDisplay ? style2.display : "";
    if (el[vShowHidden]) {
      style2.display = "none";
    }
  }
}
const importantRE = /\s*!important$/;
function setStyle(style2, name, val) {
  if (isArray$1(val)) {
    val.forEach((v2) => setStyle(style2, name, v2));
  } else {
    if (val == null) val = "";
    if (name.startsWith("--")) {
      style2.setProperty(name, val);
    } else {
      const prefixed = autoPrefix(style2, name);
      if (importantRE.test(val)) {
        style2.setProperty(
          hyphenate(prefixed),
          val.replace(importantRE, ""),
          "important"
        );
      } else {
        style2[prefixed] = val;
      }
    }
  }
}
const prefixes = ["Webkit", "Moz", "ms"];
const prefixCache = {};
function autoPrefix(style2, rawName) {
  const cached = prefixCache[rawName];
  if (cached) {
    return cached;
  }
  let name = camelize(rawName);
  if (name !== "filter" && name in style2) {
    return prefixCache[rawName] = name;
  }
  name = capitalize(name);
  for (let i = 0; i < prefixes.length; i++) {
    const prefixed = prefixes[i] + name;
    if (prefixed in style2) {
      return prefixCache[rawName] = prefixed;
    }
  }
  return rawName;
}
const xlinkNS = "http://www.w3.org/1999/xlink";
function patchAttr(el, key, value, isSVG, instance, isBoolean = isSpecialBooleanAttr(key)) {
  if (isSVG && key.startsWith("xlink:")) {
    if (value == null) {
      el.removeAttributeNS(xlinkNS, key.slice(6, key.length));
    } else {
      el.setAttributeNS(xlinkNS, key, value);
    }
  } else {
    if (value == null || isBoolean && !includeBooleanAttr(value)) {
      el.removeAttribute(key);
    } else {
      el.setAttribute(
        key,
        isBoolean ? "" : isSymbol(value) ? String(value) : value
      );
    }
  }
}
function patchDOMProp(el, key, value, parentComponent, attrName) {
  if (key === "innerHTML" || key === "textContent") {
    if (value != null) {
      el[key] = key === "innerHTML" ? unsafeToTrustedHTML(value) : value;
    }
    return;
  }
  const tag = el.tagName;
  if (key === "value" && tag !== "PROGRESS" && // custom elements may use _value internally
  !tag.includes("-")) {
    const oldValue = tag === "OPTION" ? el.getAttribute("value") || "" : el.value;
    const newValue = value == null ? (
      // #11647: value should be set as empty string for null and undefined,
      // but <input type="checkbox"> should be set as 'on'.
      el.type === "checkbox" ? "on" : ""
    ) : String(value);
    if (oldValue !== newValue || !("_value" in el)) {
      el.value = newValue;
    }
    if (value == null) {
      el.removeAttribute(key);
    }
    el._value = value;
    return;
  }
  let needRemove = false;
  if (value === "" || value == null) {
    const type = typeof el[key];
    if (type === "boolean") {
      value = includeBooleanAttr(value);
    } else if (value == null && type === "string") {
      value = "";
      needRemove = true;
    } else if (type === "number") {
      value = 0;
      needRemove = true;
    }
  }
  try {
    el[key] = value;
  } catch (e) {
  }
  needRemove && el.removeAttribute(attrName || key);
}
function addEventListener(el, event, handler, options) {
  el.addEventListener(event, handler, options);
}
function removeEventListener(el, event, handler, options) {
  el.removeEventListener(event, handler, options);
}
const veiKey = /* @__PURE__ */ Symbol("_vei");
function patchEvent(el, rawName, prevValue, nextValue, instance = null) {
  const invokers = el[veiKey] || (el[veiKey] = {});
  const existingInvoker = invokers[rawName];
  if (nextValue && existingInvoker) {
    existingInvoker.value = nextValue;
  } else {
    const [name, options] = parseName(rawName);
    if (nextValue) {
      const invoker = invokers[rawName] = createInvoker(
        nextValue,
        instance
      );
      addEventListener(el, name, invoker, options);
    } else if (existingInvoker) {
      removeEventListener(el, name, existingInvoker, options);
      invokers[rawName] = void 0;
    }
  }
}
const optionsModifierRE = /(?:Once|Passive|Capture)$/;
function parseName(name) {
  let options;
  if (optionsModifierRE.test(name)) {
    options = {};
    let m2;
    while (m2 = name.match(optionsModifierRE)) {
      name = name.slice(0, name.length - m2[0].length);
      options[m2[0].toLowerCase()] = true;
    }
  }
  const event = name[2] === ":" ? name.slice(3) : hyphenate(name.slice(2));
  return [event, options];
}
let cachedNow = 0;
const p$1 = /* @__PURE__ */ Promise.resolve();
const getNow = () => cachedNow || (p$1.then(() => cachedNow = 0), cachedNow = Date.now());
function createInvoker(initialValue, instance) {
  const invoker = (e) => {
    if (!e._vts) {
      e._vts = Date.now();
    } else if (e._vts <= invoker.attached) {
      return;
    }
    callWithAsyncErrorHandling(
      patchStopImmediatePropagation(e, invoker.value),
      instance,
      5,
      [e]
    );
  };
  invoker.value = initialValue;
  invoker.attached = getNow();
  return invoker;
}
function patchStopImmediatePropagation(e, value) {
  if (isArray$1(value)) {
    const originalStop = e.stopImmediatePropagation;
    e.stopImmediatePropagation = () => {
      originalStop.call(e);
      e._stopped = true;
    };
    return value.map(
      (fn) => (e2) => !e2._stopped && fn && fn(e2)
    );
  } else {
    return value;
  }
}
const isNativeOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // lowercase letter
key.charCodeAt(2) > 96 && key.charCodeAt(2) < 123;
const patchProp = (el, key, prevValue, nextValue, namespace, parentComponent) => {
  const isSVG = namespace === "svg";
  if (key === "class") {
    patchClass(el, nextValue, isSVG);
  } else if (key === "style") {
    patchStyle(el, prevValue, nextValue);
  } else if (isOn(key)) {
    if (!isModelListener(key)) {
      patchEvent(el, key, prevValue, nextValue, parentComponent);
    }
  } else if (key[0] === "." ? (key = key.slice(1), true) : key[0] === "^" ? (key = key.slice(1), false) : shouldSetAsProp(el, key, nextValue, isSVG)) {
    patchDOMProp(el, key, nextValue);
    if (!el.tagName.includes("-") && (key === "value" || key === "checked" || key === "selected")) {
      patchAttr(el, key, nextValue, isSVG, parentComponent, key !== "value");
    }
  } else if (
    // #11081 force set props for possible async custom element
    el._isVueCE && (/[A-Z]/.test(key) || !isString(nextValue))
  ) {
    patchDOMProp(el, camelize(key), nextValue, parentComponent, key);
  } else {
    if (key === "true-value") {
      el._trueValue = nextValue;
    } else if (key === "false-value") {
      el._falseValue = nextValue;
    }
    patchAttr(el, key, nextValue, isSVG);
  }
};
function shouldSetAsProp(el, key, value, isSVG) {
  if (isSVG) {
    if (key === "innerHTML" || key === "textContent") {
      return true;
    }
    if (key in el && isNativeOn(key) && isFunction$2(value)) {
      return true;
    }
    return false;
  }
  if (key === "spellcheck" || key === "draggable" || key === "translate" || key === "autocorrect") {
    return false;
  }
  if (key === "sandbox" && el.tagName === "IFRAME") {
    return false;
  }
  if (key === "form") {
    return false;
  }
  if (key === "list" && el.tagName === "INPUT") {
    return false;
  }
  if (key === "type" && el.tagName === "TEXTAREA") {
    return false;
  }
  if (key === "width" || key === "height") {
    const tag = el.tagName;
    if (tag === "IMG" || tag === "VIDEO" || tag === "CANVAS" || tag === "SOURCE") {
      return false;
    }
  }
  if (isNativeOn(key) && isString(value)) {
    return false;
  }
  return key in el;
}
const getModelAssigner = (vnode) => {
  const fn = vnode.props["onUpdate:modelValue"] || false;
  return isArray$1(fn) ? (value) => invokeArrayFns(fn, value) : fn;
};
function onCompositionStart(e) {
  e.target.composing = true;
}
function onCompositionEnd(e) {
  const target = e.target;
  if (target.composing) {
    target.composing = false;
    target.dispatchEvent(new Event("input"));
  }
}
const assignKey = /* @__PURE__ */ Symbol("_assign");
function castValue(value, trim, number) {
  if (trim) value = value.trim();
  if (number) value = looseToNumber(value);
  return value;
}
const vModelText = {
  created(el, { modifiers: { lazy, trim, number } }, vnode) {
    el[assignKey] = getModelAssigner(vnode);
    const castToNumber = number || vnode.props && vnode.props.type === "number";
    addEventListener(el, lazy ? "change" : "input", (e) => {
      if (e.target.composing) return;
      el[assignKey](castValue(el.value, trim, castToNumber));
    });
    if (trim || castToNumber) {
      addEventListener(el, "change", () => {
        el.value = castValue(el.value, trim, castToNumber);
      });
    }
    if (!lazy) {
      addEventListener(el, "compositionstart", onCompositionStart);
      addEventListener(el, "compositionend", onCompositionEnd);
      addEventListener(el, "change", onCompositionEnd);
    }
  },
  // set value on mounted so it's after min/max for type="range"
  mounted(el, { value }) {
    el.value = value == null ? "" : value;
  },
  beforeUpdate(el, { value, oldValue, modifiers: { lazy, trim, number } }, vnode) {
    el[assignKey] = getModelAssigner(vnode);
    if (el.composing) return;
    const elValue = (number || el.type === "number") && !/^0\d/.test(el.value) ? looseToNumber(el.value) : el.value;
    const newValue = value == null ? "" : value;
    if (elValue === newValue) {
      return;
    }
    if (document.activeElement === el && el.type !== "range") {
      if (lazy && value === oldValue) {
        return;
      }
      if (trim && el.value.trim() === newValue) {
        return;
      }
    }
    el.value = newValue;
  }
};
const systemModifiers = ["ctrl", "shift", "alt", "meta"];
const modifierGuards = {
  stop: (e) => e.stopPropagation(),
  prevent: (e) => e.preventDefault(),
  self: (e) => e.target !== e.currentTarget,
  ctrl: (e) => !e.ctrlKey,
  shift: (e) => !e.shiftKey,
  alt: (e) => !e.altKey,
  meta: (e) => !e.metaKey,
  left: (e) => "button" in e && e.button !== 0,
  middle: (e) => "button" in e && e.button !== 1,
  right: (e) => "button" in e && e.button !== 2,
  exact: (e, modifiers2) => systemModifiers.some((m2) => e[`${m2}Key`] && !modifiers2.includes(m2))
};
const withModifiers = (fn, modifiers2) => {
  if (!fn) return fn;
  const cache = fn._withMods || (fn._withMods = {});
  const cacheKey = modifiers2.join(".");
  return cache[cacheKey] || (cache[cacheKey] = ((event, ...args) => {
    for (let i = 0; i < modifiers2.length; i++) {
      const guard = modifierGuards[modifiers2[i]];
      if (guard && guard(event, modifiers2)) return;
    }
    return fn(event, ...args);
  }));
};
const rendererOptions = /* @__PURE__ */ extend({ patchProp }, nodeOps);
let renderer;
function ensureRenderer() {
  return renderer || (renderer = createRenderer(rendererOptions));
}
const createApp = ((...args) => {
  const app2 = ensureRenderer().createApp(...args);
  const { mount } = app2;
  app2.mount = (containerOrSelector) => {
    const container = normalizeContainer(containerOrSelector);
    if (!container) return;
    const component = app2._component;
    if (!isFunction$2(component) && !component.render && !component.template) {
      component.template = container.innerHTML;
    }
    if (container.nodeType === 1) {
      container.textContent = "";
    }
    const proxy = mount(container, false, resolveRootNamespace(container));
    if (container instanceof Element) {
      container.removeAttribute("v-cloak");
      container.setAttribute("data-v-app", "");
    }
    return proxy;
  };
  return app2;
});
function resolveRootNamespace(container) {
  if (container instanceof SVGElement) {
    return "svg";
  }
  if (typeof MathMLElement === "function" && container instanceof MathMLElement) {
    return "mathml";
  }
}
function normalizeContainer(container) {
  if (isString(container)) {
    const res = document.querySelector(container);
    return res;
  }
  return container;
}
var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
function getDefaultExportFromCjs(x2) {
  return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, "default") ? x2["default"] : x2;
}
var dist = {};
var fontfaceobserver_standalone = { exports: {} };
var hasRequiredFontfaceobserver_standalone;
function requireFontfaceobserver_standalone() {
  if (hasRequiredFontfaceobserver_standalone) return fontfaceobserver_standalone.exports;
  hasRequiredFontfaceobserver_standalone = 1;
  (function(module2) {
    (function() {
      function p2(a2, c2) {
        document.addEventListener ? a2.addEventListener("scroll", c2, false) : a2.attachEvent("scroll", c2);
      }
      function u2(a2) {
        document.body ? a2() : document.addEventListener ? document.addEventListener("DOMContentLoaded", function b2() {
          document.removeEventListener("DOMContentLoaded", b2);
          a2();
        }) : document.attachEvent("onreadystatechange", function g2() {
          if ("interactive" == document.readyState || "complete" == document.readyState) document.detachEvent("onreadystatechange", g2), a2();
        });
      }
      function w2(a2) {
        this.g = document.createElement("div");
        this.g.setAttribute("aria-hidden", "true");
        this.g.appendChild(document.createTextNode(a2));
        this.h = document.createElement("span");
        this.i = document.createElement("span");
        this.m = document.createElement("span");
        this.j = document.createElement("span");
        this.l = -1;
        this.h.style.cssText = "max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;";
        this.i.style.cssText = "max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;";
        this.j.style.cssText = "max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;";
        this.m.style.cssText = "display:inline-block;width:200%;height:200%;font-size:16px;max-width:none;";
        this.h.appendChild(this.m);
        this.i.appendChild(this.j);
        this.g.appendChild(this.h);
        this.g.appendChild(this.i);
      }
      function x2(a2, c2) {
        a2.g.style.cssText = "max-width:none;min-width:20px;min-height:20px;display:inline-block;overflow:hidden;position:absolute;width:auto;margin:0;padding:0;top:-999px;white-space:nowrap;font-synthesis:none;font:" + c2 + ";";
      }
      function B2(a2) {
        var c2 = a2.g.offsetWidth, b2 = c2 + 100;
        a2.j.style.width = b2 + "px";
        a2.i.scrollLeft = b2;
        a2.h.scrollLeft = a2.h.scrollWidth + 100;
        return a2.l !== c2 ? (a2.l = c2, true) : false;
      }
      function C2(a2, c2) {
        function b2() {
          var e = g2;
          B2(e) && null !== e.g.parentNode && c2(e.l);
        }
        var g2 = a2;
        p2(a2.h, b2);
        p2(a2.i, b2);
        B2(a2);
      }
      function D2(a2, c2, b2) {
        c2 = c2 || {};
        b2 = b2 || window;
        this.family = a2;
        this.style = c2.style || "normal";
        this.weight = c2.weight || "normal";
        this.stretch = c2.stretch || "normal";
        this.context = b2;
      }
      var E2 = null, F2 = null, G2 = null, H2 = null;
      function I2(a2) {
        null === F2 && (M2(a2) && /Apple/.test(window.navigator.vendor) ? (a2 = /AppleWebKit\/([0-9]+)(?:\.([0-9]+))(?:\.([0-9]+))/.exec(window.navigator.userAgent), F2 = !!a2 && 603 > parseInt(a2[1], 10)) : F2 = false);
        return F2;
      }
      function M2(a2) {
        null === H2 && (H2 = !!a2.document.fonts);
        return H2;
      }
      function N2(a2, c2) {
        var b2 = a2.style, g2 = a2.weight;
        if (null === G2) {
          var e = document.createElement("div");
          try {
            e.style.font = "condensed 100px sans-serif";
          } catch (q2) {
          }
          G2 = "" !== e.style.font;
        }
        return [b2, g2, G2 ? a2.stretch : "", "100px", c2].join(" ");
      }
      D2.prototype.load = function(a2, c2) {
        var b2 = this, g2 = a2 || "BESbswy", e = 0, q2 = c2 || 3e3, J2 = (/* @__PURE__ */ new Date()).getTime();
        return new Promise(function(K2, L2) {
          if (M2(b2.context) && !I2(b2.context)) {
            var O2 = new Promise(function(r2, t2) {
              function h2() {
                (/* @__PURE__ */ new Date()).getTime() - J2 >= q2 ? t2(Error("" + q2 + "ms timeout exceeded")) : b2.context.document.fonts.load(N2(b2, '"' + b2.family + '"'), g2).then(function(n2) {
                  1 <= n2.length ? r2() : setTimeout(h2, 25);
                }, t2);
              }
              h2();
            }), P2 = new Promise(function(r2, t2) {
              e = setTimeout(function() {
                t2(Error("" + q2 + "ms timeout exceeded"));
              }, q2);
            });
            Promise.race([P2, O2]).then(function() {
              clearTimeout(e);
              K2(b2);
            }, L2);
          } else u2(function() {
            function r2() {
              var d2;
              if (d2 = -1 != k2 && -1 != l2 || -1 != k2 && -1 != m2 || -1 != l2 && -1 != m2) (d2 = k2 != l2 && k2 != m2 && l2 != m2) || (null === E2 && (d2 = /AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent), E2 = !!d2 && (536 > parseInt(d2[1], 10) || 536 === parseInt(d2[1], 10) && 11 >= parseInt(d2[2], 10))), d2 = E2 && (k2 == y2 && l2 == y2 && m2 == y2 || k2 == z2 && l2 == z2 && m2 == z2 || k2 == A2 && l2 == A2 && m2 == A2)), d2 = !d2;
              d2 && (null !== f2.parentNode && f2.parentNode.removeChild(f2), clearTimeout(e), K2(b2));
            }
            function t2() {
              if ((/* @__PURE__ */ new Date()).getTime() - J2 >= q2) null !== f2.parentNode && f2.parentNode.removeChild(f2), L2(Error("" + q2 + "ms timeout exceeded"));
              else {
                var d2 = b2.context.document.hidden;
                if (true === d2 || void 0 === d2) k2 = h2.g.offsetWidth, l2 = n2.g.offsetWidth, m2 = v2.g.offsetWidth, r2();
                e = setTimeout(t2, 50);
              }
            }
            var h2 = new w2(g2), n2 = new w2(g2), v2 = new w2(g2), k2 = -1, l2 = -1, m2 = -1, y2 = -1, z2 = -1, A2 = -1, f2 = document.createElement("div");
            f2.dir = "ltr";
            x2(h2, N2(b2, "sans-serif"));
            x2(n2, N2(b2, "serif"));
            x2(v2, N2(b2, "monospace"));
            f2.appendChild(h2.g);
            f2.appendChild(n2.g);
            f2.appendChild(v2.g);
            b2.context.document.body.appendChild(f2);
            y2 = h2.g.offsetWidth;
            z2 = n2.g.offsetWidth;
            A2 = v2.g.offsetWidth;
            t2();
            C2(h2, function(d2) {
              k2 = d2;
              r2();
            });
            x2(h2, N2(b2, '"' + b2.family + '",sans-serif'));
            C2(n2, function(d2) {
              l2 = d2;
              r2();
            });
            x2(n2, N2(b2, '"' + b2.family + '",serif'));
            C2(v2, function(d2) {
              m2 = d2;
              r2();
            });
            x2(v2, N2(b2, '"' + b2.family + '",monospace'));
          });
        });
      };
      module2.exports = D2;
    })();
  })(fontfaceobserver_standalone);
  return fontfaceobserver_standalone.exports;
}
var _freeGlobal;
var hasRequired_freeGlobal;
function require_freeGlobal() {
  if (hasRequired_freeGlobal) return _freeGlobal;
  hasRequired_freeGlobal = 1;
  var freeGlobal = typeof commonjsGlobal == "object" && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
  _freeGlobal = freeGlobal;
  return _freeGlobal;
}
var _root;
var hasRequired_root;
function require_root() {
  if (hasRequired_root) return _root;
  hasRequired_root = 1;
  var freeGlobal = require_freeGlobal();
  var freeSelf = typeof self == "object" && self && self.Object === Object && self;
  var root = freeGlobal || freeSelf || Function("return this")();
  _root = root;
  return _root;
}
var _Symbol;
var hasRequired_Symbol;
function require_Symbol() {
  if (hasRequired_Symbol) return _Symbol;
  hasRequired_Symbol = 1;
  var root = require_root();
  var Symbol2 = root.Symbol;
  _Symbol = Symbol2;
  return _Symbol;
}
var _getRawTag;
var hasRequired_getRawTag;
function require_getRawTag() {
  if (hasRequired_getRawTag) return _getRawTag;
  hasRequired_getRawTag = 1;
  var Symbol2 = require_Symbol();
  var objectProto = Object.prototype;
  var hasOwnProperty2 = objectProto.hasOwnProperty;
  var nativeObjectToString = objectProto.toString;
  var symToStringTag = Symbol2 ? Symbol2.toStringTag : void 0;
  function getRawTag(value) {
    var isOwn = hasOwnProperty2.call(value, symToStringTag), tag = value[symToStringTag];
    try {
      value[symToStringTag] = void 0;
      var unmasked = true;
    } catch (e) {
    }
    var result = nativeObjectToString.call(value);
    if (unmasked) {
      if (isOwn) {
        value[symToStringTag] = tag;
      } else {
        delete value[symToStringTag];
      }
    }
    return result;
  }
  _getRawTag = getRawTag;
  return _getRawTag;
}
var _objectToString;
var hasRequired_objectToString;
function require_objectToString() {
  if (hasRequired_objectToString) return _objectToString;
  hasRequired_objectToString = 1;
  var objectProto = Object.prototype;
  var nativeObjectToString = objectProto.toString;
  function objectToString2(value) {
    return nativeObjectToString.call(value);
  }
  _objectToString = objectToString2;
  return _objectToString;
}
var _baseGetTag;
var hasRequired_baseGetTag;
function require_baseGetTag() {
  if (hasRequired_baseGetTag) return _baseGetTag;
  hasRequired_baseGetTag = 1;
  var Symbol2 = require_Symbol(), getRawTag = require_getRawTag(), objectToString2 = require_objectToString();
  var nullTag = "[object Null]", undefinedTag = "[object Undefined]";
  var symToStringTag = Symbol2 ? Symbol2.toStringTag : void 0;
  function baseGetTag(value) {
    if (value == null) {
      return value === void 0 ? undefinedTag : nullTag;
    }
    return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString2(value);
  }
  _baseGetTag = baseGetTag;
  return _baseGetTag;
}
var isObject_1;
var hasRequiredIsObject;
function requireIsObject() {
  if (hasRequiredIsObject) return isObject_1;
  hasRequiredIsObject = 1;
  function isObject2(value) {
    var type = typeof value;
    return value != null && (type == "object" || type == "function");
  }
  isObject_1 = isObject2;
  return isObject_1;
}
var isFunction_1;
var hasRequiredIsFunction;
function requireIsFunction() {
  if (hasRequiredIsFunction) return isFunction_1;
  hasRequiredIsFunction = 1;
  var baseGetTag = require_baseGetTag(), isObject2 = requireIsObject();
  var asyncTag = "[object AsyncFunction]", funcTag = "[object Function]", genTag = "[object GeneratorFunction]", proxyTag = "[object Proxy]";
  function isFunction2(value) {
    if (!isObject2(value)) {
      return false;
    }
    var tag = baseGetTag(value);
    return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
  }
  isFunction_1 = isFunction2;
  return isFunction_1;
}
var _coreJsData;
var hasRequired_coreJsData;
function require_coreJsData() {
  if (hasRequired_coreJsData) return _coreJsData;
  hasRequired_coreJsData = 1;
  var root = require_root();
  var coreJsData = root["__core-js_shared__"];
  _coreJsData = coreJsData;
  return _coreJsData;
}
var _isMasked;
var hasRequired_isMasked;
function require_isMasked() {
  if (hasRequired_isMasked) return _isMasked;
  hasRequired_isMasked = 1;
  var coreJsData = require_coreJsData();
  var maskSrcKey = (function() {
    var uid2 = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || "");
    return uid2 ? "Symbol(src)_1." + uid2 : "";
  })();
  function isMasked(func) {
    return !!maskSrcKey && maskSrcKey in func;
  }
  _isMasked = isMasked;
  return _isMasked;
}
var _toSource;
var hasRequired_toSource;
function require_toSource() {
  if (hasRequired_toSource) return _toSource;
  hasRequired_toSource = 1;
  var funcProto = Function.prototype;
  var funcToString = funcProto.toString;
  function toSource(func) {
    if (func != null) {
      try {
        return funcToString.call(func);
      } catch (e) {
      }
      try {
        return func + "";
      } catch (e) {
      }
    }
    return "";
  }
  _toSource = toSource;
  return _toSource;
}
var _baseIsNative;
var hasRequired_baseIsNative;
function require_baseIsNative() {
  if (hasRequired_baseIsNative) return _baseIsNative;
  hasRequired_baseIsNative = 1;
  var isFunction2 = requireIsFunction(), isMasked = require_isMasked(), isObject2 = requireIsObject(), toSource = require_toSource();
  var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
  var reIsHostCtor = /^\[object .+?Constructor\]$/;
  var funcProto = Function.prototype, objectProto = Object.prototype;
  var funcToString = funcProto.toString;
  var hasOwnProperty2 = objectProto.hasOwnProperty;
  var reIsNative = RegExp(
    "^" + funcToString.call(hasOwnProperty2).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
  );
  function baseIsNative(value) {
    if (!isObject2(value) || isMasked(value)) {
      return false;
    }
    var pattern = isFunction2(value) ? reIsNative : reIsHostCtor;
    return pattern.test(toSource(value));
  }
  _baseIsNative = baseIsNative;
  return _baseIsNative;
}
var _getValue;
var hasRequired_getValue;
function require_getValue() {
  if (hasRequired_getValue) return _getValue;
  hasRequired_getValue = 1;
  function getValue(object, key) {
    return object == null ? void 0 : object[key];
  }
  _getValue = getValue;
  return _getValue;
}
var _getNative;
var hasRequired_getNative;
function require_getNative() {
  if (hasRequired_getNative) return _getNative;
  hasRequired_getNative = 1;
  var baseIsNative = require_baseIsNative(), getValue = require_getValue();
  function getNative(object, key) {
    var value = getValue(object, key);
    return baseIsNative(value) ? value : void 0;
  }
  _getNative = getNative;
  return _getNative;
}
var _nativeCreate;
var hasRequired_nativeCreate;
function require_nativeCreate() {
  if (hasRequired_nativeCreate) return _nativeCreate;
  hasRequired_nativeCreate = 1;
  var getNative = require_getNative();
  var nativeCreate = getNative(Object, "create");
  _nativeCreate = nativeCreate;
  return _nativeCreate;
}
var _hashClear;
var hasRequired_hashClear;
function require_hashClear() {
  if (hasRequired_hashClear) return _hashClear;
  hasRequired_hashClear = 1;
  var nativeCreate = require_nativeCreate();
  function hashClear() {
    this.__data__ = nativeCreate ? nativeCreate(null) : {};
    this.size = 0;
  }
  _hashClear = hashClear;
  return _hashClear;
}
var _hashDelete;
var hasRequired_hashDelete;
function require_hashDelete() {
  if (hasRequired_hashDelete) return _hashDelete;
  hasRequired_hashDelete = 1;
  function hashDelete(key) {
    var result = this.has(key) && delete this.__data__[key];
    this.size -= result ? 1 : 0;
    return result;
  }
  _hashDelete = hashDelete;
  return _hashDelete;
}
var _hashGet;
var hasRequired_hashGet;
function require_hashGet() {
  if (hasRequired_hashGet) return _hashGet;
  hasRequired_hashGet = 1;
  var nativeCreate = require_nativeCreate();
  var HASH_UNDEFINED = "__lodash_hash_undefined__";
  var objectProto = Object.prototype;
  var hasOwnProperty2 = objectProto.hasOwnProperty;
  function hashGet(key) {
    var data = this.__data__;
    if (nativeCreate) {
      var result = data[key];
      return result === HASH_UNDEFINED ? void 0 : result;
    }
    return hasOwnProperty2.call(data, key) ? data[key] : void 0;
  }
  _hashGet = hashGet;
  return _hashGet;
}
var _hashHas;
var hasRequired_hashHas;
function require_hashHas() {
  if (hasRequired_hashHas) return _hashHas;
  hasRequired_hashHas = 1;
  var nativeCreate = require_nativeCreate();
  var objectProto = Object.prototype;
  var hasOwnProperty2 = objectProto.hasOwnProperty;
  function hashHas(key) {
    var data = this.__data__;
    return nativeCreate ? data[key] !== void 0 : hasOwnProperty2.call(data, key);
  }
  _hashHas = hashHas;
  return _hashHas;
}
var _hashSet;
var hasRequired_hashSet;
function require_hashSet() {
  if (hasRequired_hashSet) return _hashSet;
  hasRequired_hashSet = 1;
  var nativeCreate = require_nativeCreate();
  var HASH_UNDEFINED = "__lodash_hash_undefined__";
  function hashSet(key, value) {
    var data = this.__data__;
    this.size += this.has(key) ? 0 : 1;
    data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED : value;
    return this;
  }
  _hashSet = hashSet;
  return _hashSet;
}
var _Hash;
var hasRequired_Hash;
function require_Hash() {
  if (hasRequired_Hash) return _Hash;
  hasRequired_Hash = 1;
  var hashClear = require_hashClear(), hashDelete = require_hashDelete(), hashGet = require_hashGet(), hashHas = require_hashHas(), hashSet = require_hashSet();
  function Hash(entries) {
    var index2 = -1, length = entries == null ? 0 : entries.length;
    this.clear();
    while (++index2 < length) {
      var entry = entries[index2];
      this.set(entry[0], entry[1]);
    }
  }
  Hash.prototype.clear = hashClear;
  Hash.prototype["delete"] = hashDelete;
  Hash.prototype.get = hashGet;
  Hash.prototype.has = hashHas;
  Hash.prototype.set = hashSet;
  _Hash = Hash;
  return _Hash;
}
var _listCacheClear;
var hasRequired_listCacheClear;
function require_listCacheClear() {
  if (hasRequired_listCacheClear) return _listCacheClear;
  hasRequired_listCacheClear = 1;
  function listCacheClear() {
    this.__data__ = [];
    this.size = 0;
  }
  _listCacheClear = listCacheClear;
  return _listCacheClear;
}
var eq_1;
var hasRequiredEq;
function requireEq() {
  if (hasRequiredEq) return eq_1;
  hasRequiredEq = 1;
  function eq(value, other) {
    return value === other || value !== value && other !== other;
  }
  eq_1 = eq;
  return eq_1;
}
var _assocIndexOf;
var hasRequired_assocIndexOf;
function require_assocIndexOf() {
  if (hasRequired_assocIndexOf) return _assocIndexOf;
  hasRequired_assocIndexOf = 1;
  var eq = requireEq();
  function assocIndexOf(array, key) {
    var length = array.length;
    while (length--) {
      if (eq(array[length][0], key)) {
        return length;
      }
    }
    return -1;
  }
  _assocIndexOf = assocIndexOf;
  return _assocIndexOf;
}
var _listCacheDelete;
var hasRequired_listCacheDelete;
function require_listCacheDelete() {
  if (hasRequired_listCacheDelete) return _listCacheDelete;
  hasRequired_listCacheDelete = 1;
  var assocIndexOf = require_assocIndexOf();
  var arrayProto2 = Array.prototype;
  var splice = arrayProto2.splice;
  function listCacheDelete(key) {
    var data = this.__data__, index2 = assocIndexOf(data, key);
    if (index2 < 0) {
      return false;
    }
    var lastIndex = data.length - 1;
    if (index2 == lastIndex) {
      data.pop();
    } else {
      splice.call(data, index2, 1);
    }
    --this.size;
    return true;
  }
  _listCacheDelete = listCacheDelete;
  return _listCacheDelete;
}
var _listCacheGet;
var hasRequired_listCacheGet;
function require_listCacheGet() {
  if (hasRequired_listCacheGet) return _listCacheGet;
  hasRequired_listCacheGet = 1;
  var assocIndexOf = require_assocIndexOf();
  function listCacheGet(key) {
    var data = this.__data__, index2 = assocIndexOf(data, key);
    return index2 < 0 ? void 0 : data[index2][1];
  }
  _listCacheGet = listCacheGet;
  return _listCacheGet;
}
var _listCacheHas;
var hasRequired_listCacheHas;
function require_listCacheHas() {
  if (hasRequired_listCacheHas) return _listCacheHas;
  hasRequired_listCacheHas = 1;
  var assocIndexOf = require_assocIndexOf();
  function listCacheHas(key) {
    return assocIndexOf(this.__data__, key) > -1;
  }
  _listCacheHas = listCacheHas;
  return _listCacheHas;
}
var _listCacheSet;
var hasRequired_listCacheSet;
function require_listCacheSet() {
  if (hasRequired_listCacheSet) return _listCacheSet;
  hasRequired_listCacheSet = 1;
  var assocIndexOf = require_assocIndexOf();
  function listCacheSet(key, value) {
    var data = this.__data__, index2 = assocIndexOf(data, key);
    if (index2 < 0) {
      ++this.size;
      data.push([key, value]);
    } else {
      data[index2][1] = value;
    }
    return this;
  }
  _listCacheSet = listCacheSet;
  return _listCacheSet;
}
var _ListCache;
var hasRequired_ListCache;
function require_ListCache() {
  if (hasRequired_ListCache) return _ListCache;
  hasRequired_ListCache = 1;
  var listCacheClear = require_listCacheClear(), listCacheDelete = require_listCacheDelete(), listCacheGet = require_listCacheGet(), listCacheHas = require_listCacheHas(), listCacheSet = require_listCacheSet();
  function ListCache(entries) {
    var index2 = -1, length = entries == null ? 0 : entries.length;
    this.clear();
    while (++index2 < length) {
      var entry = entries[index2];
      this.set(entry[0], entry[1]);
    }
  }
  ListCache.prototype.clear = listCacheClear;
  ListCache.prototype["delete"] = listCacheDelete;
  ListCache.prototype.get = listCacheGet;
  ListCache.prototype.has = listCacheHas;
  ListCache.prototype.set = listCacheSet;
  _ListCache = ListCache;
  return _ListCache;
}
var _Map;
var hasRequired_Map;
function require_Map() {
  if (hasRequired_Map) return _Map;
  hasRequired_Map = 1;
  var getNative = require_getNative(), root = require_root();
  var Map2 = getNative(root, "Map");
  _Map = Map2;
  return _Map;
}
var _mapCacheClear;
var hasRequired_mapCacheClear;
function require_mapCacheClear() {
  if (hasRequired_mapCacheClear) return _mapCacheClear;
  hasRequired_mapCacheClear = 1;
  var Hash = require_Hash(), ListCache = require_ListCache(), Map2 = require_Map();
  function mapCacheClear() {
    this.size = 0;
    this.__data__ = {
      "hash": new Hash(),
      "map": new (Map2 || ListCache)(),
      "string": new Hash()
    };
  }
  _mapCacheClear = mapCacheClear;
  return _mapCacheClear;
}
var _isKeyable;
var hasRequired_isKeyable;
function require_isKeyable() {
  if (hasRequired_isKeyable) return _isKeyable;
  hasRequired_isKeyable = 1;
  function isKeyable(value) {
    var type = typeof value;
    return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null;
  }
  _isKeyable = isKeyable;
  return _isKeyable;
}
var _getMapData;
var hasRequired_getMapData;
function require_getMapData() {
  if (hasRequired_getMapData) return _getMapData;
  hasRequired_getMapData = 1;
  var isKeyable = require_isKeyable();
  function getMapData(map2, key) {
    var data = map2.__data__;
    return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map;
  }
  _getMapData = getMapData;
  return _getMapData;
}
var _mapCacheDelete;
var hasRequired_mapCacheDelete;
function require_mapCacheDelete() {
  if (hasRequired_mapCacheDelete) return _mapCacheDelete;
  hasRequired_mapCacheDelete = 1;
  var getMapData = require_getMapData();
  function mapCacheDelete(key) {
    var result = getMapData(this, key)["delete"](key);
    this.size -= result ? 1 : 0;
    return result;
  }
  _mapCacheDelete = mapCacheDelete;
  return _mapCacheDelete;
}
var _mapCacheGet;
var hasRequired_mapCacheGet;
function require_mapCacheGet() {
  if (hasRequired_mapCacheGet) return _mapCacheGet;
  hasRequired_mapCacheGet = 1;
  var getMapData = require_getMapData();
  function mapCacheGet(key) {
    return getMapData(this, key).get(key);
  }
  _mapCacheGet = mapCacheGet;
  return _mapCacheGet;
}
var _mapCacheHas;
var hasRequired_mapCacheHas;
function require_mapCacheHas() {
  if (hasRequired_mapCacheHas) return _mapCacheHas;
  hasRequired_mapCacheHas = 1;
  var getMapData = require_getMapData();
  function mapCacheHas(key) {
    return getMapData(this, key).has(key);
  }
  _mapCacheHas = mapCacheHas;
  return _mapCacheHas;
}
var _mapCacheSet;
var hasRequired_mapCacheSet;
function require_mapCacheSet() {
  if (hasRequired_mapCacheSet) return _mapCacheSet;
  hasRequired_mapCacheSet = 1;
  var getMapData = require_getMapData();
  function mapCacheSet(key, value) {
    var data = getMapData(this, key), size2 = data.size;
    data.set(key, value);
    this.size += data.size == size2 ? 0 : 1;
    return this;
  }
  _mapCacheSet = mapCacheSet;
  return _mapCacheSet;
}
var _MapCache;
var hasRequired_MapCache;
function require_MapCache() {
  if (hasRequired_MapCache) return _MapCache;
  hasRequired_MapCache = 1;
  var mapCacheClear = require_mapCacheClear(), mapCacheDelete = require_mapCacheDelete(), mapCacheGet = require_mapCacheGet(), mapCacheHas = require_mapCacheHas(), mapCacheSet = require_mapCacheSet();
  function MapCache(entries) {
    var index2 = -1, length = entries == null ? 0 : entries.length;
    this.clear();
    while (++index2 < length) {
      var entry = entries[index2];
      this.set(entry[0], entry[1]);
    }
  }
  MapCache.prototype.clear = mapCacheClear;
  MapCache.prototype["delete"] = mapCacheDelete;
  MapCache.prototype.get = mapCacheGet;
  MapCache.prototype.has = mapCacheHas;
  MapCache.prototype.set = mapCacheSet;
  _MapCache = MapCache;
  return _MapCache;
}
var _setCacheAdd;
var hasRequired_setCacheAdd;
function require_setCacheAdd() {
  if (hasRequired_setCacheAdd) return _setCacheAdd;
  hasRequired_setCacheAdd = 1;
  var HASH_UNDEFINED = "__lodash_hash_undefined__";
  function setCacheAdd(value) {
    this.__data__.set(value, HASH_UNDEFINED);
    return this;
  }
  _setCacheAdd = setCacheAdd;
  return _setCacheAdd;
}
var _setCacheHas;
var hasRequired_setCacheHas;
function require_setCacheHas() {
  if (hasRequired_setCacheHas) return _setCacheHas;
  hasRequired_setCacheHas = 1;
  function setCacheHas(value) {
    return this.__data__.has(value);
  }
  _setCacheHas = setCacheHas;
  return _setCacheHas;
}
var _SetCache;
var hasRequired_SetCache;
function require_SetCache() {
  if (hasRequired_SetCache) return _SetCache;
  hasRequired_SetCache = 1;
  var MapCache = require_MapCache(), setCacheAdd = require_setCacheAdd(), setCacheHas = require_setCacheHas();
  function SetCache(values) {
    var index2 = -1, length = values == null ? 0 : values.length;
    this.__data__ = new MapCache();
    while (++index2 < length) {
      this.add(values[index2]);
    }
  }
  SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
  SetCache.prototype.has = setCacheHas;
  _SetCache = SetCache;
  return _SetCache;
}
var _baseFindIndex;
var hasRequired_baseFindIndex;
function require_baseFindIndex() {
  if (hasRequired_baseFindIndex) return _baseFindIndex;
  hasRequired_baseFindIndex = 1;
  function baseFindIndex(array, predicate, fromIndex, fromRight) {
    var length = array.length, index2 = fromIndex + (fromRight ? 1 : -1);
    while (fromRight ? index2-- : ++index2 < length) {
      if (predicate(array[index2], index2, array)) {
        return index2;
      }
    }
    return -1;
  }
  _baseFindIndex = baseFindIndex;
  return _baseFindIndex;
}
var _baseIsNaN;
var hasRequired_baseIsNaN;
function require_baseIsNaN() {
  if (hasRequired_baseIsNaN) return _baseIsNaN;
  hasRequired_baseIsNaN = 1;
  function baseIsNaN(value) {
    return value !== value;
  }
  _baseIsNaN = baseIsNaN;
  return _baseIsNaN;
}
var _strictIndexOf;
var hasRequired_strictIndexOf;
function require_strictIndexOf() {
  if (hasRequired_strictIndexOf) return _strictIndexOf;
  hasRequired_strictIndexOf = 1;
  function strictIndexOf(array, value, fromIndex) {
    var index2 = fromIndex - 1, length = array.length;
    while (++index2 < length) {
      if (array[index2] === value) {
        return index2;
      }
    }
    return -1;
  }
  _strictIndexOf = strictIndexOf;
  return _strictIndexOf;
}
var _baseIndexOf;
var hasRequired_baseIndexOf;
function require_baseIndexOf() {
  if (hasRequired_baseIndexOf) return _baseIndexOf;
  hasRequired_baseIndexOf = 1;
  var baseFindIndex = require_baseFindIndex(), baseIsNaN = require_baseIsNaN(), strictIndexOf = require_strictIndexOf();
  function baseIndexOf(array, value, fromIndex) {
    return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex);
  }
  _baseIndexOf = baseIndexOf;
  return _baseIndexOf;
}
var _arrayIncludes;
var hasRequired_arrayIncludes;
function require_arrayIncludes() {
  if (hasRequired_arrayIncludes) return _arrayIncludes;
  hasRequired_arrayIncludes = 1;
  var baseIndexOf = require_baseIndexOf();
  function arrayIncludes(array, value) {
    var length = array == null ? 0 : array.length;
    return !!length && baseIndexOf(array, value, 0) > -1;
  }
  _arrayIncludes = arrayIncludes;
  return _arrayIncludes;
}
var _arrayIncludesWith;
var hasRequired_arrayIncludesWith;
function require_arrayIncludesWith() {
  if (hasRequired_arrayIncludesWith) return _arrayIncludesWith;
  hasRequired_arrayIncludesWith = 1;
  function arrayIncludesWith(array, value, comparator) {
    var index2 = -1, length = array == null ? 0 : array.length;
    while (++index2 < length) {
      if (comparator(value, array[index2])) {
        return true;
      }
    }
    return false;
  }
  _arrayIncludesWith = arrayIncludesWith;
  return _arrayIncludesWith;
}
var _cacheHas;
var hasRequired_cacheHas;
function require_cacheHas() {
  if (hasRequired_cacheHas) return _cacheHas;
  hasRequired_cacheHas = 1;
  function cacheHas(cache, key) {
    return cache.has(key);
  }
  _cacheHas = cacheHas;
  return _cacheHas;
}
var _Set;
var hasRequired_Set;
function require_Set() {
  if (hasRequired_Set) return _Set;
  hasRequired_Set = 1;
  var getNative = require_getNative(), root = require_root();
  var Set2 = getNative(root, "Set");
  _Set = Set2;
  return _Set;
}
var noop_1;
var hasRequiredNoop;
function requireNoop() {
  if (hasRequiredNoop) return noop_1;
  hasRequiredNoop = 1;
  function noop2() {
  }
  noop_1 = noop2;
  return noop_1;
}
var _setToArray;
var hasRequired_setToArray;
function require_setToArray() {
  if (hasRequired_setToArray) return _setToArray;
  hasRequired_setToArray = 1;
  function setToArray(set) {
    var index2 = -1, result = Array(set.size);
    set.forEach(function(value) {
      result[++index2] = value;
    });
    return result;
  }
  _setToArray = setToArray;
  return _setToArray;
}
var _createSet;
var hasRequired_createSet;
function require_createSet() {
  if (hasRequired_createSet) return _createSet;
  hasRequired_createSet = 1;
  var Set2 = require_Set(), noop2 = requireNoop(), setToArray = require_setToArray();
  var INFINITY = 1 / 0;
  var createSet = !(Set2 && 1 / setToArray(new Set2([, -0]))[1] == INFINITY) ? noop2 : function(values) {
    return new Set2(values);
  };
  _createSet = createSet;
  return _createSet;
}
var _baseUniq;
var hasRequired_baseUniq;
function require_baseUniq() {
  if (hasRequired_baseUniq) return _baseUniq;
  hasRequired_baseUniq = 1;
  var SetCache = require_SetCache(), arrayIncludes = require_arrayIncludes(), arrayIncludesWith = require_arrayIncludesWith(), cacheHas = require_cacheHas(), createSet = require_createSet(), setToArray = require_setToArray();
  var LARGE_ARRAY_SIZE = 200;
  function baseUniq(array, iteratee, comparator) {
    var index2 = -1, includes = arrayIncludes, length = array.length, isCommon = true, result = [], seen2 = result;
    if (comparator) {
      isCommon = false;
      includes = arrayIncludesWith;
    } else if (length >= LARGE_ARRAY_SIZE) {
      var set = iteratee ? null : createSet(array);
      if (set) {
        return setToArray(set);
      }
      isCommon = false;
      includes = cacheHas;
      seen2 = new SetCache();
    } else {
      seen2 = iteratee ? [] : result;
    }
    outer:
      while (++index2 < length) {
        var value = array[index2], computed2 = iteratee ? iteratee(value) : value;
        value = comparator || value !== 0 ? value : 0;
        if (isCommon && computed2 === computed2) {
          var seenIndex = seen2.length;
          while (seenIndex--) {
            if (seen2[seenIndex] === computed2) {
              continue outer;
            }
          }
          if (iteratee) {
            seen2.push(computed2);
          }
          result.push(value);
        } else if (!includes(seen2, computed2, comparator)) {
          if (seen2 !== result) {
            seen2.push(computed2);
          }
          result.push(value);
        }
      }
    return result;
  }
  _baseUniq = baseUniq;
  return _baseUniq;
}
var uniq_1;
var hasRequiredUniq;
function requireUniq() {
  if (hasRequiredUniq) return uniq_1;
  hasRequiredUniq = 1;
  var baseUniq = require_baseUniq();
  function uniq(array) {
    return array && array.length ? baseUniq(array) : [];
  }
  uniq_1 = uniq;
  return uniq_1;
}
var hasRequiredDist;
function requireDist() {
  if (hasRequiredDist) return dist;
  hasRequiredDist = 1;
  (function(exports$1) {
    Object.defineProperty(exports$1, "__esModule", { value: true });
    exports$1["default"] = void 0;
    var _fontfaceobserver = _interopRequireDefault(requireFontfaceobserver_standalone());
    var _uniq2 = _interopRequireDefault(requireUniq());
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : { default: obj };
    }
    var resolveWeights = function resolveWeights2(font) {
      var declared = font.weights || [];
      var single = font.weight ? [font.weight] : [];
      var all = (0, _uniq2["default"])(declared.concat(single));
      return all.length ? all : [400];
    };
    var resolveStyles = function resolveStyles2(font) {
      var declared = font.styles || [];
      var single = font.style ? [font.style] : [];
      var all = (0, _uniq2["default"])(declared.concat(single));
      return all.length ? all : ["normal"];
    };
    var _default = function _default2(ops) {
      var fonts = Array.isArray(ops) ? ops : [ops];
      var families = [];
      fonts.forEach(function(font) {
        var weights = resolveWeights(font);
        var styles = resolveStyles(font);
        weights.forEach(function(weight) {
          styles.forEach(function(style2) {
            families.push({ name: font.name, weight, style: style2 });
          });
        });
      });
      return Promise.all(families.map(function(fam) {
        var font = new _fontfaceobserver["default"](fam.name, { weight: fam.weight, style: fam.style });
        return font.load();
      }));
    };
    exports$1["default"] = _default;
  })(dist);
  return dist;
}
var distExports = requireDist();
const loadFonts = /* @__PURE__ */ getDefaultExportFromCjs(distExports);
function tryOnScopeDispose(fn, failSilently) {
  if (getCurrentScope()) {
    onScopeDispose(fn, failSilently);
    return true;
  }
  return false;
}
// @__NO_SIDE_EFFECTS__
function createGlobalState(stateFactory) {
  let initialized2 = false;
  let state;
  const scope = effectScope(true);
  return ((...args) => {
    if (!initialized2) {
      state = scope.run(() => stateFactory(...args));
      initialized2 = true;
    }
    return state;
  });
}
const localProvidedStateMap = /* @__PURE__ */ new WeakMap();
const injectLocal = /* @__NO_SIDE_EFFECTS__ */ (...args) => {
  var _getCurrentInstance;
  const key = args[0];
  const instance = (_getCurrentInstance = getCurrentInstance()) === null || _getCurrentInstance === void 0 ? void 0 : _getCurrentInstance.proxy;
  const owner = instance !== null && instance !== void 0 ? instance : getCurrentScope();
  if (owner == null && !hasInjectionContext()) throw new Error("injectLocal must be called in setup");
  if (owner && localProvidedStateMap.has(owner) && key in localProvidedStateMap.get(owner)) return localProvidedStateMap.get(owner)[key];
  return inject(...args);
};
const isClient$1 = typeof window !== "undefined" && typeof document !== "undefined";
typeof WorkerGlobalScope !== "undefined" && globalThis instanceof WorkerGlobalScope;
const notNullish = (val) => val != null;
const toString = Object.prototype.toString;
const isObject = (val) => toString.call(val) === "[object Object]";
const noop$2 = () => {
};
const isIOS = /* @__PURE__ */ getIsIOS();
function getIsIOS() {
  var _window, _window2, _window3;
  return isClient$1 && !!((_window = window) === null || _window === void 0 || (_window = _window.navigator) === null || _window === void 0 ? void 0 : _window.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((_window2 = window) === null || _window2 === void 0 || (_window2 = _window2.navigator) === null || _window2 === void 0 ? void 0 : _window2.maxTouchPoints) > 2 && /iPad|Macintosh/.test((_window3 = window) === null || _window3 === void 0 ? void 0 : _window3.navigator.userAgent));
}
function toRef(...args) {
  if (args.length !== 1) return /* @__PURE__ */ toRef$1(...args);
  const r2 = args[0];
  return typeof r2 === "function" ? /* @__PURE__ */ readonly(customRef(() => ({
    get: r2,
    set: noop$2
  }))) : /* @__PURE__ */ ref(r2);
}
function createFilterWrapper(filter, fn) {
  function wrapper(...args) {
    return new Promise((resolve2, reject) => {
      Promise.resolve(filter(() => fn.apply(this, args), {
        fn,
        thisArg: this,
        args
      })).then(resolve2).catch(reject);
    });
  }
  return wrapper;
}
const bypassFilter = (invoke$1) => {
  return invoke$1();
};
function debounceFilter(ms, options = {}) {
  let timer;
  let maxTimer;
  let lastRejector = noop$2;
  const _clearTimeout = (timer$1) => {
    clearTimeout(timer$1);
    lastRejector();
    lastRejector = noop$2;
  };
  let lastInvoker;
  const filter = (invoke$1) => {
    const duration = toValue(ms);
    const maxDuration = toValue(options.maxWait);
    if (timer) _clearTimeout(timer);
    if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {
      if (maxTimer) {
        _clearTimeout(maxTimer);
        maxTimer = void 0;
      }
      return Promise.resolve(invoke$1());
    }
    return new Promise((resolve2, reject) => {
      lastRejector = options.rejectOnCancel ? reject : resolve2;
      lastInvoker = invoke$1;
      if (maxDuration && !maxTimer) maxTimer = setTimeout(() => {
        if (timer) _clearTimeout(timer);
        maxTimer = void 0;
        resolve2(lastInvoker());
      }, maxDuration);
      timer = setTimeout(() => {
        if (maxTimer) _clearTimeout(maxTimer);
        maxTimer = void 0;
        resolve2(invoke$1());
      }, duration);
    });
  };
  return filter;
}
function throttleFilter(...args) {
  let lastExec = 0;
  let timer;
  let isLeading = true;
  let lastRejector = noop$2;
  let lastValue;
  let ms;
  let trailing;
  let leading;
  let rejectOnCancel;
  if (!/* @__PURE__ */ isRef(args[0]) && typeof args[0] === "object") ({ delay: ms, trailing = true, leading = true, rejectOnCancel = false } = args[0]);
  else [ms, trailing = true, leading = true, rejectOnCancel = false] = args;
  const clear = () => {
    if (timer) {
      clearTimeout(timer);
      timer = void 0;
      lastRejector();
      lastRejector = noop$2;
    }
  };
  const filter = (_invoke) => {
    const duration = toValue(ms);
    const elapsed = Date.now() - lastExec;
    const invoke$1 = () => {
      return lastValue = _invoke();
    };
    clear();
    if (duration <= 0) {
      lastExec = Date.now();
      return invoke$1();
    }
    if (elapsed > duration) {
      lastExec = Date.now();
      if (leading || !isLeading) invoke$1();
    } else if (trailing) lastValue = new Promise((resolve2, reject) => {
      lastRejector = rejectOnCancel ? reject : resolve2;
      timer = setTimeout(() => {
        lastExec = Date.now();
        isLeading = true;
        resolve2(invoke$1());
        clear();
      }, Math.max(0, duration - elapsed));
    });
    if (!leading && !timer) timer = setTimeout(() => isLeading = true, duration);
    isLeading = false;
    return lastValue;
  };
  return filter;
}
function pausableFilter(extendFilter = bypassFilter, options = {}) {
  const { initialState = "active" } = options;
  const isActive2 = toRef(initialState === "active");
  function pause() {
    isActive2.value = false;
  }
  function resume() {
    isActive2.value = true;
  }
  const eventFilter = (...args) => {
    if (isActive2.value) extendFilter(...args);
  };
  return {
    isActive: /* @__PURE__ */ readonly(isActive2),
    pause,
    resume,
    eventFilter
  };
}
function pxValue(px) {
  return px.endsWith("rem") ? Number.parseFloat(px) * 16 : Number.parseFloat(px);
}
function toArray(value) {
  return Array.isArray(value) ? value : [value];
}
function getLifeCycleTarget(target) {
  return getCurrentInstance();
}
// @__NO_SIDE_EFFECTS__
function useDebounceFn(fn, ms = 200, options = {}) {
  return createFilterWrapper(debounceFilter(ms, options), fn);
}
// @__NO_SIDE_EFFECTS__
function useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {
  return createFilterWrapper(throttleFilter(ms, trailing, leading, rejectOnCancel), fn);
}
function watchWithFilter(source2, cb2, options = {}) {
  const { eventFilter = bypassFilter, ...watchOptions } = options;
  return watch(source2, createFilterWrapper(eventFilter, cb2), watchOptions);
}
function watchPausable(source2, cb2, options = {}) {
  const { eventFilter: filter, initialState = "active", ...watchOptions } = options;
  const { eventFilter, pause, resume, isActive: isActive2 } = pausableFilter(filter, { initialState });
  return {
    stop: watchWithFilter(source2, cb2, {
      ...watchOptions,
      eventFilter
    }),
    pause,
    resume,
    isActive: isActive2
  };
}
function tryOnMounted(fn, sync = true, target) {
  if (getLifeCycleTarget()) onMounted(fn, target);
  else if (sync) fn();
  else nextTick(fn);
}
function watchImmediate(source2, cb2, options) {
  return watch(source2, cb2, {
    ...options,
    immediate: true
  });
}
const defaultWindow = isClient$1 ? window : void 0;
function unrefElement(elRef) {
  var _$el;
  const plain = toValue(elRef);
  return (_$el = plain === null || plain === void 0 ? void 0 : plain.$el) !== null && _$el !== void 0 ? _$el : plain;
}
function useEventListener(...args) {
  const register = (el, event, listener, options) => {
    el.addEventListener(event, listener, options);
    return () => el.removeEventListener(event, listener, options);
  };
  const firstParamTargets = computed(() => {
    const test = toArray(toValue(args[0])).filter((e) => e != null);
    return test.every((e) => typeof e !== "string") ? test : void 0;
  });
  return watchImmediate(() => {
    var _firstParamTargets$va, _firstParamTargets$va2;
    return [
      (_firstParamTargets$va = (_firstParamTargets$va2 = firstParamTargets.value) === null || _firstParamTargets$va2 === void 0 ? void 0 : _firstParamTargets$va2.map((e) => unrefElement(e))) !== null && _firstParamTargets$va !== void 0 ? _firstParamTargets$va : [defaultWindow].filter((e) => e != null),
      toArray(toValue(firstParamTargets.value ? args[1] : args[0])),
      toArray(unref(firstParamTargets.value ? args[2] : args[1])),
      toValue(firstParamTargets.value ? args[3] : args[2])
    ];
  }, ([raw_targets, raw_events, raw_listeners, raw_options], _2, onCleanup) => {
    if (!(raw_targets === null || raw_targets === void 0 ? void 0 : raw_targets.length) || !(raw_events === null || raw_events === void 0 ? void 0 : raw_events.length) || !(raw_listeners === null || raw_listeners === void 0 ? void 0 : raw_listeners.length)) return;
    const optionsClone = isObject(raw_options) ? { ...raw_options } : raw_options;
    const cleanups = raw_targets.flatMap((el) => raw_events.flatMap((event) => raw_listeners.map((listener) => register(el, event, listener, optionsClone))));
    onCleanup(() => {
      cleanups.forEach((fn) => fn());
    });
  }, { flush: "post" });
}
let _iOSWorkaround = false;
function onClickOutside(target, handler, options = {}) {
  const { window: window$1 = defaultWindow, ignore = [], capture = true, detectIframe = false, controls = false } = options;
  if (!window$1) return controls ? {
    stop: noop$2,
    cancel: noop$2,
    trigger: noop$2
  } : noop$2;
  if (isIOS && !_iOSWorkaround) {
    _iOSWorkaround = true;
    const listenerOptions = { passive: true };
    Array.from(window$1.document.body.children).forEach((el) => el.addEventListener("click", noop$2, listenerOptions));
    window$1.document.documentElement.addEventListener("click", noop$2, listenerOptions);
  }
  let shouldListen = true;
  const shouldIgnore = (event) => {
    return toValue(ignore).some((target$1) => {
      if (typeof target$1 === "string") return Array.from(window$1.document.querySelectorAll(target$1)).some((el) => el === event.target || event.composedPath().includes(el));
      else {
        const el = unrefElement(target$1);
        return el && (event.target === el || event.composedPath().includes(el));
      }
    });
  };
  function hasMultipleRoots(target$1) {
    const vm = toValue(target$1);
    return vm && vm.$.subTree.shapeFlag === 16;
  }
  function checkMultipleRoots(target$1, event) {
    const vm = toValue(target$1);
    const children = vm.$.subTree && vm.$.subTree.children;
    if (children == null || !Array.isArray(children)) return false;
    return children.some((child) => child.el === event.target || event.composedPath().includes(child.el));
  }
  const listener = (event) => {
    const el = unrefElement(target);
    if (event.target == null) return;
    if (!(el instanceof Element) && hasMultipleRoots(target) && checkMultipleRoots(target, event)) return;
    if (!el || el === event.target || event.composedPath().includes(el)) return;
    if ("detail" in event && event.detail === 0) shouldListen = !shouldIgnore(event);
    if (!shouldListen) {
      shouldListen = true;
      return;
    }
    handler(event);
  };
  let isProcessingClick = false;
  const cleanup = [
    useEventListener(window$1, "click", (event) => {
      if (!isProcessingClick) {
        isProcessingClick = true;
        setTimeout(() => {
          isProcessingClick = false;
        }, 0);
        listener(event);
      }
    }, {
      passive: true,
      capture
    }),
    useEventListener(window$1, "pointerdown", (e) => {
      const el = unrefElement(target);
      shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));
    }, { passive: true }),
    detectIframe && useEventListener(window$1, "blur", (event) => {
      setTimeout(() => {
        var _window$document$acti;
        const el = unrefElement(target);
        if (((_window$document$acti = window$1.document.activeElement) === null || _window$document$acti === void 0 ? void 0 : _window$document$acti.tagName) === "IFRAME" && !(el === null || el === void 0 ? void 0 : el.contains(window$1.document.activeElement))) handler(event);
      }, 0);
    }, { passive: true })
  ].filter(Boolean);
  const stop = () => cleanup.forEach((fn) => fn());
  if (controls) return {
    stop,
    cancel: () => {
      shouldListen = false;
    },
    trigger: (event) => {
      shouldListen = true;
      listener(event);
      shouldListen = false;
    }
  };
  return stop;
}
// @__NO_SIDE_EFFECTS__
function useMounted() {
  const isMounted = /* @__PURE__ */ shallowRef(false);
  const instance = getCurrentInstance();
  if (instance) onMounted(() => {
    isMounted.value = true;
  }, instance);
  return isMounted;
}
// @__NO_SIDE_EFFECTS__
function useSupported(callback) {
  const isMounted = /* @__PURE__ */ useMounted();
  return computed(() => {
    isMounted.value;
    return Boolean(callback());
  });
}
function useMutationObserver(target, callback, options = {}) {
  const { window: window$1 = defaultWindow, ...mutationOptions } = options;
  let observer;
  const isSupported = /* @__PURE__ */ useSupported(() => window$1 && "MutationObserver" in window$1);
  const cleanup = () => {
    if (observer) {
      observer.disconnect();
      observer = void 0;
    }
  };
  const stopWatch = watch(computed(() => {
    const items = toArray(toValue(target)).map(unrefElement).filter(notNullish);
    return new Set(items);
  }), (newTargets) => {
    cleanup();
    if (isSupported.value && newTargets.size) {
      observer = new MutationObserver(callback);
      newTargets.forEach((el) => observer.observe(el, mutationOptions));
    }
  }, {
    immediate: true,
    flush: "post"
  });
  const takeRecords = () => {
    return observer === null || observer === void 0 ? void 0 : observer.takeRecords();
  };
  const stop = () => {
    stopWatch();
    cleanup();
  };
  tryOnScopeDispose(stop);
  return {
    isSupported,
    stop,
    takeRecords
  };
}
const ssrWidthSymbol = /* @__PURE__ */ Symbol("vueuse-ssr-width");
// @__NO_SIDE_EFFECTS__
function useSSRWidth() {
  const ssrWidth = hasInjectionContext() ? /* @__PURE__ */ injectLocal(ssrWidthSymbol, null) : null;
  return typeof ssrWidth === "number" ? ssrWidth : void 0;
}
function useMediaQuery(query, options = {}) {
  const { window: window$1 = defaultWindow, ssrWidth = /* @__PURE__ */ useSSRWidth() } = options;
  const isSupported = /* @__PURE__ */ useSupported(() => window$1 && "matchMedia" in window$1 && typeof window$1.matchMedia === "function");
  const ssrSupport = /* @__PURE__ */ shallowRef(typeof ssrWidth === "number");
  const mediaQuery = /* @__PURE__ */ shallowRef();
  const matches2 = /* @__PURE__ */ shallowRef(false);
  const handler = (event) => {
    matches2.value = event.matches;
  };
  watchEffect(() => {
    if (ssrSupport.value) {
      ssrSupport.value = !isSupported.value;
      matches2.value = toValue(query).split(",").some((queryString) => {
        const not = queryString.includes("not all");
        const minWidth = queryString.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);
        const maxWidth = queryString.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);
        let res = Boolean(minWidth || maxWidth);
        if (minWidth && res) res = ssrWidth >= pxValue(minWidth[1]);
        if (maxWidth && res) res = ssrWidth <= pxValue(maxWidth[1]);
        return not ? !res : res;
      });
      return;
    }
    if (!isSupported.value) return;
    mediaQuery.value = window$1.matchMedia(toValue(query));
    matches2.value = mediaQuery.value.matches;
  });
  useEventListener(mediaQuery, "change", handler, { passive: true });
  return computed(() => matches2.value);
}
const _global = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
const globalKey = "__vueuse_ssr_handlers__";
const handlers$1 = /* @__PURE__ */ getHandlers();
function getHandlers() {
  if (!(globalKey in _global)) _global[globalKey] = _global[globalKey] || {};
  return _global[globalKey];
}
function getSSRHandler(key, fallback) {
  return handlers$1[key] || fallback;
}
function guessSerializerType(rawInit) {
  return rawInit == null ? "any" : rawInit instanceof Set ? "set" : rawInit instanceof Map ? "map" : rawInit instanceof Date ? "date" : typeof rawInit === "boolean" ? "boolean" : typeof rawInit === "string" ? "string" : typeof rawInit === "object" ? "object" : !Number.isNaN(rawInit) ? "number" : "any";
}
const StorageSerializers = {
  boolean: {
    read: (v2) => v2 === "true",
    write: (v2) => String(v2)
  },
  object: {
    read: (v2) => JSON.parse(v2),
    write: (v2) => JSON.stringify(v2)
  },
  number: {
    read: (v2) => Number.parseFloat(v2),
    write: (v2) => String(v2)
  },
  any: {
    read: (v2) => v2,
    write: (v2) => String(v2)
  },
  string: {
    read: (v2) => v2,
    write: (v2) => String(v2)
  },
  map: {
    read: (v2) => new Map(JSON.parse(v2)),
    write: (v2) => JSON.stringify(Array.from(v2.entries()))
  },
  set: {
    read: (v2) => new Set(JSON.parse(v2)),
    write: (v2) => JSON.stringify(Array.from(v2))
  },
  date: {
    read: (v2) => new Date(v2),
    write: (v2) => v2.toISOString()
  }
};
const customStorageEventName = "vueuse-storage";
function useStorage(key, defaults$1, storage, options = {}) {
  var _options$serializer;
  const { flush = "pre", deep = true, listenToStorageChanges = true, writeDefaults = true, mergeDefaults = false, shallow, window: window$1 = defaultWindow, eventFilter, onError = (e) => {
    console.error(e);
  }, initOnMounted } = options;
  const data = (shallow ? shallowRef : ref)(defaults$1);
  const keyComputed = computed(() => toValue(key));
  if (!storage) try {
    storage = getSSRHandler("getDefaultStorage", () => defaultWindow === null || defaultWindow === void 0 ? void 0 : defaultWindow.localStorage)();
  } catch (e) {
    onError(e);
  }
  if (!storage) return data;
  const rawInit = toValue(defaults$1);
  const type = guessSerializerType(rawInit);
  const serializer = (_options$serializer = options.serializer) !== null && _options$serializer !== void 0 ? _options$serializer : StorageSerializers[type];
  const { pause: pauseWatch, resume: resumeWatch } = watchPausable(data, (newValue) => write(newValue), {
    flush,
    deep,
    eventFilter
  });
  watch(keyComputed, () => update(), { flush });
  let firstMounted = false;
  const onStorageEvent = (ev) => {
    if (initOnMounted && !firstMounted) return;
    update(ev);
  };
  const onStorageCustomEvent = (ev) => {
    if (initOnMounted && !firstMounted) return;
    updateFromCustomEvent(ev);
  };
  if (window$1 && listenToStorageChanges) if (storage instanceof Storage) useEventListener(window$1, "storage", onStorageEvent, { passive: true });
  else useEventListener(window$1, customStorageEventName, onStorageCustomEvent);
  if (initOnMounted) tryOnMounted(() => {
    firstMounted = true;
    update();
  });
  else update();
  function dispatchWriteEvent(oldValue, newValue) {
    if (window$1) {
      const payload = {
        key: keyComputed.value,
        oldValue,
        newValue,
        storageArea: storage
      };
      window$1.dispatchEvent(storage instanceof Storage ? new StorageEvent("storage", payload) : new CustomEvent(customStorageEventName, { detail: payload }));
    }
  }
  function write(v2) {
    try {
      const oldValue = storage.getItem(keyComputed.value);
      if (v2 == null) {
        dispatchWriteEvent(oldValue, null);
        storage.removeItem(keyComputed.value);
      } else {
        const serialized = serializer.write(v2);
        if (oldValue !== serialized) {
          storage.setItem(keyComputed.value, serialized);
          dispatchWriteEvent(oldValue, serialized);
        }
      }
    } catch (e) {
      onError(e);
    }
  }
  function read(event) {
    const rawValue = event ? event.newValue : storage.getItem(keyComputed.value);
    if (rawValue == null) {
      if (writeDefaults && rawInit != null) storage.setItem(keyComputed.value, serializer.write(rawInit));
      return rawInit;
    } else if (!event && mergeDefaults) {
      const value = serializer.read(rawValue);
      if (typeof mergeDefaults === "function") return mergeDefaults(value, rawInit);
      else if (type === "object" && !Array.isArray(value)) return {
        ...rawInit,
        ...value
      };
      return value;
    } else if (typeof rawValue !== "string") return rawValue;
    else return serializer.read(rawValue);
  }
  function update(event) {
    if (event && event.storageArea !== storage) return;
    if (event && event.key == null) {
      data.value = rawInit;
      return;
    }
    if (event && event.key !== keyComputed.value) return;
    pauseWatch();
    try {
      const serializedData = serializer.write(data.value);
      if (event === void 0 || (event === null || event === void 0 ? void 0 : event.newValue) !== serializedData) data.value = read(event);
    } catch (e) {
      onError(e);
    } finally {
      if (event) nextTick(resumeWatch);
      else resumeWatch();
    }
  }
  function updateFromCustomEvent(event) {
    update(event.detail);
  }
  return data;
}
function useResizeObserver(target, callback, options = {}) {
  const { window: window$1 = defaultWindow, ...observerOptions } = options;
  let observer;
  const isSupported = /* @__PURE__ */ useSupported(() => window$1 && "ResizeObserver" in window$1);
  const cleanup = () => {
    if (observer) {
      observer.disconnect();
      observer = void 0;
    }
  };
  const stopWatch = watch(computed(() => {
    const _targets = toValue(target);
    return Array.isArray(_targets) ? _targets.map((el) => unrefElement(el)) : [unrefElement(_targets)];
  }), (els) => {
    cleanup();
    if (isSupported.value && window$1) {
      observer = new ResizeObserver(callback);
      for (const _el of els) if (_el) observer.observe(_el, observerOptions);
    }
  }, {
    immediate: true,
    flush: "post"
  });
  const stop = () => {
    cleanup();
    stopWatch();
  };
  tryOnScopeDispose(stop);
  return {
    isSupported,
    stop
  };
}
function useElementSize(target, initialSize = {
  width: 0,
  height: 0
}, options = {}) {
  const { window: window$1 = defaultWindow, box = "content-box" } = options;
  const isSVG = computed(() => {
    var _unrefElement;
    return (_unrefElement = unrefElement(target)) === null || _unrefElement === void 0 || (_unrefElement = _unrefElement.namespaceURI) === null || _unrefElement === void 0 ? void 0 : _unrefElement.includes("svg");
  });
  const width = /* @__PURE__ */ shallowRef(initialSize.width);
  const height = /* @__PURE__ */ shallowRef(initialSize.height);
  const { stop: stop1 } = useResizeObserver(target, ([entry]) => {
    const boxSize = box === "border-box" ? entry.borderBoxSize : box === "content-box" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;
    if (window$1 && isSVG.value) {
      const $elem = unrefElement(target);
      if ($elem) {
        const rect = $elem.getBoundingClientRect();
        width.value = rect.width;
        height.value = rect.height;
      }
    } else if (boxSize) {
      const formatBoxSize = toArray(boxSize);
      width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);
      height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);
    } else {
      width.value = entry.contentRect.width;
      height.value = entry.contentRect.height;
    }
  }, options);
  tryOnMounted(() => {
    const ele = unrefElement(target);
    if (ele) {
      width.value = "offsetWidth" in ele ? ele.offsetWidth : initialSize.width;
      height.value = "offsetHeight" in ele ? ele.offsetHeight : initialSize.height;
    }
  });
  const stop2 = watch(() => unrefElement(target), (ele) => {
    width.value = ele ? initialSize.width : 0;
    height.value = ele ? initialSize.height : 0;
  });
  function stop() {
    stop1();
    stop2();
  }
  return {
    width,
    height,
    stop
  };
}
const ARRIVED_STATE_THRESHOLD_PIXELS = 1;
function useScroll(element, options = {}) {
  const { throttle = 0, idle = 200, onStop = noop$2, onScroll = noop$2, offset: offset2 = {
    left: 0,
    right: 0,
    top: 0,
    bottom: 0
  }, observe: _observe = { mutation: false }, eventListenerOptions = {
    capture: false,
    passive: true
  }, behavior = "auto", window: window$1 = defaultWindow, onError = (e) => {
    console.error(e);
  } } = options;
  const observe = typeof _observe === "boolean" ? { mutation: _observe } : _observe;
  const internalX = /* @__PURE__ */ shallowRef(0);
  const internalY = /* @__PURE__ */ shallowRef(0);
  const x2 = computed({
    get() {
      return internalX.value;
    },
    set(x$1) {
      scrollTo(x$1, void 0);
    }
  });
  const y2 = computed({
    get() {
      return internalY.value;
    },
    set(y$1) {
      scrollTo(void 0, y$1);
    }
  });
  function scrollTo(_x, _y) {
    var _ref, _toValue, _toValue2, _document;
    if (!window$1) return;
    const _element = toValue(element);
    if (!_element) return;
    (_ref = _element instanceof Document ? window$1.document.body : _element) === null || _ref === void 0 || _ref.scrollTo({
      top: (_toValue = toValue(_y)) !== null && _toValue !== void 0 ? _toValue : y2.value,
      left: (_toValue2 = toValue(_x)) !== null && _toValue2 !== void 0 ? _toValue2 : x2.value,
      behavior: toValue(behavior)
    });
    const scrollContainer = (_element === null || _element === void 0 || (_document = _element.document) === null || _document === void 0 ? void 0 : _document.documentElement) || (_element === null || _element === void 0 ? void 0 : _element.documentElement) || _element;
    if (x2 != null) internalX.value = scrollContainer.scrollLeft;
    if (y2 != null) internalY.value = scrollContainer.scrollTop;
  }
  const isScrolling = /* @__PURE__ */ shallowRef(false);
  const arrivedState = /* @__PURE__ */ reactive({
    left: true,
    right: false,
    top: true,
    bottom: false
  });
  const directions = /* @__PURE__ */ reactive({
    left: false,
    right: false,
    top: false,
    bottom: false
  });
  const onScrollEnd = (e) => {
    if (!isScrolling.value) return;
    isScrolling.value = false;
    directions.left = false;
    directions.right = false;
    directions.top = false;
    directions.bottom = false;
    onStop(e);
  };
  const onScrollEndDebounced = /* @__PURE__ */ useDebounceFn(onScrollEnd, throttle + idle);
  const setArrivedState = (target) => {
    var _document2;
    if (!window$1) return;
    const el = (target === null || target === void 0 || (_document2 = target.document) === null || _document2 === void 0 ? void 0 : _document2.documentElement) || (target === null || target === void 0 ? void 0 : target.documentElement) || unrefElement(target);
    const { display, flexDirection, direction } = window$1.getComputedStyle(el);
    const directionMultipler = direction === "rtl" ? -1 : 1;
    const scrollLeft = el.scrollLeft;
    directions.left = scrollLeft < internalX.value;
    directions.right = scrollLeft > internalX.value;
    const left = Math.abs(scrollLeft * directionMultipler) <= (offset2.left || 0);
    const right = Math.abs(scrollLeft * directionMultipler) + el.clientWidth >= el.scrollWidth - (offset2.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;
    if (display === "flex" && flexDirection === "row-reverse") {
      arrivedState.left = right;
      arrivedState.right = left;
    } else {
      arrivedState.left = left;
      arrivedState.right = right;
    }
    internalX.value = scrollLeft;
    let scrollTop = el.scrollTop;
    if (target === window$1.document && !scrollTop) scrollTop = window$1.document.body.scrollTop;
    directions.top = scrollTop < internalY.value;
    directions.bottom = scrollTop > internalY.value;
    const top = Math.abs(scrollTop) <= (offset2.top || 0);
    const bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset2.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;
    if (display === "flex" && flexDirection === "column-reverse") {
      arrivedState.top = bottom;
      arrivedState.bottom = top;
    } else {
      arrivedState.top = top;
      arrivedState.bottom = bottom;
    }
    internalY.value = scrollTop;
  };
  const onScrollHandler = (e) => {
    var _documentElement;
    if (!window$1) return;
    setArrivedState((_documentElement = e.target.documentElement) !== null && _documentElement !== void 0 ? _documentElement : e.target);
    isScrolling.value = true;
    onScrollEndDebounced(e);
    onScroll(e);
  };
  useEventListener(element, "scroll", throttle ? /* @__PURE__ */ useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler, eventListenerOptions);
  tryOnMounted(() => {
    try {
      const _element = toValue(element);
      if (!_element) return;
      setArrivedState(_element);
    } catch (e) {
      onError(e);
    }
  });
  if ((observe === null || observe === void 0 ? void 0 : observe.mutation) && element != null && element !== window$1 && element !== document) useMutationObserver(element, () => {
    const _element = toValue(element);
    if (!_element) return;
    setArrivedState(_element);
  }, {
    attributes: true,
    childList: true,
    subtree: true
  });
  useEventListener(element, "scrollend", onScrollEnd, eventListenerOptions);
  return {
    x: x2,
    y: y2,
    isScrolling,
    arrivedState,
    directions,
    measure() {
      const _element = toValue(element);
      if (window$1 && _element) setArrivedState(_element);
    }
  };
}
const DefaultMagicKeysAliasMap = {
  ctrl: "control",
  command: "meta",
  cmd: "meta",
  option: "alt",
  up: "arrowup",
  down: "arrowdown",
  left: "arrowleft",
  right: "arrowright"
};
function useMagicKeys(options = {}) {
  const { reactive: useReactive = false, target = defaultWindow, aliasMap = DefaultMagicKeysAliasMap, passive = true, onEventFired = noop$2 } = options;
  const current = /* @__PURE__ */ reactive(/* @__PURE__ */ new Set());
  const obj = {
    toJSON() {
      return {};
    },
    current
  };
  const refs = useReactive ? /* @__PURE__ */ reactive(obj) : obj;
  const metaDeps = /* @__PURE__ */ new Set();
  const depsMap = /* @__PURE__ */ new Map([
    ["Meta", metaDeps],
    ["Shift", /* @__PURE__ */ new Set()],
    ["Alt", /* @__PURE__ */ new Set()]
  ]);
  const usedKeys = /* @__PURE__ */ new Set();
  function setRefs(key, value) {
    if (key in refs) if (useReactive) refs[key] = value;
    else refs[key].value = value;
  }
  function reset2() {
    current.clear();
    for (const key of usedKeys) setRefs(key, false);
  }
  function updateDeps(value, e, keys$1) {
    if (!value || typeof e.getModifierState !== "function") return;
    for (const [modifier, depsSet] of depsMap) if (e.getModifierState(modifier)) {
      keys$1.forEach((key) => depsSet.add(key));
      break;
    }
  }
  function clearDeps(value, key) {
    if (value) return;
    const depsMapKey = `${key[0].toUpperCase()}${key.slice(1)}`;
    const deps = depsMap.get(depsMapKey);
    if (!["shift", "alt"].includes(key) || !deps) return;
    const depsArray = Array.from(deps);
    const depsIndex = depsArray.indexOf(key);
    depsArray.forEach((key$1, index2) => {
      if (index2 >= depsIndex) {
        current.delete(key$1);
        setRefs(key$1, false);
      }
    });
    deps.clear();
  }
  function updateRefs(e, value) {
    var _e$key, _e$code;
    const key = (_e$key = e.key) === null || _e$key === void 0 ? void 0 : _e$key.toLowerCase();
    const values = [(_e$code = e.code) === null || _e$code === void 0 ? void 0 : _e$code.toLowerCase(), key].filter(Boolean);
    if (!key) return;
    if (key) if (value) current.add(key);
    else current.delete(key);
    for (const key$1 of values) {
      usedKeys.add(key$1);
      setRefs(key$1, value);
    }
    updateDeps(value, e, [...current, ...values]);
    clearDeps(value, key);
    if (key === "meta" && !value) {
      metaDeps.forEach((key$1) => {
        current.delete(key$1);
        setRefs(key$1, false);
      });
      metaDeps.clear();
    }
  }
  useEventListener(target, "keydown", (e) => {
    updateRefs(e, true);
    return onEventFired(e);
  }, { passive });
  useEventListener(target, "keyup", (e) => {
    updateRefs(e, false);
    return onEventFired(e);
  }, { passive });
  useEventListener("blur", reset2, { passive });
  useEventListener("focus", reset2, { passive });
  const proxy = new Proxy(refs, { get(target$1, prop, rec) {
    if (typeof prop !== "string") return Reflect.get(target$1, prop, rec);
    prop = prop.toLowerCase();
    if (prop in aliasMap) prop = aliasMap[prop];
    if (!(prop in refs)) if (/[+_-]/.test(prop)) {
      const keys$1 = prop.split(/[+_-]/g).map((i) => i.trim());
      refs[prop] = computed(() => keys$1.map((key) => toValue(proxy[key])).every(Boolean));
    } else refs[prop] = /* @__PURE__ */ shallowRef(false);
    const r2 = Reflect.get(target$1, prop, rec);
    return useReactive ? toValue(r2) : r2;
  } });
  return proxy;
}
function useWindowScroll(options = {}) {
  const { window: window$1 = defaultWindow, ...rest } = options;
  return useScroll(window$1, rest);
}
// @__NO_SIDE_EFFECTS__
function useWindowSize(options = {}) {
  const { window: window$1 = defaultWindow, initialWidth = Number.POSITIVE_INFINITY, initialHeight = Number.POSITIVE_INFINITY, listenOrientation = true, includeScrollbar = true, type = "inner" } = options;
  const width = /* @__PURE__ */ shallowRef(initialWidth);
  const height = /* @__PURE__ */ shallowRef(initialHeight);
  const update = () => {
    if (window$1) if (type === "outer") {
      width.value = window$1.outerWidth;
      height.value = window$1.outerHeight;
    } else if (type === "visual" && window$1.visualViewport) {
      const { width: visualViewportWidth, height: visualViewportHeight, scale } = window$1.visualViewport;
      width.value = Math.round(visualViewportWidth * scale);
      height.value = Math.round(visualViewportHeight * scale);
    } else if (includeScrollbar) {
      width.value = window$1.innerWidth;
      height.value = window$1.innerHeight;
    } else {
      width.value = window$1.document.documentElement.clientWidth;
      height.value = window$1.document.documentElement.clientHeight;
    }
  };
  update();
  tryOnMounted(update);
  const listenerOptions = { passive: true };
  useEventListener("resize", update, listenerOptions);
  if (window$1 && type === "visual" && window$1.visualViewport) useEventListener(window$1.visualViewport, "resize", update, listenerOptions);
  if (listenOrientation) watch(useMediaQuery("(orientation: portrait)"), () => update());
  return {
    width,
    height
  };
}
const isBrowser = typeof document !== "undefined";
function isRouteComponent(component) {
  return typeof component === "object" || "displayName" in component || "props" in component || "__vccOpts" in component;
}
function isESModule(obj) {
  return obj.__esModule || obj[Symbol.toStringTag] === "Module" || obj.default && isRouteComponent(obj.default);
}
const assign$1 = Object.assign;
function applyToParams(fn, params) {
  const newParams = {};
  for (const key in params) {
    const value = params[key];
    newParams[key] = isArray(value) ? value.map(fn) : fn(value);
  }
  return newParams;
}
const noop$1 = () => {
};
const isArray = Array.isArray;
function mergeOptions(defaults2, partialOptions) {
  const options = {};
  for (const key in defaults2) options[key] = key in partialOptions ? partialOptions[key] : defaults2[key];
  return options;
}
let ErrorTypes = /* @__PURE__ */ (function(ErrorTypes2) {
  ErrorTypes2[ErrorTypes2["MATCHER_NOT_FOUND"] = 1] = "MATCHER_NOT_FOUND";
  ErrorTypes2[ErrorTypes2["NAVIGATION_GUARD_REDIRECT"] = 2] = "NAVIGATION_GUARD_REDIRECT";
  ErrorTypes2[ErrorTypes2["NAVIGATION_ABORTED"] = 4] = "NAVIGATION_ABORTED";
  ErrorTypes2[ErrorTypes2["NAVIGATION_CANCELLED"] = 8] = "NAVIGATION_CANCELLED";
  ErrorTypes2[ErrorTypes2["NAVIGATION_DUPLICATED"] = 16] = "NAVIGATION_DUPLICATED";
  return ErrorTypes2;
})({});
const NavigationFailureSymbol = /* @__PURE__ */ Symbol("");
({
  [ErrorTypes.MATCHER_NOT_FOUND]({ location: location2, currentLocation }) {
    return `No match for
 ${JSON.stringify(location2)}${currentLocation ? "\nwhile being at\n" + JSON.stringify(currentLocation) : ""}`;
  },
  [ErrorTypes.NAVIGATION_GUARD_REDIRECT]({ from: from2, to }) {
    return `Redirected from "${from2.fullPath}" to "${stringifyRoute(to)}" via a navigation guard.`;
  },
  [ErrorTypes.NAVIGATION_ABORTED]({ from: from2, to }) {
    return `Navigation aborted from "${from2.fullPath}" to "${to.fullPath}" via a navigation guard.`;
  },
  [ErrorTypes.NAVIGATION_CANCELLED]({ from: from2, to }) {
    return `Navigation cancelled from "${from2.fullPath}" to "${to.fullPath}" with a new navigation.`;
  },
  [ErrorTypes.NAVIGATION_DUPLICATED]({ from: from2, to }) {
    return `Avoided redundant navigation to current location: "${from2.fullPath}".`;
  }
});
function createRouterError(type, params) {
  return assign$1(/* @__PURE__ */ new Error(), {
    type,
    [NavigationFailureSymbol]: true
  }, params);
}
function isNavigationFailure(error, type) {
  return error instanceof Error && NavigationFailureSymbol in error && (type == null || !!(error.type & type));
}
const propertiesToLog = [
  "params",
  "query",
  "hash"
];
function stringifyRoute(to) {
  if (typeof to === "string") return to;
  if (to.path != null) return to.path;
  const location2 = {};
  for (const key of propertiesToLog) if (key in to) location2[key] = to[key];
  return JSON.stringify(location2, null, 2);
}
const matchedRouteKey = /* @__PURE__ */ Symbol("");
const viewDepthKey = /* @__PURE__ */ Symbol("");
const routerKey = /* @__PURE__ */ Symbol("");
const routeLocationKey = /* @__PURE__ */ Symbol("");
const routerViewLocationKey = /* @__PURE__ */ Symbol("");
function useRouter() {
  return inject(routerKey);
}
function useRoute(_name) {
  return inject(routeLocationKey);
}
const HASH_RE = /#/g;
const AMPERSAND_RE = /&/g;
const SLASH_RE = /\//g;
const EQUAL_RE = /=/g;
const IM_RE = /\?/g;
const PLUS_RE = /\+/g;
const ENC_BRACKET_OPEN_RE = /%5B/g;
const ENC_BRACKET_CLOSE_RE = /%5D/g;
const ENC_CARET_RE = /%5E/g;
const ENC_BACKTICK_RE = /%60/g;
const ENC_CURLY_OPEN_RE = /%7B/g;
const ENC_PIPE_RE = /%7C/g;
const ENC_CURLY_CLOSE_RE = /%7D/g;
const ENC_SPACE_RE = /%20/g;
function commonEncode(text) {
  return text == null ? "" : encodeURI("" + text).replace(ENC_PIPE_RE, "|").replace(ENC_BRACKET_OPEN_RE, "[").replace(ENC_BRACKET_CLOSE_RE, "]");
}
function encodeHash(text) {
  return commonEncode(text).replace(ENC_CURLY_OPEN_RE, "{").replace(ENC_CURLY_CLOSE_RE, "}").replace(ENC_CARET_RE, "^");
}
function encodeQueryValue(text) {
  return commonEncode(text).replace(PLUS_RE, "%2B").replace(ENC_SPACE_RE, "+").replace(HASH_RE, "%23").replace(AMPERSAND_RE, "%26").replace(ENC_BACKTICK_RE, "`").replace(ENC_CURLY_OPEN_RE, "{").replace(ENC_CURLY_CLOSE_RE, "}").replace(ENC_CARET_RE, "^");
}
function encodeQueryKey(text) {
  return encodeQueryValue(text).replace(EQUAL_RE, "%3D");
}
function encodePath(text) {
  return commonEncode(text).replace(HASH_RE, "%23").replace(IM_RE, "%3F");
}
function encodeParam(text) {
  return encodePath(text).replace(SLASH_RE, "%2F");
}
function decode(text) {
  if (text == null) return null;
  try {
    return decodeURIComponent("" + text);
  } catch (err) {
  }
  return "" + text;
}
const TRAILING_SLASH_RE = /\/$/;
const removeTrailingSlash = (path) => path.replace(TRAILING_SLASH_RE, "");
function parseURL(parseQuery2, location2, currentLocation = "/") {
  let path, query = {}, searchString = "", hash = "";
  const hashPos = location2.indexOf("#");
  let searchPos = location2.indexOf("?");
  searchPos = hashPos >= 0 && searchPos > hashPos ? -1 : searchPos;
  if (searchPos >= 0) {
    path = location2.slice(0, searchPos);
    searchString = location2.slice(searchPos, hashPos > 0 ? hashPos : location2.length);
    query = parseQuery2(searchString.slice(1));
  }
  if (hashPos >= 0) {
    path = path || location2.slice(0, hashPos);
    hash = location2.slice(hashPos, location2.length);
  }
  path = resolveRelativePath(path != null ? path : location2, currentLocation);
  return {
    fullPath: path + searchString + hash,
    path,
    query,
    hash: decode(hash)
  };
}
function stringifyURL(stringifyQuery2, location2) {
  const query = location2.query ? stringifyQuery2(location2.query) : "";
  return location2.path + (query && "?") + query + (location2.hash || "");
}
function stripBase(pathname, base2) {
  if (!base2 || !pathname.toLowerCase().startsWith(base2.toLowerCase())) return pathname;
  return pathname.slice(base2.length) || "/";
}
function isSameRouteLocation(stringifyQuery2, a2, b2) {
  const aLastIndex = a2.matched.length - 1;
  const bLastIndex = b2.matched.length - 1;
  return aLastIndex > -1 && aLastIndex === bLastIndex && isSameRouteRecord(a2.matched[aLastIndex], b2.matched[bLastIndex]) && isSameRouteLocationParams(a2.params, b2.params) && stringifyQuery2(a2.query) === stringifyQuery2(b2.query) && a2.hash === b2.hash;
}
function isSameRouteRecord(a2, b2) {
  return (a2.aliasOf || a2) === (b2.aliasOf || b2);
}
function isSameRouteLocationParams(a2, b2) {
  if (Object.keys(a2).length !== Object.keys(b2).length) return false;
  for (var key in a2) if (!isSameRouteLocationParamsValue(a2[key], b2[key])) return false;
  return true;
}
function isSameRouteLocationParamsValue(a2, b2) {
  return isArray(a2) ? isEquivalentArray(a2, b2) : isArray(b2) ? isEquivalentArray(b2, a2) : (a2 && a2.valueOf()) === (b2 && b2.valueOf());
}
function isEquivalentArray(a2, b2) {
  return isArray(b2) ? a2.length === b2.length && a2.every((value, i) => value === b2[i]) : a2.length === 1 && a2[0] === b2;
}
function resolveRelativePath(to, from2) {
  if (to.startsWith("/")) return to;
  if (!to) return from2;
  const fromSegments = from2.split("/");
  const toSegments = to.split("/");
  const lastToSegment = toSegments[toSegments.length - 1];
  if (lastToSegment === ".." || lastToSegment === ".") toSegments.push("");
  let position = fromSegments.length - 1;
  let toPosition;
  let segment;
  for (toPosition = 0; toPosition < toSegments.length; toPosition++) {
    segment = toSegments[toPosition];
    if (segment === ".") continue;
    if (segment === "..") {
      if (position > 1) position--;
    } else break;
  }
  return fromSegments.slice(0, position).join("/") + "/" + toSegments.slice(toPosition).join("/");
}
const START_LOCATION_NORMALIZED = {
  path: "/",
  name: void 0,
  params: {},
  query: {},
  hash: "",
  fullPath: "/",
  matched: [],
  meta: {},
  redirectedFrom: void 0
};
let NavigationType = /* @__PURE__ */ (function(NavigationType2) {
  NavigationType2["pop"] = "pop";
  NavigationType2["push"] = "push";
  return NavigationType2;
})({});
let NavigationDirection = /* @__PURE__ */ (function(NavigationDirection2) {
  NavigationDirection2["back"] = "back";
  NavigationDirection2["forward"] = "forward";
  NavigationDirection2["unknown"] = "";
  return NavigationDirection2;
})({});
function normalizeBase(base2) {
  if (!base2) if (isBrowser) {
    const baseEl = document.querySelector("base");
    base2 = baseEl && baseEl.getAttribute("href") || "/";
    base2 = base2.replace(/^\w+:\/\/[^\/]+/, "");
  } else base2 = "/";
  if (base2[0] !== "/" && base2[0] !== "#") base2 = "/" + base2;
  return removeTrailingSlash(base2);
}
const BEFORE_HASH_RE = /^[^#]+#/;
function createHref(base2, location2) {
  return base2.replace(BEFORE_HASH_RE, "#") + location2;
}
function getElementPosition(el, offset2) {
  const docRect = document.documentElement.getBoundingClientRect();
  const elRect = el.getBoundingClientRect();
  return {
    behavior: offset2.behavior,
    left: elRect.left - docRect.left - (offset2.left || 0),
    top: elRect.top - docRect.top - (offset2.top || 0)
  };
}
const computeScrollPosition = () => ({
  left: window.scrollX,
  top: window.scrollY
});
function scrollToPosition(position) {
  let scrollToOptions;
  if ("el" in position) {
    const positionEl = position.el;
    const isIdSelector = typeof positionEl === "string" && positionEl.startsWith("#");
    const el = typeof positionEl === "string" ? isIdSelector ? document.getElementById(positionEl.slice(1)) : document.querySelector(positionEl) : positionEl;
    if (!el) {
      return;
    }
    scrollToOptions = getElementPosition(el, position);
  } else scrollToOptions = position;
  if ("scrollBehavior" in document.documentElement.style) window.scrollTo(scrollToOptions);
  else window.scrollTo(scrollToOptions.left != null ? scrollToOptions.left : window.scrollX, scrollToOptions.top != null ? scrollToOptions.top : window.scrollY);
}
function getScrollKey(path, delta) {
  return (history.state ? history.state.position - delta : -1) + path;
}
const scrollPositions = /* @__PURE__ */ new Map();
function saveScrollPosition(key, scrollPosition) {
  scrollPositions.set(key, scrollPosition);
}
function getSavedScrollPosition(key) {
  const scroll = scrollPositions.get(key);
  scrollPositions.delete(key);
  return scroll;
}
function isRouteLocation(route) {
  return typeof route === "string" || route && typeof route === "object";
}
function isRouteName(name) {
  return typeof name === "string" || typeof name === "symbol";
}
function parseQuery(search) {
  const query = {};
  if (search === "" || search === "?") return query;
  const searchParams = (search[0] === "?" ? search.slice(1) : search).split("&");
  for (let i = 0; i < searchParams.length; ++i) {
    const searchParam = searchParams[i].replace(PLUS_RE, " ");
    const eqPos = searchParam.indexOf("=");
    const key = decode(eqPos < 0 ? searchParam : searchParam.slice(0, eqPos));
    const value = eqPos < 0 ? null : decode(searchParam.slice(eqPos + 1));
    if (key in query) {
      let currentValue = query[key];
      if (!isArray(currentValue)) currentValue = query[key] = [currentValue];
      currentValue.push(value);
    } else query[key] = value;
  }
  return query;
}
function stringifyQuery(query) {
  let search = "";
  for (let key in query) {
    const value = query[key];
    key = encodeQueryKey(key);
    if (value == null) {
      if (value !== void 0) search += (search.length ? "&" : "") + key;
      continue;
    }
    (isArray(value) ? value.map((v2) => v2 && encodeQueryValue(v2)) : [value && encodeQueryValue(value)]).forEach((value2) => {
      if (value2 !== void 0) {
        search += (search.length ? "&" : "") + key;
        if (value2 != null) search += "=" + value2;
      }
    });
  }
  return search;
}
function normalizeQuery(query) {
  const normalizedQuery = {};
  for (const key in query) {
    const value = query[key];
    if (value !== void 0) normalizedQuery[key] = isArray(value) ? value.map((v2) => v2 == null ? null : "" + v2) : value == null ? value : "" + value;
  }
  return normalizedQuery;
}
function useCallbacks() {
  let handlers2 = [];
  function add(handler) {
    handlers2.push(handler);
    return () => {
      const i = handlers2.indexOf(handler);
      if (i > -1) handlers2.splice(i, 1);
    };
  }
  function reset2() {
    handlers2 = [];
  }
  return {
    add,
    list: () => handlers2.slice(),
    reset: reset2
  };
}
function guardToPromiseFn(guard, to, from2, record, name, runWithContext = (fn) => fn()) {
  const enterCallbackArray = record && (record.enterCallbacks[name] = record.enterCallbacks[name] || []);
  return () => new Promise((resolve2, reject) => {
    const next = (valid) => {
      if (valid === false) reject(createRouterError(ErrorTypes.NAVIGATION_ABORTED, {
        from: from2,
        to
      }));
      else if (valid instanceof Error) reject(valid);
      else if (isRouteLocation(valid)) reject(createRouterError(ErrorTypes.NAVIGATION_GUARD_REDIRECT, {
        from: to,
        to: valid
      }));
      else {
        if (enterCallbackArray && record.enterCallbacks[name] === enterCallbackArray && typeof valid === "function") enterCallbackArray.push(valid);
        resolve2();
      }
    };
    const guardReturn = runWithContext(() => guard.call(record && record.instances[name], to, from2, next));
    let guardCall = Promise.resolve(guardReturn);
    if (guard.length < 3) guardCall = guardCall.then(next);
    guardCall.catch((err) => reject(err));
  });
}
function extractComponentsGuards(matched, guardType, to, from2, runWithContext = (fn) => fn()) {
  const guards = [];
  for (const record of matched) {
    for (const name in record.components) {
      let rawComponent = record.components[name];
      if (guardType !== "beforeRouteEnter" && !record.instances[name]) continue;
      if (isRouteComponent(rawComponent)) {
        const guard = (rawComponent.__vccOpts || rawComponent)[guardType];
        guard && guards.push(guardToPromiseFn(guard, to, from2, record, name, runWithContext));
      } else {
        let componentPromise = rawComponent();
        guards.push(() => componentPromise.then((resolved) => {
          if (!resolved) throw new Error(`Couldn't resolve component "${name}" at "${record.path}"`);
          const resolvedComponent = isESModule(resolved) ? resolved.default : resolved;
          record.mods[name] = resolved;
          record.components[name] = resolvedComponent;
          const guard = (resolvedComponent.__vccOpts || resolvedComponent)[guardType];
          return guard && guardToPromiseFn(guard, to, from2, record, name, runWithContext)();
        }));
      }
    }
  }
  return guards;
}
function extractChangingRecords(to, from2) {
  const leavingRecords = [];
  const updatingRecords = [];
  const enteringRecords = [];
  const len = Math.max(from2.matched.length, to.matched.length);
  for (let i = 0; i < len; i++) {
    const recordFrom = from2.matched[i];
    if (recordFrom) if (to.matched.find((record) => isSameRouteRecord(record, recordFrom))) updatingRecords.push(recordFrom);
    else leavingRecords.push(recordFrom);
    const recordTo = to.matched[i];
    if (recordTo) {
      if (!from2.matched.find((record) => isSameRouteRecord(record, recordTo))) enteringRecords.push(recordTo);
    }
  }
  return [
    leavingRecords,
    updatingRecords,
    enteringRecords
  ];
}
let createBaseLocation = () => location.protocol + "//" + location.host;
function createCurrentLocation(base2, location2) {
  const { pathname, search, hash } = location2;
  const hashPos = base2.indexOf("#");
  if (hashPos > -1) {
    let slicePos = hash.includes(base2.slice(hashPos)) ? base2.slice(hashPos).length : 1;
    let pathFromHash = hash.slice(slicePos);
    if (pathFromHash[0] !== "/") pathFromHash = "/" + pathFromHash;
    return stripBase(pathFromHash, "");
  }
  return stripBase(pathname, base2) + search + hash;
}
function useHistoryListeners(base2, historyState, currentLocation, replace2) {
  let listeners = [];
  let teardowns = [];
  let pauseState = null;
  const popStateHandler = ({ state }) => {
    const to = createCurrentLocation(base2, location);
    const from2 = currentLocation.value;
    const fromState = historyState.value;
    let delta = 0;
    if (state) {
      currentLocation.value = to;
      historyState.value = state;
      if (pauseState && pauseState === from2) {
        pauseState = null;
        return;
      }
      delta = fromState ? state.position - fromState.position : 0;
    } else replace2(to);
    listeners.forEach((listener) => {
      listener(currentLocation.value, from2, {
        delta,
        type: NavigationType.pop,
        direction: delta ? delta > 0 ? NavigationDirection.forward : NavigationDirection.back : NavigationDirection.unknown
      });
    });
  };
  function pauseListeners() {
    pauseState = currentLocation.value;
  }
  function listen(callback) {
    listeners.push(callback);
    const teardown = () => {
      const index2 = listeners.indexOf(callback);
      if (index2 > -1) listeners.splice(index2, 1);
    };
    teardowns.push(teardown);
    return teardown;
  }
  function beforeUnloadListener() {
    if (document.visibilityState === "hidden") {
      const { history: history2 } = window;
      if (!history2.state) return;
      history2.replaceState(assign$1({}, history2.state, { scroll: computeScrollPosition() }), "");
    }
  }
  function destroy() {
    for (const teardown of teardowns) teardown();
    teardowns = [];
    window.removeEventListener("popstate", popStateHandler);
    window.removeEventListener("pagehide", beforeUnloadListener);
    document.removeEventListener("visibilitychange", beforeUnloadListener);
  }
  window.addEventListener("popstate", popStateHandler);
  window.addEventListener("pagehide", beforeUnloadListener);
  document.addEventListener("visibilitychange", beforeUnloadListener);
  return {
    pauseListeners,
    listen,
    destroy
  };
}
function buildState(back, current, forward, replaced = false, computeScroll = false) {
  return {
    back,
    current,
    forward,
    replaced,
    position: window.history.length,
    scroll: computeScroll ? computeScrollPosition() : null
  };
}
function useHistoryStateNavigation(base2) {
  const { history: history2, location: location2 } = window;
  const currentLocation = { value: createCurrentLocation(base2, location2) };
  const historyState = { value: history2.state };
  if (!historyState.value) changeLocation(currentLocation.value, {
    back: null,
    current: currentLocation.value,
    forward: null,
    position: history2.length - 1,
    replaced: true,
    scroll: null
  }, true);
  function changeLocation(to, state, replace22) {
    const hashIndex = base2.indexOf("#");
    const url = hashIndex > -1 ? (location2.host && document.querySelector("base") ? base2 : base2.slice(hashIndex)) + to : createBaseLocation() + base2 + to;
    try {
      history2[replace22 ? "replaceState" : "pushState"](state, "", url);
      historyState.value = state;
    } catch (err) {
      console.error(err);
      location2[replace22 ? "replace" : "assign"](url);
    }
  }
  function replace2(to, data) {
    changeLocation(to, assign$1({}, history2.state, buildState(historyState.value.back, to, historyState.value.forward, true), data, { position: historyState.value.position }), true);
    currentLocation.value = to;
  }
  function push(to, data) {
    const currentState = assign$1({}, historyState.value, history2.state, {
      forward: to,
      scroll: computeScrollPosition()
    });
    changeLocation(currentState.current, currentState, true);
    changeLocation(to, assign$1({}, buildState(currentLocation.value, to, null), { position: currentState.position + 1 }, data), false);
    currentLocation.value = to;
  }
  return {
    location: currentLocation,
    state: historyState,
    push,
    replace: replace2
  };
}
function createWebHistory(base2) {
  base2 = normalizeBase(base2);
  const historyNavigation = useHistoryStateNavigation(base2);
  const historyListeners = useHistoryListeners(base2, historyNavigation.state, historyNavigation.location, historyNavigation.replace);
  function go2(delta, triggerListeners = true) {
    if (!triggerListeners) historyListeners.pauseListeners();
    history.go(delta);
  }
  const routerHistory = assign$1({
    location: "",
    base: base2,
    go: go2,
    createHref: createHref.bind(null, base2)
  }, historyNavigation, historyListeners);
  Object.defineProperty(routerHistory, "location", {
    enumerable: true,
    get: () => historyNavigation.location.value
  });
  Object.defineProperty(routerHistory, "state", {
    enumerable: true,
    get: () => historyNavigation.state.value
  });
  return routerHistory;
}
function createWebHashHistory(base2) {
  base2 = location.host ? base2 || location.pathname + location.search : "";
  if (!base2.includes("#")) base2 += "#";
  return createWebHistory(base2);
}
let TokenType = /* @__PURE__ */ (function(TokenType2) {
  TokenType2[TokenType2["Static"] = 0] = "Static";
  TokenType2[TokenType2["Param"] = 1] = "Param";
  TokenType2[TokenType2["Group"] = 2] = "Group";
  return TokenType2;
})({});
var TokenizerState = /* @__PURE__ */ (function(TokenizerState2) {
  TokenizerState2[TokenizerState2["Static"] = 0] = "Static";
  TokenizerState2[TokenizerState2["Param"] = 1] = "Param";
  TokenizerState2[TokenizerState2["ParamRegExp"] = 2] = "ParamRegExp";
  TokenizerState2[TokenizerState2["ParamRegExpEnd"] = 3] = "ParamRegExpEnd";
  TokenizerState2[TokenizerState2["EscapeNext"] = 4] = "EscapeNext";
  return TokenizerState2;
})(TokenizerState || {});
const ROOT_TOKEN = {
  type: TokenType.Static,
  value: ""
};
const VALID_PARAM_RE = /[a-zA-Z0-9_]/;
function tokenizePath(path) {
  if (!path) return [[]];
  if (path === "/") return [[ROOT_TOKEN]];
  if (!path.startsWith("/")) throw new Error(`Invalid path "${path}"`);
  function crash(message) {
    throw new Error(`ERR (${state})/"${buffer}": ${message}`);
  }
  let state = TokenizerState.Static;
  let previousState = state;
  const tokens = [];
  let segment;
  function finalizeSegment() {
    if (segment) tokens.push(segment);
    segment = [];
  }
  let i = 0;
  let char;
  let buffer = "";
  let customRe = "";
  function consumeBuffer() {
    if (!buffer) return;
    if (state === TokenizerState.Static) segment.push({
      type: TokenType.Static,
      value: buffer
    });
    else if (state === TokenizerState.Param || state === TokenizerState.ParamRegExp || state === TokenizerState.ParamRegExpEnd) {
      if (segment.length > 1 && (char === "*" || char === "+")) crash(`A repeatable param (${buffer}) must be alone in its segment. eg: '/:ids+.`);
      segment.push({
        type: TokenType.Param,
        value: buffer,
        regexp: customRe,
        repeatable: char === "*" || char === "+",
        optional: char === "*" || char === "?"
      });
    } else crash("Invalid state to consume buffer");
    buffer = "";
  }
  function addCharToBuffer() {
    buffer += char;
  }
  while (i < path.length) {
    char = path[i++];
    if (char === "\\" && state !== TokenizerState.ParamRegExp) {
      previousState = state;
      state = TokenizerState.EscapeNext;
      continue;
    }
    switch (state) {
      case TokenizerState.Static:
        if (char === "/") {
          if (buffer) consumeBuffer();
          finalizeSegment();
        } else if (char === ":") {
          consumeBuffer();
          state = TokenizerState.Param;
        } else addCharToBuffer();
        break;
      case TokenizerState.EscapeNext:
        addCharToBuffer();
        state = previousState;
        break;
      case TokenizerState.Param:
        if (char === "(") state = TokenizerState.ParamRegExp;
        else if (VALID_PARAM_RE.test(char)) addCharToBuffer();
        else {
          consumeBuffer();
          state = TokenizerState.Static;
          if (char !== "*" && char !== "?" && char !== "+") i--;
        }
        break;
      case TokenizerState.ParamRegExp:
        if (char === ")") if (customRe[customRe.length - 1] == "\\") customRe = customRe.slice(0, -1) + char;
        else state = TokenizerState.ParamRegExpEnd;
        else customRe += char;
        break;
      case TokenizerState.ParamRegExpEnd:
        consumeBuffer();
        state = TokenizerState.Static;
        if (char !== "*" && char !== "?" && char !== "+") i--;
        customRe = "";
        break;
      default:
        crash("Unknown state");
        break;
    }
  }
  if (state === TokenizerState.ParamRegExp) crash(`Unfinished custom RegExp for param "${buffer}"`);
  consumeBuffer();
  finalizeSegment();
  return tokens;
}
const BASE_PARAM_PATTERN = "[^/]+?";
const BASE_PATH_PARSER_OPTIONS = {
  sensitive: false,
  strict: false,
  start: true,
  end: true
};
var PathScore = /* @__PURE__ */ (function(PathScore2) {
  PathScore2[PathScore2["_multiplier"] = 10] = "_multiplier";
  PathScore2[PathScore2["Root"] = 90] = "Root";
  PathScore2[PathScore2["Segment"] = 40] = "Segment";
  PathScore2[PathScore2["SubSegment"] = 30] = "SubSegment";
  PathScore2[PathScore2["Static"] = 40] = "Static";
  PathScore2[PathScore2["Dynamic"] = 20] = "Dynamic";
  PathScore2[PathScore2["BonusCustomRegExp"] = 10] = "BonusCustomRegExp";
  PathScore2[PathScore2["BonusWildcard"] = -50] = "BonusWildcard";
  PathScore2[PathScore2["BonusRepeatable"] = -20] = "BonusRepeatable";
  PathScore2[PathScore2["BonusOptional"] = -8] = "BonusOptional";
  PathScore2[PathScore2["BonusStrict"] = 0.7000000000000001] = "BonusStrict";
  PathScore2[PathScore2["BonusCaseSensitive"] = 0.25] = "BonusCaseSensitive";
  return PathScore2;
})(PathScore || {});
const REGEX_CHARS_RE = /[.+*?^${}()[\]/\\]/g;
function tokensToParser(segments, extraOptions) {
  const options = assign$1({}, BASE_PATH_PARSER_OPTIONS, extraOptions);
  const score = [];
  let pattern = options.start ? "^" : "";
  const keys2 = [];
  for (const segment of segments) {
    const segmentScores = segment.length ? [] : [PathScore.Root];
    if (options.strict && !segment.length) pattern += "/";
    for (let tokenIndex = 0; tokenIndex < segment.length; tokenIndex++) {
      const token2 = segment[tokenIndex];
      let subSegmentScore = PathScore.Segment + (options.sensitive ? PathScore.BonusCaseSensitive : 0);
      if (token2.type === TokenType.Static) {
        if (!tokenIndex) pattern += "/";
        pattern += token2.value.replace(REGEX_CHARS_RE, "\\$&");
        subSegmentScore += PathScore.Static;
      } else if (token2.type === TokenType.Param) {
        const { value, repeatable, optional, regexp } = token2;
        keys2.push({
          name: value,
          repeatable,
          optional
        });
        const re22 = regexp ? regexp : BASE_PARAM_PATTERN;
        if (re22 !== BASE_PARAM_PATTERN) {
          subSegmentScore += PathScore.BonusCustomRegExp;
          try {
            new RegExp(`(${re22})`);
          } catch (err) {
            throw new Error(`Invalid custom RegExp for param "${value}" (${re22}): ` + err.message);
          }
        }
        let subPattern = repeatable ? `((?:${re22})(?:/(?:${re22}))*)` : `(${re22})`;
        if (!tokenIndex) subPattern = optional && segment.length < 2 ? `(?:/${subPattern})` : "/" + subPattern;
        if (optional) subPattern += "?";
        pattern += subPattern;
        subSegmentScore += PathScore.Dynamic;
        if (optional) subSegmentScore += PathScore.BonusOptional;
        if (repeatable) subSegmentScore += PathScore.BonusRepeatable;
        if (re22 === ".*") subSegmentScore += PathScore.BonusWildcard;
      }
      segmentScores.push(subSegmentScore);
    }
    score.push(segmentScores);
  }
  if (options.strict && options.end) {
    const i = score.length - 1;
    score[i][score[i].length - 1] += PathScore.BonusStrict;
  }
  if (!options.strict) pattern += "/?";
  if (options.end) pattern += "$";
  else if (options.strict && !pattern.endsWith("/")) pattern += "(?:/|$)";
  const re2 = new RegExp(pattern, options.sensitive ? "" : "i");
  function parse(path) {
    const match = path.match(re2);
    const params = {};
    if (!match) return null;
    for (let i = 1; i < match.length; i++) {
      const value = match[i] || "";
      const key = keys2[i - 1];
      params[key.name] = value && key.repeatable ? value.split("/") : value;
    }
    return params;
  }
  function stringify(params) {
    let path = "";
    let avoidDuplicatedSlash = false;
    for (const segment of segments) {
      if (!avoidDuplicatedSlash || !path.endsWith("/")) path += "/";
      avoidDuplicatedSlash = false;
      for (const token2 of segment) if (token2.type === TokenType.Static) path += token2.value;
      else if (token2.type === TokenType.Param) {
        const { value, repeatable, optional } = token2;
        const param = value in params ? params[value] : "";
        if (isArray(param) && !repeatable) throw new Error(`Provided param "${value}" is an array but it is not repeatable (* or + modifiers)`);
        const text = isArray(param) ? param.join("/") : param;
        if (!text) if (optional) {
          if (segment.length < 2) if (path.endsWith("/")) path = path.slice(0, -1);
          else avoidDuplicatedSlash = true;
        } else throw new Error(`Missing required param "${value}"`);
        path += text;
      }
    }
    return path || "/";
  }
  return {
    re: re2,
    score,
    keys: keys2,
    parse,
    stringify
  };
}
function compareScoreArray(a2, b2) {
  let i = 0;
  while (i < a2.length && i < b2.length) {
    const diff2 = b2[i] - a2[i];
    if (diff2) return diff2;
    i++;
  }
  if (a2.length < b2.length) return a2.length === 1 && a2[0] === PathScore.Static + PathScore.Segment ? -1 : 1;
  else if (a2.length > b2.length) return b2.length === 1 && b2[0] === PathScore.Static + PathScore.Segment ? 1 : -1;
  return 0;
}
function comparePathParserScore(a2, b2) {
  let i = 0;
  const aScore = a2.score;
  const bScore = b2.score;
  while (i < aScore.length && i < bScore.length) {
    const comp = compareScoreArray(aScore[i], bScore[i]);
    if (comp) return comp;
    i++;
  }
  if (Math.abs(bScore.length - aScore.length) === 1) {
    if (isLastScoreNegative(aScore)) return 1;
    if (isLastScoreNegative(bScore)) return -1;
  }
  return bScore.length - aScore.length;
}
function isLastScoreNegative(score) {
  const last = score[score.length - 1];
  return score.length > 0 && last[last.length - 1] < 0;
}
const PATH_PARSER_OPTIONS_DEFAULTS = {
  strict: false,
  end: true,
  sensitive: false
};
function createRouteRecordMatcher(record, parent, options) {
  const parser = tokensToParser(tokenizePath(record.path), options);
  const matcher = assign$1(parser, {
    record,
    parent,
    children: [],
    alias: []
  });
  if (parent) {
    if (!matcher.record.aliasOf === !parent.record.aliasOf) parent.children.push(matcher);
  }
  return matcher;
}
function createRouterMatcher(routes2, globalOptions) {
  const matchers = [];
  const matcherMap = /* @__PURE__ */ new Map();
  globalOptions = mergeOptions(PATH_PARSER_OPTIONS_DEFAULTS, globalOptions);
  function getRecordMatcher(name) {
    return matcherMap.get(name);
  }
  function addRoute(record, parent, originalRecord) {
    const isRootAdd = !originalRecord;
    const mainNormalizedRecord = normalizeRouteRecord(record);
    mainNormalizedRecord.aliasOf = originalRecord && originalRecord.record;
    const options = mergeOptions(globalOptions, record);
    const normalizedRecords = [mainNormalizedRecord];
    if ("alias" in record) {
      const aliases = typeof record.alias === "string" ? [record.alias] : record.alias;
      for (const alias of aliases) normalizedRecords.push(normalizeRouteRecord(assign$1({}, mainNormalizedRecord, {
        components: originalRecord ? originalRecord.record.components : mainNormalizedRecord.components,
        path: alias,
        aliasOf: originalRecord ? originalRecord.record : mainNormalizedRecord
      })));
    }
    let matcher;
    let originalMatcher;
    for (const normalizedRecord of normalizedRecords) {
      const { path } = normalizedRecord;
      if (parent && path[0] !== "/") {
        const parentPath = parent.record.path;
        const connectingSlash = parentPath[parentPath.length - 1] === "/" ? "" : "/";
        normalizedRecord.path = parent.record.path + (path && connectingSlash + path);
      }
      matcher = createRouteRecordMatcher(normalizedRecord, parent, options);
      if (originalRecord) {
        originalRecord.alias.push(matcher);
      } else {
        originalMatcher = originalMatcher || matcher;
        if (originalMatcher !== matcher) originalMatcher.alias.push(matcher);
        if (isRootAdd && record.name && !isAliasRecord(matcher)) {
          removeRoute(record.name);
        }
      }
      if (isMatchable(matcher)) insertMatcher(matcher);
      if (mainNormalizedRecord.children) {
        const children = mainNormalizedRecord.children;
        for (let i = 0; i < children.length; i++) addRoute(children[i], matcher, originalRecord && originalRecord.children[i]);
      }
      originalRecord = originalRecord || matcher;
    }
    return originalMatcher ? () => {
      removeRoute(originalMatcher);
    } : noop$1;
  }
  function removeRoute(matcherRef) {
    if (isRouteName(matcherRef)) {
      const matcher = matcherMap.get(matcherRef);
      if (matcher) {
        matcherMap.delete(matcherRef);
        matchers.splice(matchers.indexOf(matcher), 1);
        matcher.children.forEach(removeRoute);
        matcher.alias.forEach(removeRoute);
      }
    } else {
      const index2 = matchers.indexOf(matcherRef);
      if (index2 > -1) {
        matchers.splice(index2, 1);
        if (matcherRef.record.name) matcherMap.delete(matcherRef.record.name);
        matcherRef.children.forEach(removeRoute);
        matcherRef.alias.forEach(removeRoute);
      }
    }
  }
  function getRoutes() {
    return matchers;
  }
  function insertMatcher(matcher) {
    const index2 = findInsertionIndex(matcher, matchers);
    matchers.splice(index2, 0, matcher);
    if (matcher.record.name && !isAliasRecord(matcher)) matcherMap.set(matcher.record.name, matcher);
  }
  function resolve2(location2, currentLocation) {
    let matcher;
    let params = {};
    let path;
    let name;
    if ("name" in location2 && location2.name) {
      matcher = matcherMap.get(location2.name);
      if (!matcher) throw createRouterError(ErrorTypes.MATCHER_NOT_FOUND, { location: location2 });
      name = matcher.record.name;
      params = assign$1(pickParams(currentLocation.params, matcher.keys.filter((k2) => !k2.optional).concat(matcher.parent ? matcher.parent.keys.filter((k2) => k2.optional) : []).map((k2) => k2.name)), location2.params && pickParams(location2.params, matcher.keys.map((k2) => k2.name)));
      path = matcher.stringify(params);
    } else if (location2.path != null) {
      path = location2.path;
      matcher = matchers.find((m2) => m2.re.test(path));
      if (matcher) {
        params = matcher.parse(path);
        name = matcher.record.name;
      }
    } else {
      matcher = currentLocation.name ? matcherMap.get(currentLocation.name) : matchers.find((m2) => m2.re.test(currentLocation.path));
      if (!matcher) throw createRouterError(ErrorTypes.MATCHER_NOT_FOUND, {
        location: location2,
        currentLocation
      });
      name = matcher.record.name;
      params = assign$1({}, currentLocation.params, location2.params);
      path = matcher.stringify(params);
    }
    const matched = [];
    let parentMatcher = matcher;
    while (parentMatcher) {
      matched.unshift(parentMatcher.record);
      parentMatcher = parentMatcher.parent;
    }
    return {
      name,
      path,
      params,
      matched,
      meta: mergeMetaFields(matched)
    };
  }
  routes2.forEach((route) => addRoute(route));
  function clearRoutes() {
    matchers.length = 0;
    matcherMap.clear();
  }
  return {
    addRoute,
    resolve: resolve2,
    removeRoute,
    clearRoutes,
    getRoutes,
    getRecordMatcher
  };
}
function pickParams(params, keys2) {
  const newParams = {};
  for (const key of keys2) if (key in params) newParams[key] = params[key];
  return newParams;
}
function normalizeRouteRecord(record) {
  const normalized = {
    path: record.path,
    redirect: record.redirect,
    name: record.name,
    meta: record.meta || {},
    aliasOf: record.aliasOf,
    beforeEnter: record.beforeEnter,
    props: normalizeRecordProps(record),
    children: record.children || [],
    instances: {},
    leaveGuards: /* @__PURE__ */ new Set(),
    updateGuards: /* @__PURE__ */ new Set(),
    enterCallbacks: {},
    components: "components" in record ? record.components || null : record.component && { default: record.component }
  };
  Object.defineProperty(normalized, "mods", { value: {} });
  return normalized;
}
function normalizeRecordProps(record) {
  const propsObject = {};
  const props = record.props || false;
  if ("component" in record) propsObject.default = props;
  else for (const name in record.components) propsObject[name] = typeof props === "object" ? props[name] : props;
  return propsObject;
}
function isAliasRecord(record) {
  while (record) {
    if (record.record.aliasOf) return true;
    record = record.parent;
  }
  return false;
}
function mergeMetaFields(matched) {
  return matched.reduce((meta, record) => assign$1(meta, record.meta), {});
}
function findInsertionIndex(matcher, matchers) {
  let lower = 0;
  let upper = matchers.length;
  while (lower !== upper) {
    const mid = lower + upper >> 1;
    if (comparePathParserScore(matcher, matchers[mid]) < 0) upper = mid;
    else lower = mid + 1;
  }
  const insertionAncestor = getInsertionAncestor(matcher);
  if (insertionAncestor) {
    upper = matchers.lastIndexOf(insertionAncestor, upper - 1);
  }
  return upper;
}
function getInsertionAncestor(matcher) {
  let ancestor = matcher;
  while (ancestor = ancestor.parent) if (isMatchable(ancestor) && comparePathParserScore(matcher, ancestor) === 0) return ancestor;
}
function isMatchable({ record }) {
  return !!(record.name || record.components && Object.keys(record.components).length || record.redirect);
}
function useLink(props) {
  const router2 = inject(routerKey);
  const currentRoute = inject(routeLocationKey);
  const route = computed(() => {
    const to = unref(props.to);
    return router2.resolve(to);
  });
  const activeRecordIndex = computed(() => {
    const { matched } = route.value;
    const { length } = matched;
    const routeMatched = matched[length - 1];
    const currentMatched = currentRoute.matched;
    if (!routeMatched || !currentMatched.length) return -1;
    const index2 = currentMatched.findIndex(isSameRouteRecord.bind(null, routeMatched));
    if (index2 > -1) return index2;
    const parentRecordPath = getOriginalPath(matched[length - 2]);
    return length > 1 && getOriginalPath(routeMatched) === parentRecordPath && currentMatched[currentMatched.length - 1].path !== parentRecordPath ? currentMatched.findIndex(isSameRouteRecord.bind(null, matched[length - 2])) : index2;
  });
  const isActive2 = computed(() => activeRecordIndex.value > -1 && includesParams(currentRoute.params, route.value.params));
  const isExactActive = computed(() => activeRecordIndex.value > -1 && activeRecordIndex.value === currentRoute.matched.length - 1 && isSameRouteLocationParams(currentRoute.params, route.value.params));
  function navigate(e = {}) {
    if (guardEvent(e)) {
      const p2 = router2[unref(props.replace) ? "replace" : "push"](unref(props.to)).catch(noop$1);
      if (props.viewTransition && typeof document !== "undefined" && "startViewTransition" in document) document.startViewTransition(() => p2);
      return p2;
    }
    return Promise.resolve();
  }
  return {
    route,
    href: computed(() => route.value.href),
    isActive: isActive2,
    isExactActive,
    navigate
  };
}
function preferSingleVNode(vnodes) {
  return vnodes.length === 1 ? vnodes[0] : vnodes;
}
const RouterLinkImpl = /* @__PURE__ */ defineComponent({
  name: "RouterLink",
  compatConfig: { MODE: 3 },
  props: {
    to: {
      type: [String, Object],
      required: true
    },
    replace: Boolean,
    activeClass: String,
    exactActiveClass: String,
    custom: Boolean,
    ariaCurrentValue: {
      type: String,
      default: "page"
    },
    viewTransition: Boolean
  },
  useLink,
  setup(props, { slots }) {
    const link = /* @__PURE__ */ reactive(useLink(props));
    const { options } = inject(routerKey);
    const elClass = computed(() => ({
      [getLinkClass(props.activeClass, options.linkActiveClass, "router-link-active")]: link.isActive,
      [getLinkClass(props.exactActiveClass, options.linkExactActiveClass, "router-link-exact-active")]: link.isExactActive
    }));
    return () => {
      const children = slots.default && preferSingleVNode(slots.default(link));
      return props.custom ? children : h$2("a", {
        "aria-current": link.isExactActive ? props.ariaCurrentValue : null,
        href: link.href,
        onClick: link.navigate,
        class: elClass.value
      }, children);
    };
  }
});
const RouterLink = RouterLinkImpl;
function guardEvent(e) {
  if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) return;
  if (e.defaultPrevented) return;
  if (e.button !== void 0 && e.button !== 0) return;
  if (e.currentTarget && e.currentTarget.getAttribute) {
    const target = e.currentTarget.getAttribute("target");
    if (/\b_blank\b/i.test(target)) return;
  }
  if (e.preventDefault) e.preventDefault();
  return true;
}
function includesParams(outer, inner) {
  for (const key in inner) {
    const innerValue = inner[key];
    const outerValue = outer[key];
    if (typeof innerValue === "string") {
      if (innerValue !== outerValue) return false;
    } else if (!isArray(outerValue) || outerValue.length !== innerValue.length || innerValue.some((value, i) => value.valueOf() !== outerValue[i].valueOf())) return false;
  }
  return true;
}
function getOriginalPath(record) {
  return record ? record.aliasOf ? record.aliasOf.path : record.path : "";
}
const getLinkClass = (propClass, globalClass, defaultClass) => propClass != null ? propClass : globalClass != null ? globalClass : defaultClass;
const RouterViewImpl = /* @__PURE__ */ defineComponent({
  name: "RouterView",
  inheritAttrs: false,
  props: {
    name: {
      type: String,
      default: "default"
    },
    route: Object
  },
  compatConfig: { MODE: 3 },
  setup(props, { attrs, slots }) {
    const injectedRoute = inject(routerViewLocationKey);
    const routeToDisplay = computed(() => props.route || injectedRoute.value);
    const injectedDepth = inject(viewDepthKey, 0);
    const depth = computed(() => {
      let initialDepth = unref(injectedDepth);
      const { matched } = routeToDisplay.value;
      let matchedRoute;
      while ((matchedRoute = matched[initialDepth]) && !matchedRoute.components) initialDepth++;
      return initialDepth;
    });
    const matchedRouteRef = computed(() => routeToDisplay.value.matched[depth.value]);
    provide(viewDepthKey, computed(() => depth.value + 1));
    provide(matchedRouteKey, matchedRouteRef);
    provide(routerViewLocationKey, routeToDisplay);
    const viewRef = /* @__PURE__ */ ref();
    watch(() => [
      viewRef.value,
      matchedRouteRef.value,
      props.name
    ], ([instance, to, name], [oldInstance, from2, oldName]) => {
      if (to) {
        to.instances[name] = instance;
        if (from2 && from2 !== to && instance && instance === oldInstance) {
          if (!to.leaveGuards.size) to.leaveGuards = from2.leaveGuards;
          if (!to.updateGuards.size) to.updateGuards = from2.updateGuards;
        }
      }
      if (instance && to && (!from2 || !isSameRouteRecord(to, from2) || !oldInstance)) (to.enterCallbacks[name] || []).forEach((callback) => callback(instance));
    }, { flush: "post" });
    return () => {
      const route = routeToDisplay.value;
      const currentName = props.name;
      const matchedRoute = matchedRouteRef.value;
      const ViewComponent = matchedRoute && matchedRoute.components[currentName];
      if (!ViewComponent) return normalizeSlot(slots.default, {
        Component: ViewComponent,
        route
      });
      const routePropsOption = matchedRoute.props[currentName];
      const routeProps = routePropsOption ? routePropsOption === true ? route.params : typeof routePropsOption === "function" ? routePropsOption(route) : routePropsOption : null;
      const onVnodeUnmounted = (vnode) => {
        if (vnode.component.isUnmounted) matchedRoute.instances[currentName] = null;
      };
      const component = h$2(ViewComponent, assign$1({}, routeProps, attrs, {
        onVnodeUnmounted,
        ref: viewRef
      }));
      return normalizeSlot(slots.default, {
        Component: component,
        route
      }) || component;
    };
  }
});
function normalizeSlot(slot, data) {
  if (!slot) return null;
  const slotContent = slot(data);
  return slotContent.length === 1 ? slotContent[0] : slotContent;
}
const RouterView = RouterViewImpl;
function createRouter(options) {
  const matcher = createRouterMatcher(options.routes, options);
  const parseQuery$1 = options.parseQuery || parseQuery;
  const stringifyQuery$1 = options.stringifyQuery || stringifyQuery;
  const routerHistory = options.history;
  const beforeGuards = useCallbacks();
  const beforeResolveGuards = useCallbacks();
  const afterGuards = useCallbacks();
  const currentRoute = /* @__PURE__ */ shallowRef(START_LOCATION_NORMALIZED);
  let pendingLocation = START_LOCATION_NORMALIZED;
  if (isBrowser && options.scrollBehavior && "scrollRestoration" in history) history.scrollRestoration = "manual";
  const normalizeParams = applyToParams.bind(null, (paramValue) => "" + paramValue);
  const encodeParams = applyToParams.bind(null, encodeParam);
  const decodeParams = applyToParams.bind(null, decode);
  function addRoute(parentOrRoute, route) {
    let parent;
    let record;
    if (isRouteName(parentOrRoute)) {
      parent = matcher.getRecordMatcher(parentOrRoute);
      record = route;
    } else record = parentOrRoute;
    return matcher.addRoute(record, parent);
  }
  function removeRoute(name) {
    const recordMatcher = matcher.getRecordMatcher(name);
    if (recordMatcher) matcher.removeRoute(recordMatcher);
  }
  function getRoutes() {
    return matcher.getRoutes().map((routeMatcher) => routeMatcher.record);
  }
  function hasRoute(name) {
    return !!matcher.getRecordMatcher(name);
  }
  function resolve2(rawLocation, currentLocation) {
    currentLocation = assign$1({}, currentLocation || currentRoute.value);
    if (typeof rawLocation === "string") {
      const locationNormalized = parseURL(parseQuery$1, rawLocation, currentLocation.path);
      const matchedRoute2 = matcher.resolve({ path: locationNormalized.path }, currentLocation);
      const href2 = routerHistory.createHref(locationNormalized.fullPath);
      return assign$1(locationNormalized, matchedRoute2, {
        params: decodeParams(matchedRoute2.params),
        hash: decode(locationNormalized.hash),
        redirectedFrom: void 0,
        href: href2
      });
    }
    let matcherLocation;
    if (rawLocation.path != null) {
      matcherLocation = assign$1({}, rawLocation, { path: parseURL(parseQuery$1, rawLocation.path, currentLocation.path).path });
    } else {
      const targetParams = assign$1({}, rawLocation.params);
      for (const key in targetParams) if (targetParams[key] == null) delete targetParams[key];
      matcherLocation = assign$1({}, rawLocation, { params: encodeParams(targetParams) });
      currentLocation.params = encodeParams(currentLocation.params);
    }
    const matchedRoute = matcher.resolve(matcherLocation, currentLocation);
    const hash = rawLocation.hash || "";
    matchedRoute.params = normalizeParams(decodeParams(matchedRoute.params));
    const fullPath = stringifyURL(stringifyQuery$1, assign$1({}, rawLocation, {
      hash: encodeHash(hash),
      path: matchedRoute.path
    }));
    const href = routerHistory.createHref(fullPath);
    return assign$1({
      fullPath,
      hash,
      query: stringifyQuery$1 === stringifyQuery ? normalizeQuery(rawLocation.query) : rawLocation.query || {}
    }, matchedRoute, {
      redirectedFrom: void 0,
      href
    });
  }
  function locationAsObject(to) {
    return typeof to === "string" ? parseURL(parseQuery$1, to, currentRoute.value.path) : assign$1({}, to);
  }
  function checkCanceledNavigation(to, from2) {
    if (pendingLocation !== to) return createRouterError(ErrorTypes.NAVIGATION_CANCELLED, {
      from: from2,
      to
    });
  }
  function push(to) {
    return pushWithRedirect(to);
  }
  function replace2(to) {
    return push(assign$1(locationAsObject(to), { replace: true }));
  }
  function handleRedirectRecord(to, from2) {
    const lastMatched = to.matched[to.matched.length - 1];
    if (lastMatched && lastMatched.redirect) {
      const { redirect } = lastMatched;
      let newTargetLocation = typeof redirect === "function" ? redirect(to, from2) : redirect;
      if (typeof newTargetLocation === "string") {
        newTargetLocation = newTargetLocation.includes("?") || newTargetLocation.includes("#") ? newTargetLocation = locationAsObject(newTargetLocation) : { path: newTargetLocation };
        newTargetLocation.params = {};
      }
      return assign$1({
        query: to.query,
        hash: to.hash,
        params: newTargetLocation.path != null ? {} : to.params
      }, newTargetLocation);
    }
  }
  function pushWithRedirect(to, redirectedFrom) {
    const targetLocation = pendingLocation = resolve2(to);
    const from2 = currentRoute.value;
    const data = to.state;
    const force = to.force;
    const replace22 = to.replace === true;
    const shouldRedirect = handleRedirectRecord(targetLocation, from2);
    if (shouldRedirect) return pushWithRedirect(assign$1(locationAsObject(shouldRedirect), {
      state: typeof shouldRedirect === "object" ? assign$1({}, data, shouldRedirect.state) : data,
      force,
      replace: replace22
    }), redirectedFrom || targetLocation);
    const toLocation = targetLocation;
    toLocation.redirectedFrom = redirectedFrom;
    let failure;
    if (!force && isSameRouteLocation(stringifyQuery$1, from2, targetLocation)) {
      failure = createRouterError(ErrorTypes.NAVIGATION_DUPLICATED, {
        to: toLocation,
        from: from2
      });
      handleScroll(from2, from2, true, false);
    }
    return (failure ? Promise.resolve(failure) : navigate(toLocation, from2)).catch((error) => isNavigationFailure(error) ? isNavigationFailure(error, ErrorTypes.NAVIGATION_GUARD_REDIRECT) ? error : markAsReady(error) : triggerError(error, toLocation, from2)).then((failure2) => {
      if (failure2) {
        if (isNavigationFailure(failure2, ErrorTypes.NAVIGATION_GUARD_REDIRECT)) {
          return pushWithRedirect(assign$1({ replace: replace22 }, locationAsObject(failure2.to), {
            state: typeof failure2.to === "object" ? assign$1({}, data, failure2.to.state) : data,
            force
          }), redirectedFrom || toLocation);
        }
      } else failure2 = finalizeNavigation(toLocation, from2, true, replace22, data);
      triggerAfterEach(toLocation, from2, failure2);
      return failure2;
    });
  }
  function checkCanceledNavigationAndReject(to, from2) {
    const error = checkCanceledNavigation(to, from2);
    return error ? Promise.reject(error) : Promise.resolve();
  }
  function runWithContext(fn) {
    const app2 = installedApps.values().next().value;
    return app2 && typeof app2.runWithContext === "function" ? app2.runWithContext(fn) : fn();
  }
  function navigate(to, from2) {
    let guards;
    const [leavingRecords, updatingRecords, enteringRecords] = extractChangingRecords(to, from2);
    guards = extractComponentsGuards(leavingRecords.reverse(), "beforeRouteLeave", to, from2);
    for (const record of leavingRecords) record.leaveGuards.forEach((guard) => {
      guards.push(guardToPromiseFn(guard, to, from2));
    });
    const canceledNavigationCheck = checkCanceledNavigationAndReject.bind(null, to, from2);
    guards.push(canceledNavigationCheck);
    return runGuardQueue(guards).then(() => {
      guards = [];
      for (const guard of beforeGuards.list()) guards.push(guardToPromiseFn(guard, to, from2));
      guards.push(canceledNavigationCheck);
      return runGuardQueue(guards);
    }).then(() => {
      guards = extractComponentsGuards(updatingRecords, "beforeRouteUpdate", to, from2);
      for (const record of updatingRecords) record.updateGuards.forEach((guard) => {
        guards.push(guardToPromiseFn(guard, to, from2));
      });
      guards.push(canceledNavigationCheck);
      return runGuardQueue(guards);
    }).then(() => {
      guards = [];
      for (const record of enteringRecords) if (record.beforeEnter) if (isArray(record.beforeEnter)) for (const beforeEnter of record.beforeEnter) guards.push(guardToPromiseFn(beforeEnter, to, from2));
      else guards.push(guardToPromiseFn(record.beforeEnter, to, from2));
      guards.push(canceledNavigationCheck);
      return runGuardQueue(guards);
    }).then(() => {
      to.matched.forEach((record) => record.enterCallbacks = {});
      guards = extractComponentsGuards(enteringRecords, "beforeRouteEnter", to, from2, runWithContext);
      guards.push(canceledNavigationCheck);
      return runGuardQueue(guards);
    }).then(() => {
      guards = [];
      for (const guard of beforeResolveGuards.list()) guards.push(guardToPromiseFn(guard, to, from2));
      guards.push(canceledNavigationCheck);
      return runGuardQueue(guards);
    }).catch((err) => isNavigationFailure(err, ErrorTypes.NAVIGATION_CANCELLED) ? err : Promise.reject(err));
  }
  function triggerAfterEach(to, from2, failure) {
    afterGuards.list().forEach((guard) => runWithContext(() => guard(to, from2, failure)));
  }
  function finalizeNavigation(toLocation, from2, isPush, replace22, data) {
    const error = checkCanceledNavigation(toLocation, from2);
    if (error) return error;
    const isFirstNavigation = from2 === START_LOCATION_NORMALIZED;
    const state = !isBrowser ? {} : history.state;
    if (isPush) if (replace22 || isFirstNavigation) routerHistory.replace(toLocation.fullPath, assign$1({ scroll: isFirstNavigation && state && state.scroll }, data));
    else routerHistory.push(toLocation.fullPath, data);
    currentRoute.value = toLocation;
    handleScroll(toLocation, from2, isPush, isFirstNavigation);
    markAsReady();
  }
  let removeHistoryListener;
  function setupListeners2() {
    if (removeHistoryListener) return;
    removeHistoryListener = routerHistory.listen((to, _from, info) => {
      if (!router2.listening) return;
      const toLocation = resolve2(to);
      const shouldRedirect = handleRedirectRecord(toLocation, router2.currentRoute.value);
      if (shouldRedirect) {
        pushWithRedirect(assign$1(shouldRedirect, {
          replace: true,
          force: true
        }), toLocation).catch(noop$1);
        return;
      }
      pendingLocation = toLocation;
      const from2 = currentRoute.value;
      if (isBrowser) saveScrollPosition(getScrollKey(from2.fullPath, info.delta), computeScrollPosition());
      navigate(toLocation, from2).catch((error) => {
        if (isNavigationFailure(error, ErrorTypes.NAVIGATION_ABORTED | ErrorTypes.NAVIGATION_CANCELLED)) return error;
        if (isNavigationFailure(error, ErrorTypes.NAVIGATION_GUARD_REDIRECT)) {
          pushWithRedirect(assign$1(locationAsObject(error.to), { force: true }), toLocation).then((failure) => {
            if (isNavigationFailure(failure, ErrorTypes.NAVIGATION_ABORTED | ErrorTypes.NAVIGATION_DUPLICATED) && !info.delta && info.type === NavigationType.pop) routerHistory.go(-1, false);
          }).catch(noop$1);
          return Promise.reject();
        }
        if (info.delta) routerHistory.go(-info.delta, false);
        return triggerError(error, toLocation, from2);
      }).then((failure) => {
        failure = failure || finalizeNavigation(toLocation, from2, false);
        if (failure) {
          if (info.delta && !isNavigationFailure(failure, ErrorTypes.NAVIGATION_CANCELLED)) routerHistory.go(-info.delta, false);
          else if (info.type === NavigationType.pop && isNavigationFailure(failure, ErrorTypes.NAVIGATION_ABORTED | ErrorTypes.NAVIGATION_DUPLICATED)) routerHistory.go(-1, false);
        }
        triggerAfterEach(toLocation, from2, failure);
      }).catch(noop$1);
    });
  }
  let readyHandlers = useCallbacks();
  let errorListeners = useCallbacks();
  let ready;
  function triggerError(error, to, from2) {
    markAsReady(error);
    const list = errorListeners.list();
    if (list.length) list.forEach((handler) => handler(error, to, from2));
    else {
      console.error(error);
    }
    return Promise.reject(error);
  }
  function isReady() {
    if (ready && currentRoute.value !== START_LOCATION_NORMALIZED) return Promise.resolve();
    return new Promise((resolve22, reject) => {
      readyHandlers.add([resolve22, reject]);
    });
  }
  function markAsReady(err) {
    if (!ready) {
      ready = !err;
      setupListeners2();
      readyHandlers.list().forEach(([resolve22, reject]) => err ? reject(err) : resolve22());
      readyHandlers.reset();
    }
    return err;
  }
  function handleScroll(to, from2, isPush, isFirstNavigation) {
    const { scrollBehavior } = options;
    if (!isBrowser || !scrollBehavior) return Promise.resolve();
    const scrollPosition = !isPush && getSavedScrollPosition(getScrollKey(to.fullPath, 0)) || (isFirstNavigation || !isPush) && history.state && history.state.scroll || null;
    return nextTick().then(() => scrollBehavior(to, from2, scrollPosition)).then((position) => position && scrollToPosition(position)).catch((err) => triggerError(err, to, from2));
  }
  const go2 = (delta) => routerHistory.go(delta);
  let started;
  const installedApps = /* @__PURE__ */ new Set();
  const router2 = {
    currentRoute,
    listening: true,
    addRoute,
    removeRoute,
    clearRoutes: matcher.clearRoutes,
    hasRoute,
    getRoutes,
    resolve: resolve2,
    options,
    push,
    replace: replace2,
    go: go2,
    back: () => go2(-1),
    forward: () => go2(1),
    beforeEach: beforeGuards.add,
    beforeResolve: beforeResolveGuards.add,
    afterEach: afterGuards.add,
    onError: errorListeners.add,
    isReady,
    install(app2) {
      app2.component("RouterLink", RouterLink);
      app2.component("RouterView", RouterView);
      app2.config.globalProperties.$router = router2;
      Object.defineProperty(app2.config.globalProperties, "$route", {
        enumerable: true,
        get: () => unref(currentRoute)
      });
      if (isBrowser && !started && currentRoute.value === START_LOCATION_NORMALIZED) {
        started = true;
        push(routerHistory.location).catch((err) => {
        });
      }
      const reactiveRoute = {};
      for (const key in START_LOCATION_NORMALIZED) Object.defineProperty(reactiveRoute, key, {
        get: () => currentRoute.value[key],
        enumerable: true
      });
      app2.provide(routerKey, router2);
      app2.provide(routeLocationKey, /* @__PURE__ */ shallowReactive(reactiveRoute));
      app2.provide(routerViewLocationKey, currentRoute);
      const unmountApp = app2.unmount;
      installedApps.add(app2);
      app2.unmount = function() {
        installedApps.delete(app2);
        if (installedApps.size < 1) {
          pendingLocation = START_LOCATION_NORMALIZED;
          removeHistoryListener && removeHistoryListener();
          removeHistoryListener = null;
          currentRoute.value = START_LOCATION_NORMALIZED;
          started = false;
          ready = false;
        }
        unmountApp();
      };
    }
  };
  function runGuardQueue(guards) {
    return guards.reduce((promise, guard) => promise.then(() => runWithContext(guard)), Promise.resolve());
  }
  return router2;
}
const useEnvironment = () => {
  const isElectron = typeof window !== "undefined" && window.api;
  const environment = isElectron ? 0 : 1;
  return environment;
};
const useOpenNote = () => {
  const router2 = useRouter();
  function openNote(noteId, options = {}) {
    const { newWindow = true } = options;
    const environment = useEnvironment();
    if (newWindow && environment === ELECTRON) {
      window.api.openNoteWindow(noteId);
      return;
    }
    router2.push(`/note/${noteId}`);
  }
  return {
    openNote
  };
};
var A$1 = {};
!(function() {
  try {
    if ((I2 = globalThis.crypto) && "function" == typeof I2.getRandomValues) return void (A$1.getRandomValue = function() {
      var A2 = new Uint32Array(1);
      return I2.getRandomValues(A2), A2[0] >>> 0;
    });
  } catch (A2) {
  }
  try {
    var I2, g2 = "undefined" != typeof window ? window : self;
    if ((I2 = g2.crypto || g2.msCrypto) && "function" == typeof I2.getRandomValues) return void (A$1.getRandomValue = function() {
      var A2 = new Uint32Array(1);
      return I2.getRandomValues(A2), A2[0] >>> 0;
    });
  } catch (A2) {
  }
})(), void 0 === A$1 && (A$1 = {});
var I$2 = A$1;
if ("object" != typeof I$2.sodium && ("object" == typeof global ? I$2 = global : "object" == typeof window && (I$2 = window)), void 0 === A$1.getRandomValue) try {
  var g$1 = "object" == typeof window ? window : self, C$1 = void 0 !== g$1.crypto ? g$1.crypto : g$1.msCrypto, B$1 = function() {
    var A2 = new Uint32Array(1);
    return C$1.getRandomValues(A2), A2[0] >>> 0;
  };
  B$1(), A$1.getRandomValue = B$1;
} catch (I2) {
  try {
    var Q$2 = function() {
      var A2 = null.randomBytes(4);
      return (A2[0] << 24 | A2[1] << 16 | A2[2] << 8 | A2[3]) >>> 0;
    };
    Q$2(), A$1.getRandomValue = Q$2;
  } catch (A2) {
    throw "No secure random number generator found";
  }
}
var i$2 = A$1;
A$1.ready = new Promise(function(A2, I2) {
  (C2 = i$2).onAbort = I2, C2.print = function(A3) {
  }, C2.printErr = function(A3) {
  }, C2.onRuntimeInitialized = function() {
    try {
      C2._crypto_secretbox_keybytes(), A2();
    } catch (A3) {
      I2(A3);
    }
  }, C2.useBackupModule = function() {
    return new Promise(function(A3, I3) {
      (g3 = {}).onAbort = I3, g3.getRandomValue = i$2.getRandomValue, g3.onRuntimeInitialized = function() {
        Object.keys(i$2).forEach(function(A4) {
          "getRandomValue" !== A4 && delete i$2[A4];
        }), Object.keys(g3).forEach(function(A4) {
          i$2[A4] = g3[A4];
        }), A3();
      };
      var g3 = void 0 !== g3 ? g3 : {}, C3 = !!globalThis.window, B3 = !!globalThis.WorkerGlobalScope, Q3 = globalThis.process?.versions?.node && "renderer" != globalThis.process?.type;
      if (Q3) process.argv.length > 1 && process.argv[1].replace(/\\/g, "/"), process.argv.slice(2), "undefined" != typeof module && (module.exports = g3);
      else if (C3 || B3) try {
        new URL(".", "").href;
      } catch {
      }
      (function() {
      }).bind();
      var E3 = function() {
      }.bind(), D3 = { Memory: function(A4) {
        this.buffer = new ArrayBuffer(65536 * A4.initial);
      }, Module: function(A4) {
      }, Instance: function(A4, I4) {
        this.exports = (function(A5) {
          for (var I5, g4 = new Uint8Array(123), C4 = 25; C4 >= 0; --C4) g4[48 + C4] = 52 + C4, g4[65 + C4] = C4, g4[97 + C4] = 26 + C4;
          function B4(A6, I6, C5) {
            for (var B5, Q5, i2 = 0, E5 = I6, D4 = C5.length, o4 = I6 + (3 * D4 >> 2) - ("=" == C5[D4 - 2]) - ("=" == C5[D4 - 1]); i2 < D4; i2 += 4) B5 = g4[C5.charCodeAt(i2 + 1)], Q5 = g4[C5.charCodeAt(i2 + 2)], A6[E5++] = g4[C5.charCodeAt(i2)] << 2 | B5 >> 4, E5 < o4 && (A6[E5++] = B5 << 4 | Q5 >> 2), E5 < o4 && (A6[E5++] = Q5 << 6 | g4[C5.charCodeAt(i2 + 3)]);
            return A6;
          }
          function Q4(A6, g5, C5) {
            if ((A6 >>>= 0) + (C5 >>>= 0) > I5.length) throw "trap: invalid memory.fill";
            I5.fill(g5, A6, A6 + C5);
          }
          function i() {
            throw new Error("abort");
          }
          function E4(A6, g5, C5) {
            I5.copyWithin(A6, g5, g5 + C5);
          }
          return g4[43] = 62, g4[47] = 63, (function(A6) {
            var g5 = new ArrayBuffer(16777216), C5 = new Int8Array(g5), D4 = new Int16Array(g5), o4 = new Int32Array(g5), c4 = new Uint8Array(g5), h4 = new Uint16Array(g5), w4 = new Uint32Array(g5), F4 = Math.imul, y4 = Math.clz32, f4 = A6.a, S3 = f4.a, a4 = f4.b, k4 = f4.c, M4 = f4.d, r4 = 106864, n4 = 0;
            function t4(A7) {
              var I6, g6, C6 = 0, B5 = 0, Q5 = 0, i2 = 0, D5 = 0, c5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, t5 = 0, U5 = 0, J5 = 0, K5 = 0, e4 = 0, Y5 = 0, N5 = 0, G5 = 0, H5 = 0, s5 = 0, p5 = 0, L5 = 0, d5 = 0, P5 = 0, R4 = 0, b4 = 0, v5 = 0, u4 = 0, z3 = 0, O3 = 0, q3 = 0, W3 = 0, x3 = 0, V3 = 0, j3 = 0, m3 = 0, l3 = 0, _3 = 0, X3 = 0, T3 = 0, Z3 = 0, $3 = 0, AA2 = 0, IA2 = 0, gA2 = 0, CA2 = 0, BA2 = 0, QA2 = 0, iA2 = 0, EA2 = 0, DA2 = 0, oA2 = 0, cA2 = 0, hA2 = 0, wA2 = 0, FA2 = 0, yA2 = 0, fA2 = 0, SA2 = 0, aA2 = 0, kA2 = 0, MA2 = 0, rA2 = 0, nA2 = 0, tA2 = 0, UA2 = 0, JA2 = 0, KA2 = 0, eA2 = 0, YA2 = 0, NA2 = 0, GA2 = 0, HA2 = 0, sA2 = 0, pA2 = 0, LA2 = 0, dA2 = 0, PA2 = 0, RA2 = 0, bA2 = 0, vA2 = 0, uA2 = 0, zA2 = 0, OA2 = 0, qA2 = 0;
              r4 = I6 = r4 - 208 | 0, E4(I6, A7, 200), B5 = (Z3 = o4[I6 + 172 >> 2]) ^ (FA2 = o4[I6 + 132 >> 2]) ^ (JA2 = o4[I6 + 92 >> 2]) ^ (h5 = o4[I6 + 52 >> 2]) ^ (C6 = o4[I6 + 12 >> 2]), P5 = o4[(f5 = g6 = I6 - -64 | 0) >> 2], R4 = G5 = (v5 = o4[I6 + 188 >> 2]) ^ (NA2 = o4[I6 + 148 >> 2]) ^ (EA2 = o4[I6 + 108 >> 2]) ^ (gA2 = o4[f5 + 4 >> 2]) ^ (rA2 = o4[I6 + 28 >> 2]), x3 = (l3 = (f5 = o4[I6 + 168 >> 2]) ^ (i2 = o4[I6 + 128 >> 2]) ^ (S4 = o4[I6 + 88 >> 2]) ^ (p5 = o4[I6 + 48 >> 2]) ^ (a5 = o4[I6 + 8 >> 2])) ^ xA(j3 = (N5 = o4[I6 + 184 >> 2]) ^ (D5 = o4[I6 + 144 >> 2]) ^ (k5 = o4[I6 + 104 >> 2]) ^ (d5 = o4[I6 + 24 >> 2]) ^ P5, G5, 1), H5 = xA(x3 ^ (J5 = o4[I6 + 56 >> 2]), ($3 = n4 ^ B5) ^ (c5 = o4[I6 + 60 >> 2]), 6), yA2 = n4, y5 = (X3 = o4[I6 + 164 >> 2]) ^ (DA2 = o4[I6 + 124 >> 2]) ^ (GA2 = o4[I6 + 84 >> 2]) ^ (CA2 = o4[I6 + 44 >> 2]) ^ (W3 = o4[I6 + 4 >> 2]), b4 = U5 = (aA2 = o4[I6 + 180 >> 2]) ^ (KA2 = o4[I6 + 140 >> 2]) ^ (QA2 = o4[I6 + 100 >> 2]) ^ (cA2 = o4[I6 + 20 >> 2]) ^ c5, m3 = (_3 = (K5 = o4[I6 + 160 >> 2]) ^ (c5 = o4[I6 + 120 >> 2]) ^ (w5 = o4[I6 + 80 >> 2]) ^ (s5 = o4[I6 + 40 >> 2]) ^ (G5 = o4[I6 >> 2])) ^ xA(IA2 = (Y5 = o4[I6 + 176 >> 2]) ^ (M5 = o4[I6 + 136 >> 2]) ^ (Q5 = o4[I6 + 96 >> 2]) ^ (F5 = o4[I6 + 16 >> 2]) ^ J5, U5, 1), u4 = xA(m3 ^ a5, (V3 = n4 ^ y5) ^ C6, 1), z3 = UA2 = n4, e4 = (T3 = o4[I6 + 196 >> 2]) ^ (eA2 = o4[I6 + 156 >> 2]) ^ (BA2 = o4[I6 + 116 >> 2]) ^ (kA2 = o4[I6 + 76 >> 2]) ^ (YA2 = o4[I6 + 36 >> 2]), a5 = K5, l3 = (L5 = (J5 = o4[I6 + 192 >> 2]) ^ (K5 = o4[I6 + 152 >> 2]) ^ (U5 = o4[I6 + 112 >> 2]) ^ (t5 = o4[I6 + 72 >> 2]) ^ (C6 = o4[I6 + 32 >> 2])) ^ xA(l3, B5, 1), B5 = xA(a5 ^ l3, (UA2 = X3) ^ (X3 = n4 ^ e4), 18), O3 = (q3 = n4) ^ (-1 ^ z3) & yA2, j3 = xA(_3, y5, 1) ^ j3, y5 = xA(J5 ^ j3, T3 ^ (R4 ^= n4), 14), _3 = n4, h5 = xA(p5 ^ m3, h5 ^ V3, 44), T3 = J5 = W3 ^ X3, wA2 = (hA2 = n4) & (-1 ^ J5) ^ _3, W3 = xA(L5, e4, 1) ^ IA2, e4 = xA(N5 ^ W3, v5 ^ (b4 ^= n4), 56), IA2 = n4, v5 = xA(s5 ^ l3, X3 ^ CA2, 36), CA2 = n4, J5 = xA(C6 ^ j3, R4 ^ YA2, 27), YA2 = a5 = n4, Y5 = xA(Y5 ^ x3, $3 ^ aA2, 61), aA2 = n4, t5 = xA(t5 ^ j3, R4 ^ kA2, 20), UA2 = n4, L5 = xA(d5 ^ W3, b4 ^ rA2, 28), kA2 = N5 = n4, C6 = xA(f5 ^ m3, V3 ^ Z3, 2), rA2 = n4, Z3 = xA(P5 ^ W3, b4 ^ gA2, 55), gA2 = n4, p5 = xA(F5 ^ x3, $3 ^ cA2, 62), cA2 = s5 = n4, MA2 = F5 = (oA2 = (-1 ^ s5) & gA2 ^ rA2) ^ (pA2 = (-1 ^ N5) & UA2 ^ aA2) ^ (LA2 = (-1 ^ a5) & CA2 ^ IA2) ^ O3 ^ wA2, P5 = e4, N5 = B5, a5 = H5, H5 = y5, s5 = h5, bA2 = G5 ^ l3, f5 = Y5, G5 = t5, Y5 = C6, HA2 = xA(tA2 = (iA2 = e4 ^ (d5 = v5) & (-1 ^ J5)) ^ (dA2 = B5 ^ a5 & (-1 ^ u4)) ^ (fA2 = y5 ^ h5 & (-1 ^ bA2)) ^ (AA2 = f5 ^ t5 & (-1 ^ L5)) ^ (nA2 = C6 ^ (t5 = Z3) & (-1 ^ p5)), F5, 1), sA2 = n4, F5 = xA(S4 ^ m3, V3 ^ JA2, 10), h5 = n4, M5 = xA(M5 ^ x3, $3 ^ KA2, 15), y5 = n4, C6 = xA(Q5 ^ x3, $3 ^ QA2, 43), e4 = n4, S4 = xA(D5 ^ W3, b4 ^ NA2, 21), JA2 = $3 = n4, U5 = xA(U5 ^ j3, R4 ^ BA2, 39), v5 = n4, D5 = xA(c5 ^ l3, X3 ^ DA2, 41), NA2 = n4, B5 = xA(k5 ^ W3, b4 ^ EA2, 25), Z3 = n4, k5 = xA(K5 ^ j3, R4 ^ eA2, 8), j3 = n4, K5 = xA(w5 ^ l3, X3 ^ GA2, 3), x3 = n4, i2 = xA(i2 ^ m3, V3 ^ FA2, 45), Q5 = J5, J5 = M5, l3 = (-1 ^ M5) & P5 ^ F5, c5 = C6, M5 = B5, P5 = xA((K5 = (X3 = l3 ^ (W3 = C6 ^ (-1 ^ S4) & H5) ^ (FA2 = (w5 = U5) ^ (-1 ^ D5) & Y5) ^ (B5 ^= (-1 ^ k5) & N5) ^ (V3 = (C6 = K5) ^ (-1 ^ i2) & f5)) ^ HA2) ^ (R4 = J5 ^ (-1 ^ P5) & Q5), (U5 = (QA2 = (b4 = (-1 ^ y5) & IA2 ^ h5) ^ (EA2 = (-1 ^ $3) & _3 ^ e4) ^ (DA2 = (-1 ^ NA2) & rA2 ^ v5) ^ (GA2 = (-1 ^ j3) & q3 ^ Z3) ^ (KA2 = (-1 ^ (m3 = n4)) & aA2 ^ x3)) ^ sA2) ^ (IA2 = y5 ^ (-1 ^ IA2) & YA2), 21), $3 = n4, aA2 = _3 = (eA2 = m3 ^ (-1 ^ aA2) & kA2) ^ (BA2 = NA2 ^ (-1 ^ rA2) & cA2) ^ (rA2 = j3 ^ (-1 ^ q3) & z3) ^ (HA2 = (-1 ^ _3) & T3 ^ JA2) ^ IA2, IA2 = B5, vA2 = (q3 = a5 ^ (-1 ^ M5) & k5) ^ (sA2 = s5 ^ (-1 ^ c5) & S4) ^ (PA2 = (-1 ^ w5) & D5 ^ t5) ^ (RA2 = d5 ^ (-1 ^ F5) & J5) ^ (SA2 = G5 ^ (-1 ^ C6) & i2), B5 = xA(f5 = (B5 = R4) ^ (R4 = i2 ^ (-1 ^ f5) & L5) ^ (zA2 = D5 ^ (-1 ^ Y5) & p5) ^ (N5 = k5 ^ (-1 ^ N5) & u4) ^ (OA2 = (-1 ^ H5) & bA2 ^ S4), _3, 1) ^ vA2, J5 = xA(IA2 ^ B5, (y5 = (D5 = (S4 = yA2 ^ (-1 ^ Z3) & j3) ^ (JA2 = hA2 ^ (-1 ^ e4) & JA2) ^ (k5 = (-1 ^ v5) & NA2 ^ gA2) ^ (Y5 = CA2 ^ (-1 ^ h5) & y5) ^ (H5 = UA2 ^ (-1 ^ x3) & m3)) ^ n4) ^ GA2, 43), IA2 = m3 = n4, L5 = (w5 = p5 ^ (-1 ^ t5) & w5) ^ (u4 ^= (-1 ^ a5) & M5) ^ (a5 = Q5 ^ (-1 ^ d5) & F5) ^ (bA2 = (-1 ^ s5) & c5 ^ bA2 ^ 1) ^ (p5 = (-1 ^ G5) & C6 ^ L5), i2 = xA(X3, QA2, 1) ^ L5, H5 = xA(i2 ^ SA2, (Q5 = (s5 = (cA2 ^= (-1 ^ gA2) & v5) ^ (G5 = z3 ^ (-1 ^ yA2) & Z3) ^ (F5 = YA2 ^ (-1 ^ CA2) & h5) ^ (yA2 = (-1 ^ hA2) & e4 ^ T3) ^ (t5 = (-1 ^ UA2) & x3 ^ kA2)) ^ n4) ^ H5, 44), CA2 = (_3 = n4) ^ (-1 ^ m3) & $3, M5 = xA(L5, s5, 1) ^ f5, s5 = xA(AA2 ^ M5, pA2 ^ (C6 = n4 ^ aA2), 20), v5 = n4, d5 = xA(i2 ^ RA2, Q5 ^ Y5, 45), Z3 = n4, h5 = xA(vA2, D5, 1) ^ tA2, u4 = xA(h5 ^ u4, (e4 = MA2 ^ n4) ^ G5, 3), aA2 = c5 = n4, f5 = xA(B5 ^ V3, y5 ^ KA2, 6), x3 = n4, G5 = xA(M5 ^ iA2, C6 ^ LA2, 8), m3 = n4, L5 = xA(K5 ^ N5, U5 ^ rA2, 25), UA2 = N5 = n4, Y5 = xA(h5 ^ p5, e4 ^ t5, 36), V3 = n4, t5 = xA(B5 ^ l3, y5 ^ b4, 15), l3 = n4, p5 = xA(i2 ^ q3, Q5 ^ S4, 10), rA2 = b4 = n4, S4 = xA(K5 ^ R4, U5 ^ eA2, 55), X3 = n4, D5 = xA(h5 ^ a5, F5 ^ e4, 41), j3 = n4, a5 = xA(M5 ^ dA2, C6 ^ O3, 39), gA2 = F5 = n4, QA2 = F5 = (KA2 = (-1 ^ F5) & j3 ^ X3) ^ (GA2 = (-1 ^ b4) & l3 ^ V3) ^ (NA2 = (-1 ^ N5) & m3 ^ x3) ^ (kA2 = (-1 ^ c5) & Z3 ^ v5) ^ CA2, N5 = P5, P5 = d5, LA2 = d5 & (-1 ^ u4) ^ s5, d5 = f5, f5 = G5, G5 = Y5, Y5 = t5, MA2 = G5 ^ t5 & (-1 ^ p5), t5 = S4, S4 = D5, AA2 = xA(iA2 = (eA2 = H5 ^ N5 & (-1 ^ J5)) ^ LA2 ^ (pA2 = d5 ^ f5 & (-1 ^ L5)) ^ MA2 ^ (dA2 = t5 ^ D5 & (-1 ^ a5)), F5, 1), tA2 = n4, F5 = xA(i2 ^ PA2, Q5 ^ k5, 2), R4 = n4, D5 = xA(B5 ^ W3, y5 ^ EA2, 62), z3 = n4, c5 = xA(K5 ^ zA2, U5 ^ BA2, 56), W3 = n4, k5 = xA(M5 ^ fA2, C6 ^ wA2, 27), q3 = n4, w5 = xA(h5 ^ w5, e4 ^ cA2, 18), b4 = n4, i2 = xA(i2 ^ sA2, Q5 ^ JA2, 1), O3 = n4, M5 = xA(M5 ^ nA2, C6 ^ oA2, 14), T3 = Q5 = e4 ^ yA2, wA2 = (hA2 = n4) ^ (-1 ^ Q5) & _3, C6 = xA(B5 ^ FA2, y5 ^ DA2, 61), e4 = n4, Q5 = xA(K5 ^ OA2, U5 ^ HA2, 28), YA2 = U5 = n4, B5 = h5 ^ bA2, yA2 = (K5 = (h5 = (cA2 = (-1 ^ D5) & t5 ^ F5) ^ (bA2 = (-1 ^ k5) & G5 ^ c5) ^ (JA2 = (-1 ^ i2) & d5 ^ w5) ^ (FA2 = (-1 ^ B5) & H5 ^ M5) ^ (EA2 = (-1 ^ Q5) & s5 ^ C6)) ^ AA2) ^ (DA2 = (-1 ^ H5) & J5 ^ B5 ^ 32898), _3 = (U5 = (nA2 = (BA2 = (-1 ^ z3) & X3 ^ R4) ^ (oA2 = (-1 ^ q3) & V3 ^ W3) ^ (fA2 = (-1 ^ O3) & x3 ^ b4) ^ (AA2 = (-1 ^ U5) & v5 ^ e4) ^ wA2) ^ tA2) ^ (tA2 = (-1 ^ _3) & IA2 ^ T3), SA2 = H5 = (HA2 = j3 ^ (-1 ^ R4) & z3) ^ (sA2 = l3 ^ (-1 ^ W3) & q3) ^ (PA2 = m3 ^ (-1 ^ b4) & O3) ^ (RA2 = Z3 ^ (-1 ^ e4) & YA2) ^ (T3 = (-1 ^ hA2) & T3 ^ $3), B5 = (y5 = iA2) ^ xA(uA2 = (iA2 = S4 ^ (-1 ^ F5) & D5) ^ (vA2 = Y5 ^ (-1 ^ c5) & k5) ^ (zA2 = f5 ^ (-1 ^ w5) & i2) ^ (OA2 = P5 ^ (-1 ^ C6) & Q5) ^ (qA2 = (-1 ^ M5) & B5 ^ N5), H5, 1), H5 = xA(B5 ^ (f5 = L5 ^ (-1 ^ f5) & w5), (y5 = n4 ^ QA2) ^ (w5 = UA2 ^ (-1 ^ m3) & b4), 43), m3 = n4, QA2 = gA2 ^ (-1 ^ j3) & R4, j3 = IA2 ^ (-1 ^ $3) & hA2, i2 = (d5 = (D5 ^= (-1 ^ t5) & a5) ^ (R4 = k5 ^ (-1 ^ G5) & p5) ^ (L5 = i2 ^ (-1 ^ d5) & L5) ^ (t5 = Q5 ^ (-1 ^ s5) & u4) ^ DA2) ^ xA(a5 = (hA2 = a5 ^ (-1 ^ S4) & F5) ^ (b4 = p5 ^ (-1 ^ Y5) & c5) ^ f5 ^ (J5 ^= (-1 ^ N5) & M5) ^ (p5 = u4 ^ (-1 ^ P5) & C6), w5 = QA2 ^ (W3 = rA2 ^ (-1 ^ l3) & W3) ^ w5 ^ j3 ^ (l3 = aA2 ^ (-1 ^ Z3) & e4), 1), u4 = xA(i2 ^ LA2, (Q5 = (f5 = (IA2 = z3 ^ (-1 ^ X3) & gA2) ^ (F5 = q3 ^ (-1 ^ V3) & rA2) ^ (N5 = O3 ^ (-1 ^ x3) & UA2) ^ (S4 = YA2 ^ (-1 ^ v5) & aA2) ^ tA2) ^ n4) ^ kA2, 44), aA2 = c5 = n4, k5 = xA(h5, nA2, 1) ^ a5, s5 = xA(qA2 ^ k5, T3 ^ (C6 = w5 ^ n4), 28), v5 = n4, P5 = xA(K5 ^ L5, U5 ^ N5, 3), Z3 = n4, h5 = xA(d5, f5, 1) ^ uA2, L5 = xA(EA2 ^ h5, AA2 ^ (e4 = SA2 ^ n4), 20), UA2 = N5 = n4, d5 = xA(i2 ^ eA2, Q5 ^ CA2, 1), x3 = n4, f5 = xA(k5 ^ zA2, C6 ^ PA2, 25), $3 = n4, p5 = xA(B5 ^ p5, y5 ^ l3, 6), CA2 = w5 = n4, G5 = xA(h5 ^ FA2, e4 ^ wA2, 27), V3 = n4, Y5 = xA(i2 ^ pA2, Q5 ^ NA2, 10), l3 = n4, a5 = xA(K5 ^ t5, S4 ^ U5, 36), rA2 = M5 = n4, t5 = xA(B5 ^ J5, y5 ^ j3, 62), X3 = n4, S4 = xA(h5 ^ JA2, e4 ^ fA2, 39), j3 = n4, J5 = xA(k5 ^ OA2, C6 ^ RA2, 55), NA2 = c5 = (JA2 = (-1 ^ (gA2 = n4)) & j3 ^ X3) ^ (kA2 = (-1 ^ M5) & l3 ^ V3) ^ (YA2 = (-1 ^ w5) & $3 ^ x3) ^ (wA2 = (-1 ^ c5) & m3 ^ _3 ^ -2147483648) ^ (T3 = (-1 ^ N5) & Z3 ^ v5), N5 = H5, H5 = s5, s5 = P5, P5 = d5, d5 = f5, DA2 = P5 ^ f5 & (-1 ^ p5), f5 = G5, G5 = Y5, Y5 = t5, t5 = S4, fA2 = xA(pA2 = (FA2 = N5 & (-1 ^ u4) ^ yA2 ^ 32906) ^ (EA2 = H5 ^ s5 & (-1 ^ L5)) ^ DA2 ^ (eA2 = f5 ^ G5 & (-1 ^ a5)) ^ (LA2 = Y5 ^ S4 & (-1 ^ J5)), c5, 1), AA2 = n4, F5 = xA(K5 ^ R4, F5 ^ U5, 41), R4 = n4, c5 = xA(i2 ^ dA2, Q5 ^ KA2, 2), z3 = n4, w5 = xA(B5 ^ b4, y5 ^ W3, 15), W3 = n4, S4 = xA(k5 ^ iA2, C6 ^ HA2, 56), q3 = n4, M5 = xA(h5 ^ bA2, e4 ^ oA2, 8), b4 = n4, D5 = xA(D5 ^ K5, U5 ^ IA2, 18), O3 = U5 = n4, C6 = xA(k5 ^ vA2, C6 ^ sA2, 21), IA2 = n4, k5 = xA(h5 ^ cA2, e4 ^ BA2, 14), e4 = n4, K5 = xA(i2 ^ MA2, Q5 ^ GA2, 45), h5 = n4, i2 = xA(B5 ^ hA2, y5 ^ QA2, 61), y5 = B5 = n4, Q5 = J5, J5 = c5, hA2 = (-1 ^ c5) & Y5 ^ F5, c5 = w5, w5 = M5, M5 = C6, Y5 = xA((K5 = (QA2 = hA2 ^ (cA2 = c5 ^ (-1 ^ S4) & f5) ^ (bA2 = w5 ^ (-1 ^ D5) & P5) ^ (GA2 = C6 ^ (-1 ^ k5) & yA2) ^ (KA2 = (C6 = K5) ^ (-1 ^ i2) & H5)) ^ fA2) ^ (BA2 = J5 ^ (-1 ^ Y5) & Q5), (U5 = (Y5 = AA2) ^ (AA2 = (oA2 = (-1 ^ z3) & X3 ^ R4) ^ (MA2 = (-1 ^ q3) & V3 ^ W3) ^ (dA2 = (-1 ^ U5) & x3 ^ b4) ^ (fA2 = (-1 ^ e4) & _3 ^ IA2) ^ (iA2 = (-1 ^ B5) & v5 ^ h5))) ^ (B5 = z3 ^ (-1 ^ X3) & gA2), 14), X3 = n4, v5 = B5 ^= (V3 = q3 ^ (-1 ^ V3) & rA2) ^ (nA2 = O3 ^ (-1 ^ x3) & CA2) ^ (tA2 = e4 ^ (-1 ^ _3) & aA2) ^ (HA2 = y5 ^ (-1 ^ v5) & UA2), uA2 = cA2, B5 = (RA2 = (J5 = t5 ^ (-1 ^ F5) & J5) ^ (cA2 = G5 ^ (-1 ^ c5) & S4) ^ (x3 = d5 ^ (-1 ^ w5) & D5) ^ (sA2 = N5 ^ (-1 ^ M5) & k5) ^ (PA2 = s5 ^ (-1 ^ C6) & i2)) ^ xA(P5 = (SA2 = BA2) ^ (S4 ^= (-1 ^ f5) & a5) ^ (D5 ^= (-1 ^ P5) & p5) ^ (k5 ^= (-1 ^ yA2) & u4) ^ (BA2 = i2 ^ (-1 ^ H5) & L5), B5, 1), H5 = xA(uA2 ^ B5, (H5 = MA2) ^ (y5 = (MA2 = (f5 = j3 ^ (-1 ^ R4) & z3) ^ (z3 = l3 ^ (-1 ^ W3) & q3) ^ (_3 = $3 ^ (-1 ^ b4) & O3) ^ (q3 = m3 ^ (-1 ^ IA2) & e4) ^ (O3 = Z3 ^ (-1 ^ h5) & y5)) ^ n4), 21), yA2 = e4 = n4, u4 = (SA2 = Q5 ^ (-1 ^ t5) & F5) ^ (a5 ^= (-1 ^ G5) & c5) ^ (p5 ^= (-1 ^ d5) & w5) ^ (M5 = u4 ^ (-1 ^ N5) & M5) ^ (vA2 = L5 ^ (-1 ^ s5) & C6), i2 = xA(QA2, AA2, 1) ^ u4, N5 = xA(i2 ^ x3, (Q5 = (s5 = (c5 = gA2 ^ (-1 ^ j3) & R4) ^ (L5 = rA2 ^ (-1 ^ l3) & W3) ^ (G5 = CA2 ^ (-1 ^ $3) & b4) ^ (b4 = aA2 ^ (-1 ^ m3) & IA2) ^ (QA2 = UA2 ^ (-1 ^ Z3) & h5)) ^ n4) ^ _3, 43), IA2 = (_3 = n4) ^ (-1 ^ e4) & X3, h5 = xA(u4, s5, 1) ^ P5, s5 = xA(DA2 ^ h5, YA2 ^ (e4 = v5 ^ n4), 3), v5 = n4, P5 = xA(i2 ^ J5, Q5 ^ f5, 61), Z3 = n4, F5 = xA(RA2, MA2, 1) ^ pA2, J5 = xA(a5 ^ F5, L5 ^ (C6 = NA2 ^ n4), 45), CA2 = a5 = n4, d5 = xA(B5 ^ bA2, y5 ^ dA2, 25), x3 = n4, f5 = xA(h5 ^ LA2, e4 ^ JA2, 18), $3 = n4, u4 = xA(S4 ^ K5, U5 ^ V3, 8), aA2 = w5 = n4, G5 = xA(F5 ^ p5, C6 ^ G5, 10), m3 = n4, t5 = xA(B5 ^ hA2, y5 ^ oA2, 56), V3 = n4, L5 = xA(i2 ^ cA2, Q5 ^ z3, 15), UA2 = R4 = n4, S4 = xA(D5 ^ K5, U5 ^ nA2, 39), l3 = n4, D5 = xA(F5 ^ SA2, C6 ^ c5, 2), j3 = n4, p5 = xA(h5 ^ eA2, e4 ^ kA2, 41), rA2 = c5 = n4, bA2 = c5 = (cA2 = (-1 ^ c5) & j3 ^ l3) ^ (kA2 = (-1 ^ R4) & V3 ^ m3) ^ (YA2 = (-1 ^ w5) & $3 ^ x3) ^ (hA2 = (-1 ^ a5) & Z3 ^ v5) ^ IA2, a5 = Y5, Y5 = t5, eA2 = t5 & (-1 ^ L5) ^ G5, t5 = S4, S4 = D5, oA2 = xA(pA2 = (DA2 = (-1 ^ u4) & f5 ^ d5) ^ (JA2 = N5 ^ a5 & (-1 ^ H5)) ^ (NA2 = (-1 ^ J5) & P5 ^ s5) ^ eA2 ^ (LA2 = t5 ^ D5 & (-1 ^ p5)), c5, 1), MA2 = n4, c5 = xA(i2 ^ sA2, Q5 ^ q3, 62), R4 = n4, D5 = xA(B5 ^ KA2, y5 ^ iA2, 55), gA2 = n4, w5 = xA(k5 ^ K5, U5 ^ tA2, 27), W3 = n4, k5 = xA(h5 ^ EA2, e4 ^ T3, 36), z3 = n4, M5 = xA(F5 ^ M5, C6 ^ b4, 1), b4 = n4, i2 = xA(i2 ^ PA2, Q5 ^ O3, 6), q3 = n4, Q5 = xA(F5 ^ vA2, C6 ^ QA2, 44), O3 = n4, C6 = xA(B5 ^ GA2, y5 ^ fA2, 28), y5 = n4, K5 = xA(K5 ^ BA2, U5 ^ HA2, 20), F5 = J5, T3 = B5 = n4, J5 = K5, s5 = xA((U5 = (BA2 = (EA2 = (-1 ^ D5) & t5 ^ c5) ^ (GA2 = (-1 ^ k5) & G5 ^ w5) ^ (KA2 = (-1 ^ i2) & d5 ^ M5) ^ (FA2 = (K5 = h5 ^ FA2) ^ (-1 ^ Q5) & N5 ^ -2147450880) ^ (QA2 = (-1 ^ J5) & s5 ^ C6)) ^ oA2) ^ (oA2 = J5 ^ (-1 ^ s5) & F5), (B5 = (s5 = MA2) ^ (AA2 = (MA2 = (-1 ^ gA2) & l3 ^ R4) ^ (dA2 = (-1 ^ z3) & m3 ^ W3) ^ (fA2 = (-1 ^ q3) & x3 ^ b4) ^ (wA2 = (h5 = e4 ^ wA2) ^ (-1 ^ O3) & _3 ^ -2147483648) ^ (iA2 = (-1 ^ B5) & v5 ^ y5))) ^ (v5 = T3 ^ (-1 ^ v5) & CA2), 44), e4 = n4, x3 = v5 = (nA2 = gA2 ^ (-1 ^ l3) & rA2) ^ (tA2 = z3 ^ (-1 ^ m3) & UA2) ^ (HA2 = q3 ^ (-1 ^ x3) & aA2) ^ v5 ^ (l3 = O3 ^ (-1 ^ _3) & yA2), _3 = FA2, RA2 = (m3 = S4 ^ (-1 ^ c5) & D5) ^ (FA2 = Y5 ^ (-1 ^ w5) & k5) ^ (sA2 = f5 ^ (-1 ^ M5) & i2) ^ (PA2 = a5 ^ (-1 ^ K5) & Q5) ^ (J5 = P5 ^ (-1 ^ C6) & J5), v5 = _3 ^ (i2 = xA(d5 = (t5 = D5 ^ (-1 ^ t5) & p5) ^ (SA2 = k5 ^ (-1 ^ G5) & L5) ^ (vA2 = i2 ^ (-1 ^ d5) & u4) ^ oA2 ^ (G5 = Q5 ^ (-1 ^ N5) & H5), v5, 1) ^ RA2), _3 = (D5 = wA2) ^ (Q5 = (O3 = (N5 = j3 ^ (-1 ^ R4) & gA2) ^ (wA2 = V3 ^ (-1 ^ W3) & z3) ^ (z3 = $3 ^ (-1 ^ b4) & q3) ^ (gA2 = X3 ^ (-1 ^ h5) & O3) ^ (q3 = Z3 ^ (-1 ^ y5) & T3)) ^ n4), L5 = (p5 ^= (-1 ^ S4) & c5) ^ (T3 = L5 ^ (-1 ^ Y5) & w5) ^ (M5 = u4 ^ (-1 ^ f5) & M5) ^ (u4 = H5 ^ (-1 ^ a5) & K5) ^ (a5 = F5 ^ (-1 ^ P5) & C6), D5 = xA(BA2, AA2, 1) ^ L5, N5 = xA(D5 ^ m3, (k5 = (H5 = (Y5 = rA2 ^ (-1 ^ j3) & R4) ^ (BA2 = UA2 ^ (-1 ^ V3) & W3) ^ (b4 = aA2 ^ (-1 ^ $3) & b4) ^ (f5 = yA2 ^ (-1 ^ X3) & h5) ^ (S4 = CA2 ^ (-1 ^ Z3) & y5)) ^ n4) ^ N5, 14), aA2 = (CA2 = n4) ^ (-1 ^ _3) & e4, C6 = xA(L5, H5, 1) ^ d5, H5 = xA(LA2 ^ C6, cA2 ^ (K5 = x3 ^ n4), 61), Z3 = n4, P5 = xA(D5 ^ J5, k5 ^ q3, 20), x3 = n4, y5 = xA(RA2, O3, 1) ^ pA2, u4 = xA(y5 ^ u4, (h5 = bA2 ^ n4) ^ f5, 28), UA2 = F5 = n4, d5 = xA(i2 ^ EA2, Q5 ^ MA2, 18), $3 = n4, f5 = xA(C6 ^ NA2, K5 ^ hA2, 6), m3 = n4, L5 = xA(U5 ^ G5, B5 ^ l3, 1), rA2 = c5 = n4, G5 = xA(y5 ^ p5, h5 ^ Y5, 56), V3 = n4, Y5 = xA(i2 ^ QA2, Q5 ^ iA2, 36), l3 = n4, J5 = xA(D5 ^ PA2, k5 ^ gA2, 27), gA2 = w5 = n4, t5 = xA(t5 ^ U5, B5 ^ nA2, 2), X3 = n4, S4 = xA(y5 ^ a5, h5 ^ S4, 55), j3 = n4, p5 = xA(C6 ^ JA2, K5 ^ IA2, 62), IA2 = a5 = n4, NA2 = F5 = (JA2 = (-1 ^ a5) & j3 ^ X3) ^ (bA2 = (-1 ^ w5) & l3 ^ V3) ^ (cA2 = (-1 ^ c5) & m3 ^ $3) ^ (hA2 = (-1 ^ F5) & x3 ^ Z3) ^ aA2, a5 = s5, s5 = P5, P5 = d5, d5 = f5, LA2 = P5 ^ f5 & (-1 ^ L5), f5 = G5, G5 = Y5, Y5 = t5, t5 = S4, iA2 = xA(MA2 = (EA2 = N5 ^ a5 & (-1 ^ v5)) ^ (QA2 = s5 & (-1 ^ u4) ^ H5) ^ LA2 ^ (pA2 = f5 ^ G5 & (-1 ^ J5)) ^ (oA2 = Y5 ^ S4 & (-1 ^ p5)), F5, 1), AA2 = n4, F5 = xA(D5 ^ sA2, k5 ^ z3, 39), R4 = n4, S4 = xA(i2 ^ GA2, Q5 ^ dA2, 41), z3 = n4, c5 = xA(U5 ^ vA2, B5 ^ HA2, 10), W3 = n4, w5 = xA(C6 ^ eA2, K5 ^ kA2, 15), q3 = n4, M5 = xA(y5 ^ M5, h5 ^ b4, 25), b4 = n4, D5 = xA(D5 ^ FA2, k5 ^ wA2, 8), O3 = n4, C6 = xA(C6 ^ DA2, K5 ^ YA2, 43), yA2 = n4, k5 = xA(y5 ^ T3, h5 ^ BA2, 21), y5 = n4, K5 = xA(i2 ^ KA2, Q5 ^ fA2, 3), h5 = n4, i2 = xA(U5 ^ SA2, B5 ^ tA2, 45), T3 = U5 = n4, Q5 = J5, J5 = w5, wA2 = (-1 ^ w5) & f5 ^ c5, w5 = M5, M5 = C6, f5 = xA((K5 = (DA2 = (YA2 = (-1 ^ S4) & Y5 ^ F5) ^ wA2 ^ (B5 = w5 ^ (-1 ^ D5) & P5) ^ (kA2 = C6 ^ (-1 ^ k5) & N5) ^ (FA2 = (C6 = K5) ^ (-1 ^ i2) & H5)) ^ iA2) ^ (GA2 = J5 ^ (-1 ^ f5) & Q5), (U5 = (iA2 = (KA2 = (-1 ^ z3) & X3 ^ R4) ^ (eA2 = (-1 ^ q3) & V3 ^ W3) ^ (BA2 = (-1 ^ O3) & $3 ^ b4) ^ (dA2 = (-1 ^ y5) & CA2 ^ yA2) ^ (fA2 = (-1 ^ U5) & Z3 ^ h5)) ^ AA2) ^ (AA2 = q3 ^ (-1 ^ V3) & gA2), 21), V3 = n4, Z3 = (nA2 = z3 ^ (-1 ^ X3) & IA2) ^ (SA2 = AA2) ^ (X3 = O3 ^ (-1 ^ $3) & rA2) ^ (AA2 = y5 ^ (-1 ^ CA2) & _3) ^ (tA2 = T3 ^ (-1 ^ Z3) & UA2), CA2 = B5, SA2 = (HA2 = t5 ^ (-1 ^ F5) & S4) ^ ($3 = G5 ^ (-1 ^ c5) & J5) ^ (sA2 = d5 ^ (-1 ^ w5) & D5) ^ (PA2 = a5 ^ (-1 ^ M5) & k5) ^ (RA2 = s5 ^ (-1 ^ C6) & i2), B5 = xA(P5 = (vA2 = S4 ^ (-1 ^ Y5) & p5) ^ (B5 = GA2) ^ (Y5 = D5 ^ (-1 ^ P5) & L5) ^ (GA2 = k5 ^ (-1 ^ N5) & v5) ^ (N5 = i2 ^ (-1 ^ H5) & u4), Z3, 1) ^ SA2, J5 = xA(CA2 ^ B5, (y5 = (z3 = (k5 = j3 ^ (-1 ^ R4) & z3) ^ (S4 = l3 ^ (-1 ^ W3) & q3) ^ (D5 = m3 ^ (-1 ^ b4) & O3) ^ (O3 = e4 ^ (-1 ^ yA2) & y5) ^ (H5 = x3 ^ (-1 ^ h5) & T3)) ^ n4) ^ BA2, 43), CA2 = n4, u4 = (T3 = p5 ^ (-1 ^ t5) & F5) ^ (F5 = Q5 ^ (-1 ^ G5) & c5) ^ (L5 ^= (-1 ^ d5) & w5) ^ (BA2 = (-1 ^ a5) & M5 ^ v5 ^ 32907) ^ (p5 = u4 ^ (-1 ^ s5) & C6), i2 = xA(DA2, iA2, 1) ^ u4, H5 = xA(i2 ^ RA2, (Q5 = (s5 = (w5 = IA2 ^ (-1 ^ j3) & R4) ^ (a5 = gA2 ^ (-1 ^ l3) & W3) ^ (d5 = rA2 ^ (-1 ^ m3) & b4) ^ (yA2 = (-1 ^ e4) & yA2 ^ _3) ^ (t5 = UA2 ^ (-1 ^ x3) & h5)) ^ n4) ^ H5, 44), IA2 = (_3 = n4) ^ (-1 ^ CA2) & V3, M5 = xA(u4, s5, 1) ^ P5, s5 = xA(QA2 ^ M5, hA2 ^ (C6 = Z3 ^ n4), 20), v5 = n4, P5 = xA(i2 ^ $3, Q5 ^ S4, 45), Z3 = n4, h5 = xA(SA2, z3, 1) ^ MA2, u4 = xA(h5 ^ L5, (e4 = NA2 ^ n4) ^ d5, 3), UA2 = c5 = n4, d5 = xA(B5 ^ FA2, y5 ^ fA2, 6), x3 = n4, G5 = xA(M5 ^ pA2, C6 ^ bA2, 8), $3 = n4, L5 = xA(K5 ^ Y5, U5 ^ X3, 25), rA2 = R4 = n4, Y5 = xA(h5 ^ p5, e4 ^ t5, 36), m3 = n4, t5 = xA(B5 ^ wA2, y5 ^ eA2, 15), l3 = n4, p5 = xA(i2 ^ sA2, Q5 ^ D5, 10), gA2 = W3 = n4, S4 = xA(K5 ^ N5, U5 ^ tA2, 55), X3 = n4, D5 = xA(h5 ^ F5, e4 ^ a5, 41), j3 = n4, a5 = xA(M5 ^ LA2, C6 ^ cA2, 39), z3 = N5 = n4, DA2 = F5 = (FA2 = (-1 ^ N5) & j3 ^ X3) ^ (NA2 = (-1 ^ W3) & l3 ^ m3) ^ (bA2 = (-1 ^ R4) & $3 ^ x3) ^ (cA2 = (-1 ^ c5) & Z3 ^ v5) ^ IA2, N5 = f5, QA2 = H5 ^ f5 & (-1 ^ J5), f5 = G5, G5 = Y5, Y5 = t5, pA2 = G5 ^ t5 & (-1 ^ p5), t5 = S4, S4 = D5, iA2 = xA(fA2 = QA2 ^ (eA2 = (-1 ^ u4) & P5 ^ s5) ^ (LA2 = f5 & (-1 ^ L5) ^ d5) ^ pA2 ^ (MA2 = t5 ^ D5 & (-1 ^ a5)), F5, 1), tA2 = n4, F5 = xA(i2 ^ HA2, Q5 ^ k5, 2), R4 = n4, D5 = xA(B5 ^ kA2, y5 ^ dA2, 62), q3 = n4, c5 = xA(K5 ^ vA2, U5 ^ nA2, 56), W3 = n4, k5 = xA(M5 ^ EA2, C6 ^ aA2, 27), aA2 = n4, w5 = xA(h5 ^ T3, w5 ^ e4, 18), b4 = n4, i2 = xA(i2 ^ PA2, Q5 ^ O3, 1), O3 = n4, M5 = xA(M5 ^ oA2, C6 ^ JA2, 14), T3 = Q5 = e4 ^ yA2, wA2 = (hA2 = n4) ^ (-1 ^ Q5) & _3, C6 = xA(B5 ^ YA2, y5 ^ KA2, 61), e4 = n4, Q5 = xA(K5 ^ GA2, U5 ^ AA2, 28), YA2 = U5 = n4, yA2 = (K5 = (h5 = (kA2 = (-1 ^ D5) & t5 ^ F5) ^ (JA2 = (-1 ^ k5) & G5 ^ c5) ^ (EA2 = (-1 ^ i2) & d5 ^ w5) ^ (GA2 = (-1 ^ (B5 = h5 ^ BA2)) & H5 ^ M5) ^ (KA2 = (-1 ^ Q5) & s5 ^ C6)) ^ iA2) ^ (BA2 = (-1 ^ H5) & J5 ^ B5 ^ -2147483647), _3 = (U5 = (nA2 = (oA2 = (-1 ^ q3) & X3 ^ R4) ^ (dA2 = (-1 ^ aA2) & m3 ^ W3) ^ (iA2 = (-1 ^ O3) & x3 ^ b4) ^ (AA2 = (-1 ^ U5) & v5 ^ e4) ^ wA2) ^ tA2) ^ (tA2 = (-1 ^ _3) & CA2 ^ T3), SA2 = H5 = (HA2 = j3 ^ (-1 ^ R4) & q3) ^ (sA2 = l3 ^ (-1 ^ W3) & aA2) ^ (PA2 = $3 ^ (-1 ^ b4) & O3) ^ (T3 = V3 ^ (-1 ^ hA2) & T3) ^ (RA2 = Z3 ^ (-1 ^ e4) & YA2), B5 = (y5 = fA2) ^ xA(uA2 = (fA2 = S4 ^ (-1 ^ F5) & D5) ^ (vA2 = Y5 ^ (-1 ^ c5) & k5) ^ (zA2 = f5 ^ (-1 ^ w5) & i2) ^ (OA2 = N5 ^ (-1 ^ M5) & B5) ^ (qA2 = P5 ^ (-1 ^ C6) & Q5), H5, 1), H5 = xA(B5 ^ (f5 = L5 ^ (-1 ^ f5) & w5), (y5 = n4 ^ DA2) ^ (w5 = rA2 ^ (-1 ^ $3) & b4), 43), $3 = n4, DA2 = z3 ^ (-1 ^ j3) & R4, j3 = CA2 ^ (-1 ^ V3) & hA2, i2 = (d5 = (D5 ^= (-1 ^ t5) & a5) ^ (R4 = k5 ^ (-1 ^ G5) & p5) ^ (L5 = i2 ^ (-1 ^ d5) & L5) ^ (t5 = Q5 ^ (-1 ^ s5) & u4) ^ BA2) ^ xA(a5 = (hA2 = a5 ^ (-1 ^ S4) & F5) ^ (b4 = p5 ^ (-1 ^ Y5) & c5) ^ f5 ^ (J5 ^= (-1 ^ N5) & M5) ^ (p5 = u4 ^ (-1 ^ P5) & C6), w5 = DA2 ^ (W3 = gA2 ^ (-1 ^ l3) & W3) ^ w5 ^ j3 ^ (V3 = UA2 ^ (-1 ^ Z3) & e4), 1), u4 = xA(i2 ^ eA2, (Y5 = cA2) ^ (Q5 = (f5 = (cA2 = q3 ^ (-1 ^ X3) & z3) ^ (F5 = aA2 ^ (-1 ^ m3) & gA2) ^ (N5 = O3 ^ (-1 ^ x3) & rA2) ^ (S4 = YA2 ^ (-1 ^ v5) & UA2) ^ tA2) ^ n4), 44), CA2 = c5 = n4, k5 = xA(h5, nA2, 1) ^ a5, s5 = xA(OA2 ^ k5, T3 ^ (C6 = w5 ^ n4), 28), v5 = n4, P5 = xA(K5 ^ L5, U5 ^ N5, 3), Z3 = n4, h5 = xA(d5, f5, 1) ^ uA2, L5 = xA(KA2 ^ h5, AA2 ^ (e4 = SA2 ^ n4), 20), aA2 = N5 = n4, d5 = xA(i2 ^ QA2, Q5 ^ IA2, 1), x3 = n4, f5 = xA(k5 ^ zA2, C6 ^ PA2, 25), m3 = n4, p5 = xA(B5 ^ p5, y5 ^ V3, 6), UA2 = w5 = n4, G5 = xA(h5 ^ GA2, e4 ^ wA2, 27), V3 = n4, Y5 = xA(i2 ^ LA2, Q5 ^ bA2, 10), l3 = n4, a5 = xA(K5 ^ t5, S4 ^ U5, 36), rA2 = M5 = n4, t5 = xA(B5 ^ J5, y5 ^ j3, 62), X3 = n4, S4 = xA(h5 ^ EA2, e4 ^ iA2, 39), j3 = n4, J5 = xA(k5 ^ qA2, C6 ^ RA2, 55), gA2 = IA2 = n4, GA2 = c5 = (EA2 = (-1 ^ IA2) & j3 ^ X3) ^ (bA2 = (-1 ^ M5) & l3 ^ V3) ^ (YA2 = (-1 ^ w5) & m3 ^ x3) ^ (wA2 = (-1 ^ c5) & $3 ^ _3 ^ -2147483648) ^ (T3 = (-1 ^ N5) & Z3 ^ v5), N5 = H5, H5 = s5, s5 = P5, P5 = d5, d5 = f5, eA2 = P5 ^ f5 & (-1 ^ p5), f5 = G5, G5 = Y5, Y5 = t5, t5 = S4, AA2 = xA(iA2 = (KA2 = N5 & (-1 ^ u4) ^ yA2 ^ -2147450751) ^ (QA2 = H5 ^ s5 & (-1 ^ L5)) ^ eA2 ^ (BA2 = f5 ^ G5 & (-1 ^ a5)) ^ (LA2 = Y5 ^ S4 & (-1 ^ J5)), c5, 1), nA2 = n4, F5 = xA(K5 ^ R4, F5 ^ U5, 41), R4 = n4, c5 = xA(i2 ^ MA2, Q5 ^ FA2, 2), z3 = n4, w5 = xA(B5 ^ b4, y5 ^ W3, 15), W3 = n4, S4 = xA(k5 ^ fA2, C6 ^ HA2, 56), q3 = n4, M5 = xA(h5 ^ JA2, e4 ^ dA2, 8), b4 = n4, D5 = xA(D5 ^ K5, U5 ^ cA2, 18), O3 = U5 = n4, C6 = xA(k5 ^ vA2, C6 ^ sA2, 21), IA2 = n4, k5 = xA(h5 ^ kA2, e4 ^ oA2, 14), e4 = n4, K5 = xA(i2 ^ pA2, Q5 ^ NA2, 45), h5 = n4, i2 = xA(B5 ^ hA2, y5 ^ DA2, 61), y5 = B5 = n4, Q5 = J5, J5 = c5, hA2 = (-1 ^ c5) & Y5 ^ F5, c5 = w5, w5 = M5, M5 = C6, Y5 = xA((K5 = (FA2 = hA2 ^ (kA2 = c5 ^ (-1 ^ S4) & f5) ^ (cA2 = w5 ^ (-1 ^ D5) & P5) ^ (JA2 = C6 ^ (-1 ^ k5) & yA2) ^ (NA2 = (C6 = K5) ^ (-1 ^ i2) & H5)) ^ AA2) ^ (DA2 = J5 ^ (-1 ^ Y5) & Q5), (U5 = (AA2 = (pA2 = (-1 ^ z3) & X3 ^ R4) ^ (oA2 = (-1 ^ q3) & V3 ^ W3) ^ (MA2 = (-1 ^ U5) & x3 ^ b4) ^ (dA2 = (-1 ^ e4) & _3 ^ IA2) ^ (fA2 = (-1 ^ B5) & v5 ^ h5)) ^ nA2) ^ (B5 = z3 ^ (-1 ^ X3) & gA2), 14), X3 = n4, v5 = B5 ^= (V3 = q3 ^ (-1 ^ V3) & rA2) ^ (nA2 = O3 ^ (-1 ^ x3) & UA2) ^ (tA2 = e4 ^ (-1 ^ _3) & CA2) ^ (HA2 = y5 ^ (-1 ^ v5) & aA2), uA2 = kA2, B5 = (RA2 = (J5 = t5 ^ (-1 ^ F5) & J5) ^ (kA2 = G5 ^ (-1 ^ c5) & S4) ^ (x3 = d5 ^ (-1 ^ w5) & D5) ^ (sA2 = N5 ^ (-1 ^ M5) & k5) ^ (PA2 = s5 ^ (-1 ^ C6) & i2)) ^ xA(P5 = (SA2 = DA2) ^ (S4 ^= (-1 ^ f5) & a5) ^ (D5 ^= (-1 ^ P5) & p5) ^ (k5 ^= (-1 ^ yA2) & u4) ^ (DA2 = i2 ^ (-1 ^ H5) & L5), B5, 1), H5 = xA(uA2 ^ B5, (H5 = oA2) ^ (y5 = (oA2 = (f5 = j3 ^ (-1 ^ R4) & z3) ^ (z3 = l3 ^ (-1 ^ W3) & q3) ^ (_3 = m3 ^ (-1 ^ b4) & O3) ^ (q3 = $3 ^ (-1 ^ IA2) & e4) ^ (O3 = Z3 ^ (-1 ^ h5) & y5)) ^ n4), 21), yA2 = e4 = n4, u4 = (SA2 = Q5 ^ (-1 ^ t5) & F5) ^ (a5 ^= (-1 ^ G5) & c5) ^ (p5 ^= (-1 ^ d5) & w5) ^ (M5 = u4 ^ (-1 ^ N5) & M5) ^ (vA2 = L5 ^ (-1 ^ s5) & C6), i2 = xA(FA2, AA2, 1) ^ u4, N5 = xA(i2 ^ x3, (Q5 = (s5 = (c5 = gA2 ^ (-1 ^ j3) & R4) ^ (L5 = rA2 ^ (-1 ^ l3) & W3) ^ (G5 = UA2 ^ (-1 ^ m3) & b4) ^ (b4 = CA2 ^ (-1 ^ $3) & IA2) ^ (FA2 = aA2 ^ (-1 ^ Z3) & h5)) ^ n4) ^ _3, 43), IA2 = (_3 = n4) ^ (-1 ^ e4) & X3, h5 = xA(u4, s5, 1) ^ P5, s5 = xA(eA2 ^ h5, YA2 ^ (e4 = v5 ^ n4), 3), v5 = n4, P5 = xA(i2 ^ J5, Q5 ^ f5, 61), Z3 = n4, F5 = xA(RA2, oA2, 1) ^ iA2, J5 = xA(a5 ^ F5, L5 ^ (C6 = GA2 ^ n4), 45), CA2 = a5 = n4, d5 = xA(B5 ^ cA2, y5 ^ MA2, 25), x3 = n4, f5 = xA(h5 ^ LA2, e4 ^ EA2, 18), $3 = n4, u4 = xA(S4 ^ K5, U5 ^ V3, 8), aA2 = w5 = n4, G5 = xA(F5 ^ p5, C6 ^ G5, 10), m3 = n4, t5 = xA(B5 ^ hA2, y5 ^ pA2, 56), V3 = n4, L5 = xA(i2 ^ kA2, Q5 ^ z3, 15), UA2 = R4 = n4, S4 = xA(D5 ^ K5, U5 ^ nA2, 39), l3 = n4, D5 = xA(F5 ^ SA2, C6 ^ c5, 2), j3 = n4, p5 = xA(h5 ^ BA2, e4 ^ bA2, 41), rA2 = c5 = n4, bA2 = c5 = (cA2 = (-1 ^ c5) & j3 ^ l3) ^ (kA2 = (-1 ^ R4) & V3 ^ m3) ^ (YA2 = (-1 ^ w5) & $3 ^ x3) ^ (hA2 = (-1 ^ a5) & Z3 ^ v5) ^ IA2, a5 = Y5, Y5 = t5, BA2 = t5 & (-1 ^ L5) ^ G5, t5 = S4, S4 = D5, oA2 = xA(pA2 = (eA2 = (-1 ^ u4) & f5 ^ d5) ^ (EA2 = N5 ^ a5 & (-1 ^ H5)) ^ (GA2 = (-1 ^ J5) & P5 ^ s5) ^ BA2 ^ (LA2 = t5 ^ D5 & (-1 ^ p5)), c5, 1), MA2 = n4, c5 = xA(i2 ^ sA2, Q5 ^ q3, 62), R4 = n4, D5 = xA(B5 ^ NA2, y5 ^ fA2, 55), gA2 = n4, w5 = xA(k5 ^ K5, U5 ^ tA2, 27), W3 = n4, k5 = xA(h5 ^ QA2, e4 ^ T3, 36), z3 = n4, M5 = xA(F5 ^ M5, C6 ^ b4, 1), b4 = n4, i2 = xA(i2 ^ PA2, Q5 ^ O3, 6), q3 = n4, Q5 = xA(F5 ^ vA2, C6 ^ FA2, 44), O3 = n4, C6 = xA(B5 ^ JA2, y5 ^ dA2, 28), y5 = n4, K5 = xA(K5 ^ DA2, U5 ^ HA2, 20), F5 = J5, T3 = B5 = n4, J5 = K5, s5 = xA((U5 = (QA2 = (JA2 = (-1 ^ D5) & t5 ^ c5) ^ (NA2 = (-1 ^ k5) & G5 ^ w5) ^ (FA2 = (-1 ^ i2) & d5 ^ M5) ^ (DA2 = (K5 = h5 ^ KA2) ^ (-1 ^ Q5) & N5 ^ 32777) ^ (KA2 = (-1 ^ J5) & s5 ^ C6)) ^ oA2) ^ (oA2 = J5 ^ (-1 ^ s5) & F5), (B5 = (s5 = MA2) ^ (AA2 = (MA2 = (-1 ^ gA2) & l3 ^ R4) ^ (dA2 = (-1 ^ z3) & m3 ^ W3) ^ (fA2 = (-1 ^ q3) & x3 ^ b4) ^ (wA2 = (h5 = e4 ^ wA2) ^ (-1 ^ O3) & _3 ^ -2147483648) ^ (iA2 = (-1 ^ B5) & v5 ^ y5))) ^ (v5 = T3 ^ (-1 ^ v5) & CA2), 44), e4 = n4, x3 = v5 = (nA2 = gA2 ^ (-1 ^ l3) & rA2) ^ (tA2 = z3 ^ (-1 ^ m3) & UA2) ^ (HA2 = q3 ^ (-1 ^ x3) & aA2) ^ v5 ^ (l3 = O3 ^ (-1 ^ _3) & yA2), _3 = DA2, RA2 = (m3 = S4 ^ (-1 ^ c5) & D5) ^ (DA2 = Y5 ^ (-1 ^ w5) & k5) ^ (sA2 = f5 ^ (-1 ^ M5) & i2) ^ (PA2 = a5 ^ (-1 ^ K5) & Q5) ^ (J5 = P5 ^ (-1 ^ C6) & J5), v5 = _3 ^ (i2 = xA(d5 = (t5 = D5 ^ (-1 ^ t5) & p5) ^ (SA2 = k5 ^ (-1 ^ G5) & L5) ^ (vA2 = i2 ^ (-1 ^ d5) & u4) ^ oA2 ^ (G5 = Q5 ^ (-1 ^ N5) & H5), v5, 1) ^ RA2), _3 = (D5 = wA2) ^ (Q5 = (O3 = (N5 = j3 ^ (-1 ^ R4) & gA2) ^ (wA2 = V3 ^ (-1 ^ W3) & z3) ^ (z3 = $3 ^ (-1 ^ b4) & q3) ^ (gA2 = X3 ^ (-1 ^ h5) & O3) ^ (q3 = Z3 ^ (-1 ^ y5) & T3)) ^ n4), L5 = (p5 ^= (-1 ^ S4) & c5) ^ (T3 = L5 ^ (-1 ^ Y5) & w5) ^ (M5 = u4 ^ (-1 ^ f5) & M5) ^ (u4 = H5 ^ (-1 ^ a5) & K5) ^ (a5 = F5 ^ (-1 ^ P5) & C6), D5 = xA(QA2, AA2, 1) ^ L5, N5 = xA(D5 ^ m3, (k5 = (H5 = (Y5 = rA2 ^ (-1 ^ j3) & R4) ^ (QA2 = UA2 ^ (-1 ^ V3) & W3) ^ (b4 = aA2 ^ (-1 ^ $3) & b4) ^ (f5 = yA2 ^ (-1 ^ X3) & h5) ^ (S4 = CA2 ^ (-1 ^ Z3) & y5)) ^ n4) ^ N5, 14), aA2 = (CA2 = n4) ^ (-1 ^ _3) & e4, C6 = xA(L5, H5, 1) ^ d5, H5 = xA(LA2 ^ C6, cA2 ^ (K5 = x3 ^ n4), 61), Z3 = n4, P5 = xA(D5 ^ J5, k5 ^ q3, 20), x3 = n4, y5 = xA(RA2, O3, 1) ^ pA2, u4 = xA(y5 ^ u4, (h5 = bA2 ^ n4) ^ f5, 28), UA2 = F5 = n4, d5 = xA(i2 ^ JA2, Q5 ^ MA2, 18), $3 = n4, f5 = xA(C6 ^ GA2, K5 ^ hA2, 6), m3 = n4, L5 = xA(U5 ^ G5, B5 ^ l3, 1), rA2 = c5 = n4, G5 = xA(y5 ^ p5, h5 ^ Y5, 56), V3 = n4, Y5 = xA(i2 ^ KA2, Q5 ^ iA2, 36), l3 = n4, J5 = xA(D5 ^ PA2, k5 ^ gA2, 27), gA2 = w5 = n4, t5 = xA(t5 ^ U5, B5 ^ nA2, 2), X3 = n4, S4 = xA(y5 ^ a5, h5 ^ S4, 55), j3 = n4, p5 = xA(C6 ^ EA2, K5 ^ IA2, 62), IA2 = a5 = n4, EA2 = F5 = (JA2 = (-1 ^ a5) & j3 ^ X3) ^ (bA2 = (-1 ^ w5) & l3 ^ V3) ^ (cA2 = (-1 ^ c5) & m3 ^ $3) ^ (hA2 = (-1 ^ F5) & x3 ^ Z3) ^ aA2, a5 = s5, s5 = P5, P5 = d5, d5 = f5, LA2 = P5 ^ f5 & (-1 ^ L5), f5 = G5, G5 = Y5, Y5 = t5, t5 = S4, iA2 = xA(MA2 = (GA2 = N5 ^ a5 & (-1 ^ v5)) ^ (KA2 = s5 & (-1 ^ u4) ^ H5) ^ LA2 ^ (pA2 = f5 ^ G5 & (-1 ^ J5)) ^ (oA2 = Y5 ^ S4 & (-1 ^ p5)), F5, 1), AA2 = n4, F5 = xA(D5 ^ sA2, k5 ^ z3, 39), R4 = n4, S4 = xA(i2 ^ NA2, Q5 ^ dA2, 41), z3 = n4, c5 = xA(U5 ^ vA2, B5 ^ HA2, 10), W3 = n4, w5 = xA(C6 ^ BA2, K5 ^ kA2, 15), q3 = n4, M5 = xA(y5 ^ M5, h5 ^ b4, 25), b4 = n4, D5 = xA(D5 ^ DA2, k5 ^ wA2, 8), O3 = n4, C6 = xA(C6 ^ eA2, K5 ^ YA2, 43), yA2 = n4, k5 = xA(y5 ^ T3, h5 ^ QA2, 21), y5 = n4, K5 = xA(i2 ^ FA2, Q5 ^ fA2, 3), h5 = n4, i2 = xA(U5 ^ SA2, B5 ^ tA2, 45), T3 = U5 = n4, Q5 = J5, J5 = w5, wA2 = (-1 ^ w5) & f5 ^ c5, w5 = M5, M5 = C6, f5 = xA((K5 = (FA2 = (YA2 = (-1 ^ S4) & Y5 ^ F5) ^ wA2 ^ (B5 = w5 ^ (-1 ^ D5) & P5) ^ (kA2 = C6 ^ (-1 ^ k5) & N5) ^ (NA2 = (C6 = K5) ^ (-1 ^ i2) & H5)) ^ iA2) ^ (DA2 = J5 ^ (-1 ^ f5) & Q5), (U5 = (iA2 = (QA2 = (-1 ^ z3) & X3 ^ R4) ^ (eA2 = (-1 ^ q3) & V3 ^ W3) ^ (BA2 = (-1 ^ O3) & $3 ^ b4) ^ (dA2 = (-1 ^ y5) & CA2 ^ yA2) ^ (fA2 = (-1 ^ U5) & Z3 ^ h5)) ^ AA2) ^ (AA2 = q3 ^ (-1 ^ V3) & gA2), 21), V3 = n4, Z3 = (nA2 = z3 ^ (-1 ^ X3) & IA2) ^ (SA2 = AA2) ^ (X3 = O3 ^ (-1 ^ $3) & rA2) ^ (AA2 = y5 ^ (-1 ^ CA2) & _3) ^ (tA2 = T3 ^ (-1 ^ Z3) & UA2), CA2 = B5, SA2 = (HA2 = t5 ^ (-1 ^ F5) & S4) ^ ($3 = G5 ^ (-1 ^ c5) & J5) ^ (sA2 = d5 ^ (-1 ^ w5) & D5) ^ (PA2 = a5 ^ (-1 ^ M5) & k5) ^ (RA2 = s5 ^ (-1 ^ C6) & i2), B5 = xA(P5 = (vA2 = S4 ^ (-1 ^ Y5) & p5) ^ (B5 = DA2) ^ (Y5 = D5 ^ (-1 ^ P5) & L5) ^ (DA2 = k5 ^ (-1 ^ N5) & v5) ^ (N5 = i2 ^ (-1 ^ H5) & u4), Z3, 1) ^ SA2, J5 = xA(CA2 ^ B5, (y5 = (z3 = (k5 = j3 ^ (-1 ^ R4) & z3) ^ (S4 = l3 ^ (-1 ^ W3) & q3) ^ (D5 = m3 ^ (-1 ^ b4) & O3) ^ (O3 = e4 ^ (-1 ^ yA2) & y5) ^ (H5 = x3 ^ (-1 ^ h5) & T3)) ^ n4) ^ BA2, 43), CA2 = n4, u4 = (T3 = p5 ^ (-1 ^ t5) & F5) ^ (F5 = Q5 ^ (-1 ^ G5) & c5) ^ (L5 ^= (-1 ^ d5) & w5) ^ (BA2 = (-1 ^ a5) & M5 ^ v5 ^ 138) ^ (p5 = u4 ^ (-1 ^ s5) & C6), i2 = xA(FA2, iA2, 1) ^ u4, H5 = xA(i2 ^ RA2, (Q5 = (s5 = (w5 = IA2 ^ (-1 ^ j3) & R4) ^ (a5 = gA2 ^ (-1 ^ l3) & W3) ^ (d5 = rA2 ^ (-1 ^ m3) & b4) ^ (yA2 = (-1 ^ e4) & yA2 ^ _3) ^ (t5 = UA2 ^ (-1 ^ x3) & h5)) ^ n4) ^ H5, 44), IA2 = (_3 = n4) ^ (-1 ^ CA2) & V3, M5 = xA(u4, s5, 1) ^ P5, s5 = xA(KA2 ^ M5, hA2 ^ (C6 = Z3 ^ n4), 20), v5 = n4, P5 = xA(i2 ^ $3, Q5 ^ S4, 45), Z3 = n4, h5 = xA(SA2, z3, 1) ^ MA2, u4 = xA(h5 ^ L5, (e4 = EA2 ^ n4) ^ d5, 3), UA2 = c5 = n4, d5 = xA(B5 ^ NA2, y5 ^ fA2, 6), x3 = n4, G5 = xA(M5 ^ pA2, C6 ^ bA2, 8), $3 = n4, L5 = xA(K5 ^ Y5, U5 ^ X3, 25), rA2 = R4 = n4, Y5 = xA(h5 ^ p5, e4 ^ t5, 36), m3 = n4, t5 = xA(B5 ^ wA2, y5 ^ eA2, 15), l3 = n4, p5 = xA(i2 ^ sA2, Q5 ^ D5, 10), gA2 = W3 = n4, S4 = xA(K5 ^ N5, U5 ^ tA2, 55), X3 = n4, D5 = xA(h5 ^ F5, e4 ^ a5, 41), j3 = n4, a5 = xA(M5 ^ LA2, C6 ^ cA2, 39), z3 = N5 = n4, EA2 = F5 = (FA2 = (-1 ^ N5) & j3 ^ X3) ^ (NA2 = (-1 ^ W3) & l3 ^ m3) ^ (bA2 = (-1 ^ R4) & $3 ^ x3) ^ (cA2 = (-1 ^ c5) & Z3 ^ v5) ^ IA2, N5 = f5, KA2 = H5 ^ f5 & (-1 ^ J5), f5 = G5, G5 = Y5, Y5 = t5, pA2 = G5 ^ t5 & (-1 ^ p5), t5 = S4, S4 = D5, iA2 = xA(fA2 = KA2 ^ (eA2 = (-1 ^ u4) & P5 ^ s5) ^ (LA2 = f5 & (-1 ^ L5) ^ d5) ^ pA2 ^ (MA2 = t5 ^ D5 & (-1 ^ a5)), F5, 1), tA2 = n4, F5 = xA(i2 ^ HA2, Q5 ^ k5, 2), R4 = n4, D5 = xA(B5 ^ kA2, y5 ^ dA2, 62), q3 = n4, c5 = xA(K5 ^ vA2, U5 ^ nA2, 56), W3 = n4, k5 = xA(M5 ^ GA2, C6 ^ aA2, 27), aA2 = n4, w5 = xA(h5 ^ T3, w5 ^ e4, 18), b4 = n4, i2 = xA(i2 ^ PA2, Q5 ^ O3, 1), O3 = n4, M5 = xA(M5 ^ oA2, C6 ^ JA2, 14), T3 = Q5 = e4 ^ yA2, wA2 = (hA2 = n4) ^ (-1 ^ Q5) & _3, C6 = xA(B5 ^ YA2, y5 ^ QA2, 61), e4 = n4, Q5 = xA(K5 ^ DA2, U5 ^ AA2, 28), YA2 = U5 = n4, yA2 = (K5 = (h5 = (kA2 = (-1 ^ D5) & t5 ^ F5) ^ (JA2 = (-1 ^ k5) & G5 ^ c5) ^ (DA2 = (-1 ^ i2) & d5 ^ w5) ^ (GA2 = (-1 ^ (B5 = h5 ^ BA2)) & H5 ^ M5) ^ (QA2 = (-1 ^ Q5) & s5 ^ C6)) ^ iA2) ^ (BA2 = (-1 ^ H5) & J5 ^ B5 ^ 136), _3 = (U5 = (nA2 = (oA2 = (-1 ^ q3) & X3 ^ R4) ^ (dA2 = (-1 ^ aA2) & m3 ^ W3) ^ (iA2 = (-1 ^ O3) & x3 ^ b4) ^ (AA2 = (-1 ^ U5) & v5 ^ e4) ^ wA2) ^ tA2) ^ (tA2 = (-1 ^ _3) & CA2 ^ T3), SA2 = H5 = (HA2 = j3 ^ (-1 ^ R4) & q3) ^ (sA2 = l3 ^ (-1 ^ W3) & aA2) ^ (PA2 = $3 ^ (-1 ^ b4) & O3) ^ (T3 = V3 ^ (-1 ^ hA2) & T3) ^ (RA2 = Z3 ^ (-1 ^ e4) & YA2), B5 = (y5 = fA2) ^ xA(uA2 = (fA2 = S4 ^ (-1 ^ F5) & D5) ^ (vA2 = Y5 ^ (-1 ^ c5) & k5) ^ (zA2 = f5 ^ (-1 ^ w5) & i2) ^ (OA2 = N5 ^ (-1 ^ M5) & B5) ^ (qA2 = P5 ^ (-1 ^ C6) & Q5), H5, 1), H5 = xA(B5 ^ (f5 = L5 ^ (-1 ^ f5) & w5), (y5 = n4 ^ EA2) ^ (w5 = rA2 ^ (-1 ^ $3) & b4), 43), $3 = n4, EA2 = z3 ^ (-1 ^ j3) & R4, j3 = CA2 ^ (-1 ^ V3) & hA2, i2 = (d5 = (D5 ^= (-1 ^ t5) & a5) ^ (R4 = k5 ^ (-1 ^ G5) & p5) ^ (L5 = i2 ^ (-1 ^ d5) & L5) ^ (t5 = Q5 ^ (-1 ^ s5) & u4) ^ BA2) ^ xA(a5 = (hA2 = a5 ^ (-1 ^ S4) & F5) ^ (b4 = p5 ^ (-1 ^ Y5) & c5) ^ f5 ^ (J5 ^= (-1 ^ N5) & M5) ^ (p5 = u4 ^ (-1 ^ P5) & C6), w5 = EA2 ^ (W3 = gA2 ^ (-1 ^ l3) & W3) ^ w5 ^ j3 ^ (V3 = UA2 ^ (-1 ^ Z3) & e4), 1), u4 = xA(i2 ^ eA2, (Y5 = cA2) ^ (Q5 = (f5 = (cA2 = q3 ^ (-1 ^ X3) & z3) ^ (F5 = aA2 ^ (-1 ^ m3) & gA2) ^ (N5 = O3 ^ (-1 ^ x3) & rA2) ^ (S4 = YA2 ^ (-1 ^ v5) & UA2) ^ tA2) ^ n4), 44), CA2 = c5 = n4, k5 = xA(h5, nA2, 1) ^ a5, s5 = xA(OA2 ^ k5, T3 ^ (C6 = w5 ^ n4), 28), v5 = n4, P5 = xA(K5 ^ L5, U5 ^ N5, 3), Z3 = n4, h5 = xA(d5, f5, 1) ^ uA2, L5 = xA(QA2 ^ h5, AA2 ^ (e4 = SA2 ^ n4), 20), aA2 = N5 = n4, d5 = xA(i2 ^ KA2, Q5 ^ IA2, 1), x3 = n4, f5 = xA(k5 ^ zA2, C6 ^ PA2, 25), m3 = n4, p5 = xA(B5 ^ p5, y5 ^ V3, 6), UA2 = w5 = n4, G5 = xA(h5 ^ GA2, e4 ^ wA2, 27), V3 = n4, Y5 = xA(i2 ^ LA2, Q5 ^ bA2, 10), l3 = n4, a5 = xA(K5 ^ t5, S4 ^ U5, 36), rA2 = M5 = n4, t5 = xA(B5 ^ J5, y5 ^ j3, 62), X3 = n4, S4 = xA(h5 ^ DA2, e4 ^ iA2, 39), j3 = n4, J5 = xA(k5 ^ qA2, C6 ^ RA2, 55), gA2 = IA2 = n4, GA2 = c5 = (DA2 = (-1 ^ IA2) & j3 ^ X3) ^ (bA2 = (-1 ^ M5) & l3 ^ V3) ^ (YA2 = (-1 ^ w5) & m3 ^ x3) ^ (wA2 = (-1 ^ c5) & $3 ^ _3) ^ (T3 = (-1 ^ N5) & Z3 ^ v5), N5 = H5, H5 = s5, s5 = P5, P5 = d5, d5 = f5, eA2 = P5 ^ f5 & (-1 ^ p5), f5 = G5, G5 = Y5, Y5 = t5, t5 = S4, AA2 = xA(iA2 = (KA2 = N5 & (-1 ^ u4) ^ yA2 ^ -2147450871) ^ (QA2 = H5 ^ s5 & (-1 ^ L5)) ^ eA2 ^ (BA2 = f5 ^ G5 & (-1 ^ a5)) ^ (LA2 = Y5 ^ S4 & (-1 ^ J5)), c5, 1), nA2 = n4, F5 = xA(K5 ^ R4, F5 ^ U5, 41), R4 = n4, c5 = xA(i2 ^ MA2, Q5 ^ FA2, 2), z3 = n4, w5 = xA(B5 ^ b4, y5 ^ W3, 15), W3 = n4, S4 = xA(k5 ^ fA2, C6 ^ HA2, 56), q3 = n4, M5 = xA(h5 ^ JA2, e4 ^ dA2, 8), b4 = n4, D5 = xA(D5 ^ K5, U5 ^ cA2, 18), O3 = U5 = n4, C6 = xA(k5 ^ vA2, C6 ^ sA2, 21), IA2 = n4, k5 = xA(h5 ^ kA2, e4 ^ oA2, 14), e4 = n4, K5 = xA(i2 ^ pA2, Q5 ^ NA2, 45), h5 = n4, i2 = xA(B5 ^ hA2, y5 ^ EA2, 61), y5 = B5 = n4, Q5 = J5, J5 = c5, hA2 = (-1 ^ c5) & Y5 ^ F5, c5 = w5, w5 = M5, M5 = C6, Y5 = xA((K5 = (FA2 = hA2 ^ (kA2 = c5 ^ (-1 ^ S4) & f5) ^ (cA2 = w5 ^ (-1 ^ D5) & P5) ^ (JA2 = C6 ^ (-1 ^ k5) & yA2) ^ (NA2 = (C6 = K5) ^ (-1 ^ i2) & H5)) ^ AA2) ^ (EA2 = J5 ^ (-1 ^ Y5) & Q5), (U5 = (AA2 = (pA2 = (-1 ^ z3) & X3 ^ R4) ^ (oA2 = (-1 ^ q3) & V3 ^ W3) ^ (MA2 = (-1 ^ U5) & x3 ^ b4) ^ (dA2 = (-1 ^ e4) & _3 ^ IA2) ^ (fA2 = (-1 ^ B5) & v5 ^ h5)) ^ nA2) ^ (B5 = z3 ^ (-1 ^ X3) & gA2), 14), X3 = n4, v5 = B5 ^= (V3 = q3 ^ (-1 ^ V3) & rA2) ^ (nA2 = O3 ^ (-1 ^ x3) & UA2) ^ (tA2 = e4 ^ (-1 ^ _3) & CA2) ^ (HA2 = y5 ^ (-1 ^ v5) & aA2), uA2 = kA2, B5 = (RA2 = (J5 = t5 ^ (-1 ^ F5) & J5) ^ (kA2 = G5 ^ (-1 ^ c5) & S4) ^ (x3 = d5 ^ (-1 ^ w5) & D5) ^ (sA2 = N5 ^ (-1 ^ M5) & k5) ^ (PA2 = s5 ^ (-1 ^ C6) & i2)) ^ xA(P5 = (SA2 = EA2) ^ (S4 ^= (-1 ^ f5) & a5) ^ (D5 ^= (-1 ^ P5) & p5) ^ (k5 ^= (-1 ^ yA2) & u4) ^ (EA2 = i2 ^ (-1 ^ H5) & L5), B5, 1), H5 = xA(uA2 ^ B5, (H5 = oA2) ^ (y5 = (oA2 = (f5 = j3 ^ (-1 ^ R4) & z3) ^ (z3 = l3 ^ (-1 ^ W3) & q3) ^ (_3 = m3 ^ (-1 ^ b4) & O3) ^ (q3 = $3 ^ (-1 ^ IA2) & e4) ^ (O3 = Z3 ^ (-1 ^ h5) & y5)) ^ n4), 21), yA2 = e4 = n4, u4 = (SA2 = Q5 ^ (-1 ^ t5) & F5) ^ (a5 ^= (-1 ^ G5) & c5) ^ (p5 ^= (-1 ^ d5) & w5) ^ (M5 = u4 ^ (-1 ^ N5) & M5) ^ (vA2 = L5 ^ (-1 ^ s5) & C6), i2 = xA(FA2, AA2, 1) ^ u4, N5 = xA(i2 ^ x3, (Q5 = (s5 = (c5 = gA2 ^ (-1 ^ j3) & R4) ^ (L5 = rA2 ^ (-1 ^ l3) & W3) ^ (G5 = UA2 ^ (-1 ^ m3) & b4) ^ (b4 = CA2 ^ (-1 ^ $3) & IA2) ^ (FA2 = aA2 ^ (-1 ^ Z3) & h5)) ^ n4) ^ _3, 43), IA2 = (_3 = n4) ^ (-1 ^ e4) & X3, h5 = xA(u4, s5, 1) ^ P5, s5 = xA(eA2 ^ h5, YA2 ^ (e4 = v5 ^ n4), 3), v5 = n4, P5 = xA(i2 ^ J5, Q5 ^ f5, 61), Z3 = n4, F5 = xA(RA2, oA2, 1) ^ iA2, J5 = xA(a5 ^ F5, L5 ^ (C6 = GA2 ^ n4), 45), CA2 = a5 = n4, d5 = xA(B5 ^ cA2, y5 ^ MA2, 25), x3 = n4, f5 = xA(h5 ^ LA2, e4 ^ DA2, 18), $3 = n4, u4 = xA(S4 ^ K5, U5 ^ V3, 8), aA2 = w5 = n4, G5 = xA(F5 ^ p5, C6 ^ G5, 10), m3 = n4, t5 = xA(B5 ^ hA2, y5 ^ pA2, 56), V3 = n4, L5 = xA(i2 ^ kA2, Q5 ^ z3, 15), UA2 = R4 = n4, S4 = xA(D5 ^ K5, U5 ^ nA2, 39), l3 = n4, D5 = xA(F5 ^ SA2, C6 ^ c5, 2), j3 = n4, p5 = xA(h5 ^ BA2, e4 ^ bA2, 41), rA2 = c5 = n4, bA2 = c5 = (cA2 = (-1 ^ c5) & j3 ^ l3) ^ (kA2 = (-1 ^ R4) & V3 ^ m3) ^ (YA2 = (-1 ^ w5) & $3 ^ x3) ^ (hA2 = (-1 ^ a5) & Z3 ^ v5) ^ IA2, a5 = Y5, Y5 = t5, BA2 = t5 & (-1 ^ L5) ^ G5, t5 = S4, S4 = D5, oA2 = xA(pA2 = (eA2 = (-1 ^ u4) & f5 ^ d5) ^ (DA2 = N5 ^ a5 & (-1 ^ H5)) ^ (GA2 = (-1 ^ J5) & P5 ^ s5) ^ BA2 ^ (LA2 = t5 ^ D5 & (-1 ^ p5)), c5, 1), MA2 = n4, c5 = xA(i2 ^ sA2, Q5 ^ q3, 62), R4 = n4, D5 = xA(B5 ^ NA2, y5 ^ fA2, 55), gA2 = n4, w5 = xA(k5 ^ K5, U5 ^ tA2, 27), W3 = n4, k5 = xA(h5 ^ QA2, e4 ^ T3, 36), z3 = n4, M5 = xA(F5 ^ M5, C6 ^ b4, 1), b4 = n4, i2 = xA(i2 ^ PA2, Q5 ^ O3, 6), q3 = n4, Q5 = xA(F5 ^ vA2, C6 ^ FA2, 44), O3 = n4, C6 = xA(B5 ^ JA2, y5 ^ dA2, 28), y5 = n4, K5 = xA(K5 ^ EA2, U5 ^ HA2, 20), F5 = J5, T3 = B5 = n4, J5 = K5, s5 = xA((U5 = (QA2 = (JA2 = (-1 ^ D5) & t5 ^ c5) ^ (NA2 = (-1 ^ k5) & G5 ^ w5) ^ (FA2 = (-1 ^ i2) & d5 ^ M5) ^ (EA2 = (K5 = h5 ^ KA2) ^ (-1 ^ Q5) & N5 ^ -2147483638) ^ (KA2 = (-1 ^ J5) & s5 ^ C6)) ^ oA2) ^ (oA2 = J5 ^ (-1 ^ s5) & F5), (B5 = (s5 = MA2) ^ (AA2 = (MA2 = (-1 ^ gA2) & l3 ^ R4) ^ (dA2 = (-1 ^ z3) & m3 ^ W3) ^ (fA2 = (-1 ^ q3) & x3 ^ b4) ^ (wA2 = (h5 = e4 ^ wA2) ^ (-1 ^ O3) & _3) ^ (iA2 = (-1 ^ B5) & v5 ^ y5))) ^ (v5 = T3 ^ (-1 ^ v5) & CA2), 44), e4 = n4, x3 = v5 = (nA2 = gA2 ^ (-1 ^ l3) & rA2) ^ (tA2 = z3 ^ (-1 ^ m3) & UA2) ^ (HA2 = q3 ^ (-1 ^ x3) & aA2) ^ v5 ^ (l3 = O3 ^ (-1 ^ _3) & yA2), _3 = EA2, RA2 = (m3 = S4 ^ (-1 ^ c5) & D5) ^ (EA2 = Y5 ^ (-1 ^ w5) & k5) ^ (sA2 = f5 ^ (-1 ^ M5) & i2) ^ (PA2 = a5 ^ (-1 ^ K5) & Q5) ^ (J5 = P5 ^ (-1 ^ C6) & J5), v5 = _3 ^ (i2 = xA(d5 = (t5 = D5 ^ (-1 ^ t5) & p5) ^ (SA2 = k5 ^ (-1 ^ G5) & L5) ^ (vA2 = i2 ^ (-1 ^ d5) & u4) ^ oA2 ^ (G5 = Q5 ^ (-1 ^ N5) & H5), v5, 1) ^ RA2), _3 = (D5 = wA2) ^ (Q5 = (O3 = (N5 = j3 ^ (-1 ^ R4) & gA2) ^ (wA2 = V3 ^ (-1 ^ W3) & z3) ^ (z3 = $3 ^ (-1 ^ b4) & q3) ^ (gA2 = X3 ^ (-1 ^ h5) & O3) ^ (q3 = Z3 ^ (-1 ^ y5) & T3)) ^ n4), L5 = (p5 ^= (-1 ^ S4) & c5) ^ (T3 = L5 ^ (-1 ^ Y5) & w5) ^ (M5 = u4 ^ (-1 ^ f5) & M5) ^ (u4 = H5 ^ (-1 ^ a5) & K5) ^ (a5 = F5 ^ (-1 ^ P5) & C6), D5 = xA(QA2, AA2, 1) ^ L5, N5 = xA(D5 ^ m3, (k5 = (H5 = (Y5 = rA2 ^ (-1 ^ j3) & R4) ^ (QA2 = UA2 ^ (-1 ^ V3) & W3) ^ (b4 = aA2 ^ (-1 ^ $3) & b4) ^ (f5 = yA2 ^ (-1 ^ X3) & h5) ^ (S4 = CA2 ^ (-1 ^ Z3) & y5)) ^ n4) ^ N5, 14), aA2 = (CA2 = n4) ^ (-1 ^ _3) & e4, C6 = xA(L5, H5, 1) ^ d5, H5 = xA(LA2 ^ C6, cA2 ^ (K5 = x3 ^ n4), 61), Z3 = n4, P5 = xA(D5 ^ J5, k5 ^ q3, 20), x3 = n4, y5 = xA(RA2, O3, 1) ^ pA2, u4 = xA(y5 ^ u4, (h5 = bA2 ^ n4) ^ f5, 28), UA2 = F5 = n4, d5 = xA(i2 ^ JA2, Q5 ^ MA2, 18), $3 = n4, f5 = xA(C6 ^ GA2, K5 ^ hA2, 6), m3 = n4, L5 = xA(U5 ^ G5, B5 ^ l3, 1), rA2 = c5 = n4, G5 = xA(y5 ^ p5, h5 ^ Y5, 56), V3 = n4, Y5 = xA(i2 ^ KA2, Q5 ^ iA2, 36), l3 = n4, J5 = xA(D5 ^ PA2, k5 ^ gA2, 27), gA2 = w5 = n4, t5 = xA(t5 ^ U5, B5 ^ nA2, 2), X3 = n4, S4 = xA(y5 ^ a5, h5 ^ S4, 55), j3 = n4, p5 = xA(C6 ^ DA2, K5 ^ IA2, 62), IA2 = a5 = n4, DA2 = F5 = (JA2 = (-1 ^ a5) & j3 ^ X3) ^ (bA2 = (-1 ^ w5) & l3 ^ V3) ^ (cA2 = (-1 ^ c5) & m3 ^ $3) ^ (hA2 = (-1 ^ F5) & x3 ^ Z3) ^ aA2, a5 = s5, s5 = P5, P5 = d5, d5 = f5, LA2 = P5 ^ f5 & (-1 ^ L5), f5 = G5, G5 = Y5, Y5 = t5, t5 = S4, iA2 = xA(MA2 = (GA2 = N5 ^ a5 & (-1 ^ v5)) ^ (KA2 = s5 & (-1 ^ u4) ^ H5) ^ LA2 ^ (pA2 = f5 ^ G5 & (-1 ^ J5)) ^ (oA2 = Y5 ^ S4 & (-1 ^ p5)), F5, 1), AA2 = n4, F5 = xA(D5 ^ sA2, k5 ^ z3, 39), R4 = n4, S4 = xA(i2 ^ NA2, Q5 ^ dA2, 41), z3 = n4, c5 = xA(U5 ^ vA2, B5 ^ HA2, 10), W3 = n4, w5 = xA(C6 ^ BA2, K5 ^ kA2, 15), q3 = n4, M5 = xA(y5 ^ M5, h5 ^ b4, 25), b4 = n4, D5 = xA(D5 ^ EA2, k5 ^ wA2, 8), O3 = n4, C6 = xA(C6 ^ eA2, K5 ^ YA2, 43), yA2 = n4, k5 = xA(y5 ^ T3, h5 ^ QA2, 21), y5 = n4, K5 = xA(i2 ^ FA2, Q5 ^ fA2, 3), h5 = n4, i2 = xA(U5 ^ SA2, B5 ^ tA2, 45), T3 = U5 = n4, Q5 = J5, J5 = w5, wA2 = (-1 ^ w5) & f5 ^ c5, w5 = M5, M5 = C6, f5 = xA((K5 = (FA2 = (YA2 = (-1 ^ S4) & Y5 ^ F5) ^ wA2 ^ (B5 = w5 ^ (-1 ^ D5) & P5) ^ (kA2 = C6 ^ (-1 ^ k5) & N5) ^ (NA2 = (C6 = K5) ^ (-1 ^ i2) & H5)) ^ iA2) ^ (EA2 = J5 ^ (-1 ^ f5) & Q5), (U5 = (iA2 = (QA2 = (-1 ^ z3) & X3 ^ R4) ^ (eA2 = (-1 ^ q3) & V3 ^ W3) ^ (BA2 = (-1 ^ O3) & $3 ^ b4) ^ (dA2 = (-1 ^ y5) & CA2 ^ yA2) ^ (fA2 = (-1 ^ U5) & Z3 ^ h5)) ^ AA2) ^ (AA2 = q3 ^ (-1 ^ V3) & gA2), 21), V3 = n4, Z3 = (nA2 = z3 ^ (-1 ^ X3) & IA2) ^ (SA2 = AA2) ^ (X3 = O3 ^ (-1 ^ $3) & rA2) ^ (AA2 = y5 ^ (-1 ^ CA2) & _3) ^ (tA2 = T3 ^ (-1 ^ Z3) & UA2), CA2 = B5, SA2 = (HA2 = t5 ^ (-1 ^ F5) & S4) ^ ($3 = G5 ^ (-1 ^ c5) & J5) ^ (sA2 = d5 ^ (-1 ^ w5) & D5) ^ (PA2 = a5 ^ (-1 ^ M5) & k5) ^ (RA2 = s5 ^ (-1 ^ C6) & i2), B5 = xA(P5 = (vA2 = S4 ^ (-1 ^ Y5) & p5) ^ (B5 = EA2) ^ (Y5 = D5 ^ (-1 ^ P5) & L5) ^ (EA2 = k5 ^ (-1 ^ N5) & v5) ^ (N5 = i2 ^ (-1 ^ H5) & u4), Z3, 1) ^ SA2, J5 = xA(CA2 ^ B5, (y5 = (z3 = (k5 = j3 ^ (-1 ^ R4) & z3) ^ (S4 = l3 ^ (-1 ^ W3) & q3) ^ (D5 = m3 ^ (-1 ^ b4) & O3) ^ (O3 = e4 ^ (-1 ^ yA2) & y5) ^ (H5 = x3 ^ (-1 ^ h5) & T3)) ^ n4) ^ BA2, 43), CA2 = n4, u4 = (T3 = p5 ^ (-1 ^ t5) & F5) ^ (F5 = Q5 ^ (-1 ^ G5) & c5) ^ (L5 ^= (-1 ^ d5) & w5) ^ (BA2 = (-1 ^ a5) & M5 ^ v5 ^ -2147450741) ^ (p5 = u4 ^ (-1 ^ s5) & C6), i2 = xA(FA2, iA2, 1) ^ u4, H5 = xA(i2 ^ RA2, (Q5 = (s5 = (w5 = IA2 ^ (-1 ^ j3) & R4) ^ (a5 = gA2 ^ (-1 ^ l3) & W3) ^ (d5 = rA2 ^ (-1 ^ m3) & b4) ^ (yA2 = (-1 ^ e4) & yA2 ^ _3) ^ (t5 = UA2 ^ (-1 ^ x3) & h5)) ^ n4) ^ H5, 44), IA2 = (_3 = n4) ^ (-1 ^ CA2) & V3, M5 = xA(u4, s5, 1) ^ P5, s5 = xA(KA2 ^ M5, hA2 ^ (C6 = Z3 ^ n4), 20), v5 = n4, P5 = xA(i2 ^ $3, Q5 ^ S4, 45), Z3 = n4, h5 = xA(SA2, z3, 1) ^ MA2, u4 = xA(h5 ^ L5, (e4 = DA2 ^ n4) ^ d5, 3), UA2 = c5 = n4, d5 = xA(B5 ^ NA2, y5 ^ fA2, 6), x3 = n4, G5 = xA(M5 ^ pA2, C6 ^ bA2, 8), $3 = n4, L5 = xA(K5 ^ Y5, U5 ^ X3, 25), rA2 = R4 = n4, Y5 = xA(h5 ^ p5, e4 ^ t5, 36), m3 = n4, t5 = xA(B5 ^ wA2, y5 ^ eA2, 15), l3 = n4, p5 = xA(i2 ^ sA2, Q5 ^ D5, 10), gA2 = W3 = n4, S4 = xA(K5 ^ N5, U5 ^ tA2, 55), X3 = n4, D5 = xA(h5 ^ F5, e4 ^ a5, 41), j3 = n4, a5 = xA(M5 ^ LA2, C6 ^ cA2, 39), z3 = N5 = n4, DA2 = F5 = (FA2 = (-1 ^ N5) & j3 ^ X3) ^ (NA2 = (-1 ^ W3) & l3 ^ m3) ^ (bA2 = (-1 ^ R4) & $3 ^ x3) ^ (cA2 = (-1 ^ c5) & Z3 ^ v5) ^ IA2, N5 = f5, KA2 = H5 ^ f5 & (-1 ^ J5), f5 = G5, G5 = Y5, Y5 = t5, pA2 = G5 ^ t5 & (-1 ^ p5), t5 = S4, S4 = D5, iA2 = xA(fA2 = KA2 ^ (eA2 = (-1 ^ u4) & P5 ^ s5) ^ (LA2 = f5 & (-1 ^ L5) ^ d5) ^ pA2 ^ (MA2 = t5 ^ D5 & (-1 ^ a5)), F5, 1), tA2 = n4, F5 = xA(i2 ^ HA2, Q5 ^ k5, 2), R4 = n4, D5 = xA(B5 ^ kA2, y5 ^ dA2, 62), q3 = n4, c5 = xA(K5 ^ vA2, U5 ^ nA2, 56), W3 = n4, k5 = xA(M5 ^ GA2, C6 ^ aA2, 27), aA2 = n4, w5 = xA(h5 ^ T3, w5 ^ e4, 18), b4 = n4, i2 = xA(i2 ^ PA2, Q5 ^ O3, 1), O3 = n4, M5 = xA(M5 ^ oA2, C6 ^ JA2, 14), T3 = Q5 = e4 ^ yA2, wA2 = (hA2 = n4) ^ (-1 ^ Q5) & _3, C6 = xA(B5 ^ YA2, y5 ^ QA2, 61), e4 = n4, Q5 = xA(K5 ^ EA2, U5 ^ AA2, 28), YA2 = U5 = n4, yA2 = (K5 = (h5 = (kA2 = (-1 ^ D5) & t5 ^ F5) ^ (JA2 = (-1 ^ k5) & G5 ^ c5) ^ (EA2 = (-1 ^ i2) & d5 ^ w5) ^ (GA2 = (-1 ^ (B5 = h5 ^ BA2)) & H5 ^ M5) ^ (QA2 = (-1 ^ Q5) & s5 ^ C6)) ^ iA2) ^ (BA2 = (-1 ^ H5) & J5 ^ B5 ^ 139), _3 = (U5 = (nA2 = (oA2 = (-1 ^ q3) & X3 ^ R4) ^ (dA2 = (-1 ^ aA2) & m3 ^ W3) ^ (iA2 = (-1 ^ O3) & x3 ^ b4) ^ (AA2 = (-1 ^ U5) & v5 ^ e4) ^ wA2) ^ tA2) ^ (tA2 = (-1 ^ _3) & CA2 ^ T3 ^ -2147483648), SA2 = H5 = (HA2 = j3 ^ (-1 ^ R4) & q3) ^ (sA2 = l3 ^ (-1 ^ W3) & aA2) ^ (PA2 = $3 ^ (-1 ^ b4) & O3) ^ (T3 = V3 ^ (-1 ^ hA2) & T3) ^ (RA2 = Z3 ^ (-1 ^ e4) & YA2), B5 = (y5 = fA2) ^ xA(uA2 = (fA2 = S4 ^ (-1 ^ F5) & D5) ^ (vA2 = Y5 ^ (-1 ^ c5) & k5) ^ (zA2 = f5 ^ (-1 ^ w5) & i2) ^ (OA2 = N5 ^ (-1 ^ M5) & B5) ^ (qA2 = P5 ^ (-1 ^ C6) & Q5), H5, 1), H5 = xA(B5 ^ (f5 = L5 ^ (-1 ^ f5) & w5), (y5 = n4 ^ DA2) ^ (w5 = rA2 ^ (-1 ^ $3) & b4), 43), $3 = n4, DA2 = z3 ^ (-1 ^ j3) & R4, j3 = CA2 ^ (-1 ^ V3) & hA2, i2 = (d5 = (D5 ^= (-1 ^ t5) & a5) ^ (R4 = k5 ^ (-1 ^ G5) & p5) ^ (L5 = i2 ^ (-1 ^ d5) & L5) ^ (t5 = Q5 ^ (-1 ^ s5) & u4) ^ BA2) ^ xA(a5 = (hA2 = a5 ^ (-1 ^ S4) & F5) ^ (b4 = p5 ^ (-1 ^ Y5) & c5) ^ f5 ^ (J5 ^= (-1 ^ N5) & M5) ^ (p5 = u4 ^ (-1 ^ P5) & C6), w5 = DA2 ^ (W3 = gA2 ^ (-1 ^ l3) & W3) ^ w5 ^ j3 ^ (V3 = UA2 ^ (-1 ^ Z3) & e4), 1), u4 = xA(i2 ^ eA2, (Y5 = cA2) ^ (Q5 = (f5 = (cA2 = q3 ^ (-1 ^ X3) & z3) ^ (F5 = aA2 ^ (-1 ^ m3) & gA2) ^ (N5 = O3 ^ (-1 ^ x3) & rA2) ^ (S4 = YA2 ^ (-1 ^ v5) & UA2) ^ tA2) ^ n4), 44), CA2 = c5 = n4, k5 = xA(h5, nA2, 1) ^ a5, s5 = xA(OA2 ^ k5, T3 ^ (C6 = w5 ^ n4), 28), v5 = n4, P5 = xA(K5 ^ L5, U5 ^ N5, 3), Z3 = n4, h5 = xA(d5, f5, 1) ^ uA2, L5 = xA(QA2 ^ h5, AA2 ^ (e4 = SA2 ^ n4), 20), aA2 = N5 = n4, d5 = xA(i2 ^ KA2, Q5 ^ IA2, 1), x3 = n4, f5 = xA(k5 ^ zA2, C6 ^ PA2, 25), m3 = n4, p5 = xA(B5 ^ p5, y5 ^ V3, 6), UA2 = w5 = n4, G5 = xA(h5 ^ GA2, e4 ^ wA2, 27), V3 = n4, Y5 = xA(i2 ^ LA2, Q5 ^ bA2, 10), l3 = n4, a5 = xA(K5 ^ t5, S4 ^ U5, 36), rA2 = M5 = n4, t5 = xA(B5 ^ J5, y5 ^ j3, 62), X3 = n4, S4 = xA(h5 ^ EA2, e4 ^ iA2, 39), j3 = n4, J5 = xA(k5 ^ qA2, C6 ^ RA2, 55), gA2 = IA2 = n4, GA2 = c5 = (EA2 = (-1 ^ IA2) & j3 ^ X3) ^ (bA2 = (-1 ^ M5) & l3 ^ V3) ^ (YA2 = (-1 ^ w5) & m3 ^ x3) ^ (wA2 = (-1 ^ c5) & $3 ^ _3 ^ -2147483648) ^ (T3 = (-1 ^ N5) & Z3 ^ v5), N5 = H5, H5 = s5, s5 = P5, P5 = d5, d5 = f5, eA2 = P5 ^ f5 & (-1 ^ p5), f5 = G5, G5 = Y5, Y5 = t5, t5 = S4, AA2 = xA(iA2 = (KA2 = N5 & (-1 ^ u4) ^ yA2 ^ 32905) ^ (QA2 = H5 ^ s5 & (-1 ^ L5)) ^ eA2 ^ (BA2 = f5 ^ G5 & (-1 ^ a5)) ^ (LA2 = Y5 ^ S4 & (-1 ^ J5)), c5, 1), nA2 = n4, F5 = xA(K5 ^ R4, F5 ^ U5, 41), R4 = n4, c5 = xA(i2 ^ MA2, Q5 ^ FA2, 2), z3 = n4, w5 = xA(B5 ^ b4, y5 ^ W3, 15), W3 = n4, S4 = xA(k5 ^ fA2, C6 ^ HA2, 56), q3 = n4, M5 = xA(h5 ^ JA2, e4 ^ dA2, 8), b4 = n4, D5 = xA(D5 ^ K5, U5 ^ cA2, 18), O3 = U5 = n4, C6 = xA(k5 ^ vA2, C6 ^ sA2, 21), IA2 = n4, k5 = xA(h5 ^ kA2, e4 ^ oA2, 14), e4 = n4, K5 = xA(i2 ^ pA2, Q5 ^ NA2, 45), h5 = n4, i2 = xA(B5 ^ hA2, y5 ^ DA2, 61), y5 = B5 = n4, Q5 = J5, J5 = c5, hA2 = (-1 ^ c5) & Y5 ^ F5, c5 = w5, w5 = M5, M5 = C6, Y5 = xA((K5 = (FA2 = hA2 ^ (kA2 = c5 ^ (-1 ^ S4) & f5) ^ (cA2 = w5 ^ (-1 ^ D5) & P5) ^ (JA2 = C6 ^ (-1 ^ k5) & yA2) ^ (NA2 = (C6 = K5) ^ (-1 ^ i2) & H5)) ^ AA2) ^ (DA2 = J5 ^ (-1 ^ Y5) & Q5), (U5 = (AA2 = (pA2 = (-1 ^ z3) & X3 ^ R4) ^ (oA2 = (-1 ^ q3) & V3 ^ W3) ^ (MA2 = (-1 ^ U5) & x3 ^ b4) ^ (dA2 = (-1 ^ e4) & _3 ^ IA2) ^ (fA2 = (-1 ^ B5) & v5 ^ h5)) ^ nA2) ^ (B5 = z3 ^ (-1 ^ X3) & gA2), 14), X3 = n4, v5 = B5 ^= (V3 = q3 ^ (-1 ^ V3) & rA2) ^ (nA2 = O3 ^ (-1 ^ x3) & UA2) ^ (tA2 = e4 ^ (-1 ^ _3) & CA2) ^ (HA2 = y5 ^ (-1 ^ v5) & aA2), uA2 = kA2, B5 = (RA2 = (J5 = t5 ^ (-1 ^ F5) & J5) ^ (kA2 = G5 ^ (-1 ^ c5) & S4) ^ (x3 = d5 ^ (-1 ^ w5) & D5) ^ (sA2 = N5 ^ (-1 ^ M5) & k5) ^ (PA2 = s5 ^ (-1 ^ C6) & i2)) ^ xA(P5 = (SA2 = DA2) ^ (S4 ^= (-1 ^ f5) & a5) ^ (D5 ^= (-1 ^ P5) & p5) ^ (k5 ^= (-1 ^ yA2) & u4) ^ (DA2 = i2 ^ (-1 ^ H5) & L5), B5, 1), H5 = xA(uA2 ^ B5, (H5 = oA2) ^ (y5 = (oA2 = (f5 = j3 ^ (-1 ^ R4) & z3) ^ (z3 = l3 ^ (-1 ^ W3) & q3) ^ (_3 = m3 ^ (-1 ^ b4) & O3) ^ (q3 = $3 ^ (-1 ^ IA2) & e4) ^ (O3 = Z3 ^ (-1 ^ h5) & y5)) ^ n4), 21), yA2 = e4 = n4, u4 = (SA2 = Q5 ^ (-1 ^ t5) & F5) ^ (a5 ^= (-1 ^ G5) & c5) ^ (p5 ^= (-1 ^ d5) & w5) ^ (M5 = u4 ^ (-1 ^ N5) & M5) ^ (vA2 = L5 ^ (-1 ^ s5) & C6), i2 = xA(FA2, AA2, 1) ^ u4, N5 = xA(i2 ^ x3, (Q5 = (s5 = (c5 = gA2 ^ (-1 ^ j3) & R4) ^ (L5 = rA2 ^ (-1 ^ l3) & W3) ^ (G5 = UA2 ^ (-1 ^ m3) & b4) ^ (b4 = CA2 ^ (-1 ^ $3) & IA2) ^ (FA2 = aA2 ^ (-1 ^ Z3) & h5)) ^ n4) ^ _3, 43), IA2 = (_3 = n4) ^ (-1 ^ e4) & X3, h5 = xA(u4, s5, 1) ^ P5, s5 = xA(eA2 ^ h5, YA2 ^ (e4 = v5 ^ n4), 3), v5 = n4, P5 = xA(i2 ^ J5, Q5 ^ f5, 61), Z3 = n4, F5 = xA(RA2, oA2, 1) ^ iA2, J5 = xA(a5 ^ F5, L5 ^ (C6 = GA2 ^ n4), 45), CA2 = a5 = n4, d5 = xA(B5 ^ cA2, y5 ^ MA2, 25), x3 = n4, f5 = xA(h5 ^ LA2, e4 ^ EA2, 18), $3 = n4, u4 = xA(S4 ^ K5, U5 ^ V3, 8), aA2 = w5 = n4, G5 = xA(F5 ^ p5, C6 ^ G5, 10), m3 = n4, t5 = xA(B5 ^ hA2, y5 ^ pA2, 56), V3 = n4, L5 = xA(i2 ^ kA2, Q5 ^ z3, 15), UA2 = R4 = n4, S4 = xA(D5 ^ K5, U5 ^ nA2, 39), l3 = n4, D5 = xA(F5 ^ SA2, C6 ^ c5, 2), j3 = n4, p5 = xA(h5 ^ BA2, e4 ^ bA2, 41), rA2 = c5 = n4, bA2 = c5 = (cA2 = (-1 ^ c5) & j3 ^ l3) ^ (kA2 = (-1 ^ R4) & V3 ^ m3) ^ (YA2 = (-1 ^ w5) & $3 ^ x3) ^ (hA2 = (-1 ^ a5) & Z3 ^ v5) ^ IA2, a5 = Y5, Y5 = t5, BA2 = t5 & (-1 ^ L5) ^ G5, t5 = S4, S4 = D5, oA2 = xA(pA2 = (eA2 = (-1 ^ u4) & f5 ^ d5) ^ (EA2 = N5 ^ a5 & (-1 ^ H5)) ^ (GA2 = (-1 ^ J5) & P5 ^ s5) ^ BA2 ^ (LA2 = t5 ^ D5 & (-1 ^ p5)), c5, 1), MA2 = n4, c5 = xA(i2 ^ sA2, Q5 ^ q3, 62), R4 = n4, D5 = xA(B5 ^ NA2, y5 ^ fA2, 55), gA2 = n4, w5 = xA(k5 ^ K5, U5 ^ tA2, 27), W3 = n4, k5 = xA(h5 ^ QA2, e4 ^ T3, 36), z3 = n4, M5 = xA(F5 ^ M5, C6 ^ b4, 1), b4 = n4, i2 = xA(i2 ^ PA2, Q5 ^ O3, 6), q3 = n4, Q5 = xA(F5 ^ vA2, C6 ^ FA2, 44), O3 = n4, C6 = xA(B5 ^ JA2, y5 ^ dA2, 28), y5 = n4, K5 = xA(K5 ^ DA2, U5 ^ HA2, 20), F5 = J5, T3 = B5 = n4, J5 = K5, s5 = xA((U5 = (QA2 = (JA2 = (-1 ^ D5) & t5 ^ c5) ^ (NA2 = (-1 ^ k5) & G5 ^ w5) ^ (FA2 = (-1 ^ i2) & d5 ^ M5) ^ (DA2 = (K5 = h5 ^ KA2) ^ (-1 ^ Q5) & N5 ^ 32771) ^ (KA2 = (-1 ^ J5) & s5 ^ C6)) ^ oA2) ^ (oA2 = J5 ^ (-1 ^ s5) & F5), (B5 = (s5 = MA2) ^ (AA2 = (MA2 = (-1 ^ gA2) & l3 ^ R4) ^ (dA2 = (-1 ^ z3) & m3 ^ W3) ^ (fA2 = (-1 ^ q3) & x3 ^ b4) ^ (wA2 = (h5 = e4 ^ wA2) ^ (-1 ^ O3) & _3 ^ -2147483648) ^ (iA2 = (-1 ^ B5) & v5 ^ y5))) ^ (v5 = T3 ^ (-1 ^ v5) & CA2), 44), e4 = n4, x3 = v5 = (nA2 = gA2 ^ (-1 ^ l3) & rA2) ^ (tA2 = z3 ^ (-1 ^ m3) & UA2) ^ (HA2 = q3 ^ (-1 ^ x3) & aA2) ^ v5 ^ (l3 = O3 ^ (-1 ^ _3) & yA2), _3 = DA2, RA2 = (m3 = S4 ^ (-1 ^ c5) & D5) ^ (DA2 = Y5 ^ (-1 ^ w5) & k5) ^ (sA2 = f5 ^ (-1 ^ M5) & i2) ^ (PA2 = a5 ^ (-1 ^ K5) & Q5) ^ (J5 = P5 ^ (-1 ^ C6) & J5), v5 = _3 ^ (i2 = xA(d5 = (t5 = D5 ^ (-1 ^ t5) & p5) ^ (SA2 = k5 ^ (-1 ^ G5) & L5) ^ (vA2 = i2 ^ (-1 ^ d5) & u4) ^ oA2 ^ (G5 = Q5 ^ (-1 ^ N5) & H5), v5, 1) ^ RA2), _3 = (D5 = wA2) ^ (Q5 = (O3 = (N5 = j3 ^ (-1 ^ R4) & gA2) ^ (wA2 = V3 ^ (-1 ^ W3) & z3) ^ (z3 = $3 ^ (-1 ^ b4) & q3) ^ (gA2 = X3 ^ (-1 ^ h5) & O3) ^ (q3 = Z3 ^ (-1 ^ y5) & T3)) ^ n4), L5 = (p5 ^= (-1 ^ S4) & c5) ^ (T3 = L5 ^ (-1 ^ Y5) & w5) ^ (M5 = u4 ^ (-1 ^ f5) & M5) ^ (u4 = H5 ^ (-1 ^ a5) & K5) ^ (a5 = F5 ^ (-1 ^ P5) & C6), D5 = xA(QA2, AA2, 1) ^ L5, N5 = xA(D5 ^ m3, (k5 = (H5 = (Y5 = rA2 ^ (-1 ^ j3) & R4) ^ (QA2 = UA2 ^ (-1 ^ V3) & W3) ^ (b4 = aA2 ^ (-1 ^ $3) & b4) ^ (f5 = yA2 ^ (-1 ^ X3) & h5) ^ (S4 = CA2 ^ (-1 ^ Z3) & y5)) ^ n4) ^ N5, 14), aA2 = (CA2 = n4) ^ (-1 ^ _3) & e4, C6 = xA(L5, H5, 1) ^ d5, H5 = xA(LA2 ^ C6, cA2 ^ (K5 = x3 ^ n4), 61), Z3 = n4, P5 = xA(D5 ^ J5, k5 ^ q3, 20), x3 = n4, y5 = xA(RA2, O3, 1) ^ pA2, u4 = xA(y5 ^ u4, (h5 = bA2 ^ n4) ^ f5, 28), UA2 = F5 = n4, d5 = xA(i2 ^ JA2, Q5 ^ MA2, 18), $3 = n4, f5 = xA(C6 ^ GA2, K5 ^ hA2, 6), m3 = n4, L5 = xA(U5 ^ G5, B5 ^ l3, 1), rA2 = c5 = n4, G5 = xA(y5 ^ p5, h5 ^ Y5, 56), V3 = n4, Y5 = xA(i2 ^ KA2, Q5 ^ iA2, 36), l3 = n4, J5 = xA(D5 ^ PA2, k5 ^ gA2, 27), gA2 = w5 = n4, t5 = xA(t5 ^ U5, B5 ^ nA2, 2), X3 = n4, S4 = xA(y5 ^ a5, h5 ^ S4, 55), j3 = n4, p5 = xA(C6 ^ EA2, K5 ^ IA2, 62), IA2 = a5 = n4;
              EA2 = F5 = (JA2 = (-1 ^ a5) & j3 ^ X3) ^ (bA2 = (-1 ^ w5) & l3 ^ V3) ^ (cA2 = (-1 ^ c5) & m3 ^ $3) ^ (hA2 = (-1 ^ F5) & x3 ^ Z3) ^ aA2, a5 = s5, s5 = P5, P5 = d5, d5 = f5, LA2 = P5 ^ f5 & (-1 ^ L5), f5 = G5, G5 = Y5, Y5 = t5, t5 = S4, iA2 = xA(MA2 = (GA2 = N5 ^ a5 & (-1 ^ v5)) ^ (KA2 = s5 & (-1 ^ u4) ^ H5) ^ LA2 ^ (pA2 = f5 ^ G5 & (-1 ^ J5)) ^ (oA2 = Y5 ^ S4 & (-1 ^ p5)), F5, 1), AA2 = n4, F5 = xA(D5 ^ sA2, k5 ^ z3, 39), R4 = n4, S4 = xA(i2 ^ NA2, Q5 ^ dA2, 41), z3 = n4, c5 = xA(U5 ^ vA2, B5 ^ HA2, 10), W3 = n4, w5 = xA(C6 ^ BA2, K5 ^ kA2, 15), q3 = n4, M5 = xA(y5 ^ M5, h5 ^ b4, 25), b4 = n4, D5 = xA(D5 ^ DA2, k5 ^ wA2, 8), O3 = n4, C6 = xA(C6 ^ eA2, K5 ^ YA2, 43), yA2 = n4, k5 = xA(y5 ^ T3, h5 ^ QA2, 21), y5 = n4, K5 = xA(i2 ^ FA2, Q5 ^ fA2, 3), h5 = n4, i2 = xA(U5 ^ SA2, B5 ^ tA2, 45), T3 = U5 = n4, Q5 = J5, J5 = w5, wA2 = (-1 ^ w5) & f5 ^ c5, w5 = M5, M5 = C6, f5 = xA((K5 = (FA2 = (YA2 = (-1 ^ S4) & Y5 ^ F5) ^ wA2 ^ (B5 = w5 ^ (-1 ^ D5) & P5) ^ (kA2 = C6 ^ (-1 ^ k5) & N5) ^ (NA2 = (C6 = K5) ^ (-1 ^ i2) & H5)) ^ iA2) ^ (DA2 = J5 ^ (-1 ^ f5) & Q5), (U5 = (iA2 = (QA2 = (-1 ^ z3) & X3 ^ R4) ^ (eA2 = (-1 ^ q3) & V3 ^ W3) ^ (BA2 = (-1 ^ O3) & $3 ^ b4) ^ (dA2 = (-1 ^ y5) & CA2 ^ yA2) ^ (fA2 = (-1 ^ U5) & Z3 ^ h5)) ^ AA2) ^ (AA2 = q3 ^ (-1 ^ V3) & gA2), 21), V3 = n4, Z3 = (nA2 = z3 ^ (-1 ^ X3) & IA2) ^ (SA2 = AA2) ^ (X3 = O3 ^ (-1 ^ $3) & rA2) ^ (AA2 = y5 ^ (-1 ^ CA2) & _3) ^ (tA2 = T3 ^ (-1 ^ Z3) & UA2), CA2 = B5, SA2 = (HA2 = t5 ^ (-1 ^ F5) & S4) ^ ($3 = G5 ^ (-1 ^ c5) & J5) ^ (sA2 = d5 ^ (-1 ^ w5) & D5) ^ (PA2 = a5 ^ (-1 ^ M5) & k5) ^ (RA2 = s5 ^ (-1 ^ C6) & i2), B5 = xA(P5 = (vA2 = S4 ^ (-1 ^ Y5) & p5) ^ (B5 = DA2) ^ (Y5 = D5 ^ (-1 ^ P5) & L5) ^ (DA2 = k5 ^ (-1 ^ N5) & v5) ^ (N5 = i2 ^ (-1 ^ H5) & u4), Z3, 1) ^ SA2, J5 = xA(CA2 ^ B5, (y5 = (z3 = (k5 = j3 ^ (-1 ^ R4) & z3) ^ (S4 = l3 ^ (-1 ^ W3) & q3) ^ (D5 = m3 ^ (-1 ^ b4) & O3) ^ (O3 = e4 ^ (-1 ^ yA2) & y5) ^ (H5 = x3 ^ (-1 ^ h5) & T3)) ^ n4) ^ BA2, 43), CA2 = n4, u4 = (T3 = p5 ^ (-1 ^ t5) & F5) ^ (F5 = Q5 ^ (-1 ^ G5) & c5) ^ (L5 ^= (-1 ^ d5) & w5) ^ (BA2 = (-1 ^ a5) & M5 ^ v5 ^ 32770) ^ (p5 = u4 ^ (-1 ^ s5) & C6), i2 = xA(FA2, iA2, 1) ^ u4, H5 = xA(i2 ^ RA2, (Q5 = (s5 = (w5 = IA2 ^ (-1 ^ j3) & R4) ^ (a5 = gA2 ^ (-1 ^ l3) & W3) ^ (d5 = rA2 ^ (-1 ^ m3) & b4) ^ (yA2 = (-1 ^ e4) & yA2 ^ _3 ^ -2147483648) ^ (t5 = UA2 ^ (-1 ^ x3) & h5)) ^ n4) ^ H5, 44), IA2 = (_3 = n4) ^ (-1 ^ CA2) & V3, M5 = xA(u4, s5, 1) ^ P5, s5 = xA(KA2 ^ M5, hA2 ^ (C6 = Z3 ^ n4), 20), v5 = n4, P5 = xA(i2 ^ $3, Q5 ^ S4, 45), Z3 = n4, h5 = xA(SA2, z3, 1) ^ MA2, u4 = xA(h5 ^ L5, (e4 = EA2 ^ n4) ^ d5, 3), UA2 = c5 = n4, d5 = xA(B5 ^ NA2, y5 ^ fA2, 6), x3 = n4, G5 = xA(M5 ^ pA2, C6 ^ bA2, 8), $3 = n4, L5 = xA(K5 ^ Y5, U5 ^ X3, 25), rA2 = R4 = n4, Y5 = xA(h5 ^ p5, e4 ^ t5, 36), m3 = n4, t5 = xA(B5 ^ wA2, y5 ^ eA2, 15), l3 = n4, p5 = xA(i2 ^ sA2, Q5 ^ D5, 10), gA2 = W3 = n4, S4 = xA(K5 ^ N5, U5 ^ tA2, 55), X3 = n4, D5 = xA(h5 ^ F5, e4 ^ a5, 41), j3 = n4, a5 = xA(M5 ^ LA2, C6 ^ cA2, 39), z3 = N5 = n4, EA2 = F5 = (FA2 = (-1 ^ N5) & j3 ^ X3) ^ (NA2 = (-1 ^ W3) & l3 ^ m3) ^ (bA2 = (-1 ^ R4) & $3 ^ x3) ^ (cA2 = (-1 ^ c5) & Z3 ^ v5) ^ IA2, N5 = f5, KA2 = H5 ^ f5 & (-1 ^ J5), f5 = G5, G5 = Y5, Y5 = t5, pA2 = G5 ^ t5 & (-1 ^ p5), t5 = S4, S4 = D5, iA2 = xA(fA2 = KA2 ^ (eA2 = (-1 ^ u4) & P5 ^ s5) ^ (LA2 = f5 & (-1 ^ L5) ^ d5) ^ pA2 ^ (MA2 = t5 ^ D5 & (-1 ^ a5)), F5, 1), tA2 = n4, F5 = xA(i2 ^ HA2, Q5 ^ k5, 2), R4 = n4, D5 = xA(B5 ^ kA2, y5 ^ dA2, 62), q3 = n4, c5 = xA(K5 ^ vA2, U5 ^ nA2, 56), W3 = n4, k5 = xA(M5 ^ GA2, C6 ^ aA2, 27), aA2 = n4, w5 = xA(h5 ^ T3, w5 ^ e4, 18), b4 = n4, i2 = xA(i2 ^ PA2, Q5 ^ O3, 1), O3 = n4, M5 = xA(M5 ^ oA2, C6 ^ JA2, 14), T3 = Q5 = e4 ^ yA2, wA2 = (hA2 = n4) ^ (-1 ^ Q5) & _3, C6 = xA(B5 ^ YA2, y5 ^ QA2, 61), e4 = n4, Q5 = xA(K5 ^ DA2, U5 ^ AA2, 28), YA2 = U5 = n4, yA2 = (K5 = (h5 = (kA2 = (-1 ^ D5) & t5 ^ F5) ^ (JA2 = (-1 ^ k5) & G5 ^ c5) ^ (DA2 = (-1 ^ i2) & d5 ^ w5) ^ (GA2 = (-1 ^ (B5 = h5 ^ BA2)) & H5 ^ M5) ^ (QA2 = (-1 ^ Q5) & s5 ^ C6)) ^ iA2) ^ (BA2 = (-1 ^ H5) & J5 ^ B5 ^ 128), _3 = (U5 = (nA2 = (oA2 = (-1 ^ q3) & X3 ^ R4) ^ (dA2 = (-1 ^ aA2) & m3 ^ W3) ^ (iA2 = (-1 ^ O3) & x3 ^ b4) ^ (AA2 = (-1 ^ U5) & v5 ^ e4) ^ wA2) ^ tA2) ^ (tA2 = (-1 ^ _3) & CA2 ^ T3 ^ -2147483648), SA2 = H5 = (HA2 = j3 ^ (-1 ^ R4) & q3) ^ (sA2 = l3 ^ (-1 ^ W3) & aA2) ^ (PA2 = $3 ^ (-1 ^ b4) & O3) ^ (T3 = V3 ^ (-1 ^ hA2) & T3) ^ (RA2 = Z3 ^ (-1 ^ e4) & YA2), B5 = (y5 = fA2) ^ xA(uA2 = (fA2 = S4 ^ (-1 ^ F5) & D5) ^ (vA2 = Y5 ^ (-1 ^ c5) & k5) ^ (zA2 = f5 ^ (-1 ^ w5) & i2) ^ (OA2 = N5 ^ (-1 ^ M5) & B5) ^ (qA2 = P5 ^ (-1 ^ C6) & Q5), H5, 1), H5 = xA(B5 ^ (f5 = L5 ^ (-1 ^ f5) & w5), (y5 = n4 ^ EA2) ^ (w5 = rA2 ^ (-1 ^ $3) & b4), 43), $3 = n4, EA2 = z3 ^ (-1 ^ j3) & R4, j3 = CA2 ^ (-1 ^ V3) & hA2, i2 = (d5 = (D5 ^= (-1 ^ t5) & a5) ^ (R4 = k5 ^ (-1 ^ G5) & p5) ^ (L5 = i2 ^ (-1 ^ d5) & L5) ^ (t5 = Q5 ^ (-1 ^ s5) & u4) ^ BA2) ^ xA(a5 = (hA2 = a5 ^ (-1 ^ S4) & F5) ^ (b4 = p5 ^ (-1 ^ Y5) & c5) ^ f5 ^ (J5 ^= (-1 ^ N5) & M5) ^ (p5 = u4 ^ (-1 ^ P5) & C6), w5 = EA2 ^ (W3 = gA2 ^ (-1 ^ l3) & W3) ^ w5 ^ j3 ^ (V3 = UA2 ^ (-1 ^ Z3) & e4), 1), u4 = xA(i2 ^ eA2, (Y5 = cA2) ^ (Q5 = (f5 = (cA2 = q3 ^ (-1 ^ X3) & z3) ^ (F5 = aA2 ^ (-1 ^ m3) & gA2) ^ (N5 = O3 ^ (-1 ^ x3) & rA2) ^ (S4 = YA2 ^ (-1 ^ v5) & UA2) ^ tA2) ^ n4), 44), CA2 = c5 = n4, k5 = xA(h5, nA2, 1) ^ a5, s5 = xA(OA2 ^ k5, T3 ^ (C6 = w5 ^ n4), 28), v5 = n4, P5 = xA(K5 ^ L5, U5 ^ N5, 3), Z3 = n4, h5 = xA(d5, f5, 1) ^ uA2, L5 = xA(QA2 ^ h5, AA2 ^ (e4 = SA2 ^ n4), 20), aA2 = N5 = n4, d5 = xA(i2 ^ KA2, Q5 ^ IA2, 1), x3 = n4, f5 = xA(k5 ^ zA2, C6 ^ PA2, 25), m3 = n4, p5 = xA(B5 ^ p5, y5 ^ V3, 6), UA2 = w5 = n4, G5 = xA(h5 ^ GA2, e4 ^ wA2, 27), V3 = n4, Y5 = xA(i2 ^ LA2, Q5 ^ bA2, 10), l3 = n4, a5 = xA(K5 ^ t5, S4 ^ U5, 36), rA2 = M5 = n4, t5 = xA(B5 ^ J5, y5 ^ j3, 62), X3 = n4, S4 = xA(h5 ^ DA2, e4 ^ iA2, 39), j3 = n4, J5 = xA(k5 ^ qA2, C6 ^ RA2, 55), gA2 = IA2 = n4, GA2 = c5 = (DA2 = (-1 ^ IA2) & j3 ^ X3) ^ (bA2 = (-1 ^ M5) & l3 ^ V3) ^ (YA2 = (-1 ^ w5) & m3 ^ x3) ^ (wA2 = (-1 ^ c5) & $3 ^ _3) ^ (T3 = (-1 ^ N5) & Z3 ^ v5), N5 = H5, H5 = s5, s5 = P5, P5 = d5, d5 = f5, eA2 = P5 ^ f5 & (-1 ^ p5), f5 = G5, G5 = Y5, Y5 = t5, t5 = S4, AA2 = xA(iA2 = (KA2 = N5 & (-1 ^ u4) ^ yA2 ^ 32778) ^ (QA2 = H5 ^ s5 & (-1 ^ L5)) ^ eA2 ^ (BA2 = f5 ^ G5 & (-1 ^ a5)) ^ (LA2 = Y5 ^ S4 & (-1 ^ J5)), c5, 1), nA2 = n4, F5 = xA(K5 ^ R4, F5 ^ U5, 41), R4 = n4, c5 = xA(i2 ^ MA2, Q5 ^ FA2, 2), z3 = n4, w5 = xA(B5 ^ b4, y5 ^ W3, 15), W3 = n4, S4 = xA(k5 ^ fA2, C6 ^ HA2, 56), q3 = n4, M5 = xA(h5 ^ JA2, e4 ^ dA2, 8), b4 = n4, D5 = xA(D5 ^ K5, U5 ^ cA2, 18), O3 = U5 = n4, C6 = xA(k5 ^ vA2, C6 ^ sA2, 21), IA2 = n4, k5 = xA(h5 ^ kA2, e4 ^ oA2, 14), e4 = n4, K5 = xA(i2 ^ pA2, Q5 ^ NA2, 45), h5 = n4, i2 = xA(B5 ^ hA2, y5 ^ EA2, 61), y5 = B5 = n4, Q5 = J5, J5 = c5, hA2 = (-1 ^ c5) & Y5 ^ F5, c5 = w5, w5 = M5, M5 = C6, Y5 = xA((K5 = (FA2 = hA2 ^ (kA2 = c5 ^ (-1 ^ S4) & f5) ^ (cA2 = w5 ^ (-1 ^ D5) & P5) ^ (JA2 = C6 ^ (-1 ^ k5) & yA2) ^ (NA2 = (C6 = K5) ^ (-1 ^ i2) & H5)) ^ AA2) ^ (EA2 = J5 ^ (-1 ^ Y5) & Q5), (U5 = (AA2 = (pA2 = (-1 ^ z3) & X3 ^ R4) ^ (oA2 = (-1 ^ q3) & V3 ^ W3) ^ (MA2 = (-1 ^ U5) & x3 ^ b4) ^ (dA2 = (-1 ^ e4) & _3 ^ IA2) ^ (fA2 = (-1 ^ B5) & v5 ^ h5)) ^ nA2) ^ (B5 = z3 ^ (-1 ^ X3) & gA2), 14), X3 = n4, v5 = B5 ^= (V3 = q3 ^ (-1 ^ V3) & rA2) ^ (nA2 = O3 ^ (-1 ^ x3) & UA2) ^ (tA2 = e4 ^ (-1 ^ _3) & CA2) ^ (HA2 = y5 ^ (-1 ^ v5) & aA2), uA2 = kA2, B5 = (RA2 = (J5 = t5 ^ (-1 ^ F5) & J5) ^ (kA2 = G5 ^ (-1 ^ c5) & S4) ^ (x3 = d5 ^ (-1 ^ w5) & D5) ^ (sA2 = N5 ^ (-1 ^ M5) & k5) ^ (PA2 = s5 ^ (-1 ^ C6) & i2)) ^ xA(P5 = (SA2 = EA2) ^ (S4 ^= (-1 ^ f5) & a5) ^ (D5 ^= (-1 ^ P5) & p5) ^ (k5 ^= (-1 ^ yA2) & u4) ^ (EA2 = i2 ^ (-1 ^ H5) & L5), B5, 1), H5 = xA(uA2 ^ B5, (H5 = oA2) ^ (y5 = (oA2 = (f5 = j3 ^ (-1 ^ R4) & z3) ^ (z3 = l3 ^ (-1 ^ W3) & q3) ^ (_3 = m3 ^ (-1 ^ b4) & O3) ^ (q3 = $3 ^ (-1 ^ IA2) & e4) ^ (O3 = Z3 ^ (-1 ^ h5) & y5)) ^ n4), 21), yA2 = e4 = n4, u4 = (SA2 = Q5 ^ (-1 ^ t5) & F5) ^ (a5 ^= (-1 ^ G5) & c5) ^ (p5 ^= (-1 ^ d5) & w5) ^ (M5 = u4 ^ (-1 ^ N5) & M5) ^ (vA2 = L5 ^ (-1 ^ s5) & C6), i2 = xA(FA2, AA2, 1) ^ u4, N5 = xA(i2 ^ x3, (Q5 = (s5 = (c5 = gA2 ^ (-1 ^ j3) & R4) ^ (L5 = rA2 ^ (-1 ^ l3) & W3) ^ (G5 = UA2 ^ (-1 ^ m3) & b4) ^ (b4 = CA2 ^ (-1 ^ $3) & IA2) ^ (FA2 = aA2 ^ (-1 ^ Z3) & h5)) ^ n4) ^ _3, 43), IA2 = (_3 = n4) ^ (-1 ^ e4) & X3, h5 = xA(u4, s5, 1) ^ P5, s5 = xA(eA2 ^ h5, YA2 ^ (e4 = v5 ^ n4), 3), v5 = n4, P5 = xA(i2 ^ J5, Q5 ^ f5, 61), Z3 = n4, F5 = xA(RA2, oA2, 1) ^ iA2, J5 = xA(a5 ^ F5, L5 ^ (C6 = GA2 ^ n4), 45), CA2 = a5 = n4, d5 = xA(B5 ^ cA2, y5 ^ MA2, 25), x3 = n4, f5 = xA(h5 ^ LA2, e4 ^ DA2, 18), $3 = n4, u4 = xA(S4 ^ K5, U5 ^ V3, 8), aA2 = w5 = n4, G5 = xA(F5 ^ p5, C6 ^ G5, 10), m3 = n4, t5 = xA(B5 ^ hA2, y5 ^ pA2, 56), V3 = n4, L5 = xA(i2 ^ kA2, Q5 ^ z3, 15), UA2 = R4 = n4, S4 = xA(D5 ^ K5, U5 ^ nA2, 39), l3 = n4, D5 = xA(F5 ^ SA2, C6 ^ c5, 2), j3 = n4, p5 = xA(h5 ^ BA2, e4 ^ bA2, 41), rA2 = c5 = n4, bA2 = c5 = (cA2 = (-1 ^ c5) & j3 ^ l3) ^ (kA2 = (-1 ^ R4) & V3 ^ m3) ^ (YA2 = (-1 ^ w5) & $3 ^ x3) ^ (hA2 = (-1 ^ a5) & Z3 ^ v5) ^ IA2, a5 = Y5, Y5 = t5, BA2 = t5 & (-1 ^ L5) ^ G5, t5 = S4, S4 = D5, oA2 = xA(pA2 = (eA2 = (-1 ^ u4) & f5 ^ d5) ^ (DA2 = N5 ^ a5 & (-1 ^ H5)) ^ (GA2 = (-1 ^ J5) & P5 ^ s5) ^ BA2 ^ (LA2 = t5 ^ D5 & (-1 ^ p5)), c5, 1), MA2 = n4, c5 = xA(i2 ^ sA2, Q5 ^ q3, 62), R4 = n4, D5 = xA(B5 ^ NA2, y5 ^ fA2, 55), gA2 = n4, w5 = xA(k5 ^ K5, U5 ^ tA2, 27), W3 = n4, k5 = xA(h5 ^ QA2, e4 ^ T3, 36), z3 = n4, M5 = xA(F5 ^ M5, C6 ^ b4, 1), b4 = n4, i2 = xA(i2 ^ PA2, Q5 ^ O3, 6), q3 = n4, Q5 = xA(F5 ^ vA2, C6 ^ FA2, 44), O3 = n4, C6 = xA(B5 ^ JA2, y5 ^ dA2, 28), y5 = n4, K5 = xA(K5 ^ EA2, U5 ^ HA2, 20), F5 = J5, T3 = B5 = n4, J5 = K5, s5 = xA((U5 = (QA2 = (JA2 = (-1 ^ D5) & t5 ^ c5) ^ (NA2 = (-1 ^ k5) & G5 ^ w5) ^ (FA2 = (-1 ^ i2) & d5 ^ M5) ^ (EA2 = (K5 = h5 ^ KA2) ^ (-1 ^ Q5) & N5 ^ -2147483638) ^ (KA2 = (-1 ^ J5) & s5 ^ C6)) ^ oA2) ^ (oA2 = J5 ^ (-1 ^ s5) & F5), (B5 = (s5 = MA2) ^ (AA2 = (MA2 = (-1 ^ gA2) & l3 ^ R4) ^ (dA2 = (-1 ^ z3) & m3 ^ W3) ^ (fA2 = (-1 ^ q3) & x3 ^ b4) ^ (wA2 = (h5 = e4 ^ wA2) ^ (-1 ^ O3) & _3 ^ -2147483648) ^ (iA2 = (-1 ^ B5) & v5 ^ y5))) ^ (v5 = T3 ^ (-1 ^ v5) & CA2), 44), e4 = n4, x3 = v5 = (nA2 = gA2 ^ (-1 ^ l3) & rA2) ^ (tA2 = z3 ^ (-1 ^ m3) & UA2) ^ (HA2 = q3 ^ (-1 ^ x3) & aA2) ^ v5 ^ (l3 = O3 ^ (-1 ^ _3) & yA2), _3 = EA2, RA2 = (m3 = S4 ^ (-1 ^ c5) & D5) ^ (EA2 = Y5 ^ (-1 ^ w5) & k5) ^ (sA2 = f5 ^ (-1 ^ M5) & i2) ^ (PA2 = a5 ^ (-1 ^ K5) & Q5) ^ (J5 = P5 ^ (-1 ^ C6) & J5), v5 = _3 ^ (i2 = xA(d5 = (t5 = D5 ^ (-1 ^ t5) & p5) ^ (SA2 = k5 ^ (-1 ^ G5) & L5) ^ (vA2 = i2 ^ (-1 ^ d5) & u4) ^ oA2 ^ (G5 = Q5 ^ (-1 ^ N5) & H5), v5, 1) ^ RA2), _3 = (D5 = wA2) ^ (Q5 = (O3 = (N5 = j3 ^ (-1 ^ R4) & gA2) ^ (wA2 = V3 ^ (-1 ^ W3) & z3) ^ (z3 = $3 ^ (-1 ^ b4) & q3) ^ (gA2 = X3 ^ (-1 ^ h5) & O3) ^ (q3 = Z3 ^ (-1 ^ y5) & T3)) ^ n4), L5 = (p5 ^= (-1 ^ S4) & c5) ^ (T3 = L5 ^ (-1 ^ Y5) & w5) ^ (M5 = u4 ^ (-1 ^ f5) & M5) ^ (u4 = H5 ^ (-1 ^ a5) & K5) ^ (a5 = F5 ^ (-1 ^ P5) & C6), D5 = xA(QA2, AA2, 1) ^ L5, N5 = xA(D5 ^ m3, (k5 = (H5 = (Y5 = rA2 ^ (-1 ^ j3) & R4) ^ (QA2 = UA2 ^ (-1 ^ V3) & W3) ^ (b4 = aA2 ^ (-1 ^ $3) & b4) ^ (f5 = yA2 ^ (-1 ^ X3) & h5) ^ (S4 = CA2 ^ (-1 ^ Z3) & y5)) ^ n4) ^ N5, 14), aA2 = (CA2 = n4) ^ (-1 ^ _3) & e4, C6 = xA(L5, H5, 1) ^ d5, H5 = xA(LA2 ^ C6, cA2 ^ (K5 = x3 ^ n4), 61), Z3 = n4, P5 = xA(D5 ^ J5, k5 ^ q3, 20), x3 = n4, y5 = xA(RA2, O3, 1) ^ pA2, u4 = xA(y5 ^ u4, (h5 = bA2 ^ n4) ^ f5, 28), UA2 = F5 = n4, d5 = xA(i2 ^ JA2, Q5 ^ MA2, 18), $3 = n4, f5 = xA(C6 ^ GA2, K5 ^ hA2, 6), m3 = n4, L5 = xA(U5 ^ G5, B5 ^ l3, 1), rA2 = c5 = n4, G5 = xA(y5 ^ p5, h5 ^ Y5, 56), V3 = n4, Y5 = xA(i2 ^ KA2, Q5 ^ iA2, 36), l3 = n4, J5 = xA(D5 ^ PA2, k5 ^ gA2, 27), gA2 = w5 = n4, t5 = xA(t5 ^ U5, B5 ^ nA2, 2), X3 = n4, S4 = xA(y5 ^ a5, h5 ^ S4, 55), j3 = n4, p5 = xA(C6 ^ DA2, K5 ^ IA2, 62), IA2 = a5 = n4, DA2 = F5 = (JA2 = (-1 ^ a5) & j3 ^ X3) ^ (bA2 = (-1 ^ w5) & l3 ^ V3) ^ (cA2 = (-1 ^ c5) & m3 ^ $3) ^ (hA2 = (-1 ^ F5) & x3 ^ Z3) ^ aA2, a5 = s5, s5 = P5, P5 = d5, d5 = f5, LA2 = P5 ^ f5 & (-1 ^ L5), f5 = G5, G5 = Y5, Y5 = t5, t5 = S4, iA2 = xA(MA2 = (GA2 = N5 ^ a5 & (-1 ^ v5)) ^ (KA2 = s5 & (-1 ^ u4) ^ H5) ^ LA2 ^ (pA2 = f5 ^ G5 & (-1 ^ J5)) ^ (oA2 = Y5 ^ S4 & (-1 ^ p5)), F5, 1), AA2 = n4, F5 = xA(D5 ^ sA2, k5 ^ z3, 39), R4 = n4, S4 = xA(i2 ^ NA2, Q5 ^ dA2, 41), z3 = n4, c5 = xA(U5 ^ vA2, B5 ^ HA2, 10), W3 = n4, w5 = xA(C6 ^ BA2, K5 ^ kA2, 15), q3 = n4, M5 = xA(y5 ^ M5, h5 ^ b4, 25), b4 = n4, D5 = xA(D5 ^ EA2, k5 ^ wA2, 8), O3 = n4, C6 = xA(C6 ^ eA2, K5 ^ YA2, 43), yA2 = n4, k5 = xA(y5 ^ T3, h5 ^ QA2, 21), y5 = n4, K5 = xA(i2 ^ FA2, Q5 ^ fA2, 3), h5 = n4, i2 = xA(U5 ^ SA2, B5 ^ tA2, 45), T3 = U5 = n4, Q5 = J5, J5 = w5, YA2 = (-1 ^ w5) & f5 ^ c5, w5 = M5, M5 = C6, f5 = xA((K5 = (FA2 = (wA2 = (-1 ^ S4) & Y5 ^ F5) ^ YA2 ^ (B5 = w5 ^ (-1 ^ D5) & P5) ^ (kA2 = C6 ^ (-1 ^ k5) & N5) ^ (NA2 = (C6 = K5) ^ (-1 ^ i2) & H5)) ^ iA2) ^ (EA2 = J5 ^ (-1 ^ f5) & Q5), (U5 = (iA2 = (QA2 = (-1 ^ z3) & X3 ^ R4) ^ (eA2 = (-1 ^ q3) & V3 ^ W3) ^ (BA2 = (-1 ^ O3) & $3 ^ b4) ^ (dA2 = (-1 ^ y5) & CA2 ^ yA2) ^ (fA2 = (-1 ^ U5) & Z3 ^ h5)) ^ AA2) ^ (AA2 = q3 ^ (-1 ^ V3) & gA2), 21), V3 = n4, Z3 = (nA2 = z3 ^ (-1 ^ X3) & IA2) ^ (SA2 = AA2) ^ (X3 = O3 ^ (-1 ^ $3) & rA2) ^ (AA2 = y5 ^ (-1 ^ CA2) & _3) ^ (tA2 = T3 ^ (-1 ^ Z3) & UA2), CA2 = B5, SA2 = (HA2 = t5 ^ (-1 ^ F5) & S4) ^ ($3 = G5 ^ (-1 ^ c5) & J5) ^ (sA2 = d5 ^ (-1 ^ w5) & D5) ^ (PA2 = a5 ^ (-1 ^ M5) & k5) ^ (RA2 = s5 ^ (-1 ^ C6) & i2), B5 = xA(P5 = (vA2 = S4 ^ (-1 ^ Y5) & p5) ^ (B5 = EA2) ^ (Y5 = D5 ^ (-1 ^ P5) & L5) ^ (EA2 = k5 ^ (-1 ^ N5) & v5) ^ (N5 = i2 ^ (-1 ^ H5) & u4), Z3, 1) ^ SA2, J5 = xA(CA2 ^ B5, (y5 = (z3 = (k5 = j3 ^ (-1 ^ R4) & z3) ^ (S4 = l3 ^ (-1 ^ W3) & q3) ^ (D5 = m3 ^ (-1 ^ b4) & O3) ^ (q3 = e4 ^ (-1 ^ yA2) & y5) ^ (H5 = x3 ^ (-1 ^ h5) & T3)) ^ n4) ^ BA2, 43), CA2 = n4, u4 = (O3 = p5 ^ (-1 ^ t5) & F5) ^ (F5 = Q5 ^ (-1 ^ G5) & c5) ^ (L5 ^= (-1 ^ d5) & w5) ^ (BA2 = (-1 ^ a5) & M5 ^ v5 ^ -2147450751) ^ (p5 = u4 ^ (-1 ^ s5) & C6), i2 = xA(FA2, iA2, 1) ^ u4, H5 = xA(i2 ^ RA2, (Q5 = (s5 = (w5 = IA2 ^ (-1 ^ j3) & R4) ^ (a5 = gA2 ^ (-1 ^ l3) & W3) ^ (d5 = rA2 ^ (-1 ^ m3) & b4) ^ (T3 = (-1 ^ e4) & yA2 ^ _3 ^ -2147483648) ^ (t5 = UA2 ^ (-1 ^ x3) & h5)) ^ n4) ^ H5, 44), _3 = (yA2 = n4) ^ (-1 ^ CA2) & V3, M5 = xA(u4, s5, 1) ^ P5, s5 = xA(KA2 ^ M5, hA2 ^ (C6 = Z3 ^ n4), 20), v5 = n4, P5 = xA(i2 ^ $3, Q5 ^ S4, 45), Z3 = n4, h5 = xA(SA2, z3, 1) ^ MA2, u4 = xA(L5 ^ h5, d5 ^ (e4 = DA2 ^ n4), 3), IA2 = c5 = n4, d5 = xA(B5 ^ NA2, y5 ^ fA2, 6), x3 = n4, G5 = xA(M5 ^ pA2, C6 ^ bA2, 8), $3 = n4, L5 = xA(K5 ^ Y5, U5 ^ X3, 25), UA2 = R4 = n4, Y5 = xA(h5 ^ p5, e4 ^ t5, 36), m3 = n4, t5 = xA(B5 ^ YA2, y5 ^ eA2, 15), l3 = n4, p5 = xA(i2 ^ sA2, Q5 ^ D5, 10), rA2 = W3 = n4, S4 = xA(K5 ^ N5, U5 ^ tA2, 55), X3 = n4, D5 = xA(h5 ^ F5, e4 ^ a5, 41), j3 = n4, a5 = xA(M5 ^ LA2, C6 ^ cA2, 39), gA2 = N5 = n4, FA2 = F5 = (NA2 = (-1 ^ N5) & j3 ^ X3) ^ (bA2 = (-1 ^ W3) & l3 ^ m3) ^ (cA2 = (-1 ^ R4) & $3 ^ x3) ^ (YA2 = (-1 ^ c5) & Z3 ^ v5) ^ _3, N5 = f5, DA2 = H5 ^ f5 & (-1 ^ J5), f5 = G5, G5 = Y5, Y5 = t5, LA2 = G5 ^ t5 & (-1 ^ p5), t5 = S4, S4 = D5, fA2 = xA(MA2 = DA2 ^ (KA2 = (-1 ^ u4) & P5 ^ s5) ^ (eA2 = f5 & (-1 ^ L5) ^ d5) ^ LA2 ^ (pA2 = t5 ^ D5 & (-1 ^ a5)), F5, 1), iA2 = n4, F5 = xA(i2 ^ HA2, Q5 ^ k5, 2), R4 = n4, D5 = xA(B5 ^ kA2, y5 ^ dA2, 62), z3 = n4, c5 = xA(K5 ^ vA2, U5 ^ nA2, 56), W3 = n4, k5 = xA(M5 ^ GA2, C6 ^ aA2, 27), aA2 = n4, w5 = xA(h5 ^ O3, w5 ^ e4, 18), b4 = n4, i2 = xA(i2 ^ PA2, Q5 ^ q3, 1), q3 = n4, M5 = xA(M5 ^ oA2, C6 ^ JA2, 14), O3 = Q5 = e4 ^ T3, hA2 = (T3 = n4) ^ (-1 ^ Q5) & yA2, C6 = xA(B5 ^ wA2, y5 ^ QA2, 61), y5 = n4, Q5 = xA(K5 ^ EA2, U5 ^ AA2, 28), wA2 = U5 = n4, B5 = h5 ^ BA2, e4 = (K5 = (QA2 = (h5 = (-1 ^ D5) & t5 ^ F5) ^ (kA2 = (-1 ^ k5) & G5 ^ c5) ^ (JA2 = (-1 ^ i2) & d5 ^ w5) ^ (EA2 = (-1 ^ B5) & H5 ^ M5) ^ (GA2 = (-1 ^ Q5) & s5 ^ C6)) ^ fA2) ^ (H5 = (-1 ^ H5) & J5 ^ B5 ^ 32896), yA2 = (U5 = (AA2 = iA2) ^ (iA2 = (BA2 = (-1 ^ z3) & X3 ^ R4) ^ (oA2 = (-1 ^ aA2) & m3 ^ W3) ^ (dA2 = (-1 ^ q3) & x3 ^ b4) ^ (fA2 = (-1 ^ U5) & v5 ^ y5) ^ hA2)) ^ (AA2 = (-1 ^ yA2) & CA2 ^ O3 ^ -2147483648), v5 = (X3 = z3 ^ (-1 ^ X3) & gA2) ^ (nA2 = aA2 ^ (-1 ^ m3) & rA2) ^ (tA2 = q3 ^ (-1 ^ x3) & UA2) ^ (SA2 = AA2) ^ (AA2 = wA2 ^ (-1 ^ v5) & IA2), SA2 = h5, Q5 = (m3 = (HA2 = S4 ^ (-1 ^ F5) & D5) ^ (h5 = Y5 ^ (-1 ^ c5) & k5) ^ (sA2 = f5 ^ (-1 ^ w5) & i2) ^ (x3 = N5 ^ (-1 ^ M5) & B5) ^ (PA2 = P5 ^ (-1 ^ C6) & Q5)) ^ xA(s5 = (t5 = D5 ^ (-1 ^ t5) & a5) ^ (D5 = k5 ^ (-1 ^ G5) & p5) ^ (RA2 = i2 ^ (-1 ^ d5) & L5) ^ (k5 = Q5 ^ (-1 ^ s5) & u4) ^ H5, v5, 1), H5 = xA(SA2 ^ Q5, (H5 = BA2) ^ (B5 = (O3 = (z3 = j3 ^ (-1 ^ R4) & z3) ^ (d5 = l3 ^ (-1 ^ W3) & aA2) ^ (BA2 = $3 ^ (-1 ^ b4) & q3) ^ (G5 = V3 ^ (-1 ^ T3) & O3) ^ (q3 = Z3 ^ (-1 ^ y5) & wA2)) ^ n4), 14), aA2 = n4, u4 = (a5 ^= (-1 ^ S4) & F5) ^ (p5 ^= (-1 ^ Y5) & c5) ^ (wA2 = L5 ^ (-1 ^ f5) & w5) ^ (S4 = J5 ^ (-1 ^ N5) & M5) ^ (w5 = u4 ^ (-1 ^ P5) & C6), J5 = xA(QA2, iA2, 1) ^ u4, N5 = xA(J5 ^ h5, (i2 = (P5 = (L5 = gA2 ^ (-1 ^ j3) & R4) ^ (Y5 = rA2 ^ (-1 ^ l3) & W3) ^ (QA2 = UA2 ^ (-1 ^ $3) & b4) ^ (F5 = CA2 ^ (-1 ^ V3) & T3) ^ (W3 = IA2 ^ (-1 ^ Z3) & y5)) ^ n4) ^ d5, 21), CA2 = (IA2 = n4) ^ (-1 ^ aA2) & yA2, M5 = xA(u4, P5, 1) ^ s5, s5 = xA(LA2 ^ M5, bA2 ^ (C6 = v5 ^ n4), 45), v5 = n4, P5 = xA(J5 ^ x3, i2 ^ G5, 28), Z3 = n4, y5 = xA(m3, O3, 1) ^ MA2, u4 = xA(a5 ^ y5, L5 ^ (h5 = FA2 ^ n4), 61), UA2 = c5 = n4, d5 = xA(Q5 ^ kA2, B5 ^ oA2, 8), x3 = n4, f5 = xA(M5 ^ DA2, C6 ^ _3, 1), $3 = n4, L5 = xA(K5 ^ t5, U5 ^ X3, 18), _3 = j3 = n4, G5 = xA(y5 ^ p5, h5 ^ Y5, 15), m3 = n4, Y5 = xA(Q5 ^ EA2, B5 ^ hA2, 27), V3 = n4, p5 = xA(J5 ^ HA2, i2 ^ z3, 56), rA2 = R4 = n4, t5 = xA(D5 ^ K5, U5 ^ nA2, 41), l3 = n4, S4 = xA(y5 ^ S4, h5 ^ F5, 62), X3 = n4, a5 = xA(M5 ^ pA2, C6 ^ NA2, 2), gA2 = D5 = n4, FA2 = D5 = (NA2 = (-1 ^ D5) & X3 ^ l3) ^ (bA2 = (-1 ^ R4) & V3 ^ m3) ^ (kA2 = (-1 ^ j3) & $3 ^ x3) ^ (hA2 = (-1 ^ c5) & Z3 ^ v5) ^ CA2, iA2 = xA(MA2 = (oA2 = (-1 ^ a5) & S4 ^ t5) ^ (pA2 = (-1 ^ p5) & Y5 ^ G5) ^ (LA2 = (-1 ^ L5) & f5 ^ d5) ^ (EA2 = N5 ^ (-1 ^ H5) & e4) ^ (DA2 = (-1 ^ u4) & P5 ^ s5), D5, 1), nA2 = n4, F5 = xA(J5 ^ PA2, i2 ^ q3, 55), j3 = n4, D5 = xA(Q5 ^ JA2, B5 ^ dA2, 39), z3 = n4, c5 = xA(k5 ^ K5, U5 ^ AA2, 36), R4 = n4, k5 = xA(M5 ^ eA2, C6 ^ cA2, 10), q3 = n4, w5 = xA(y5 ^ w5, h5 ^ W3, 6), W3 = n4, i2 = xA(J5 ^ sA2, i2 ^ BA2, 25), O3 = n4, M5 = xA(M5 ^ KA2, C6 ^ YA2, 44), b4 = n4, J5 = xA(y5 ^ wA2, h5 ^ QA2, 43), h5 = y5 = n4, C6 = xA(Q5 ^ GA2, B5 ^ fA2, 20), B5 = n4, Q5 = xA(K5 ^ RA2, U5 ^ tA2, 3), T3 = U5 = n4, N5 = xA((K5 = (KA2 = (wA2 = (-1 ^ D5) & t5 ^ F5) ^ (YA2 = (-1 ^ k5) & G5 ^ c5) ^ (cA2 = (-1 ^ i2) & d5 ^ w5) ^ (JA2 = (-1 ^ J5) & N5 ^ M5) ^ (GA2 = (-1 ^ Q5) & s5 ^ C6)) ^ iA2) ^ (QA2 = J5 ^ (-1 ^ N5) & H5), (U5 = (AA2 = (eA2 = (-1 ^ z3) & l3 ^ j3) ^ (BA2 = (-1 ^ q3) & m3 ^ R4) ^ (dA2 = (-1 ^ O3) & x3 ^ W3) ^ (fA2 = (-1 ^ h5) & IA2 ^ b4) ^ (iA2 = (-1 ^ U5) & v5 ^ B5)) ^ nA2) ^ (IA2 = h5 ^ (-1 ^ IA2) & aA2), 62), y5 = n4, v5 = (nA2 = z3 ^ (-1 ^ l3) & gA2) ^ (m3 = q3 ^ (-1 ^ m3) & rA2) ^ (tA2 = O3 ^ (-1 ^ x3) & _3) ^ (l3 = T3 ^ (-1 ^ v5) & UA2) ^ IA2, IA2 = wA2, RA2 = (wA2 = S4 ^ (-1 ^ F5) & D5) ^ (x3 = Y5 ^ (-1 ^ c5) & k5) ^ (HA2 = f5 ^ (-1 ^ w5) & i2) ^ (sA2 = (-1 ^ M5) & J5 ^ e4 ^ -2147483647) ^ (PA2 = P5 ^ (-1 ^ C6) & Q5), k5 = xA(d5 = (t5 = D5 ^ (-1 ^ t5) & a5) ^ (G5 = k5 ^ (-1 ^ G5) & p5) ^ (SA2 = i2 ^ (-1 ^ d5) & L5) ^ (s5 = Q5 ^ (-1 ^ s5) & u4) ^ QA2, v5, 1) ^ RA2, h5 = xA(IA2 ^ k5, (i2 = (D5 = (z3 = X3 ^ (-1 ^ j3) & z3) ^ (J5 = V3 ^ (-1 ^ R4) & q3) ^ (q3 = $3 ^ (-1 ^ W3) & O3) ^ (O3 = (-1 ^ b4) & h5 ^ yA2) ^ (T3 = Z3 ^ (-1 ^ B5) & T3)) ^ n4) ^ eA2, 2), IA2 = n4, a5 = (QA2 = a5 ^ (-1 ^ S4) & F5) ^ (Y5 = p5 ^ (-1 ^ Y5) & c5) ^ (L5 ^= (-1 ^ f5) & w5) ^ (H5 ^= (-1 ^ e4) & M5) ^ (S4 = u4 ^ (-1 ^ P5) & C6), Q5 = xA(KA2, AA2, 1) ^ a5, u4 = xA(Q5 ^ x3, (F5 = (w5 = (KA2 = gA2 ^ (-1 ^ X3) & j3) ^ (f5 = rA2 ^ (-1 ^ V3) & R4) ^ (p5 = _3 ^ (-1 ^ $3) & W3) ^ (P5 = aA2 ^ (-1 ^ yA2) & b4) ^ (j3 = UA2 ^ (-1 ^ Z3) & B5)) ^ n4) ^ J5, 41), J5 = N5, o4[I6 + 184 >> 2] = u4 ^ J5 & (-1 ^ h5), b4 = n4, o4[I6 + 188 >> 2] = b4 ^ (-1 ^ IA2) & y5, D5 = xA(RA2, D5, 1) ^ MA2, p5 = xA(D5 ^ L5, (c5 = FA2 ^ n4) ^ p5, 39), C6 = n4, w5 = xA(a5, w5, 1) ^ d5, L5 = xA(DA2 ^ w5, hA2 ^ (M5 = v5 ^ n4), 55), yA2 = a5 = n4, o4[I6 + 160 >> 2] = J5 ^ (-1 ^ L5) & p5, o4[I6 + 164 >> 2] = y5 ^ (-1 ^ a5) & C6, a5 = xA(K5 ^ G5, U5 ^ m3, 15), B5 = n4, N5 = xA(D5 ^ H5, c5 ^ P5, 27), e4 = n4, v5 = xA(w5 ^ oA2, M5 ^ NA2, 56), _3 = H5 = n4, o4[I6 + 144 >> 2] = (-1 ^ v5) & N5 ^ a5, o4[I6 + 148 >> 2] = (-1 ^ H5) & e4 ^ B5, H5 = xA(Q5 ^ PA2, F5 ^ T3, 36), Z3 = n4, x3 = xA(k5 ^ cA2, i2 ^ dA2, 10), aA2 = P5 = n4, o4[I6 + 128 >> 2] = (-1 ^ x3) & a5 ^ H5, o4[I6 + 132 >> 2] = (-1 ^ P5) & B5 ^ Z3, P5 = xA(Q5 ^ wA2, F5 ^ z3, 18), $3 = n4, d5 = xA(K5 ^ s5, U5 ^ l3, 6), m3 = n4, s5 = xA(k5 ^ JA2, i2 ^ fA2, 1), UA2 = G5 = n4, o4[I6 + 112 >> 2] = (-1 ^ s5) & d5 ^ P5, o4[I6 + 116 >> 2] = (-1 ^ G5) & m3 ^ $3, f5 = xA(D5 ^ Y5, c5 ^ f5, 8), V3 = n4, l3 = xA(w5 ^ LA2, M5 ^ kA2, 25), rA2 = G5 = n4, o4[I6 + 88 >> 2] = d5 ^ (-1 ^ l3) & f5, o4[I6 + 92 >> 2] = m3 ^ (-1 ^ G5) & V3, Y5 = xA(K5 ^ t5, U5 ^ nA2, 61), X3 = n4, t5 = xA(D5 ^ S4, c5 ^ j3, 20), j3 = n4, G5 = xA(w5 ^ EA2, M5 ^ CA2, 28), CA2 = S4 = n4, o4[I6 + 72 >> 2] = (-1 ^ G5) & t5 ^ Y5, o4[I6 + 76 >> 2] = (-1 ^ S4) & j3 ^ X3, S4 = xA(Q5 ^ HA2, F5 ^ q3, 3), R4 = n4, W3 = xA(k5 ^ YA2, i2 ^ BA2, 45), o4[I6 + 56 >> 2] = (-1 ^ W3) & Y5 ^ S4, gA2 = n4, o4[I6 + 60 >> 2] = (-1 ^ gA2) & X3 ^ R4, D5 = xA(D5 ^ QA2, c5 ^ KA2, 14), c5 = n4, k5 = xA(k5 ^ GA2, i2 ^ iA2, 44), z3 = i2 = F5 ^ O3, q3 = Q5 ^ sA2, o4[I6 + 32 >> 2] = (-1 ^ q3) & k5 ^ D5, O3 = n4, o4[I6 + 36 >> 2] = O3 & (-1 ^ i2) ^ c5, i2 = xA(K5 ^ SA2, U5 ^ tA2, 43), Q5 = n4, F5 = xA(w5 ^ pA2, M5 ^ bA2, 21), o4[I6 + 16 >> 2] = (-1 ^ F5) & D5 ^ i2, w5 = n4, o4[I6 + 20 >> 2] = (-1 ^ w5) & c5 ^ Q5, o4[I6 + 192 >> 2] = h5 ^ (-1 ^ J5) & L5, o4[I6 + 196 >> 2] = IA2 ^ (-1 ^ y5) & yA2, o4[I6 + 176 >> 2] = p5 ^ (-1 ^ u4) & h5, o4[I6 + 180 >> 2] = C6 ^ (-1 ^ b4) & IA2, o4[I6 + 168 >> 2] = L5 ^ (-1 ^ p5) & u4, o4[I6 + 172 >> 2] = yA2 ^ (-1 ^ C6) & b4, o4[I6 + 152 >> 2] = v5 ^ (-1 ^ N5) & H5, o4[I6 + 156 >> 2] = _3 ^ (-1 ^ e4) & Z3, o4[I6 + 136 >> 2] = x3 ^ (-1 ^ a5) & v5, o4[I6 + 140 >> 2] = aA2 ^ (-1 ^ B5) & _3, o4[I6 + 120 >> 2] = N5 ^ (-1 ^ H5) & x3, o4[I6 + 124 >> 2] = e4 ^ (-1 ^ Z3) & aA2, o4[I6 + 104 >> 2] = f5 ^ (-1 ^ P5) & s5, o4[I6 + 108 >> 2] = V3 ^ (-1 ^ $3) & UA2, o4[I6 + 96 >> 2] = l3 ^ (-1 ^ f5) & P5, o4[I6 + 100 >> 2] = rA2 ^ (-1 ^ V3) & $3, o4[I6 + 80 >> 2] = s5 ^ (-1 ^ d5) & l3, o4[I6 + 84 >> 2] = UA2 ^ (-1 ^ m3) & rA2, o4[g6 >> 2] = W3 ^ (-1 ^ Y5) & G5, o4[g6 + 4 >> 2] = gA2 ^ (-1 ^ X3) & CA2, o4[I6 + 48 >> 2] = t5 ^ (-1 ^ S4) & W3, o4[I6 + 52 >> 2] = j3 ^ (-1 ^ R4) & gA2, o4[I6 + 40 >> 2] = G5 ^ (-1 ^ t5) & S4, o4[I6 + 44 >> 2] = CA2 ^ (-1 ^ j3) & R4, o4[I6 + 24 >> 2] = F5 ^ (-1 ^ D5) & q3, o4[I6 + 28 >> 2] = w5 ^ (-1 ^ c5) & z3, o4[I6 + 8 >> 2] = k5 ^ (-1 ^ i2) & F5, o4[I6 + 12 >> 2] = O3 ^ (-1 ^ Q5) & w5, o4[I6 >> 2] = (-1 ^ k5) & i2 ^ q3 ^ -2147450872, o4[I6 + 4 >> 2] = (-1 ^ O3) & Q5 ^ z3 ^ -2147483648, E4(A7, I6, 200), r4 = I6 + 208 | 0;
            }
            function U4(A7, I6) {
              var g6, B5, Q5, i2, E5, D5 = 0, o5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, r5 = 0, t5 = 0, U5 = 0, J5 = 0, K5 = 0, e4 = 0, Y5 = 0, N5 = 0, G5 = 0, H5 = 0, s5 = 0, p5 = 0, L5 = 0, d5 = 0, P5 = 0, R4 = 0, b4 = 0, v5 = 0, u4 = 0, z3 = 0, O3 = 0, q3 = 0, W3 = 0, x3 = 0, V3 = 0, j3 = 0, m3 = 0, l3 = 0, _3 = 0, X3 = 0, T3 = 0, Z3 = 0, $3 = 0, AA2 = 0, IA2 = 0, gA2 = 0, CA2 = 0, BA2 = 0, QA2 = 0, iA2 = 0, EA2 = 0, DA2 = 0, oA2 = 0, cA2 = 0, hA2 = 0, wA2 = 0, FA2 = 0, yA2 = 0, fA2 = 0, SA2 = 0, aA2 = 0, kA2 = 0, MA2 = 0, rA2 = 0, nA2 = 0, tA2 = 0, UA2 = 0, JA2 = 0, KA2 = 0, eA2 = 0, YA2 = 0, NA2 = 0, GA2 = 0;
              FA2 = c4[I6 + 40 | 0] | c4[I6 + 41 | 0] << 8 | c4[I6 + 42 | 0] << 16 | c4[I6 + 43 | 0] << 24, fA2 = D5 = c4[I6 + 44 | 0] | c4[I6 + 45 | 0] << 8 | c4[I6 + 46 | 0] << 16 | c4[I6 + 47 | 0] << 24, gA2 = c4[I6 + 104 | 0] | c4[I6 + 105 | 0] << 8 | c4[I6 + 106 | 0] << 16 | c4[I6 + 107 | 0] << 24, SA2 = D5 = c4[I6 + 108 | 0] | c4[I6 + 109 | 0] << 8 | c4[I6 + 110 | 0] << 16 | c4[I6 + 111 | 0] << 24, D5 = c4[I6 + 68 | 0] | c4[I6 + 69 | 0] << 8 | c4[I6 + 70 | 0] << 16 | c4[I6 + 71 | 0] << 24, j3 = c4[I6 + 64 | 0] | c4[I6 + 65 | 0] << 8 | c4[I6 + 66 | 0] << 16 | c4[I6 + 67 | 0] << 24, BA2 = D5, eA2 = D5 = c4[I6 + 36 | 0] | c4[I6 + 37 | 0] << 8 | c4[I6 + 38 | 0] << 16 | c4[I6 + 39 | 0] << 24, e4 = D5, DA2 = c4[I6 + 120 | 0] | c4[I6 + 121 | 0] << 8 | c4[I6 + 122 | 0] << 16 | c4[I6 + 123 | 0] << 24, rA2 = D5 = c4[I6 + 124 | 0] | c4[I6 + 125 | 0] << 8 | c4[I6 + 126 | 0] << 16 | c4[I6 + 127 | 0] << 24, Q5 = D5 = c4[I6 + 92 | 0] | c4[I6 + 93 | 0] << 8 | c4[I6 + 94 | 0] << 16 | c4[I6 + 95 | 0] << 24, g6 = c4[I6 + 88 | 0] | c4[I6 + 89 | 0] << 8 | c4[I6 + 90 | 0] << 16 | c4[I6 + 91 | 0] << 24, V3 = D5, EA2 = c4[I6 + 80 | 0] | c4[I6 + 81 | 0] << 8 | c4[I6 + 82 | 0] << 16 | c4[I6 + 83 | 0] << 24, kA2 = D5 = c4[I6 + 84 | 0] | c4[I6 + 85 | 0] << 8 | c4[I6 + 86 | 0] << 16 | c4[I6 + 87 | 0] << 24, m3 = D5, QA2 = c4[A7 + 16 | 0] | c4[A7 + 17 | 0] << 8 | c4[A7 + 18 | 0] << 16 | c4[A7 + 19 | 0] << 24, D5 = (cA2 = c4[A7 + 52 | 0] | c4[A7 + 53 | 0] << 8 | c4[A7 + 54 | 0] << 16 | c4[A7 + 55 | 0] << 24) + e4 | 0, W3 = (oA2 = c4[A7 + 48 | 0] | c4[A7 + 49 | 0] << 8 | c4[A7 + 50 | 0] << 16 | c4[A7 + 51 | 0] << 24) + (hA2 = c4[I6 + 32 | 0] | c4[I6 + 33 | 0] << 8 | c4[I6 + 34 | 0] << 16 | c4[I6 + 35 | 0] << 24) | 0, D5 = (c4[A7 + 20 | 0] | c4[A7 + 21 | 0] << 8 | c4[A7 + 22 | 0] << 16 | c4[A7 + 23 | 0] << 24) + (oA2 >>> 0 > W3 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (QA2 = (o5 = W3) >>> 0 > (W3 = W3 + QA2 | 0) >>> 0 ? D5 + 1 | 0 : D5) + fA2 | 0, iA2 = yA2 = W3 + FA2 | 0, yA2 = D5 = yA2 >>> 0 < W3 >>> 0 ? D5 + 1 | 0 : D5, W3 = xA(W3 ^ (c4[A7 + 80 | 0] | c4[A7 + 81 | 0] << 8 | c4[A7 + 82 | 0] << 16 | c4[A7 + 83 | 0] << 24) ^ -79577749, QA2 ^ (c4[A7 + 84 | 0] | c4[A7 + 85 | 0] << 8 | c4[A7 + 86 | 0] << 16 | c4[A7 + 87 | 0] << 24) ^ 528734635, 32), UA2 = D5 = n4, D5 = D5 + 1013904242 | 0, QA2 = W3, X3 = D5 = (W3 = W3 - 23791573 | 0) >>> 0 < 4271175723 ? D5 + 1 | 0 : D5, cA2 = xA(W3 ^ oA2, D5 ^ cA2, 40), D5 = (D5 = yA2) + (yA2 = n4) | 0, oA2 = xA(QA2 ^ (a5 = oA2 = cA2 + iA2 | 0), UA2 ^ (k5 = a5 >>> 0 < cA2 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = X3 + (O3 = n4) | 0, U5 = D5 = (oA2 = W3 + (M5 = oA2) | 0) >>> 0 < W3 >>> 0 ? D5 + 1 | 0 : D5, oA2 = D5 = xA(cA2 ^ (t5 = oA2), yA2 ^ D5, 1), X3 = W3 = n4, yA2 = c4[I6 + 24 | 0] | c4[I6 + 25 | 0] << 8 | c4[I6 + 26 | 0] << 16 | c4[I6 + 27 | 0] << 24, UA2 = D5 = c4[I6 + 28 | 0] | c4[I6 + 29 | 0] << 8 | c4[I6 + 30 | 0] << 16 | c4[I6 + 31 | 0] << 24, wA2 = c4[A7 + 8 | 0] | c4[A7 + 9 | 0] << 8 | c4[A7 + 10 | 0] << 16 | c4[A7 + 11 | 0] << 24, W3 = (cA2 = c4[I6 + 16 | 0] | c4[I6 + 17 | 0] << 8 | c4[I6 + 18 | 0] << 16 | c4[I6 + 19 | 0] << 24) + (QA2 = c4[A7 + 40 | 0] | c4[A7 + 41 | 0] << 8 | c4[A7 + 42 | 0] << 16 | c4[A7 + 43 | 0] << 24) | 0, D5 = (YA2 = c4[I6 + 20 | 0] | c4[I6 + 21 | 0] << 8 | c4[I6 + 22 | 0] << 16 | c4[I6 + 23 | 0] << 24) + (GA2 = c4[A7 + 44 | 0] | c4[A7 + 45 | 0] << 8 | c4[A7 + 46 | 0] << 16 | c4[A7 + 47 | 0] << 24) | 0, D5 = (c4[A7 + 12 | 0] | c4[A7 + 13 | 0] << 8 | c4[A7 + 14 | 0] << 16 | c4[A7 + 15 | 0] << 24) + (W3 >>> 0 < QA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = UA2 + (iA2 = (o5 = W3) >>> 0 > (W3 = W3 + wA2 | 0) >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (wA2 = W3 + yA2 | 0) >>> 0 < W3 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(W3 ^ (c4[A7 + 72 | 0] | c4[A7 + 73 | 0] << 8 | c4[A7 + 74 | 0] << 16 | c4[A7 + 75 | 0] << 24) ^ 725511199, iA2 ^ (c4[A7 + 76 | 0] | c4[A7 + 77 | 0] << 8 | c4[A7 + 78 | 0] << 16 | c4[A7 + 79 | 0] << 24) ^ -1694144372, 32), y5 = xA(QA2 ^ (h5 = o5 - 2067093701 | 0), GA2 ^ (u4 = (d5 = W3 = n4) - ((o5 >>> 0 < 2067093701) + 1150833018 | 0) | 0), 40), D5 = (q3 = n4) + D5 | 0, D5 = (L5 = (J5 = W3 = y5 + wA2 | 0) >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5) + X3 | 0, D5 = (J5 >>> 0 > (W3 = J5 + oA2 | 0) >>> 0 ? D5 + 1 | 0 : D5) + m3 | 0, D5 = (QA2 = (w5 = W3) >>> 0 > (W3 = W3 + EA2 | 0) >>> 0 ? D5 + 1 | 0 : D5) + V3 | 0, b4 = V3 = W3 + g6 | 0, S4 = D5 = V3 >>> 0 < W3 >>> 0 ? D5 + 1 | 0 : D5, r5 = oA2, nA2 = X3, X3 = W3, iA2 = QA2, oA2 = c4[I6 + 8 | 0] | c4[I6 + 9 | 0] << 8 | c4[I6 + 10 | 0] << 16 | c4[I6 + 11 | 0] << 24, W3 = D5 = c4[I6 + 12 | 0] | c4[I6 + 13 | 0] << 8 | c4[I6 + 14 | 0] << 16 | c4[I6 + 15 | 0] << 24, GA2 = D5 = c4[0 | A7] | c4[A7 + 1 | 0] << 8 | c4[A7 + 2 | 0] << 16 | c4[A7 + 3 | 0] << 24, i2 = QA2 = c4[A7 + 4 | 0] | c4[A7 + 5 | 0] << 8 | c4[A7 + 6 | 0] << 16 | c4[A7 + 7 | 0] << 24, m3 = D5, D5 = (JA2 = c4[I6 + 4 | 0] | c4[I6 + 5 | 0] << 8 | c4[I6 + 6 | 0] << 16 | c4[I6 + 7 | 0] << 24) + (F5 = c4[A7 + 36 | 0] | c4[A7 + 37 | 0] << 8 | c4[A7 + 38 | 0] << 16 | c4[A7 + 39 | 0] << 24) | 0, D5 = i2 + ((V3 = c4[A7 + 32 | 0] | c4[A7 + 33 | 0] << 8 | c4[A7 + 34 | 0] << 16 | c4[A7 + 35 | 0] << 24) >>> 0 > (w5 = V3 + (QA2 = c4[0 | I6] | c4[I6 + 1 | 0] << 8 | c4[I6 + 2 | 0] << 16 | c4[I6 + 3 | 0] << 24) | 0) >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (wA2 = (m3 = w5 + m3 | 0) >>> 0 < w5 >>> 0 ? D5 + 1 | 0 : D5) + W3 | 0, MA2 = w5 = m3 + oA2 | 0, w5 = D5 = w5 >>> 0 < m3 >>> 0 ? D5 + 1 | 0 : D5, f5 = V3, V3 = xA(m3 ^ (c4[0 | (D5 = A7 - -64 | 0)] | c4[D5 + 1 | 0] << 8 | c4[D5 + 2 | 0] << 16 | c4[D5 + 3 | 0] << 24) ^ -1377402159, wA2 ^ (c4[D5 + 4 | 0] | c4[D5 + 5 | 0] << 8 | c4[D5 + 6 | 0] << 16 | c4[D5 + 7 | 0] << 24) ^ 1359893119, 32), wA2 = D5 = n4, D5 = D5 + 1779033703 | 0, m3 = V3, H5 = D5 = (V3 = V3 - 205731576 | 0) >>> 0 < 4089235720 ? D5 + 1 | 0 : D5, F5 = xA(f5 ^ (K5 = V3), D5 ^ F5, 40), D5 = (R4 = n4) + w5 | 0, f5 = xA(m3 ^ (w5 = V3 = F5 + MA2 | 0), wA2 ^ (Y5 = F5 >>> 0 > w5 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = xA(f5 ^ X3, (Z3 = n4) ^ iA2, 32), _3 = V3 = n4, v5 = D5, B5 = D5 = c4[I6 + 60 | 0] | c4[I6 + 61 | 0] << 8 | c4[I6 + 62 | 0] << 16 | c4[I6 + 63 | 0] << 24, wA2 = MA2 = c4[I6 + 56 | 0] | c4[I6 + 57 | 0] << 8 | c4[I6 + 58 | 0] << 16 | c4[I6 + 59 | 0] << 24, G5 = c4[A7 + 24 | 0] | c4[A7 + 25 | 0] << 8 | c4[A7 + 26 | 0] << 16 | c4[A7 + 27 | 0] << 24, V3 = (iA2 = c4[I6 + 48 | 0] | c4[I6 + 49 | 0] << 8 | c4[I6 + 50 | 0] << 16 | c4[I6 + 51 | 0] << 24) + (m3 = c4[A7 + 56 | 0] | c4[A7 + 57 | 0] << 8 | c4[A7 + 58 | 0] << 16 | c4[A7 + 59 | 0] << 24) | 0, D5 = (KA2 = c4[I6 + 52 | 0] | c4[I6 + 53 | 0] << 8 | c4[I6 + 54 | 0] << 16 | c4[I6 + 55 | 0] << 24) + (P5 = c4[A7 + 60 | 0] | c4[A7 + 61 | 0] << 8 | c4[A7 + 62 | 0] << 16 | c4[A7 + 63 | 0] << 24) | 0, D5 = (c4[A7 + 28 | 0] | c4[A7 + 29 | 0] << 8 | c4[A7 + 30 | 0] << 16 | c4[A7 + 31 | 0] << 24) + (V3 >>> 0 < m3 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = B5 + (X3 = (N5 = V3) >>> 0 > (V3 = G5 + V3 | 0) >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (G5 = V3 + wA2 | 0) >>> 0 < V3 >>> 0 ? D5 + 1 | 0 : D5, X3 = xA(V3 ^ (c4[A7 + 88 | 0] | c4[A7 + 89 | 0] << 8 | c4[A7 + 90 | 0] << 16 | c4[A7 + 91 | 0] << 24) ^ 327033209, X3 ^ (c4[A7 + 92 | 0] | c4[A7 + 93 | 0] << 8 | c4[A7 + 94 | 0] << 16 | c4[A7 + 95 | 0] << 24) ^ 1541459225, 32), m3 = xA(m3 ^ (wA2 = X3 + 1595750129 | 0), (N5 = P5) ^ (P5 = (s5 = V3 = n4) - ((X3 >>> 0 < 2699217167) + 1521486533 | 0) | 0), 40), D5 = (IA2 = n4) + D5 | 0, V3 = xA((G5 = V3 = m3 + G5 | 0) ^ X3, s5 ^ (N5 = G5 >>> 0 < m3 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = P5 + ($3 = n4) | 0, p5 = D5 = (V3 = wA2 + (P5 = V3) | 0) >>> 0 < wA2 >>> 0 ? D5 + 1 | 0 : D5, D5 = _3 + D5 | 0, l3 = r5 ^ (X3 = v5 + (s5 = V3) | 0), r5 = D5 = X3 >>> 0 < s5 >>> 0 ? D5 + 1 | 0 : D5, wA2 = xA(l3, D5 ^ nA2, 40), D5 = (nA2 = n4) + S4 | 0, V3 = xA(b4 = v5 ^ (S4 = V3 = wA2 + b4 | 0), _3 ^ (v5 = S4 >>> 0 < wA2 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = r5 + (CA2 = n4) | 0, _3 = D5 = (r5 = X3 + (b4 = V3) | 0) >>> 0 < X3 >>> 0 ? D5 + 1 | 0 : D5, V3 = (z3 = xA(r5 ^ wA2, nA2 ^ D5, 1)) + (X3 = c4[I6 + 72 | 0] | c4[I6 + 73 | 0] << 8 | c4[I6 + 74 | 0] << 16 | c4[I6 + 75 | 0] << 24) | 0, D5 = (aA2 = n4) + (nA2 = c4[I6 + 76 | 0] | c4[I6 + 77 | 0] << 8 | c4[I6 + 78 | 0] << 16 | c4[I6 + 79 | 0] << 24) | 0, tA2 = V3, x3 = V3 >>> 0 < X3 >>> 0 ? D5 + 1 | 0 : D5, T3 = SA2, V3 = c4[I6 + 96 | 0] | c4[I6 + 97 | 0] << 8 | c4[I6 + 98 | 0] << 16 | c4[I6 + 99 | 0] << 24, wA2 = D5 = c4[I6 + 100 | 0] | c4[I6 + 101 | 0] << 8 | c4[I6 + 102 | 0] << 16 | c4[I6 + 103 | 0] << 24, m3 = (D5 = a5) + (a5 = xA(s5 ^ m3, p5 ^ IA2, 1)) | 0, D5 = (s5 = n4) + k5 | 0, D5 = (a5 >>> 0 > m3 >>> 0 ? D5 + 1 | 0 : D5) + wA2 | 0, D5 = (k5 = (k5 = m3) >>> 0 > (m3 = V3 + m3 | 0) >>> 0 ? D5 + 1 | 0 : D5) + T3 | 0, l3 = p5 = m3 + gA2 | 0, p5 = D5 = p5 >>> 0 < m3 >>> 0 ? D5 + 1 | 0 : D5, J5 = xA(o5 ^ J5, L5 ^ d5, 48), L5 = D5 = xA(J5 ^ m3, (d5 = n4) ^ k5, 32), D5 = H5 + Z3 | 0, D5 = (IA2 = m3 = n4) + (K5 = (m3 = f5 + K5 | 0) >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5) | 0, H5 = D5 = (k5 = m3) >>> 0 > (f5 = k5 + L5 | 0) >>> 0 ? D5 + 1 | 0 : D5, a5 = xA(f5 ^ a5, s5 ^ D5, 40), D5 = (Z3 = n4) + p5 | 0, D5 = (s5 = a5 >>> 0 > (p5 = m3 = a5 + l3 | 0) >>> 0 ? D5 + 1 | 0 : D5) + x3 | 0, D5 = (o5 = p5 >>> 0 > (m3 = p5 + tA2 | 0) >>> 0 ? D5 + 1 | 0 : D5) + rA2 | 0, tA2 = x3 = m3 + DA2 | 0, x3 = D5 = x3 >>> 0 < m3 >>> 0 ? D5 + 1 | 0 : D5, l3 = m3, T3 = o5, m3 = c4[I6 + 116 | 0] | c4[I6 + 117 | 0] << 8 | c4[I6 + 118 | 0] << 16 | c4[I6 + 119 | 0] << 24, I6 = c4[I6 + 112 | 0] | c4[I6 + 113 | 0] << 8 | c4[I6 + 114 | 0] << 16 | c4[I6 + 115 | 0] << 24, F5 = xA(F5 ^ k5, K5 ^ R4, 1), D5 = (R4 = n4) + N5 | 0, D5 = ((o5 = F5 + G5 | 0) >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5) + m3 | 0, D5 = (k5 = (K5 = o5) >>> 0 > (o5 = I6 + o5 | 0) >>> 0 ? D5 + 1 | 0 : D5) + rA2 | 0, NA2 = K5 = o5 + DA2 | 0, K5 = D5 = K5 >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, D5 = xA(o5 ^ M5, k5 ^ O3, 32), AA2 = o5 = n4, M5 = D5, k5 = o5, D5 = d5 + u4 | 0, J5 = o5 = h5 + J5 | 0, G5 = D5 = o5 >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5, D5 = D5 + k5 | 0, N5 = o5 = o5 + M5 | 0, O3 = D5 = J5 >>> 0 > o5 >>> 0 ? D5 + 1 | 0 : D5, k5 = xA(o5 ^ F5, R4 ^ D5, 40), D5 = (R4 = n4) + K5 | 0, M5 = xA((o5 = k5 + NA2 | 0) ^ M5, AA2 ^ (h5 = o5 >>> 0 < k5 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = xA(M5 ^ l3, (NA2 = n4) ^ T3, 32), AA2 = F5 = n4, K5 = D5, l3 = F5, y5 = xA(y5 ^ J5, G5 ^ q3, 1), D5 = Y5 + (J5 = n4) | 0, D5 = ((F5 = w5) >>> 0 > (w5 = w5 + y5 | 0) >>> 0 ? D5 + 1 | 0 : D5) + BA2 | 0, D5 = (w5 = (F5 = w5 + j3 | 0) >>> 0 < w5 >>> 0 ? D5 + 1 | 0 : D5) + nA2 | 0, T3 = Y5 = F5 + X3 | 0, Y5 = D5 = Y5 >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5, G5 = y5, F5 = xA(F5 ^ P5, w5 ^ $3, 32), D5 = (P5 = n4) + U5 | 0, t5 = xA(G5 ^ (w5 = y5 = F5 + t5 | 0), (U5 = F5 >>> 0 > w5 >>> 0 ? D5 + 1 | 0 : D5) ^ J5, 40), D5 = ($3 = n4) + Y5 | 0, J5 = y5 = t5 + T3 | 0, y5 = xA(F5 ^ y5, P5 ^ (Y5 = y5 >>> 0 < t5 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = U5 + (E5 = n4) | 0, U5 = y5, P5 = D5 = (y5 = w5 + y5 | 0) >>> 0 < w5 >>> 0 ? D5 + 1 | 0 : D5, D5 = D5 + l3 | 0, D5 = (G5 = y5) >>> 0 > (y5 = y5 + K5 | 0) >>> 0 ? D5 + 1 | 0 : D5, l3 = y5, y5 ^= z3, z3 = D5, F5 = xA(y5, aA2 ^ D5, 40), D5 = (aA2 = n4) + x3 | 0, x3 = y5 = F5 + tA2 | 0, D5 = Q5 + (T3 = F5 >>> 0 > y5 >>> 0 ? D5 + 1 | 0 : D5) | 0, tA2 = y5 = y5 + g6 | 0, d5 = D5 = y5 >>> 0 < g6 >>> 0 ? D5 + 1 | 0 : D5, y5 = o5, u4 = gA2, q3 = SA2, o5 = xA(L5 ^ p5, s5 ^ IA2, 48), D5 = H5 + (IA2 = n4) | 0, L5 = o5, H5 = D5 = (w5 = f5 + o5 | 0) >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(w5 ^ a5, Z3 ^ D5, 1), D5 = (f5 = n4) + q3 | 0, D5 = ((a5 = o5 + u4 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5) + h5 | 0, D5 = KA2 + (y5 = (h5 = y5 + a5 | 0) >>> 0 < a5 >>> 0 ? D5 + 1 | 0 : D5) | 0, p5 = a5 = h5 + iA2 | 0, a5 = D5 = a5 >>> 0 < iA2 >>> 0 ? D5 + 1 | 0 : D5, h5 = xA(h5 ^ U5, y5 ^ E5, 32), D5 = _3 + (s5 = n4) | 0, U5 = h5, r5 = D5 = (h5 = r5 + h5 | 0) >>> 0 < r5 >>> 0 ? D5 + 1 | 0 : D5, y5 = xA(o5 ^ h5, D5 ^ f5, 40), D5 = (D5 = a5) + (a5 = n4) | 0, f5 = o5 = y5 + p5 | 0, o5 = xA(o5 ^ U5, s5 ^ (p5 = o5 >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = r5 + (Z3 = n4) | 0, s5 = o5, _3 = D5 = (r5 = h5 + o5 | 0) >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(y5 ^ r5, a5 ^ D5, 1), D5 = (a5 = n4) + d5 | 0, D5 = B5 + (y5 = (h5 = o5 + tA2 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5) | 0, tA2 = U5 = h5 + MA2 | 0, U5 = D5 = U5 >>> 0 < MA2 >>> 0 ? D5 + 1 | 0 : D5, d5 = o5, u4 = a5, D5 = O3 + NA2 | 0, D5 = (o5 = M5 + N5 | 0) >>> 0 < M5 >>> 0 ? D5 + 1 | 0 : D5, M5 = o5, N5 = D5, D5 = xA(o5 ^ k5, R4 ^ D5, 1), k5 = a5 = n4, o5 = D5, D5 = Y5 + m3 | 0, D5 = ((J5 = I6 + J5 | 0) >>> 0 < I6 >>> 0 ? D5 + 1 | 0 : D5) + a5 | 0, D5 = kA2 + (J5 = (a5 = o5 + J5 | 0) >>> 0 < J5 >>> 0 ? D5 + 1 | 0 : D5) | 0, O3 = Y5 = a5 + EA2 | 0, Y5 = D5 = Y5 >>> 0 < EA2 >>> 0 ? D5 + 1 | 0 : D5, a5 = xA(a5 ^ b4, J5 ^ CA2, 32), D5 = H5 + (b4 = n4) | 0, J5 = a5, H5 = D5 = (H5 = w5) >>> 0 > (w5 = w5 + a5 | 0) >>> 0 ? D5 + 1 | 0 : D5, a5 = xA(o5 ^ w5, D5 ^ k5, 40), D5 = (R4 = n4) + Y5 | 0, k5 = o5 = a5 + O3 | 0, o5 = xA(Y5 = o5 ^ J5, b4 ^ (J5 = o5 >>> 0 < a5 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = H5 + (CA2 = n4) | 0, H5 = o5, Y5 = o5 = w5 + o5 | 0, b4 = D5 = o5 >>> 0 < w5 >>> 0 ? D5 + 1 | 0 : D5, O3 = h5, q3 = y5, o5 = xA(t5 ^ G5, P5 ^ $3, 1), D5 = (w5 = n4) + e4 | 0, D5 = v5 + ((h5 = o5 + hA2 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = BA2 + (y5 = (h5 = h5 + S4 | 0) >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5) | 0, v5 = S4 = h5 + j3 | 0, S4 = D5 = S4 >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5, t5 = o5, o5 = (h5 = xA(h5 ^ L5, y5 ^ IA2, 32)) + M5 | 0, D5 = (M5 = n4) + N5 | 0, y5 = o5, w5 = xA(o5 ^ t5, (L5 = o5 >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5) ^ w5, 40), D5 = (IA2 = n4) + S4 | 0, S4 = o5 = w5 + v5 | 0, G5 = xA(o5 ^ h5, M5 ^ (v5 = o5 >>> 0 < w5 >>> 0 ? D5 + 1 | 0 : D5), 48), h5 = xA(G5 ^ O3, (D5 = q3) ^ (q3 = n4), 32), D5 = (O3 = n4) + b4 | 0, M5 = o5 = h5 + Y5 | 0, t5 = xA(o5 ^ d5, (N5 = o5 >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5) ^ u4, 40), D5 = (d5 = n4) + U5 | 0, U5 = o5 = t5 + tA2 | 0, o5 = xA(o5 ^ h5, O3 ^ (P5 = o5 >>> 0 < t5 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = N5 + ($3 = n4) | 0, N5 = o5, O3 = D5 = (h5 = M5) >>> 0 > (M5 = M5 + o5 | 0) >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(M5 ^ t5, d5 ^ D5, 1), D5 = rA2 + (tA2 = n4) | 0, d5 = o5, NA2 = o5 = DA2 + o5 | 0, t5 = D5 = o5 >>> 0 < DA2 >>> 0 ? D5 + 1 | 0 : D5, h5 = FA2, o5 = xA(a5 ^ Y5, R4 ^ b4, 1), D5 = p5 + (a5 = n4) | 0, D5 = ((Y5 = f5) >>> 0 > (f5 = o5 + f5 | 0) >>> 0 ? D5 + 1 | 0 : D5) + fA2 | 0, D5 = (Y5 = (h5 = h5 + f5 | 0) >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5) + UA2 | 0, u4 = f5 = h5 + yA2 | 0, p5 = D5 = f5 >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5, b4 = o5, f5 = xA(K5 ^ x3, T3 ^ AA2, 48), D5 = xA(f5 ^ h5, (R4 = n4) ^ Y5, 32), AA2 = o5 = n4, K5 = D5, h5 = o5, D5 = L5 + q3 | 0, D5 = (o5 = y5 + G5 | 0) >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5, y5 = o5, L5 = D5, D5 = D5 + h5 | 0, Y5 = o5 = o5 + K5 | 0, G5 = D5 = y5 >>> 0 > o5 >>> 0 ? D5 + 1 | 0 : D5, h5 = xA(o5 ^ b4, D5 ^ a5, 40), D5 = (D5 = p5) + (p5 = n4) | 0, b4 = o5 = h5 + u4 | 0, x3 = D5 = o5 >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5, D5 = D5 + t5 | 0, T3 = D5 = (a5 = o5 + NA2 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, t5 = D5, o5 = xA(w5 ^ y5, L5 ^ IA2, 1), D5 = W3 + (w5 = n4) | 0, D5 = J5 + ((y5 = o5 + oA2 | 0) >>> 0 < oA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = wA2 + (k5 = (y5 = y5 + k5 | 0) >>> 0 < k5 >>> 0 ? D5 + 1 | 0 : D5) | 0, u4 = J5 = y5 + V3 | 0, J5 = D5 = J5 >>> 0 < V3 >>> 0 ? D5 + 1 | 0 : D5, L5 = o5, D5 = xA(y5 ^ s5, k5 ^ Z3, 32), q3 = o5 = n4, y5 = D5, k5 = o5, D5 = R4 + z3 | 0, s5 = o5 = f5 + l3 | 0, z3 = D5 = o5 >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5, D5 = D5 + k5 | 0, D5 = (f5 = o5 + y5 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, o5 = f5 ^ L5, L5 = D5, k5 = xA(o5, D5 ^ w5, 40), D5 = (Z3 = n4) + J5 | 0, w5 = o5 = k5 + u4 | 0, l3 = xA(o5 ^ y5, q3 ^ (J5 = o5 >>> 0 < k5 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = xA(l3 ^ a5, (IA2 = n4) ^ t5, 32), NA2 = o5 = n4, u4 = D5, t5 = o5, o5 = xA(F5 ^ s5, z3 ^ aA2, 1), D5 = v5 + (F5 = n4) | 0, D5 = JA2 + ((y5 = o5 + S4 | 0) >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (S4 = (y5 = y5 + QA2 | 0) >>> 0 < QA2 >>> 0 ? D5 + 1 | 0 : D5) + YA2 | 0, s5 = v5 = y5 + cA2 | 0, v5 = D5 = v5 >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5, y5 = xA(y5 ^ H5, S4 ^ CA2, 32), D5 = _3 + (z3 = n4) | 0, H5 = y5, S4 = F5, F5 = D5 = (y5 = r5 + y5 | 0) >>> 0 < r5 >>> 0 ? D5 + 1 | 0 : D5, S4 = xA(o5 ^ y5, S4 ^ D5, 40), D5 = (CA2 = n4) + v5 | 0, r5 = o5 = S4 + s5 | 0, o5 = xA(s5 = o5 ^ H5, z3 ^ (H5 = o5 >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = F5 + (R4 = n4) | 0, F5 = o5, v5 = o5 = y5 + o5 | 0, s5 = D5 = o5 >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5, D5 = D5 + t5 | 0, _3 = D5 = (t5 = o5 + u4 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, y5 = xA(t5 ^ d5, tA2 ^ D5, 40), D5 = T3 + (z3 = n4) | 0, D5 = ((o5 = y5 + a5 | 0) >>> 0 < a5 >>> 0 ? D5 + 1 | 0 : D5) + SA2 | 0, a5 = o5, T3 = o5 = o5 + gA2 | 0, d5 = D5 = a5 >>> 0 > o5 >>> 0 ? D5 + 1 | 0 : D5, q3 = BA2, a5 = xA(K5 ^ b4, x3 ^ AA2, 48), D5 = (aA2 = n4) + G5 | 0, K5 = o5 = a5 + Y5 | 0, D5 = xA(o5 ^ h5, (Y5 = o5 >>> 0 < a5 >>> 0 ? D5 + 1 | 0 : D5) ^ p5, 1), p5 = h5 = n4, o5 = D5, D5 = J5 + Q5 | 0, D5 = ((w5 = w5 + g6 | 0) >>> 0 < g6 >>> 0 ? D5 + 1 | 0 : D5) + h5 | 0, D5 = (w5 = (h5 = o5 + w5 | 0) >>> 0 < w5 >>> 0 ? D5 + 1 | 0 : D5) + q3 | 0, G5 = J5 = h5 + j3 | 0, J5 = D5 = J5 >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5, h5 = xA(h5 ^ F5, w5 ^ R4, 32), D5 = O3 + (b4 = n4) | 0, M5 = D5 = (F5 = h5 + M5 | 0) >>> 0 < M5 >>> 0 ? D5 + 1 | 0 : D5, w5 = xA(o5 ^ F5, D5 ^ p5, 40), D5 = (x3 = n4) + J5 | 0, J5 = o5 = w5 + G5 | 0, h5 = xA(o5 ^ h5, b4 ^ (p5 = o5 >>> 0 < w5 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = M5 + (G5 = n4) | 0, b4 = D5 = (M5 = h5 + F5 | 0) >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(w5 ^ M5, x3 ^ D5, 1), D5 = (x3 = n4) + d5 | 0, D5 = nA2 + ((F5 = o5 + T3 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (w5 = (F5 = F5 + X3 | 0) >>> 0 < X3 >>> 0 ? D5 + 1 | 0 : D5) + e4 | 0, tA2 = e4 = F5 + hA2 | 0, e4 = D5 = e4 >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5, O3 = o5, q3 = F5, R4 = w5, F5 = FA2, o5 = xA(S4 ^ v5, s5 ^ CA2, 1), D5 = P5 + (S4 = n4) | 0, D5 = ((w5 = U5) >>> 0 > (U5 = o5 + U5 | 0) >>> 0 ? D5 + 1 | 0 : D5) + fA2 | 0, D5 = YA2 + (w5 = (F5 = F5 + U5 | 0) >>> 0 < U5 >>> 0 ? D5 + 1 | 0 : D5) | 0, P5 = U5 = F5 + cA2 | 0, v5 = D5 = U5 >>> 0 < cA2 >>> 0 ? D5 + 1 | 0 : D5, U5 = o5, w5 = D5 = xA(F5 ^ a5, w5 ^ aA2, 32), D5 = L5 + IA2 | 0, D5 = (s5 = o5 = n4) + (f5 = (o5 = f5 + l3 | 0) >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5) | 0, L5 = D5 = (a5 = o5 + w5 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, U5 = xA(a5 ^ U5, D5 ^ S4, 40), D5 = (IA2 = n4) + v5 | 0, v5 = xA(P5 = (F5 = U5 + P5 | 0) ^ w5, s5 ^ (w5 = F5 >>> 0 < U5 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = xA(v5 ^ q3, (CA2 = n4) ^ R4, 32), aA2 = S4 = n4, P5 = D5, s5 = S4, o5 = xA(o5 ^ k5, f5 ^ Z3, 1), D5 = wA2 + (S4 = n4) | 0, D5 = H5 + ((f5 = o5 + V3 | 0) >>> 0 < V3 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = JA2 + (r5 = (f5 = f5 + r5 | 0) >>> 0 < r5 >>> 0 ? D5 + 1 | 0 : D5) | 0, q3 = k5 = f5 + QA2 | 0, k5 = D5 = k5 >>> 0 < QA2 >>> 0 ? D5 + 1 | 0 : D5, H5 = o5, l3 = S4, f5 = xA(f5 ^ N5, r5 ^ $3, 32), D5 = (N5 = n4) + Y5 | 0, S4 = o5 = f5 + K5 | 0, r5 = xA(o5 ^ H5, (K5 = o5 >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5) ^ l3, 40), D5 = (Z3 = n4) + k5 | 0, H5 = o5 = r5 + q3 | 0, o5 = xA(o5 ^ f5, N5 ^ (Y5 = o5 >>> 0 < r5 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = K5 + (q3 = n4) | 0, k5 = o5, K5 = o5 = S4 + o5 | 0, N5 = D5 = o5 >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5, D5 = D5 + s5 | 0, s5 = o5 = o5 + P5 | 0, f5 = x3, x3 = D5 = K5 >>> 0 > o5 >>> 0 ? D5 + 1 | 0 : D5, f5 = xA(o5 ^ O3, f5 ^ D5, 40), D5 = (D5 = e4) + (e4 = n4) | 0, l3 = o5 = f5 + tA2 | 0, O3 = D5 = o5 >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5, S4 = w5, o5 = xA(u4 ^ T3, d5 ^ NA2, 48), D5 = _3 + ($3 = n4) | 0, _3 = o5, w5 = (o5 = t5 + o5 | 0) ^ y5, y5 = D5 = o5 >>> 0 < t5 >>> 0 ? D5 + 1 | 0 : D5, w5 = xA(w5, D5 ^ z3, 1), D5 = (z3 = n4) + S4 | 0, D5 = B5 + ((F5 = w5 + F5 | 0) >>> 0 < w5 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (S4 = (F5 = F5 + MA2 | 0) >>> 0 < MA2 >>> 0 ? D5 + 1 | 0 : D5) + W3 | 0, T3 = t5 = F5 + oA2 | 0, t5 = D5 = t5 >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5, F5 = xA(F5 ^ k5, S4 ^ q3, 32), D5 = b4 + (d5 = n4) | 0, b4 = F5, M5 = D5 = (S4 = M5 + F5 | 0) >>> 0 < M5 >>> 0 ? D5 + 1 | 0 : D5, w5 = xA(w5 ^ S4, z3 ^ D5, 40), D5 = (D5 = t5) + (t5 = n4) | 0, k5 = F5 = w5 + T3 | 0, F5 = xA(u4 = F5 ^ b4, d5 ^ (b4 = F5 >>> 0 < w5 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = M5 + (tA2 = n4) | 0, z3 = F5, T3 = D5 = (M5 = S4 + F5 | 0) >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5, F5 = xA(w5 ^ M5, t5 ^ D5, 1), D5 = (t5 = n4) + O3 | 0, D5 = Q5 + ((w5 = F5 + l3 | 0) >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = m3 + (S4 = (w5 = w5 + g6 | 0) >>> 0 < g6 >>> 0 ? D5 + 1 | 0 : D5) | 0, NA2 = d5 = I6 + w5 | 0, d5 = D5 = d5 >>> 0 < I6 >>> 0 ? D5 + 1 | 0 : D5, u4 = F5, q3 = t5, t5 = w5, R4 = S4, F5 = xA(r5 ^ K5, N5 ^ Z3, 1), D5 = (S4 = n4) + p5 | 0, D5 = kA2 + ((w5 = F5 + J5 | 0) >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (r5 = (w5 = w5 + EA2 | 0) >>> 0 < EA2 >>> 0 ? D5 + 1 | 0 : D5) + m3 | 0, p5 = J5 = I6 + w5 | 0, J5 = D5 = J5 >>> 0 < w5 >>> 0 ? D5 + 1 | 0 : D5, K5 = F5, w5 = D5 = xA(w5 ^ _3, r5 ^ $3, 32), r5 = F5 = n4, D5 = L5 + CA2 | 0, L5 = D5 = (F5 = a5 + v5 | 0) >>> 0 < a5 >>> 0 ? D5 + 1 | 0 : D5, D5 = D5 + r5 | 0, D5 = (a5 = F5) >>> 0 > (F5 = F5 + w5 | 0) >>> 0 ? D5 + 1 | 0 : D5, v5 = F5, F5 ^= K5, K5 = D5, S4 = xA(F5, D5 ^ S4, 40), D5 = (Z3 = n4) + J5 | 0, r5 = xA(J5 = (F5 = S4 + p5 | 0) ^ w5, r5 ^ (w5 = F5 >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = xA(r5 ^ t5, (D5 = R4) ^ (R4 = n4), 32), $3 = t5 = n4, J5 = D5, p5 = y5, y5 = h5, D5 = xA(a5 ^ U5, L5 ^ IA2, 1), N5 = h5 = n4, a5 = D5, D5 = Y5 + UA2 | 0, D5 = ((U5 = H5 + yA2 | 0) >>> 0 < yA2 >>> 0 ? D5 + 1 | 0 : D5) + h5 | 0, U5 = D5 = (h5 = a5 + U5 | 0) >>> 0 < U5 >>> 0 ? D5 + 1 | 0 : D5, y5 = xA(h5 ^ y5, D5 ^ G5, 32), D5 = (D5 = p5) + (p5 = n4) | 0, a5 = xA((o5 = y5 + o5 | 0) ^ a5, N5 ^ (L5 = o5 >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5), 40), D5 = U5 + (IA2 = n4) | 0, H5 = a5, D5 = KA2 + ((Y5 = h5) >>> 0 > (h5 = h5 + a5 | 0) >>> 0 ? D5 + 1 | 0 : D5) | 0, Y5 = D5 = (a5 = h5 + iA2 | 0) >>> 0 < iA2 >>> 0 ? D5 + 1 | 0 : D5, h5 = xA(y5 ^ a5, p5 ^ D5, 48), D5 = L5 + (CA2 = n4) | 0, G5 = o5, y5 = h5, L5 = o5 = o5 + h5 | 0, p5 = D5 = G5 >>> 0 > o5 >>> 0 ? D5 + 1 | 0 : D5, D5 = D5 + t5 | 0, G5 = D5 = (t5 = o5 + J5 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, o5 = (U5 = xA(t5 ^ u4, D5 ^ q3, 40)) + NA2 | 0, D5 = (NA2 = n4) + d5 | 0, N5 = o5, _3 = o5 >>> 0 < U5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(P5 ^ l3, O3 ^ aA2, 48), D5 = (P5 = n4) + x3 | 0, s5 = h5 = o5 + s5 | 0, u4 = e4, e4 = D5 = h5 >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, D5 = xA(h5 ^ f5, u4 ^ D5, 1), l3 = h5 = n4, f5 = D5, D5 = w5 + B5 | 0, D5 = ((F5 = F5 + MA2 | 0) >>> 0 < MA2 >>> 0 ? D5 + 1 | 0 : D5) + h5 | 0, D5 = nA2 + (F5 = (h5 = F5 + f5 | 0) >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5) | 0, O3 = w5 = h5 + X3 | 0, w5 = D5 = w5 >>> 0 < X3 >>> 0 ? D5 + 1 | 0 : D5, h5 = xA(h5 ^ y5, F5 ^ CA2, 32), D5 = T3 + (d5 = n4) | 0, x3 = h5, h5 = (y5 = M5 + h5 | 0) ^ f5, f5 = D5 = y5 >>> 0 < M5 >>> 0 ? D5 + 1 | 0 : D5, F5 = xA(h5, l3 ^ D5, 40), D5 = (D5 = w5) + (w5 = n4) | 0, l3 = h5 = F5 + O3 | 0, h5 = xA(M5 = h5 ^ x3, d5 ^ (x3 = h5 >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = f5 + (CA2 = n4) | 0, T3 = h5, y5 = D5 = (h5 = y5 + h5 | 0) >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5, F5 = xA(h5 ^ F5, w5 ^ D5, 1), D5 = (M5 = n4) + _3 | 0, D5 = rA2 + ((w5 = F5 + N5 | 0) >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (f5 = (w5 = w5 + DA2 | 0) >>> 0 < DA2 >>> 0 ? D5 + 1 | 0 : D5) + BA2 | 0, AA2 = O3 = w5 + j3 | 0, O3 = D5 = O3 >>> 0 < w5 >>> 0 ? D5 + 1 | 0 : D5, d5 = F5, u4 = w5, q3 = f5, F5 = xA(H5 ^ L5, p5 ^ IA2, 1), D5 = (p5 = n4) + SA2 | 0, D5 = b4 + (F5 >>> 0 > (w5 = F5 + gA2 | 0) >>> 0 ? D5 + 1 | 0 : D5) | 0, f5 = D5 = (w5 = w5 + k5 | 0) >>> 0 < k5 >>> 0 ? D5 + 1 | 0 : D5, D5 = xA(o5 ^ w5, D5 ^ P5, 32), P5 = o5 = n4, k5 = D5, D5 = K5 + R4 | 0, D5 = (o5 = r5 + v5 | 0) >>> 0 < r5 >>> 0 ? D5 + 1 | 0 : D5, r5 = o5, L5 = D5, D5 = P5 + D5 | 0, K5 = o5 = o5 + k5 | 0, H5 = D5 = r5 >>> 0 > o5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(o5 ^ F5, p5 ^ D5, 40), D5 = f5 + (R4 = n4) | 0, v5 = o5, D5 = wA2 + ((o5 = w5 + o5 | 0) >>> 0 < w5 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (o5 = o5 + V3 | 0) >>> 0 < V3 >>> 0 ? D5 + 1 | 0 : D5, p5 = o5, o5 ^= k5, k5 = D5, f5 = xA(o5, P5 ^ D5, 48), D5 = xA(f5 ^ u4, (D5 = q3) ^ (q3 = n4), 32), IA2 = o5 = n4, P5 = D5, b4 = o5, o5 = xA(S4 ^ r5, L5 ^ Z3, 1), D5 = UA2 + (w5 = n4) | 0, D5 = Y5 + ((F5 = o5 + yA2 | 0) >>> 0 < yA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (S4 = (F5 = F5 + a5 | 0) >>> 0 < a5 >>> 0 ? D5 + 1 | 0 : D5) + W3 | 0, Y5 = r5 = F5 + oA2 | 0, r5 = D5 = r5 >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5, a5 = o5, L5 = w5, o5 = (F5 = xA(F5 ^ z3, S4 ^ tA2, 32)) + s5 | 0, D5 = (s5 = n4) + e4 | 0, w5 = o5, S4 = xA(S4 = o5 ^ a5, (a5 = o5 >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5) ^ L5, 40), D5 = (Z3 = n4) + r5 | 0, r5 = o5 = S4 + Y5 | 0, F5 = xA(o5 ^ F5, s5 ^ (e4 = o5 >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = a5 + (L5 = n4) | 0, Y5 = o5 = F5 + w5 | 0, s5 = D5 = o5 >>> 0 < w5 >>> 0 ? D5 + 1 | 0 : D5, D5 = D5 + b4 | 0, b4 = D5 = (a5 = o5 + P5 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, w5 = xA(a5 ^ d5, D5 ^ M5, 40), D5 = (z3 = n4) + O3 | 0, O3 = o5 = w5 + AA2 | 0, d5 = D5 = o5 >>> 0 < w5 >>> 0 ? D5 + 1 | 0 : D5, o5 = h5, M5 = y5, y5 = F5, h5 = xA(J5 ^ N5, _3 ^ $3, 48), D5 = G5 + (AA2 = n4) | 0, J5 = h5, t5 = D5 = (F5 = t5 + h5 | 0) >>> 0 < t5 >>> 0 ? D5 + 1 | 0 : D5, D5 = xA(F5 ^ U5, NA2 ^ D5, 1), G5 = h5 = n4, U5 = D5, D5 = k5 + eA2 | 0, D5 = ((k5 = p5 + hA2 | 0) >>> 0 < hA2 >>> 0 ? D5 + 1 | 0 : D5) + h5 | 0, k5 = D5 = (h5 = k5 + U5 | 0) >>> 0 < k5 >>> 0 ? D5 + 1 | 0 : D5, y5 = xA(h5 ^ y5, D5 ^ L5, 32), D5 = (p5 = n4) + M5 | 0, U5 = xA((o5 = y5 + o5 | 0) ^ U5, G5 ^ (M5 = o5 >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5), 40), D5 = k5 + (N5 = n4) | 0, D5 = JA2 + ((k5 = h5) >>> 0 > (h5 = h5 + U5 | 0) >>> 0 ? D5 + 1 | 0 : D5) | 0, L5 = D5 = (k5 = h5 + QA2 | 0) >>> 0 < QA2 >>> 0 ? D5 + 1 | 0 : D5, h5 = xA(y5 ^ k5, p5 ^ D5, 48), D5 = M5 + ($3 = n4) | 0, p5 = h5, G5 = D5 = (M5 = o5 + h5 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(M5 ^ U5, N5 ^ D5, 1), D5 = (U5 = n4) + d5 | 0, D5 = kA2 + ((h5 = o5 + O3 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = rA2 + (y5 = (h5 = h5 + EA2 | 0) >>> 0 < EA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, aA2 = N5 = h5 + DA2 | 0, N5 = D5 = N5 >>> 0 < DA2 >>> 0 ? D5 + 1 | 0 : D5, _3 = o5, u4 = h5, o5 = xA(S4 ^ Y5, s5 ^ Z3, 1), D5 = (S4 = n4) + x3 | 0, D5 = YA2 + ((h5 = o5 + l3 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = KA2 + (Y5 = (h5 = h5 + cA2 | 0) >>> 0 < cA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, l3 = s5 = h5 + iA2 | 0, s5 = D5 = s5 >>> 0 < iA2 >>> 0 ? D5 + 1 | 0 : D5, x3 = o5, D5 = xA(h5 ^ J5, Y5 ^ AA2, 32), AA2 = o5 = n4, h5 = D5, D5 = H5 + q3 | 0, K5 = o5 = f5 + K5 | 0, J5 = D5 = o5 >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5, D5 = AA2 + D5 | 0, H5 = D5 = (f5 = o5 + h5 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, S4 = xA(f5 ^ x3, D5 ^ S4, 40), D5 = (q3 = n4) + s5 | 0, Y5 = o5 = S4 + l3 | 0, x3 = xA(o5 ^ h5, AA2 ^ (s5 = o5 >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = xA(x3 ^ u4, (AA2 = n4) ^ y5, 32), Z3 = o5 = n4, l3 = D5, y5 = o5, h5 = FA2, o5 = xA(K5 ^ v5, J5 ^ R4, 1), D5 = e4 + (J5 = n4) | 0, D5 = ((K5 = r5) >>> 0 > (r5 = o5 + r5 | 0) >>> 0 ? D5 + 1 | 0 : D5) + fA2 | 0, D5 = kA2 + (r5 = (h5 = h5 + r5 | 0) >>> 0 < r5 >>> 0 ? D5 + 1 | 0 : D5) | 0, K5 = e4 = h5 + EA2 | 0, e4 = D5 = e4 >>> 0 < EA2 >>> 0 ? D5 + 1 | 0 : D5, h5 = xA(h5 ^ T3, r5 ^ CA2, 32), D5 = t5 + (v5 = n4) | 0, t5 = h5, D5 = (h5 = F5 + h5 | 0) >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5, F5 = J5, J5 = D5, F5 = xA(o5 ^ h5, F5 ^ D5, 40), D5 = (R4 = n4) + e4 | 0, r5 = o5 = F5 + K5 | 0, o5 = xA(o5 ^ t5, v5 ^ (e4 = o5 >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = J5 + (u4 = n4) | 0, J5 = o5, K5 = o5 = h5 + o5 | 0, v5 = D5 = o5 >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5, D5 = D5 + y5 | 0, D5 = (t5 = o5 + l3 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, o5 = t5 ^ _3, _3 = D5, U5 = xA(o5, D5 ^ U5, 40), D5 = (CA2 = n4) + N5 | 0, N5 = o5 = U5 + aA2 | 0, T3 = o5 >>> 0 < U5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(P5 ^ O3, d5 ^ IA2, 48), D5 = b4 + (IA2 = n4) | 0, P5 = o5, D5 = (o5 = a5 + o5 | 0) >>> 0 < a5 >>> 0 ? D5 + 1 | 0 : D5, a5 = o5, b4 = D5, D5 = xA(o5 ^ w5, D5 ^ z3, 1), z3 = o5 = n4, y5 = D5, D5 = s5 + nA2 | 0, D5 = ((h5 = Y5 + X3 | 0) >>> 0 < X3 >>> 0 ? D5 + 1 | 0 : D5) + o5 | 0, D5 = JA2 + (h5 = (o5 = h5 + y5 | 0) >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5) | 0, Y5 = w5 = o5 + QA2 | 0, w5 = D5 = w5 >>> 0 < QA2 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(o5 ^ J5, h5 ^ u4, 32), D5 = G5 + (s5 = n4) | 0, J5 = o5, M5 = D5 = (h5 = M5 + o5 | 0) >>> 0 < M5 >>> 0 ? D5 + 1 | 0 : D5, y5 = xA(h5 ^ y5, z3 ^ D5, 40), D5 = (z3 = n4) + w5 | 0, Y5 = o5 = y5 + Y5 | 0, o5 = xA(w5 = o5 ^ J5, s5 ^ (J5 = o5 >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = M5 + (aA2 = n4) | 0, M5 = o5, G5 = D5 = (w5 = h5 + o5 | 0) >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(w5 ^ y5, z3 ^ D5, 1), D5 = (s5 = n4) + T3 | 0, D5 = UA2 + ((h5 = o5 + N5 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (y5 = (h5 = h5 + yA2 | 0) >>> 0 < yA2 >>> 0 ? D5 + 1 | 0 : D5) + SA2 | 0, tA2 = z3 = h5 + gA2 | 0, z3 = D5 = z3 >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5, O3 = o5, d5 = h5, u4 = y5, o5 = xA(F5 ^ K5, R4 ^ v5, 1), D5 = YA2 + (y5 = n4) | 0, D5 = L5 + ((h5 = o5 + cA2 | 0) >>> 0 < cA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = eA2 + (F5 = (h5 = h5 + k5 | 0) >>> 0 < k5 >>> 0 ? D5 + 1 | 0 : D5) | 0, v5 = k5 = h5 + hA2 | 0, k5 = D5 = k5 >>> 0 < hA2 >>> 0 ? D5 + 1 | 0 : D5, L5 = o5, K5 = y5, D5 = xA(h5 ^ P5, F5 ^ IA2, 32), P5 = o5 = n4, F5 = D5, h5 = o5, D5 = H5 + AA2 | 0, D5 = (o5 = f5 + x3 | 0) >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5, f5 = o5, H5 = D5, D5 = D5 + h5 | 0, D5 = (y5 = o5 + F5 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, o5 = y5 ^ L5, L5 = D5, o5 = xA(o5, D5 ^ K5, 40), D5 = (D5 = k5) + (k5 = n4) | 0, K5 = h5 = o5 + v5 | 0, v5 = D5 = h5 >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, P5 = xA(h5 ^ F5, P5 ^ D5, 48), D5 = xA(P5 ^ d5, (D5 = u4) ^ (u4 = n4), 32), R4 = h5 = n4, x3 = D5, h5 = xA(f5 ^ S4, H5 ^ q3, 1), D5 = (f5 = n4) + fA2 | 0, D5 = e4 + ((F5 = h5 + FA2 | 0) >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = B5 + (S4 = (F5 = F5 + r5 | 0) >>> 0 < r5 >>> 0 ? D5 + 1 | 0 : D5) | 0, q3 = r5 = F5 + MA2 | 0, r5 = D5 = r5 >>> 0 < MA2 >>> 0 ? D5 + 1 | 0 : D5, e4 = h5, H5 = f5, F5 = xA(F5 ^ p5, S4 ^ $3, 32), D5 = (p5 = n4) + b4 | 0, f5 = h5 = F5 + a5 | 0, h5 = (S4 = xA(h5 ^ e4, (a5 = h5 >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5) ^ H5, 40)) + q3 | 0, D5 = (q3 = n4) + r5 | 0, e4 = h5, h5 = xA(h5 ^ F5, p5 ^ (H5 = h5 >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = a5 + (AA2 = n4) | 0, p5 = h5, b4 = h5 = f5 + h5 | 0, d5 = D5 = h5 >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5, D5 = R4 + D5 | 0, D5 = (F5 = h5 + x3 | 0) >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5, h5 = s5, s5 = D5, f5 = xA(F5 ^ O3, h5 ^ D5, 40), D5 = (IA2 = n4) + z3 | 0, r5 = h5 = f5 + tA2 | 0, D5 = xA(h5 ^ x3, R4 ^ (z3 = h5 >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5), 48), R4 = h5 = n4, x3 = D5, h5 = o5, D5 = L5 + u4 | 0, L5 = o5 = y5 + P5 | 0, P5 = D5 = o5 >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5, D5 = xA(o5 ^ h5, D5 ^ k5, 1), y5 = h5 = n4, o5 = D5, D5 = H5 + Q5 | 0, D5 = ((a5 = e4 + g6 | 0) >>> 0 < g6 >>> 0 ? D5 + 1 | 0 : D5) + h5 | 0, D5 = wA2 + (a5 = (h5 = o5 + a5 | 0) >>> 0 < a5 >>> 0 ? D5 + 1 | 0 : D5) | 0, u4 = k5 = h5 + V3 | 0, k5 = D5 = k5 >>> 0 < V3 >>> 0 ? D5 + 1 | 0 : D5, e4 = o5, H5 = y5, o5 = xA(N5 ^ l3, T3 ^ Z3, 48), D5 = _3 + (Z3 = n4) | 0, N5 = o5, D5 = (o5 = t5 + o5 | 0) >>> 0 < t5 >>> 0 ? D5 + 1 | 0 : D5, t5 = o5, h5 = xA(h5 ^ M5, a5 ^ aA2, 32), _3 = D5, D5 = D5 + (l3 = n4) | 0, y5 = o5 = h5 + o5 | 0, a5 = xA(o5 ^ e4, (M5 = o5 >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5) ^ H5, 40), D5 = (T3 = n4) + k5 | 0, k5 = o5 = a5 + u4 | 0, o5 = xA(o5 ^ h5, l3 ^ (e4 = o5 >>> 0 < a5 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = M5 + ($3 = n4) | 0, H5 = o5, l3 = D5 = (M5 = y5 + o5 | 0) >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(a5 ^ M5, T3 ^ D5, 1), D5 = JA2 + (u4 = n4) | 0, T3 = o5, aA2 = o5 = QA2 + o5 | 0, y5 = D5 = o5 >>> 0 < QA2 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(U5 ^ t5, _3 ^ CA2, 1), D5 = (a5 = n4) + v5 | 0, D5 = KA2 + ((h5 = o5 + K5 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = BA2 + (t5 = (h5 = h5 + iA2 | 0) >>> 0 < iA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, _3 = U5 = h5 + j3 | 0, U5 = D5 = U5 >>> 0 < j3 >>> 0 ? D5 + 1 | 0 : D5, K5 = a5, h5 = xA(h5 ^ p5, t5 ^ AA2, 32), D5 = G5 + (AA2 = n4) | 0, v5 = h5, D5 = (a5 = w5 + h5 | 0) >>> 0 < w5 >>> 0 ? D5 + 1 | 0 : D5, w5 = K5, K5 = D5, t5 = xA(o5 ^ a5, w5 ^ D5, 40), D5 = (CA2 = n4) + U5 | 0, p5 = o5 = t5 + _3 | 0, D5 = (G5 = o5 >>> 0 < t5 >>> 0 ? D5 + 1 | 0 : D5) + y5 | 0, U5 = D5 = (y5 = o5 + aA2 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, _3 = D5 = xA(y5 ^ x3, D5 ^ R4, 32), O3 = o5 = n4, o5 = xA(S4 ^ b4, d5 ^ q3, 1), D5 = (w5 = n4) + J5 | 0, D5 = m3 + ((h5 = o5 + Y5 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (S4 = (h5 = I6 + h5 | 0) >>> 0 < I6 >>> 0 ? D5 + 1 | 0 : D5) + W3 | 0, d5 = J5 = h5 + oA2 | 0, J5 = D5 = J5 >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5, Y5 = o5, b4 = w5, h5 = xA(h5 ^ N5, S4 ^ Z3, 32), D5 = (N5 = n4) + P5 | 0, w5 = o5 = h5 + L5 | 0, o5 = (S4 = xA(o5 ^ Y5, (L5 = o5 >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5) ^ b4, 40)) + d5 | 0, D5 = (d5 = n4) + J5 | 0, J5 = o5, o5 = xA(o5 ^ h5, N5 ^ (Y5 = o5 >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = L5 + (Z3 = n4) | 0, L5 = o5, N5 = D5 = (o5 = w5 + o5 | 0) >>> 0 < w5 >>> 0 ? D5 + 1 | 0 : D5, D5 = D5 + O3 | 0, P5 = D5 = (w5 = o5) >>> 0 > (o5 = o5 + _3 | 0) >>> 0 ? D5 + 1 | 0 : D5, h5 = xA(o5 ^ T3, u4 ^ D5, 40), D5 = U5 + (u4 = n4) | 0, b4 = h5, D5 = Q5 + ((h5 = y5 + h5 | 0) >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5) | 0, T3 = h5 = h5 + g6 | 0, y5 = h5 ^ _3, _3 = D5 = h5 >>> 0 < g6 >>> 0 ? D5 + 1 | 0 : D5, h5 = xA(y5, O3 ^ D5, 48), D5 = P5 + (O3 = n4) | 0, P5 = D5 = (U5 = o5 + h5 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, o5 = D5 = xA(U5 ^ b4, u4 ^ D5, 1), b4 = y5 = n4, y5 = xA(w5 ^ S4, N5 ^ d5, 1), D5 = e4 + (S4 = n4) | 0, D5 = KA2 + ((w5 = y5 + k5 | 0) >>> 0 < k5 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = kA2 + (k5 = (w5 = w5 + iA2 | 0) >>> 0 < iA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, u4 = e4 = w5 + EA2 | 0, e4 = D5 = e4 >>> 0 < EA2 >>> 0 ? D5 + 1 | 0 : D5, N5 = y5, d5 = S4, D5 = s5 + R4 | 0, D5 = (y5 = F5 + x3 | 0) >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5, s5 = y5, v5 = xA(p5 ^ v5, G5 ^ AA2, 48), S4 = xA(w5 ^ v5, k5 ^ (AA2 = n4), 32), p5 = D5, D5 = D5 + (aA2 = n4) | 0, k5 = y5 = S4 + y5 | 0, y5 = xA(y5 ^ N5, (G5 = y5 >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5) ^ d5, 40), D5 = (N5 = n4) + e4 | 0, d5 = D5 = (F5 = y5 + u4 | 0) >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5, D5 = D5 + b4 | 0, D5 = B5 + ((x3 = F5) >>> 0 > (F5 = o5 + F5 | 0) >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (w5 = (F5 = F5 + MA2 | 0) >>> 0 < MA2 >>> 0 ? D5 + 1 | 0 : D5) + fA2 | 0, tA2 = e4 = F5 + FA2 | 0, u4 = D5 = e4 >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5, q3 = o5, R4 = F5, D5 = xA(f5 ^ s5, p5 ^ IA2, 1), f5 = F5 = n4, o5 = D5, D5 = Y5 + YA2 | 0, D5 = ((e4 = J5 + cA2 | 0) >>> 0 < cA2 >>> 0 ? D5 + 1 | 0 : D5) + F5 | 0, D5 = wA2 + (e4 = (F5 = o5 + e4 | 0) >>> 0 < e4 >>> 0 ? D5 + 1 | 0 : D5) | 0, p5 = J5 = F5 + V3 | 0, J5 = D5 = J5 >>> 0 < V3 >>> 0 ? D5 + 1 | 0 : D5, Y5 = o5, D5 = xA(F5 ^ H5, e4 ^ $3, 32), s5 = o5 = n4, F5 = D5, e4 = o5, D5 = K5 + AA2 | 0, K5 = o5 = a5 + v5 | 0, H5 = D5 = o5 >>> 0 < a5 >>> 0 ? D5 + 1 | 0 : D5, D5 = D5 + e4 | 0, D5 = (a5 = o5 + F5 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5;
              o5 = a5 ^ Y5, Y5 = D5, e4 = xA(o5, D5 ^ f5, 40), D5 = (AA2 = n4) + J5 | 0, v5 = xA(J5 = (o5 = e4 + p5 | 0) ^ F5, s5 ^ (F5 = o5 >>> 0 < e4 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = xA(D5 = v5 ^ R4, (R4 = n4) ^ w5, 32), IA2 = w5 = n4, p5 = D5, J5 = w5, w5 = xA(t5 ^ K5, H5 ^ CA2, 1), D5 = BA2 + (t5 = n4) | 0, D5 = z3 + ((f5 = w5 + j3 | 0) >>> 0 < j3 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = UA2 + (r5 = (f5 = f5 + r5 | 0) >>> 0 < r5 >>> 0 ? D5 + 1 | 0 : D5) | 0, H5 = K5 = f5 + yA2 | 0, K5 = D5 = K5 >>> 0 < yA2 >>> 0 ? D5 + 1 | 0 : D5, f5 = xA(f5 ^ L5, r5 ^ Z3, 32), D5 = l3 + (s5 = n4) | 0, L5 = f5, M5 = D5 = (f5 = M5 + f5 | 0) >>> 0 < M5 >>> 0 ? D5 + 1 | 0 : D5, r5 = xA(w5 ^ f5, D5 ^ t5, 40), D5 = (Z3 = n4) + K5 | 0, t5 = w5 = r5 + H5 | 0, w5 = xA(K5 = w5 ^ L5, s5 ^ (L5 = w5 >>> 0 < r5 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = M5 + ($3 = n4) | 0, K5 = w5, H5 = w5 = f5 + w5 | 0, s5 = D5 = w5 >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5, D5 = D5 + J5 | 0, D5 = (f5 = w5 + p5 | 0) >>> 0 < w5 >>> 0 ? D5 + 1 | 0 : D5, w5 = b4, b4 = D5, M5 = xA(f5 ^ q3, w5 ^ D5, 40), D5 = (z3 = n4) + u4 | 0, J5 = w5 = M5 + tA2 | 0, w5 = xA(u4 = w5 ^ p5, IA2 ^ (p5 = w5 >>> 0 < M5 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = b4 + (IA2 = n4) | 0, b4 = w5, f5 = D5 = (w5 = f5 + w5 | 0) >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5, z3 = D5 = xA(w5 ^ M5, z3 ^ D5, 1), CA2 = D5, l3 = M5 = n4, M5 = F5, F5 = y5, y5 = xA(S4 ^ x3, d5 ^ aA2, 48), D5 = G5 + (aA2 = n4) | 0, G5 = y5, D5 = (y5 = k5 + y5 | 0) >>> 0 < k5 >>> 0 ? D5 + 1 | 0 : D5, k5 = o5, o5 = F5 ^ y5, F5 = D5, o5 = xA(o5, D5 ^ N5, 1), D5 = (N5 = n4) + M5 | 0, D5 = eA2 + (o5 >>> 0 > (S4 = k5 + o5 | 0) >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = SA2 + (k5 = (S4 = S4 + hA2 | 0) >>> 0 < hA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, x3 = M5 = S4 + gA2 | 0, M5 = D5 = M5 >>> 0 < gA2 >>> 0 ? D5 + 1 | 0 : D5, S4 = xA(S4 ^ K5, k5 ^ $3, 32), D5 = P5 + (d5 = n4) | 0, K5 = D5 = (k5 = S4 + U5 | 0) >>> 0 < U5 >>> 0 ? D5 + 1 | 0 : D5, U5 = xA(o5 ^ k5, N5 ^ D5, 40), D5 = ($3 = n4) + M5 | 0, N5 = o5 = U5 + x3 | 0, S4 = xA(o5 ^ S4, d5 ^ (P5 = o5 >>> 0 < U5 >>> 0 ? D5 + 1 | 0 : D5), 48), D5 = K5 + (x3 = n4) | 0, d5 = o5 = S4 + k5 | 0, K5 = o5, u4 = D5 = o5 >>> 0 < k5 >>> 0 ? D5 + 1 | 0 : D5, k5 = y5, M5 = F5, D5 = Y5 + R4 | 0, D5 = (o5 = a5 + v5 | 0) >>> 0 < a5 >>> 0 ? D5 + 1 | 0 : D5, a5 = o5, o5 ^= e4, e4 = D5, D5 = xA(o5, AA2 ^ D5, 1), q3 = o5 = n4, Y5 = D5, F5 = D5, D5 = L5 + W3 | 0, D5 = ((y5 = t5 + oA2 | 0) >>> 0 < oA2 >>> 0 ? D5 + 1 | 0 : D5) + o5 | 0, t5 = D5 = (o5 = y5) >>> 0 > (y5 = F5 + y5 | 0) >>> 0 ? D5 + 1 | 0 : D5, F5 = xA(h5 ^ y5, D5 ^ O3, 32), D5 = (D5 = M5) + (M5 = n4) | 0, v5 = o5 = F5 + k5 | 0, h5 = xA(h5 = o5 ^ Y5, q3 ^ (Y5 = o5 >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5), 40), D5 = t5 + (O3 = n4) | 0, D5 = nA2 + ((o5 = h5 + y5 | 0) >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5) | 0, q3 = D5 = (k5 = o5 + X3 | 0) >>> 0 < X3 >>> 0 ? D5 + 1 | 0 : D5, M5 = xA(F5 ^ k5, M5 ^ D5, 48), tA2 = D5 = n4, o5 = xA(r5 ^ H5, s5 ^ Z3, 1), D5 = (F5 = n4) + _3 | 0, D5 = rA2 + ((y5 = o5 + T3 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = m3 + (r5 = (y5 = y5 + DA2 | 0) >>> 0 < DA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, _3 = t5 = I6 + y5 | 0, H5 = D5 = t5 >>> 0 < I6 >>> 0 ? D5 + 1 | 0 : D5, s5 = o5, t5 = xA(y5 ^ G5, r5 ^ aA2, 32), D5 = (Z3 = n4) + e4 | 0, e4 = o5 = t5 + a5 | 0, y5 = xA(o5 ^ s5, (G5 = o5 >>> 0 < t5 >>> 0 ? D5 + 1 | 0 : D5) ^ F5, 40), D5 = (D5 = H5) + (H5 = n4) | 0, s5 = o5 = y5 + _3 | 0, _3 = D5 = o5 >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5, F5 = D5, D5 = m3 + l3 | 0, D5 = ((r5 = I6 + z3 | 0) >>> 0 < I6 >>> 0 ? D5 + 1 | 0 : D5) + F5 | 0, L5 = D5 = (F5 = o5 + r5 | 0) >>> 0 < r5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(F5 ^ M5, tA2 ^ D5, 32), D5 = (z3 = n4) + u4 | 0, a5 = xA((r5 = o5 + K5 | 0) ^ CA2, (D5 = r5 >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5) ^ l3, 40), l3 = D5, D5 = SA2 + (K5 = n4) | 0, D5 = L5 + ((T3 = a5 + gA2 | 0) >>> 0 < gA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (L5 = F5 + T3 | 0) >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5, F5 = z3, z3 = D5, F5 = xA(o5 ^ L5, F5 ^ D5, 48), D5 = (D5 = l3) + (l3 = n4) | 0, o5 = a5 ^ (r5 = F5 + r5 | 0), a5 = D5 = r5 >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5, T3 = D5 = xA(o5, D5 ^ K5, 1), CA2 = D5, R4 = o5 = n4, K5 = w5, AA2 = f5, w5 = y5, y5 = xA(t5 ^ s5, _3 ^ Z3, 48), D5 = G5 + (s5 = n4) | 0, t5 = o5 = y5 + e4 | 0, e4 = D5 = o5 >>> 0 < e4 >>> 0 ? D5 + 1 | 0 : D5, w5 = xA(o5 ^ w5, D5 ^ H5, 1), D5 = (_3 = n4) + eA2 | 0, D5 = q3 + ((o5 = w5 + hA2 | 0) >>> 0 < w5 >>> 0 ? D5 + 1 | 0 : D5) | 0, k5 = D5 = (f5 = o5 + k5 | 0) >>> 0 < k5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(f5 ^ S4, D5 ^ x3, 32), D5 = (H5 = n4) + AA2 | 0, K5 = S4 = o5 + K5 | 0, G5 = D5 = S4 >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, w5 = xA(w5 ^ S4, D5 ^ _3, 40), D5 = kA2 + (aA2 = n4) | 0, _3 = w5, D5 = k5 + ((w5 = EA2 + w5 | 0) >>> 0 < EA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, f5 = D5 = (w5 = w5 + f5 | 0) >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5, S4 = xA(o5 ^ w5, D5 ^ H5, 48), D5 = (D5 = G5) + (G5 = n4) | 0, x3 = o5 = S4 + K5 | 0, H5 = o5, q3 = D5 = o5 >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5, D5 = Y5 + tA2 | 0, K5 = (o5 = M5 + v5 | 0) ^ h5, h5 = D5 = o5 >>> 0 < M5 >>> 0 ? D5 + 1 | 0 : D5, D5 = xA(K5, D5 ^ O3, 1), O3 = k5 = n4, K5 = D5, D5 = P5 + wA2 | 0, D5 = ((M5 = N5 + V3 | 0) >>> 0 < V3 >>> 0 ? D5 + 1 | 0 : D5) + k5 | 0, Y5 = D5 = (Y5 = M5) >>> 0 > (M5 = M5 + K5 | 0) >>> 0 ? D5 + 1 | 0 : D5, v5 = k5 = xA(M5 ^ b4, IA2 ^ D5, 32), N5 = D5 = n4, D5 = D5 + e4 | 0, P5 = k5 = k5 + t5 | 0, b4 = D5 = v5 >>> 0 > k5 >>> 0 ? D5 + 1 | 0 : D5, k5 = xA(k5 ^ K5, O3 ^ D5, 40), D5 = fA2 + (O3 = n4) | 0, D5 = Y5 + ((t5 = k5 + FA2 | 0) >>> 0 < FA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, t5 = D5 = (K5 = M5) >>> 0 > (M5 = M5 + t5 | 0) >>> 0 ? D5 + 1 | 0 : D5, K5 = xA(M5 ^ v5, D5 ^ N5, 48), IA2 = D5 = n4, e4 = D5, U5 = xA(U5 ^ d5, u4 ^ $3, 1), Y5 = D5 = n4, v5 = y5, D5 = D5 + W3 | 0, D5 = p5 + ((y5 = U5 + oA2 | 0) >>> 0 < oA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (y5 = y5 + J5 | 0) >>> 0 < J5 >>> 0 ? D5 + 1 | 0 : D5, J5 = y5 ^ v5, v5 = D5, J5 = xA(J5, D5 ^ s5, 32), D5 = ($3 = n4) + h5 | 0, p5 = o5 = J5 + o5 | 0, h5 = xA(o5 ^ U5, (h5 = Y5) ^ (Y5 = o5 >>> 0 < J5 >>> 0 ? D5 + 1 | 0 : D5), 40), D5 = rA2 + (N5 = n4) | 0, D5 = v5 + ((o5 = h5 + DA2 | 0) >>> 0 < DA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, v5 = o5 = o5 + y5 | 0, s5 = D5 = o5 >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5, y5 = D5, D5 = R4 + KA2 | 0, D5 = ((U5 = T3 + iA2 | 0) >>> 0 < iA2 >>> 0 ? D5 + 1 | 0 : D5) + y5 | 0, T3 = D5 = (y5 = o5 + U5 | 0) >>> 0 < U5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(y5 ^ K5, D5 ^ e4, 32), D5 = (d5 = n4) + q3 | 0, e4 = xA((U5 = o5 + H5 | 0) ^ CA2, (D5 = U5 >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5) ^ R4, 40), u4 = H5 = n4, R4 = D5, D5 = H5 + UA2 | 0, D5 = T3 + ((H5 = e4 + yA2 | 0) >>> 0 < yA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, T3 = D5 = (H5 = y5 + H5 | 0) >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5, y5 = xA(o5 ^ H5, D5 ^ d5, 48), D5 = (d5 = n4) + R4 | 0, o5 = (U5 = y5 + U5 | 0) ^ e4, e4 = D5 = U5 >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5, u4 = D5 = xA(o5, D5 ^ u4, 1), R4 = o5 = n4, AA2 = r5, Z3 = S4, S4 = h5, h5 = xA(J5 ^ v5, s5 ^ $3, 48), D5 = (J5 = n4) + Y5 | 0, Y5 = o5 = h5 + p5 | 0, v5 = D5 = o5 >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5, S4 = xA(o5 ^ S4, D5 ^ N5, 1), D5 = (N5 = n4) + JA2 | 0, D5 = ((o5 = S4 + QA2 | 0) >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5) + t5 | 0, M5 = D5 = (r5 = o5 + M5 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(r5 ^ Z3, D5 ^ G5, 32), D5 = (t5 = n4) + a5 | 0, p5 = a5 = o5 + AA2 | 0, G5 = D5 = a5 >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, S4 = xA(S4 ^ a5, D5 ^ N5, 40), D5 = B5 + (Z3 = n4) | 0, N5 = S4, D5 = M5 + ((S4 = MA2 + S4 | 0) >>> 0 < MA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, s5 = D5 = (a5 = S4 + r5 | 0) >>> 0 < r5 >>> 0 ? D5 + 1 | 0 : D5, S4 = xA(o5 ^ a5, D5 ^ t5, 48), D5 = (D5 = G5) + (G5 = n4) | 0, p5 = o5 = S4 + p5 | 0, AA2 = D5 = o5 >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5, M5 = F5, r5 = w5, D5 = b4 + IA2 | 0, F5 = D5 = (o5 = K5 + P5 | 0) >>> 0 < K5 >>> 0 ? D5 + 1 | 0 : D5, w5 = xA(o5 ^ k5, D5 ^ O3, 1), D5 = (k5 = n4) + BA2 | 0, D5 = ((t5 = w5 + j3 | 0) >>> 0 < w5 >>> 0 ? D5 + 1 | 0 : D5) + f5 | 0, f5 = xA(M5 ^ (r5 = r5 + t5 | 0), (D5 = r5 >>> 0 < t5 >>> 0 ? D5 + 1 | 0 : D5) ^ l3, 32), t5 = D5, K5 = w5, D5 = (M5 = n4) + v5 | 0, D5 = (w5 = f5 + Y5 | 0) >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5, Y5 = w5, w5 ^= K5, K5 = D5, w5 = xA(w5, D5 ^ k5, 40), D5 = Q5 + (v5 = n4) | 0, D5 = ((k5 = w5 + g6 | 0) >>> 0 < g6 >>> 0 ? D5 + 1 | 0 : D5) + t5 | 0, P5 = D5 = (t5 = k5) >>> 0 > (k5 = k5 + r5 | 0) >>> 0 ? D5 + 1 | 0 : D5, M5 = xA(f5 ^ k5, D5 ^ M5, 48), IA2 = D5 = n4, r5 = D5, f5 = xA(x3 ^ _3, q3 ^ aA2, 1), b4 = D5 = n4, _3 = F5, D5 = D5 + nA2 | 0, D5 = z3 + ((F5 = f5 + X3 | 0) >>> 0 < X3 >>> 0 ? D5 + 1 | 0 : D5) | 0, t5 = J5, J5 = D5 = (F5 = F5 + L5 | 0) >>> 0 < L5 >>> 0 ? D5 + 1 | 0 : D5, t5 = xA(h5 ^ F5, t5 ^ D5, 32), D5 = ($3 = n4) + _3 | 0, L5 = o5 = t5 + o5 | 0, h5 = xA(o5 ^ f5, (h5 = b4) ^ (b4 = o5 >>> 0 < t5 >>> 0 ? D5 + 1 | 0 : D5), 40), D5 = YA2 + (_3 = n4) | 0, D5 = J5 + ((o5 = h5 + cA2 | 0) >>> 0 < cA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, z3 = o5 = o5 + F5 | 0, x3 = D5 = o5 >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5, F5 = D5, D5 = R4 + wA2 | 0, D5 = ((f5 = V3 + u4 | 0) >>> 0 < V3 >>> 0 ? D5 + 1 | 0 : D5) + F5 | 0, J5 = D5 = (F5 = o5 + f5 | 0) >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(F5 ^ M5, D5 ^ r5, 32), D5 = (l3 = n4) + AA2 | 0, r5 = xA((f5 = o5 + p5 | 0) ^ u4, (D5 = f5 >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5) ^ R4, 40), u4 = D5, D5 = W3 + (O3 = n4) | 0, D5 = J5 + ((q3 = r5 + oA2 | 0) >>> 0 < oA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (J5 = F5 + q3 | 0) >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5, F5 = l3, l3 = D5, F5 = xA(o5 ^ J5, F5 ^ D5, 48), D5 = (D5 = u4) + (u4 = n4) | 0, o5 = (f5 = F5 + f5 | 0) ^ r5, r5 = D5 = f5 >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5, O3 = D5 = xA(o5, D5 ^ O3, 1), q3 = o5 = n4, R4 = S4, S4 = h5, h5 = xA(t5 ^ z3, x3 ^ $3, 48), D5 = (D5 = b4) + (b4 = n4) | 0, L5 = o5 = h5 + L5 | 0, t5 = _3, _3 = D5 = o5 >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5, S4 = xA(o5 ^ S4, t5 ^ D5, 1), D5 = (z3 = n4) + UA2 | 0, D5 = P5 + ((o5 = S4 + yA2 | 0) >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5) | 0, t5 = k5, k5 = o5 + k5 | 0, o5 = G5, G5 = D5 = t5 >>> 0 > k5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(k5 ^ R4, o5 ^ D5, 32), D5 = (D5 = e4) + (e4 = n4) | 0, P5 = D5 = (t5 = o5 + U5 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, U5 = t5, S4 = xA(S4 ^ t5, D5 ^ z3, 40), D5 = nA2 + ($3 = n4) | 0, z3 = S4, D5 = G5 + ((S4 = X3 + S4 | 0) >>> 0 < X3 >>> 0 ? D5 + 1 | 0 : D5) | 0, G5 = D5 = (t5 = S4 + k5 | 0) >>> 0 < k5 >>> 0 ? D5 + 1 | 0 : D5, S4 = xA(o5 ^ t5, D5 ^ e4, 48), D5 = (D5 = P5) + (P5 = n4) | 0, x3 = o5 = S4 + U5 | 0, R4 = D5 = o5 >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5, U5 = y5, D5 = K5 + IA2 | 0, y5 = D5 = (o5 = M5 + Y5 | 0) >>> 0 < M5 >>> 0 ? D5 + 1 | 0 : D5, w5 = xA(o5 ^ w5, D5 ^ v5, 1), D5 = SA2 + (M5 = n4) | 0, D5 = s5 + ((k5 = w5 + gA2 | 0) >>> 0 < gA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, K5 = (k5 = a5 + k5 | 0) ^ U5, U5 = D5 = k5 >>> 0 < a5 >>> 0 ? D5 + 1 | 0 : D5, a5 = xA(K5, D5 ^ d5, 32), e4 = D5 = n4, K5 = w5, D5 = D5 + _3 | 0, D5 = (w5 = a5 + L5 | 0) >>> 0 < a5 >>> 0 ? D5 + 1 | 0 : D5, Y5 = w5, w5 ^= K5, K5 = D5, w5 = xA(w5, D5 ^ M5, 40), D5 = Q5 + (v5 = n4) | 0, D5 = U5 + ((M5 = w5 + g6 | 0) >>> 0 < g6 >>> 0 ? D5 + 1 | 0 : D5) | 0, s5 = D5 = (M5 = k5 + M5 | 0) >>> 0 < k5 >>> 0 ? D5 + 1 | 0 : D5, U5 = xA(a5 ^ M5, D5 ^ e4, 48), IA2 = D5 = n4, k5 = D5, a5 = xA(N5 ^ p5, Z3 ^ AA2, 1), L5 = D5 = n4, p5 = y5, D5 = D5 + B5 | 0, D5 = T3 + ((y5 = a5 + MA2 | 0) >>> 0 < MA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, H5 = D5 = (y5 = y5 + H5 | 0) >>> 0 < H5 >>> 0 ? D5 + 1 | 0 : D5, e4 = xA(h5 ^ y5, D5 ^ b4, 32), D5 = (CA2 = n4) + p5 | 0, p5 = o5 = e4 + o5 | 0, h5 = xA(o5 ^ a5, (N5 = o5 >>> 0 < e4 >>> 0 ? D5 + 1 | 0 : D5) ^ L5, 40), D5 = m3 + (b4 = n4) | 0, D5 = H5 + ((o5 = I6 + h5 | 0) >>> 0 < I6 >>> 0 ? D5 + 1 | 0 : D5) | 0, H5 = o5 = o5 + y5 | 0, _3 = D5 = o5 >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5, y5 = D5, D5 = q3 + rA2 | 0, D5 = ((a5 = O3 + DA2 | 0) >>> 0 < DA2 >>> 0 ? D5 + 1 | 0 : D5) + y5 | 0, L5 = D5 = (y5 = o5 + a5 | 0) >>> 0 < a5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(y5 ^ U5, D5 ^ k5, 32), D5 = (T3 = n4) + R4 | 0, k5 = xA((a5 = o5 + x3 | 0) ^ O3, (D5 = a5 >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5) ^ q3, 40), d5 = D5, D5 = eA2 + (O3 = n4) | 0, D5 = L5 + ((q3 = k5 + hA2 | 0) >>> 0 < hA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (L5 = y5 + q3 | 0) >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5, y5 = T3, T3 = D5, y5 = xA(o5 ^ L5, y5 ^ D5, 48), D5 = (D5 = d5) + (d5 = n4) | 0, o5 = (a5 = y5 + a5 | 0) ^ k5, k5 = D5 = a5 >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5, O3 = D5 = xA(o5, D5 ^ O3, 1), aA2 = D5, q3 = o5 = n4, AA2 = f5, Z3 = S4, f5 = h5, h5 = xA(e4 ^ H5, _3 ^ CA2, 48), D5 = (e4 = n4) + N5 | 0, H5 = o5 = h5 + p5 | 0, p5 = D5 = o5 >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5, f5 = xA(o5 ^ f5, D5 ^ b4, 1), D5 = (b4 = n4) + fA2 | 0, D5 = s5 + ((o5 = f5 + FA2 | 0) >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5) | 0, M5 = D5 = (S4 = o5 + M5 | 0) >>> 0 < M5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(S4 ^ Z3, D5 ^ P5, 32), D5 = (N5 = n4) + r5 | 0, P5 = D5 = (r5 = o5 + AA2 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, f5 = xA(f5 ^ r5, D5 ^ b4, 40), D5 = JA2 + (CA2 = n4) | 0, s5 = f5, D5 = M5 + ((f5 = QA2 + f5 | 0) >>> 0 < QA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, M5 = f5 + S4 | 0, f5 = N5, N5 = D5 = M5 >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5, f5 = xA(o5 ^ M5, f5 ^ D5, 48), D5 = (D5 = P5) + (P5 = n4) | 0, b4 = o5 = f5 + r5 | 0, _3 = D5 = o5 >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5, S4 = F5, D5 = K5 + IA2 | 0, F5 = D5 = (o5 = U5 + Y5 | 0) >>> 0 < U5 >>> 0 ? D5 + 1 | 0 : D5, w5 = xA(o5 ^ w5, D5 ^ v5, 1), D5 = (U5 = n4) + YA2 | 0, D5 = G5 + ((r5 = w5 + cA2 | 0) >>> 0 < w5 >>> 0 ? D5 + 1 | 0 : D5) | 0, S4 = xA(S4 ^ (r5 = r5 + t5 | 0), (D5 = r5 >>> 0 < t5 >>> 0 ? D5 + 1 | 0 : D5) ^ u4, 32), K5 = t5 = n4, t5 = D5, Y5 = w5, D5 = K5 + p5 | 0, D5 = (w5 = S4 + H5 | 0) >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5, H5 = w5, w5 ^= Y5, Y5 = D5, w5 = xA(w5, D5 ^ U5, 40), D5 = kA2 + (v5 = n4) | 0, D5 = ((U5 = w5 + EA2 | 0) >>> 0 < EA2 >>> 0 ? D5 + 1 | 0 : D5) + t5 | 0, G5 = K5, K5 = D5 = (t5 = r5 + U5 | 0) >>> 0 < U5 >>> 0 ? D5 + 1 | 0 : D5, U5 = xA(S4 ^ t5, G5 ^ D5, 48), IA2 = D5 = n4, r5 = D5, S4 = xA(x3 ^ z3, R4 ^ $3, 1), p5 = D5 = n4, G5 = F5, D5 = D5 + BA2 | 0, D5 = l3 + ((F5 = S4 + j3 | 0) >>> 0 < j3 >>> 0 ? D5 + 1 | 0 : D5) | 0, J5 = D5 = (F5 = F5 + J5 | 0) >>> 0 < J5 >>> 0 ? D5 + 1 | 0 : D5, e4 = xA(h5 ^ F5, D5 ^ e4, 32), D5 = ($3 = n4) + G5 | 0, G5 = o5 = e4 + o5 | 0, h5 = xA(o5 ^ S4, (h5 = p5) ^ (p5 = o5 >>> 0 < e4 >>> 0 ? D5 + 1 | 0 : D5), 40), D5 = KA2 + (z3 = n4) | 0, D5 = J5 + ((o5 = h5 + iA2 | 0) >>> 0 < iA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, x3 = o5 = o5 + F5 | 0, l3 = D5 = o5 >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5, F5 = D5, D5 = q3 + Q5 | 0, D5 = ((S4 = O3 + g6 | 0) >>> 0 < g6 >>> 0 ? D5 + 1 | 0 : D5) + F5 | 0, J5 = D5 = (F5 = o5 + S4 | 0) >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(F5 ^ U5, D5 ^ r5, 32), D5 = (O3 = n4) + _3 | 0, r5 = xA((S4 = o5 + b4 | 0) ^ aA2, (D5 = S4 >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5) ^ q3, 40), q3 = D5, D5 = UA2 + (u4 = n4) | 0, D5 = J5 + ((R4 = r5 + yA2 | 0) >>> 0 < yA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (J5 = F5 + R4 | 0) >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5, F5 = O3, O3 = D5, F5 = xA(o5 ^ J5, F5 ^ D5, 48), D5 = (D5 = q3) + (q3 = n4) | 0, o5 = (S4 = F5 + S4 | 0) ^ r5, r5 = D5 = S4 >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5, u4 = D5 = xA(o5, D5 ^ u4, 1), R4 = o5 = n4, AA2 = a5, Z3 = f5, f5 = h5, h5 = xA(e4 ^ x3, l3 ^ $3, 48), D5 = (e4 = n4) + p5 | 0, p5 = o5 = h5 + G5 | 0, G5 = D5 = o5 >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5, f5 = xA(o5 ^ f5, D5 ^ z3, 1), D5 = (z3 = n4) + JA2 | 0, D5 = K5 + ((o5 = f5 + QA2 | 0) >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5) | 0, t5 = D5 = (a5 = o5 + t5 | 0) >>> 0 < t5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(a5 ^ Z3, D5 ^ P5, 32), D5 = (K5 = n4) + k5 | 0, P5 = D5 = (k5 = o5 + AA2 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, f5 = xA(f5 ^ k5, D5 ^ z3, 40), D5 = BA2 + ($3 = n4) | 0, z3 = f5, D5 = t5 + ((f5 = j3 + f5 | 0) >>> 0 < j3 >>> 0 ? D5 + 1 | 0 : D5) | 0, t5 = f5 + a5 | 0, f5 = K5, K5 = D5 = t5 >>> 0 < a5 >>> 0 ? D5 + 1 | 0 : D5, f5 = xA(o5 ^ t5, f5 ^ D5, 48), D5 = (D5 = P5) + (P5 = n4) | 0, x3 = o5 = f5 + k5 | 0, l3 = D5 = o5 >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5, a5 = y5, D5 = Y5 + IA2 | 0, y5 = D5 = (o5 = U5 + H5 | 0) >>> 0 < U5 >>> 0 ? D5 + 1 | 0 : D5, w5 = xA(o5 ^ w5, D5 ^ v5, 1), D5 = KA2 + (U5 = n4) | 0, D5 = N5 + ((k5 = w5 + iA2 | 0) >>> 0 < iA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, M5 = D5 = (k5 = k5 + M5 | 0) >>> 0 < M5 >>> 0 ? D5 + 1 | 0 : D5, a5 = xA(a5 ^ k5, D5 ^ d5, 32), H5 = D5 = n4, Y5 = w5, D5 = D5 + G5 | 0, D5 = (w5 = a5 + p5 | 0) >>> 0 < a5 >>> 0 ? D5 + 1 | 0 : D5, v5 = w5, w5 ^= Y5, Y5 = D5, w5 = xA(w5, D5 ^ U5, 40), D5 = rA2 + (p5 = n4) | 0, D5 = M5 + ((U5 = w5 + DA2 | 0) >>> 0 < DA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (M5 = k5 + U5 | 0) >>> 0 < k5 >>> 0 ? D5 + 1 | 0 : D5, k5 = H5, H5 = D5, U5 = xA(a5 ^ M5, k5 ^ D5, 48), IA2 = D5 = n4, k5 = D5, a5 = xA(s5 ^ b4, _3 ^ CA2, 1), G5 = D5 = n4, N5 = y5, D5 = D5 + m3 | 0, D5 = T3 + ((y5 = I6 + a5 | 0) >>> 0 < I6 >>> 0 ? D5 + 1 | 0 : D5) | 0, L5 = D5 = (y5 = y5 + L5 | 0) >>> 0 < L5 >>> 0 ? D5 + 1 | 0 : D5, e4 = xA(h5 ^ y5, D5 ^ e4, 32), D5 = (CA2 = n4) + N5 | 0, N5 = o5 = e4 + o5 | 0, h5 = xA(o5 ^ a5, (h5 = G5) ^ (G5 = o5 >>> 0 < e4 >>> 0 ? D5 + 1 | 0 : D5), 40), D5 = nA2 + (s5 = n4) | 0, D5 = L5 + ((o5 = h5 + X3 | 0) >>> 0 < X3 >>> 0 ? D5 + 1 | 0 : D5) | 0, b4 = o5 = o5 + y5 | 0, _3 = D5 = o5 >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5, y5 = D5, D5 = R4 + SA2 | 0, D5 = ((a5 = u4 + gA2 | 0) >>> 0 < gA2 >>> 0 ? D5 + 1 | 0 : D5) + y5 | 0, L5 = D5 = (y5 = o5 + a5 | 0) >>> 0 < a5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(y5 ^ U5, D5 ^ k5, 32), D5 = (T3 = n4) + l3 | 0, k5 = xA((a5 = o5 + x3 | 0) ^ u4, (D5 = a5 >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5) ^ R4, 40), u4 = D5, D5 = B5 + (d5 = n4) | 0, D5 = L5 + ((R4 = k5 + MA2 | 0) >>> 0 < MA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (L5 = y5 + R4 | 0) >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5, y5 = T3, T3 = D5, y5 = xA(o5 ^ L5, y5 ^ D5, 48), D5 = (D5 = u4) + (u4 = n4) | 0, o5 = (a5 = y5 + a5 | 0) ^ k5, k5 = D5 = a5 >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5, d5 = D5 = xA(o5, D5 ^ d5, 1), R4 = o5 = n4, AA2 = S4, Z3 = f5, f5 = h5, h5 = xA(e4 ^ b4, _3 ^ CA2, 48), D5 = (e4 = n4) + G5 | 0, G5 = o5 = h5 + N5 | 0, N5 = D5 = o5 >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5, f5 = xA(o5 ^ f5, D5 ^ s5, 1), D5 = (s5 = n4) + wA2 | 0, D5 = H5 + ((o5 = f5 + V3 | 0) >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5) | 0, M5 = D5 = (S4 = o5 + M5 | 0) >>> 0 < M5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(S4 ^ Z3, D5 ^ P5, 32), D5 = (H5 = n4) + r5 | 0, P5 = D5 = (r5 = o5 + AA2 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, f5 = xA(f5 ^ r5, D5 ^ s5, 40), D5 = YA2 + (CA2 = n4) | 0, s5 = f5, D5 = M5 + ((f5 = cA2 + f5 | 0) >>> 0 < cA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, M5 = f5 + S4 | 0, f5 = H5, H5 = D5 = M5 >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5, f5 = xA(o5 ^ M5, f5 ^ D5, 48), D5 = (D5 = P5) + (P5 = n4) | 0, b4 = o5 = f5 + r5 | 0, _3 = D5 = o5 >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5, S4 = F5, D5 = Y5 + IA2 | 0, F5 = D5 = (o5 = U5 + v5 | 0) >>> 0 < U5 >>> 0 ? D5 + 1 | 0 : D5, w5 = xA(o5 ^ w5, D5 ^ p5, 1), D5 = (U5 = n4) + kA2 | 0, D5 = K5 + ((r5 = w5 + EA2 | 0) >>> 0 < w5 >>> 0 ? D5 + 1 | 0 : D5) | 0, t5 = D5 = (r5 = r5 + t5 | 0) >>> 0 < t5 >>> 0 ? D5 + 1 | 0 : D5, S4 = xA(S4 ^ r5, D5 ^ q3, 32), K5 = D5 = n4, Y5 = w5, D5 = D5 + N5 | 0, D5 = (w5 = S4 + G5 | 0) >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5, v5 = w5, w5 ^= Y5, Y5 = D5, w5 = xA(w5, D5 ^ U5, 40), D5 = fA2 + (p5 = n4) | 0, D5 = t5 + ((U5 = w5 + FA2 | 0) >>> 0 < FA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, G5 = K5, K5 = D5 = (t5 = r5 + U5 | 0) >>> 0 < r5 >>> 0 ? D5 + 1 | 0 : D5, U5 = xA(S4 ^ t5, G5 ^ D5, 48), IA2 = D5 = n4, r5 = D5, S4 = xA(x3 ^ z3, l3 ^ $3, 1), G5 = D5 = n4, N5 = F5, D5 = D5 + W3 | 0, D5 = O3 + ((F5 = S4 + oA2 | 0) >>> 0 < oA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, J5 = D5 = (F5 = F5 + J5 | 0) >>> 0 < J5 >>> 0 ? D5 + 1 | 0 : D5, e4 = xA(h5 ^ F5, D5 ^ e4, 32), D5 = ($3 = n4) + N5 | 0, N5 = o5 = e4 + o5 | 0, h5 = xA(o5 ^ S4, (h5 = G5) ^ (G5 = o5 >>> 0 < e4 >>> 0 ? D5 + 1 | 0 : D5), 40), D5 = eA2 + (z3 = n4) | 0, D5 = J5 + ((o5 = h5 + hA2 | 0) >>> 0 < hA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, x3 = o5 = o5 + F5 | 0, l3 = D5 = o5 >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5, F5 = D5, D5 = R4 + B5 | 0, D5 = ((S4 = d5 + MA2 | 0) >>> 0 < MA2 >>> 0 ? D5 + 1 | 0 : D5) + F5 | 0, J5 = D5 = (F5 = o5 + S4 | 0) >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(F5 ^ U5, D5 ^ r5, 32), D5 = (O3 = n4) + _3 | 0, r5 = xA((S4 = o5 + b4 | 0) ^ d5, (D5 = S4 >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5) ^ R4, 40), q3 = D5, D5 = KA2 + (d5 = n4) | 0, D5 = J5 + ((R4 = r5 + iA2 | 0) >>> 0 < iA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (J5 = F5 + R4 | 0) >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5, F5 = O3, O3 = D5, F5 = xA(o5 ^ J5, F5 ^ D5, 48), D5 = (D5 = q3) + (q3 = n4) | 0, o5 = (S4 = F5 + S4 | 0) ^ r5, r5 = D5 = S4 >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5, d5 = D5 = xA(o5, D5 ^ d5, 1), R4 = o5 = n4, AA2 = a5, Z3 = f5, f5 = h5, h5 = xA(e4 ^ x3, l3 ^ $3, 48), D5 = (e4 = n4) + G5 | 0, G5 = o5 = h5 + N5 | 0, N5 = D5 = o5 >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5, f5 = xA(o5 ^ f5, D5 ^ z3, 1), D5 = (z3 = n4) + W3 | 0, D5 = K5 + ((o5 = f5 + oA2 | 0) >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5) | 0, t5 = D5 = (a5 = o5 + t5 | 0) >>> 0 < t5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(a5 ^ Z3, D5 ^ P5, 32), D5 = (K5 = n4) + k5 | 0, P5 = D5 = (k5 = o5 + AA2 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, f5 = xA(f5 ^ k5, D5 ^ z3, 40), D5 = fA2 + ($3 = n4) | 0, z3 = f5, D5 = t5 + ((f5 = FA2 + f5 | 0) >>> 0 < FA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, t5 = f5 + a5 | 0, f5 = K5, K5 = D5 = t5 >>> 0 < a5 >>> 0 ? D5 + 1 | 0 : D5, f5 = xA(o5 ^ t5, f5 ^ D5, 48), D5 = (D5 = P5) + (P5 = n4) | 0, x3 = o5 = f5 + k5 | 0, l3 = D5 = o5 >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5, a5 = y5, D5 = Y5 + IA2 | 0, y5 = D5 = (o5 = U5 + v5 | 0) >>> 0 < U5 >>> 0 ? D5 + 1 | 0 : D5, w5 = xA(o5 ^ w5, D5 ^ p5, 1), D5 = kA2 + (U5 = n4) | 0, D5 = H5 + ((k5 = w5 + EA2 | 0) >>> 0 < EA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, M5 = D5 = (k5 = k5 + M5 | 0) >>> 0 < M5 >>> 0 ? D5 + 1 | 0 : D5, a5 = xA(a5 ^ k5, D5 ^ u4, 32), H5 = D5 = n4, Y5 = w5, D5 = D5 + N5 | 0, D5 = (w5 = a5 + G5 | 0) >>> 0 < a5 >>> 0 ? D5 + 1 | 0 : D5, v5 = w5, w5 ^= Y5, Y5 = D5, w5 = xA(w5, D5 ^ U5, 40), D5 = YA2 + (p5 = n4) | 0, D5 = M5 + ((U5 = w5 + cA2 | 0) >>> 0 < cA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (M5 = k5 + U5 | 0) >>> 0 < k5 >>> 0 ? D5 + 1 | 0 : D5, k5 = H5, H5 = D5, U5 = xA(a5 ^ M5, k5 ^ D5, 48), IA2 = D5 = n4, k5 = D5, a5 = xA(s5 ^ b4, _3 ^ CA2, 1), G5 = D5 = n4, N5 = y5, D5 = D5 + BA2 | 0, D5 = T3 + ((y5 = a5 + j3 | 0) >>> 0 < j3 >>> 0 ? D5 + 1 | 0 : D5) | 0, L5 = D5 = (y5 = y5 + L5 | 0) >>> 0 < L5 >>> 0 ? D5 + 1 | 0 : D5, e4 = xA(h5 ^ y5, D5 ^ e4, 32), D5 = (CA2 = n4) + N5 | 0, N5 = o5 = e4 + o5 | 0, h5 = xA(o5 ^ a5, (h5 = G5) ^ (G5 = o5 >>> 0 < e4 >>> 0 ? D5 + 1 | 0 : D5), 40), D5 = eA2 + (s5 = n4) | 0, D5 = L5 + ((o5 = h5 + hA2 | 0) >>> 0 < hA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, b4 = o5 = o5 + y5 | 0, _3 = D5 = o5 >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5, y5 = D5, D5 = R4 + nA2 | 0, D5 = ((a5 = d5 + X3 | 0) >>> 0 < X3 >>> 0 ? D5 + 1 | 0 : D5) + y5 | 0, L5 = D5 = (y5 = o5 + a5 | 0) >>> 0 < a5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(y5 ^ U5, D5 ^ k5, 32), D5 = (T3 = n4) + l3 | 0, k5 = xA((a5 = o5 + x3 | 0) ^ d5, (D5 = a5 >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5) ^ R4, 40), u4 = D5, D5 = m3 + (d5 = n4) | 0, D5 = L5 + ((R4 = I6 + k5 | 0) >>> 0 < I6 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (L5 = y5 + R4 | 0) >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5, y5 = T3, T3 = D5, y5 = xA(o5 ^ L5, y5 ^ D5, 48), D5 = (D5 = u4) + (u4 = n4) | 0, o5 = (a5 = y5 + a5 | 0) ^ k5, k5 = D5 = a5 >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5, d5 = D5 = xA(o5, D5 ^ d5, 1), R4 = o5 = n4, AA2 = S4, Z3 = f5, f5 = h5, h5 = xA(e4 ^ b4, _3 ^ CA2, 48), D5 = (e4 = n4) + G5 | 0, G5 = o5 = h5 + N5 | 0, N5 = D5 = o5 >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5, f5 = xA(o5 ^ f5, D5 ^ s5, 1), D5 = (s5 = n4) + rA2 | 0, D5 = H5 + ((o5 = f5 + DA2 | 0) >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5) | 0, M5 = D5 = (S4 = o5 + M5 | 0) >>> 0 < M5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(S4 ^ Z3, D5 ^ P5, 32), D5 = (H5 = n4) + r5 | 0, P5 = D5 = (r5 = o5 + AA2 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, f5 = xA(f5 ^ r5, D5 ^ s5, 40), D5 = Q5 + (CA2 = n4) | 0, s5 = f5, D5 = M5 + ((f5 = g6 + f5 | 0) >>> 0 < g6 >>> 0 ? D5 + 1 | 0 : D5) | 0, M5 = f5 + S4 | 0, f5 = H5, H5 = D5 = M5 >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5, f5 = xA(o5 ^ M5, f5 ^ D5, 48), D5 = (D5 = P5) + (P5 = n4) | 0, b4 = o5 = f5 + r5 | 0, _3 = D5 = o5 >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5, S4 = F5, D5 = Y5 + IA2 | 0, F5 = D5 = (o5 = U5 + v5 | 0) >>> 0 < U5 >>> 0 ? D5 + 1 | 0 : D5, w5 = xA(o5 ^ w5, D5 ^ p5, 1), D5 = (U5 = n4) + SA2 | 0, D5 = K5 + ((r5 = w5 + gA2 | 0) >>> 0 < w5 >>> 0 ? D5 + 1 | 0 : D5) | 0, t5 = D5 = (r5 = r5 + t5 | 0) >>> 0 < t5 >>> 0 ? D5 + 1 | 0 : D5, S4 = xA(S4 ^ r5, D5 ^ q3, 32), K5 = D5 = n4, Y5 = w5, D5 = D5 + N5 | 0, D5 = (w5 = S4 + G5 | 0) >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5, v5 = w5, w5 ^= Y5, Y5 = D5, w5 = xA(w5, D5 ^ U5, 40), D5 = JA2 + (p5 = n4) | 0, D5 = t5 + ((U5 = w5 + QA2 | 0) >>> 0 < QA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, G5 = K5, K5 = D5 = (t5 = r5 + U5 | 0) >>> 0 < r5 >>> 0 ? D5 + 1 | 0 : D5, U5 = xA(S4 ^ t5, G5 ^ D5, 48), IA2 = D5 = n4, r5 = D5, S4 = xA(x3 ^ z3, l3 ^ $3, 1), G5 = D5 = n4, N5 = F5, D5 = D5 + UA2 | 0, D5 = O3 + ((F5 = S4 + yA2 | 0) >>> 0 < yA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, J5 = D5 = (F5 = F5 + J5 | 0) >>> 0 < J5 >>> 0 ? D5 + 1 | 0 : D5, e4 = xA(h5 ^ F5, D5 ^ e4, 32), D5 = ($3 = n4) + N5 | 0, N5 = o5 = e4 + o5 | 0, h5 = xA(o5 ^ S4, (h5 = G5) ^ (G5 = o5 >>> 0 < e4 >>> 0 ? D5 + 1 | 0 : D5), 40), D5 = wA2 + (z3 = n4) | 0, D5 = J5 + ((o5 = h5 + V3 | 0) >>> 0 < V3 >>> 0 ? D5 + 1 | 0 : D5) | 0, x3 = o5 = o5 + F5 | 0, l3 = D5 = o5 >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5, F5 = D5, D5 = R4 + eA2 | 0, D5 = ((S4 = d5 + hA2 | 0) >>> 0 < hA2 >>> 0 ? D5 + 1 | 0 : D5) + F5 | 0, J5 = D5 = (F5 = o5 + S4 | 0) >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(F5 ^ U5, D5 ^ r5, 32), D5 = (O3 = n4) + _3 | 0, r5 = xA((S4 = o5 + b4 | 0) ^ d5, (D5 = S4 >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5) ^ R4, 40), q3 = D5, D5 = fA2 + (d5 = n4) | 0, D5 = J5 + ((R4 = r5 + FA2 | 0) >>> 0 < FA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (J5 = F5 + R4 | 0) >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5, F5 = O3, O3 = D5, F5 = xA(o5 ^ J5, F5 ^ D5, 48), D5 = (D5 = q3) + (q3 = n4) | 0, o5 = (S4 = F5 + S4 | 0) ^ r5, r5 = D5 = S4 >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5, d5 = D5 = xA(o5, D5 ^ d5, 1), R4 = o5 = n4, AA2 = a5, Z3 = f5, f5 = h5, h5 = xA(e4 ^ x3, l3 ^ $3, 48), D5 = (e4 = n4) + G5 | 0, G5 = o5 = h5 + N5 | 0, N5 = D5 = o5 >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5, f5 = xA(o5 ^ f5, D5 ^ z3, 1), D5 = (z3 = n4) + KA2 | 0, D5 = K5 + ((o5 = f5 + iA2 | 0) >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5) | 0, t5 = D5 = (a5 = o5 + t5 | 0) >>> 0 < t5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(a5 ^ Z3, D5 ^ P5, 32), D5 = (K5 = n4) + k5 | 0, P5 = D5 = (k5 = o5 + AA2 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, f5 = xA(f5 ^ k5, D5 ^ z3, 40), D5 = B5 + ($3 = n4) | 0, z3 = f5, D5 = t5 + ((f5 = MA2 + f5 | 0) >>> 0 < MA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, t5 = f5 + a5 | 0, f5 = K5, K5 = D5 = t5 >>> 0 < a5 >>> 0 ? D5 + 1 | 0 : D5, f5 = xA(o5 ^ t5, f5 ^ D5, 48), D5 = (D5 = P5) + (P5 = n4) | 0, x3 = o5 = f5 + k5 | 0, l3 = D5 = o5 >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5, a5 = y5, D5 = Y5 + IA2 | 0, y5 = D5 = (o5 = U5 + v5 | 0) >>> 0 < U5 >>> 0 ? D5 + 1 | 0 : D5, w5 = xA(o5 ^ w5, D5 ^ p5, 1), D5 = JA2 + (U5 = n4) | 0, D5 = H5 + ((k5 = w5 + QA2 | 0) >>> 0 < QA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, M5 = D5 = (k5 = k5 + M5 | 0) >>> 0 < M5 >>> 0 ? D5 + 1 | 0 : D5, a5 = xA(a5 ^ k5, D5 ^ u4, 32), H5 = D5 = n4, Y5 = w5, D5 = D5 + N5 | 0, D5 = (w5 = a5 + G5 | 0) >>> 0 < a5 >>> 0 ? D5 + 1 | 0 : D5, v5 = w5, w5 ^= Y5, Y5 = D5, w5 = xA(w5, D5 ^ U5, 40), D5 = W3 + (p5 = n4) | 0, D5 = M5 + ((U5 = w5 + oA2 | 0) >>> 0 < oA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (M5 = k5 + U5 | 0) >>> 0 < k5 >>> 0 ? D5 + 1 | 0 : D5, k5 = H5, H5 = D5, U5 = xA(a5 ^ M5, k5 ^ D5, 48), IA2 = D5 = n4, k5 = D5, a5 = xA(s5 ^ b4, _3 ^ CA2, 1), G5 = D5 = n4, N5 = y5, D5 = D5 + YA2 | 0, D5 = T3 + ((y5 = a5 + cA2 | 0) >>> 0 < cA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, L5 = D5 = (y5 = y5 + L5 | 0) >>> 0 < L5 >>> 0 ? D5 + 1 | 0 : D5, e4 = xA(h5 ^ y5, D5 ^ e4, 32), D5 = (CA2 = n4) + N5 | 0, N5 = o5 = e4 + o5 | 0, h5 = xA(o5 ^ a5, (h5 = G5) ^ (G5 = o5 >>> 0 < e4 >>> 0 ? D5 + 1 | 0 : D5), 40), D5 = UA2 + (s5 = n4) | 0, D5 = L5 + ((o5 = h5 + yA2 | 0) >>> 0 < yA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, b4 = o5 = o5 + y5 | 0, _3 = D5 = o5 >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5, y5 = D5, D5 = R4 + kA2 | 0, D5 = ((a5 = d5 + EA2 | 0) >>> 0 < EA2 >>> 0 ? D5 + 1 | 0 : D5) + y5 | 0, L5 = D5 = (y5 = o5 + a5 | 0) >>> 0 < a5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(y5 ^ U5, D5 ^ k5, 32), D5 = (T3 = n4) + l3 | 0, k5 = xA((a5 = o5 + x3 | 0) ^ d5, (D5 = a5 >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5) ^ R4, 40), u4 = D5, D5 = Q5 + (d5 = n4) | 0, D5 = L5 + ((R4 = k5 + g6 | 0) >>> 0 < g6 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (L5 = y5 + R4 | 0) >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5, y5 = T3, T3 = D5, y5 = xA(o5 ^ L5, y5 ^ D5, 48), D5 = (D5 = u4) + (u4 = n4) | 0, o5 = (a5 = y5 + a5 | 0) ^ k5, k5 = D5 = a5 >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5, d5 = D5 = xA(o5, D5 ^ d5, 1), R4 = o5 = n4, AA2 = S4, Z3 = f5, f5 = h5, h5 = xA(e4 ^ b4, _3 ^ CA2, 48), D5 = (e4 = n4) + G5 | 0, G5 = o5 = h5 + N5 | 0, N5 = D5 = o5 >>> 0 < h5 >>> 0 ? D5 + 1 | 0 : D5, f5 = xA(o5 ^ f5, D5 ^ s5, 1), D5 = (b4 = n4) + BA2 | 0, D5 = H5 + ((o5 = f5 + j3 | 0) >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5) | 0, M5 = D5 = (S4 = o5 + M5 | 0) >>> 0 < M5 >>> 0 ? D5 + 1 | 0 : D5, o5 = xA(S4 ^ Z3, D5 ^ P5, 32), D5 = (H5 = n4) + r5 | 0, P5 = r5 = o5 + AA2 | 0, s5 = D5 = r5 >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, f5 = xA(f5 ^ r5, D5 ^ b4, 40), D5 = nA2 + (AA2 = n4) | 0, b4 = f5, D5 = M5 + ((f5 = X3 + f5 | 0) >>> 0 < X3 >>> 0 ? D5 + 1 | 0 : D5) | 0, r5 = f5 + S4 | 0, f5 = H5, H5 = D5 = r5 >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5, f5 = xA(o5 ^ r5, f5 ^ D5, 48), D5 = (D5 = s5) + (s5 = n4) | 0, P5 = o5 = f5 + P5 | 0, _3 = D5 = o5 >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5, S4 = F5, D5 = Y5 + IA2 | 0, F5 = D5 = (o5 = U5 + v5 | 0) >>> 0 < U5 >>> 0 ? D5 + 1 | 0 : D5, w5 = xA(o5 ^ w5, D5 ^ p5, 1), D5 = (U5 = n4) + m3 | 0, D5 = K5 + ((M5 = I6 + w5 | 0) >>> 0 < w5 >>> 0 ? D5 + 1 | 0 : D5) | 0, t5 = D5 = (M5 = M5 + t5 | 0) >>> 0 < t5 >>> 0 ? D5 + 1 | 0 : D5, K5 = S4 = xA(S4 ^ M5, D5 ^ q3, 32), Y5 = D5 = n4, v5 = w5, D5 = D5 + N5 | 0, D5 = (w5 = S4 + G5 | 0) >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5, p5 = w5, w5 ^= v5, v5 = D5, w5 = xA(w5, D5 ^ U5, 40), D5 = rA2 + (G5 = n4) | 0, D5 = t5 + ((S4 = w5 + DA2 | 0) >>> 0 < DA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, N5 = (S4 = S4 + M5 | 0) ^ K5, K5 = D5 = S4 >>> 0 < M5 >>> 0 ? D5 + 1 | 0 : D5, M5 = xA(N5, D5 ^ Y5, 48), q3 = D5 = n4, U5 = D5, Y5 = t5 = xA(x3 ^ z3, l3 ^ $3, 1), N5 = D5 = n4, z3 = F5, D5 = D5 + wA2 | 0, D5 = O3 + ((F5 = t5 + V3 | 0) >>> 0 < V3 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (F5 = F5 + J5 | 0) >>> 0 < J5 >>> 0 ? D5 + 1 | 0 : D5, J5 = e4, e4 = D5, t5 = xA(h5 ^ F5, J5 ^ D5, 32), D5 = (Z3 = n4) + z3 | 0, J5 = o5 = t5 + o5 | 0, h5 = xA(h5 = o5 ^ Y5, (Y5 = o5 >>> 0 < t5 >>> 0 ? D5 + 1 | 0 : D5) ^ N5, 40), D5 = SA2 + (N5 = n4) | 0, D5 = e4 + ((o5 = h5 + gA2 | 0) >>> 0 < gA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, e4 = o5 = o5 + F5 | 0, z3 = D5 = o5 >>> 0 < F5 >>> 0 ? D5 + 1 | 0 : D5, F5 = D5, D5 = R4 + nA2 | 0, D5 = ((O3 = X3) >>> 0 > (X3 = d5 + X3 | 0) >>> 0 ? D5 + 1 | 0 : D5) + F5 | 0, nA2 = D5 = (o5 = o5 + X3 | 0) >>> 0 < X3 >>> 0 ? D5 + 1 | 0 : D5, X3 = xA(o5 ^ M5, D5 ^ U5, 32), D5 = (x3 = n4) + _3 | 0, U5 = xA((F5 = P5 + X3 | 0) ^ d5, (D5 = F5 >>> 0 < X3 >>> 0 ? D5 + 1 | 0 : D5) ^ R4, 40), O3 = D5, D5 = rA2 + (l3 = n4) | 0, D5 = nA2 + ((d5 = DA2) >>> 0 > (DA2 = U5 + DA2 | 0) >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (DA2 = o5 + DA2 | 0) >>> 0 < o5 >>> 0 ? D5 + 1 | 0 : D5, o5 = X3 ^ DA2, X3 = D5;
              rA2 = xA(o5, D5 ^ x3, 48), D5 = (nA2 = n4) + O3 | 0, F5 = D5 = (o5 = F5 + rA2 | 0) >>> 0 < rA2 >>> 0 ? D5 + 1 | 0 : D5, D5 = xA(o5 ^ U5, D5 ^ l3, 1), U5 = n4, x3 = D5, l3 = a5, a5 = gA2, O3 = SA2, SA2 = xA(t5 ^ e4, z3 ^ Z3, 48), D5 = (t5 = n4) + Y5 | 0, Y5 = a5, J5 = D5 = (gA2 = J5 + SA2 | 0) >>> 0 < SA2 >>> 0 ? D5 + 1 | 0 : D5, a5 = xA(h5 ^ (e4 = gA2), D5 ^ N5, 1), D5 = (N5 = n4) + O3 | 0, D5 = K5 + (a5 >>> 0 > (gA2 = Y5 + a5 | 0) >>> 0 ? D5 + 1 | 0 : D5) | 0, h5 = D5 = (gA2 = S4 + gA2 | 0) >>> 0 < S4 >>> 0 ? D5 + 1 | 0 : D5, f5 = xA(f5 ^ gA2, D5 ^ s5, 32), D5 = (D5 = k5) + (k5 = n4) | 0, K5 = S4 = f5 + l3 | 0, Y5 = D5 = S4 >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5, S4 = xA(S4 ^ a5, D5 ^ N5, 40), D5 = (N5 = n4) + KA2 | 0, D5 = (S4 >>> 0 > (iA2 = S4 + iA2 | 0) >>> 0 ? D5 + 1 | 0 : D5) + h5 | 0, h5 = D5 = (h5 = iA2) >>> 0 > (iA2 = gA2 + iA2 | 0) >>> 0 ? D5 + 1 | 0 : D5, f5 = xA(f5 ^ iA2, D5 ^ k5, 48), D5 = (a5 = n4) + Y5 | 0, k5 = gA2 = f5 + K5 | 0, KA2 = D5 = gA2 >>> 0 < f5 >>> 0 ? D5 + 1 | 0 : D5, K5 = I6, Y5 = m3, D5 = v5 + q3 | 0, gA2 = D5 = (I6 = M5 + p5 | 0) >>> 0 < M5 >>> 0 ? D5 + 1 | 0 : D5, m3 = xA(I6 ^ w5, D5 ^ G5, 1), D5 = (M5 = n4) + Y5 | 0, D5 = H5 + ((w5 = K5 + m3 | 0) >>> 0 < m3 >>> 0 ? D5 + 1 | 0 : D5) | 0, y5 = xA((w5 = w5 + r5 | 0) ^ y5, (D5 = w5 >>> 0 < r5 >>> 0 ? D5 + 1 | 0 : D5) ^ u4, 32), K5 = D5, H5 = EA2, EA2 = m3, D5 = (r5 = n4) + J5 | 0, J5 = M5, M5 = D5 = (m3 = y5 + e4 | 0) >>> 0 < y5 >>> 0 ? D5 + 1 | 0 : D5, EA2 = xA(m3 ^ EA2, J5 ^ D5, 40), D5 = (e4 = n4) + kA2 | 0, D5 = ((kA2 = H5 + EA2 | 0) >>> 0 < EA2 >>> 0 ? D5 + 1 | 0 : D5) + K5 | 0, K5 = kA2, w5 = y5 ^ (kA2 = w5 + kA2 | 0), y5 = D5 = K5 >>> 0 > kA2 >>> 0 ? D5 + 1 | 0 : D5, D5 = xA(w5, D5 ^ r5, 48), v5 = w5 = n4, r5 = D5, J5 = j3, K5 = BA2, j3 = xA(P5 ^ b4, _3 ^ AA2, 1), Y5 = D5 = n4, D5 = D5 + eA2 | 0, D5 = T3 + ((j3 = (H5 = j3) + hA2 | 0) >>> 0 < hA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, hA2 = D5 = (j3 = L5 + j3 | 0) >>> 0 < L5 >>> 0 ? D5 + 1 | 0 : D5, BA2 = xA(j3 ^ SA2, D5 ^ t5, 32), D5 = (L5 = n4) + gA2 | 0, gA2 = I6 = BA2 + I6 | 0, SA2 = xA(I6 ^ H5, (t5 = I6 >>> 0 < BA2 >>> 0 ? D5 + 1 | 0 : D5) ^ Y5, 40), D5 = (D5 = K5) + (K5 = n4) | 0, D5 = hA2 + ((I6 = SA2 + J5 | 0) >>> 0 < SA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, hA2 = I6 = I6 + j3 | 0, eA2 = D5 = I6 >>> 0 < j3 >>> 0 ? D5 + 1 | 0 : D5, j3 = D5, D5 = U5 + JA2 | 0, D5 = ((H5 = QA2) >>> 0 > (QA2 = x3 + QA2 | 0) >>> 0 ? D5 + 1 | 0 : D5) + j3 | 0, JA2 = D5 = (j3 = I6 + QA2 | 0) >>> 0 < QA2 >>> 0 ? D5 + 1 | 0 : D5, QA2 = xA(r5 ^ j3, D5 ^ w5, 32), D5 = (H5 = n4) + KA2 | 0, w5 = I6 = QA2 + k5 | 0, I6 = xA(I6 ^ x3, (J5 = U5) ^ (U5 = I6 >>> 0 < QA2 >>> 0 ? D5 + 1 | 0 : D5), 40), D5 = YA2 + (Y5 = n4) | 0, YA2 = I6, D5 = JA2 + ((I6 = cA2 + I6 | 0) >>> 0 < cA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (I6 = I6 + j3 | 0) >>> 0 < j3 >>> 0 ? D5 + 1 | 0 : D5, JA2 = I6, p5 = (c4[A7 + 8 | 0] | c4[A7 + 9 | 0] << 8 | c4[A7 + 10 | 0] << 16 | c4[A7 + 11 | 0] << 24) ^ I6, J5 = D5, G5 = D5 ^ (c4[A7 + 12 | 0] | c4[A7 + 13 | 0] << 8 | c4[A7 + 14 | 0] << 16 | c4[A7 + 15 | 0] << 24), j3 = xA(BA2 ^ hA2, L5 ^ eA2, 48), D5 = (hA2 = n4) + t5 | 0, t5 = I6 = j3 + gA2 | 0, eA2 = D5 = I6 >>> 0 < j3 >>> 0 ? D5 + 1 | 0 : D5, BA2 = FA2, D5 = M5 + v5 | 0, FA2 = D5 = (I6 = r5 + m3 | 0) >>> 0 < m3 >>> 0 ? D5 + 1 | 0 : D5, EA2 = xA(I6 ^ EA2, D5 ^ e4, 1), D5 = (r5 = n4) + fA2 | 0, D5 = ((BA2 = EA2 + BA2 | 0) >>> 0 < EA2 >>> 0 ? D5 + 1 | 0 : D5) + h5 | 0, BA2 = D5 = (fA2 = BA2 + iA2 | 0) >>> 0 < BA2 >>> 0 ? D5 + 1 | 0 : D5, gA2 = xA(fA2 ^ rA2, D5 ^ nA2, 32), D5 = (m3 = n4) + eA2 | 0, iA2 = D5 = (cA2 = gA2 + t5 | 0) >>> 0 < gA2 >>> 0 ? D5 + 1 | 0 : D5, rA2 = gA2, gA2 = xA(EA2 ^ cA2, D5 ^ r5, 40), D5 = (h5 = n4) + UA2 | 0, D5 = (gA2 >>> 0 > (EA2 = gA2 + yA2 | 0) >>> 0 ? D5 + 1 | 0 : D5) + BA2 | 0, M5 = m3, m3 = D5 = (fA2 = EA2 + fA2 | 0) >>> 0 < EA2 >>> 0 ? D5 + 1 | 0 : D5, EA2 = xA(rA2 ^ (yA2 = fA2), M5 ^ D5, 48), D5 = (r5 = n4) + iA2 | 0, D5 = (BA2 = EA2 + cA2 | 0) >>> 0 < EA2 >>> 0 ? D5 + 1 | 0 : D5, cA2 = BA2, BA2 ^= p5, C5[A7 + 8 | 0] = BA2, C5[A7 + 9 | 0] = BA2 >>> 8, C5[A7 + 10 | 0] = BA2 >>> 16, C5[A7 + 11 | 0] = BA2 >>> 24, iA2 = D5, D5 ^= G5, C5[A7 + 12 | 0] = D5, C5[A7 + 13 | 0] = D5 >>> 8, C5[A7 + 14 | 0] = D5 >>> 16, C5[A7 + 15 | 0] = D5 >>> 24, fA2 = I6, BA2 = FA2, I6 = j3, j3 = xA(S4 ^ k5, N5 ^ KA2, 1), D5 = (UA2 = n4) + Q5 | 0, D5 = (j3 >>> 0 > (FA2 = j3 + g6 | 0) >>> 0 ? D5 + 1 | 0 : D5) + X3 | 0, DA2 = D5 = (k5 = FA2) >>> 0 > (FA2 = DA2 + FA2 | 0) >>> 0 ? D5 + 1 | 0 : D5, I6 = xA(I6 ^ FA2, D5 ^ hA2, 32), D5 = (D5 = BA2) + (BA2 = n4) | 0, hA2 = D5 = (fA2 = I6 + fA2 | 0) >>> 0 < I6 >>> 0 ? D5 + 1 | 0 : D5, rA2 = I6, fA2 = xA(j3 ^ (X3 = fA2), D5 ^ UA2, 40), D5 = (S4 = n4) + B5 | 0, D5 = DA2 + ((I6 = fA2 + MA2 | 0) >>> 0 < fA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (I6 = I6 + FA2 | 0) >>> 0 < FA2 >>> 0 ? D5 + 1 | 0 : D5, DA2 = I6, I6 ^= rA2, rA2 = D5, FA2 = xA(I6, D5 ^ BA2, 48), D5 = (k5 = n4) + hA2 | 0, X3 = I6 = FA2 + X3 | 0, hA2 = I6 >>> 0 < FA2 >>> 0 ? D5 + 1 | 0 : D5, SA2 = I6 = xA(t5 ^ SA2, K5 ^ eA2, 1), UA2 = D5 = n4, D5 = D5 + W3 | 0, D5 = y5 + ((I6 = I6 + oA2 | 0) >>> 0 < oA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, W3 = D5 = (j3 = I6 + kA2 | 0) >>> 0 < kA2 >>> 0 ? D5 + 1 | 0 : D5, I6 = (BA2 = xA(f5 ^ j3, D5 ^ a5, 32)) + o5 | 0, D5 = (o5 = n4) + F5 | 0, kA2 = I6, I6 = (oA2 = xA(y5 = I6 ^ SA2, (SA2 = I6 >>> 0 < BA2 >>> 0 ? D5 + 1 | 0 : D5) ^ UA2, 40)) + V3 | 0, D5 = (V3 = n4) + wA2 | 0, D5 = W3 + (I6 >>> 0 < oA2 >>> 0 ? D5 + 1 | 0 : D5) | 0, D5 = (W3 = I6 + j3 | 0) >>> 0 < j3 >>> 0 ? D5 + 1 | 0 : D5, j3 = W3 ^ GA2 ^ X3, C5[0 | (I6 = A7)] = j3, C5[I6 + 1 | 0] = j3 >>> 8, C5[I6 + 2 | 0] = j3 >>> 16, C5[I6 + 3 | 0] = j3 >>> 24, j3 = D5 ^ i2 ^ hA2, C5[I6 + 4 | 0] = j3, C5[I6 + 5 | 0] = j3 >>> 8, C5[I6 + 6 | 0] = j3 >>> 16, C5[I6 + 7 | 0] = j3 >>> 24, j3 = (BA2 = xA(W3 ^ BA2, D5 ^ o5, 48)) + kA2 | 0, D5 = (kA2 = n4) + SA2 | 0, D5 = (SA2 = j3 >>> 0 < BA2 >>> 0 ? D5 + 1 | 0 : D5) ^ (c4[I6 + 20 | 0] | c4[I6 + 21 | 0] << 8 | c4[I6 + 22 | 0] << 16 | c4[I6 + 23 | 0] << 24) ^ rA2, W3 = (c4[I6 + 16 | 0] | c4[I6 + 17 | 0] << 8 | c4[I6 + 18 | 0] << 16 | c4[I6 + 19 | 0] << 24) ^ DA2 ^ j3, C5[I6 + 16 | 0] = W3, C5[I6 + 17 | 0] = W3 >>> 8, C5[I6 + 18 | 0] = W3 >>> 16, C5[I6 + 19 | 0] = W3 >>> 24, C5[I6 + 20 | 0] = D5, C5[I6 + 21 | 0] = D5 >>> 8, C5[I6 + 22 | 0] = D5 >>> 16, C5[I6 + 23 | 0] = D5 >>> 24, I6 = xA(QA2 ^ JA2, J5 ^ H5, 48), W3 = n4, DA2 = c4[A7 + 36 | 0] | c4[A7 + 37 | 0] << 8 | c4[A7 + 38 | 0] << 16 | c4[A7 + 39 | 0] << 24, D5 = (c4[A7 + 32 | 0] | c4[A7 + 33 | 0] << 8 | c4[A7 + 34 | 0] << 16 | c4[A7 + 35 | 0] << 24) ^ xA(gA2 ^ cA2, h5 ^ iA2, 1) ^ I6, C5[A7 + 32 | 0] = D5, C5[A7 + 33 | 0] = D5 >>> 8, C5[A7 + 34 | 0] = D5 >>> 16, C5[A7 + 35 | 0] = D5 >>> 24, D5 = n4 ^ DA2 ^ W3, C5[A7 + 36 | 0] = D5, C5[A7 + 37 | 0] = D5 >>> 8, C5[A7 + 38 | 0] = D5 >>> 16, C5[A7 + 39 | 0] = D5 >>> 24, D5 = U5 + W3 | 0, D5 = (DA2 = I6 + w5 | 0) >>> 0 < I6 >>> 0 ? D5 + 1 | 0 : D5, gA2 = (c4[(I6 = A7) + 28 | 0] | c4[I6 + 29 | 0] << 8 | c4[I6 + 30 | 0] << 16 | c4[I6 + 31 | 0] << 24) ^ m3 ^ D5, W3 = (c4[I6 + 24 | 0] | c4[I6 + 25 | 0] << 8 | c4[I6 + 26 | 0] << 16 | c4[I6 + 27 | 0] << 24) ^ yA2 ^ DA2, C5[I6 + 24 | 0] = W3, C5[I6 + 25 | 0] = W3 >>> 8, C5[I6 + 26 | 0] = W3 >>> 16, C5[I6 + 27 | 0] = W3 >>> 24, C5[I6 + 28 | 0] = gA2, C5[I6 + 29 | 0] = gA2 >>> 8, C5[I6 + 30 | 0] = gA2 >>> 16, C5[I6 + 31 | 0] = gA2 >>> 24, gA2 = c4[I6 + 44 | 0] | c4[I6 + 45 | 0] << 8 | c4[I6 + 46 | 0] << 16 | c4[I6 + 47 | 0] << 24, I6 = FA2 ^ (c4[I6 + 40 | 0] | c4[I6 + 41 | 0] << 8 | c4[I6 + 42 | 0] << 16 | c4[I6 + 43 | 0] << 24) ^ xA(j3 ^ oA2, V3 ^ SA2, 1), C5[A7 + 40 | 0] = I6, C5[A7 + 41 | 0] = I6 >>> 8, C5[A7 + 42 | 0] = I6 >>> 16, C5[A7 + 43 | 0] = I6 >>> 24, I6 = k5 ^ n4 ^ gA2, C5[A7 + 44 | 0] = I6, C5[A7 + 45 | 0] = I6 >>> 8, C5[A7 + 46 | 0] = I6 >>> 16, C5[A7 + 47 | 0] = I6 >>> 24, j3 = c4[A7 + 60 | 0] | c4[A7 + 61 | 0] << 8 | c4[A7 + 62 | 0] << 16 | c4[A7 + 63 | 0] << 24, I6 = BA2 ^ (c4[A7 + 56 | 0] | c4[A7 + 57 | 0] << 8 | c4[A7 + 58 | 0] << 16 | c4[A7 + 59 | 0] << 24) ^ xA(X3 ^ fA2, S4 ^ hA2, 1), C5[A7 + 56 | 0] = I6, C5[A7 + 57 | 0] = I6 >>> 8, C5[A7 + 58 | 0] = I6 >>> 16, C5[A7 + 59 | 0] = I6 >>> 24, I6 = kA2 ^ n4 ^ j3, C5[A7 + 60 | 0] = I6, C5[A7 + 61 | 0] = I6 >>> 8, C5[A7 + 62 | 0] = I6 >>> 16, C5[A7 + 63 | 0] = I6 >>> 24, j3 = c4[A7 + 52 | 0] | c4[A7 + 53 | 0] << 8 | c4[A7 + 54 | 0] << 16 | c4[A7 + 55 | 0] << 24, I6 = EA2 ^ (c4[A7 + 48 | 0] | c4[A7 + 49 | 0] << 8 | c4[A7 + 50 | 0] << 16 | c4[A7 + 51 | 0] << 24) ^ xA(DA2 ^ YA2, D5 ^ Y5, 1), C5[A7 + 48 | 0] = I6, C5[A7 + 49 | 0] = I6 >>> 8, C5[A7 + 50 | 0] = I6 >>> 16, C5[A7 + 51 | 0] = I6 >>> 24, I6 = r5 ^ n4 ^ j3, C5[A7 + 52 | 0] = I6, C5[A7 + 53 | 0] = I6 >>> 8, C5[A7 + 54 | 0] = I6 >>> 16, C5[A7 + 55 | 0] = I6 >>> 24;
            }
            function J4(A7, I6, g6, B5, Q5, i2, E5) {
              var D5, h5, w5, F5, y5, f5, S4, a5, k5, M5, t5, U5, J5, K5, e4, N5, G5, H5, s5, p5, L5, d5, P5, R4, b4, v5, u4, z3, O3, q3, x3, j3, m3, l3, _3, X3, T3, Z3, $3, AA2, IA2, gA2, BA2, QA2, iA2, EA2, DA2, oA2, cA2 = 0, hA2 = 0, wA2 = 0, FA2 = 0, yA2 = 0, fA2 = 0, SA2 = 0, aA2 = 0, kA2 = 0, MA2 = 0, rA2 = 0, nA2 = 0, tA2 = 0, UA2 = 0, JA2 = 0, KA2 = 0, eA2 = 0, YA2 = 0, NA2 = 0, GA2 = 0, HA2 = 0, sA2 = 0, pA2 = 0, LA2 = 0, dA2 = 0, PA2 = 0, bA2 = 0, vA2 = 0, zA2 = 0, OA2 = 0, qA2 = 0, WA2 = 0, xA2 = 0, VA2 = 0, jA2 = 0, mA2 = 0, lA2 = 0, _A2 = 0, XA2 = 0, TA2 = 0, ZA2 = 0, $A2 = 0, II2 = 0, gI2 = 0, CI2 = 0, BI2 = 0;
              return r4 = w5 = r4 - 560 | 0, uA(wA2 = w5 + 352 | 0), E5 && CA(wA2, 39744, 34, 0), RA(w5 + 288 | 0, i2, 32, 0), CA(fA2 = w5 + 352 | 0, w5 + 320 | 0, 32, 0), CA(fA2, g6, B5, Q5), W2(fA2, aA2 = w5 + 224 | 0), MA2 = c4[(hA2 = i2) + 32 | 0] | c4[hA2 + 33 | 0] << 8 | c4[hA2 + 34 | 0] << 16 | c4[hA2 + 35 | 0] << 24, rA2 = c4[hA2 + 36 | 0] | c4[hA2 + 37 | 0] << 8 | c4[hA2 + 38 | 0] << 16 | c4[hA2 + 39 | 0] << 24, FA2 = c4[hA2 + 40 | 0] | c4[hA2 + 41 | 0] << 8 | c4[hA2 + 42 | 0] << 16 | c4[hA2 + 43 | 0] << 24, cA2 = c4[hA2 + 44 | 0] | c4[hA2 + 45 | 0] << 8 | c4[hA2 + 46 | 0] << 16 | c4[hA2 + 47 | 0] << 24, wA2 = c4[hA2 + 48 | 0] | c4[hA2 + 49 | 0] << 8 | c4[hA2 + 50 | 0] << 16 | c4[hA2 + 51 | 0] << 24, i2 = c4[hA2 + 52 | 0] | c4[hA2 + 53 | 0] << 8 | c4[hA2 + 54 | 0] << 16 | c4[hA2 + 55 | 0] << 24, yA2 = c4[hA2 + 60 | 0] | c4[hA2 + 61 | 0] << 8 | c4[hA2 + 62 | 0] << 16 | c4[hA2 + 63 | 0] << 24, hA2 = c4[hA2 + 56 | 0] | c4[hA2 + 57 | 0] << 8 | c4[hA2 + 58 | 0] << 16 | c4[hA2 + 59 | 0] << 24, C5[A7 + 56 | 0] = hA2, C5[A7 + 57 | 0] = hA2 >>> 8, C5[A7 + 58 | 0] = hA2 >>> 16, C5[A7 + 59 | 0] = hA2 >>> 24, C5[A7 + 60 | 0] = yA2, C5[A7 + 61 | 0] = yA2 >>> 8, C5[A7 + 62 | 0] = yA2 >>> 16, C5[A7 + 63 | 0] = yA2 >>> 24, C5[A7 + 48 | 0] = wA2, C5[A7 + 49 | 0] = wA2 >>> 8, C5[A7 + 50 | 0] = wA2 >>> 16, C5[A7 + 51 | 0] = wA2 >>> 24, C5[A7 + 52 | 0] = i2, C5[A7 + 53 | 0] = i2 >>> 8, C5[A7 + 54 | 0] = i2 >>> 16, C5[A7 + 55 | 0] = i2 >>> 24, C5[A7 + 40 | 0] = FA2, C5[A7 + 41 | 0] = FA2 >>> 8, C5[A7 + 42 | 0] = FA2 >>> 16, C5[A7 + 43 | 0] = FA2 >>> 24, C5[A7 + 44 | 0] = cA2, C5[A7 + 45 | 0] = cA2 >>> 8, C5[A7 + 46 | 0] = cA2 >>> 16, C5[A7 + 47 | 0] = cA2 >>> 24, C5[0 | (i2 = A7 + 32 | 0)] = MA2, C5[i2 + 1 | 0] = MA2 >>> 8, C5[i2 + 2 | 0] = MA2 >>> 16, C5[i2 + 3 | 0] = MA2 >>> 24, C5[i2 + 4 | 0] = rA2, C5[i2 + 5 | 0] = rA2 >>> 8, C5[i2 + 6 | 0] = rA2 >>> 16, C5[i2 + 7 | 0] = rA2 >>> 24, Y4(aA2), V2(w5, aA2), QI(A7, w5), uA(fA2), E5 && CA(fA2, 39744, 34, 0), CA(E5 = w5 + 352 | 0, A7, 64, 0), CA(E5, g6, B5, Q5), W2(E5, SA2 = w5 + 160 | 0), Y4(SA2), C5[w5 + 288 | 0] = 248 & c4[w5 + 288 | 0], C5[w5 + 319 | 0] = 63 & c4[w5 + 319 | 0] | 64, g6 = c4[23 + (A7 = h5 = w5 + 288 | 0) | 0], FA2 = AI(F5 = c4[A7 + 21 | 0] | c4[A7 + 22 | 0] << 8 | g6 << 16 & 2031616, 0, y5 = (c4[SA2 + 28 | 0] | c4[SA2 + 29 | 0] << 8 | c4[SA2 + 30 | 0] << 16 | c4[SA2 + 31 | 0] << 24) >>> 7 | 0, 0), wA2 = n4, g6 = 0, Q5 = (A7 = c4[SA2 + 27 | 0]) << 8 | (cA2 = c4[SA2 + 23 | 0] | c4[SA2 + 24 | 0] << 8 | c4[SA2 + 25 | 0] << 16 | c4[SA2 + 26 | 0] << 24) >>> 24, B5 = c4[SA2 + 28 | 0], A7 = AI(f5 = 2097151 & ((3 & (rA2 = (A7 = 0) | g6)) << 30 | (g6 = (B5 <<= 16) | Q5) >>> 2), 0, S4 = (E5 = c4[h5 + 23 | 0] | c4[h5 + 24 | 0] << 8 | c4[h5 + 25 | 0] << 16 | c4[h5 + 26 | 0] << 24) >>> 5 & 2097151, 0), g6 = n4 + wA2 | 0, B5 = A7 >>> 0 > (Q5 = A7 + FA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, A7 = AI(a5 = (g6 = c4[SA2 + 23 | 0]) << 16 & 2031616 | c4[SA2 + 21 | 0] | c4[SA2 + 22 | 0] << 8, 0, k5 = (c4[h5 + 28 | 0] | c4[h5 + 29 | 0] << 8 | c4[h5 + 30 | 0] << 16 | c4[h5 + 31 | 0] << 24) >>> 7 | 0, 0), B5 = n4 + B5 | 0, wA2 = g6 = A7 + Q5 | 0, Q5 = A7 >>> 0 > g6 >>> 0 ? B5 + 1 | 0 : B5, B5 = 0, E5 = (A7 = c4[h5 + 27 | 0]) << 8 | E5 >>> 24, A7 = c4[h5 + 28 | 0], A7 = AI(M5 = 2097151 & ((3 & (B5 |= g6 = 0)) << 30 | (g6 = (A7 <<= 16) | E5) >>> 2), 0, t5 = cA2 >>> 5 & 2097151, 0), g6 = n4 + Q5 | 0, hA2 = B5 = A7 + wA2 | 0, Q5 = A7 >>> 0 > B5 >>> 0 ? g6 + 1 | 0 : g6, cA2 = AI(S4, 0, t5, 0), wA2 = n4, g6 = 0, E5 = (A7 = c4[h5 + 19 | 0]) << 8 | (YA2 = c4[h5 + 15 | 0] | c4[h5 + 16 | 0] << 8 | c4[h5 + 17 | 0] << 16 | c4[h5 + 18 | 0] << 24) >>> 24, A7 = c4[h5 + 20 | 0], g6 = AI(U5 = (7 & (B5 = g6 | g6)) << 29 | (g6 = (A7 <<= 16) | E5) >>> 3, rA2 = B5 >>> 3 | 0, y5, 0), A7 = n4 + wA2 | 0, A7 = g6 >>> 0 > (B5 = g6 + cA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, E5 = (g6 = AI(F5, 0, f5, 0)) + B5 | 0, B5 = n4 + A7 | 0, g6 = g6 >>> 0 > (cA2 = E5) >>> 0 ? B5 + 1 | 0 : B5, B5 = 0, wA2 = (A7 = c4[SA2 + 19 | 0]) << 8 | (JA2 = c4[SA2 + 15 | 0] | c4[SA2 + 16 | 0] << 8 | c4[SA2 + 17 | 0] << 16 | c4[SA2 + 18 | 0] << 24) >>> 24, E5 = c4[SA2 + 20 | 0], A7 = AI(J5 = (7 & (FA2 = (A7 = 0) | B5)) << 29 | (B5 = (E5 <<= 16) | wA2) >>> 3, K5 = FA2 >>> 3 | 0, k5, 0), g6 = n4 + g6 | 0, g6 = A7 >>> 0 > (B5 = A7 + cA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, A7 = AI(a5, 0, M5, 0), g6 = n4 + g6 | 0, MA2 = g6 = A7 >>> 0 > (aA2 = A7 + B5 | 0) >>> 0 ? g6 + 1 | 0 : g6, nA2 = A7 = g6 - ((aA2 >>> 0 < 4293918720) - 1 | 0) | 0, B5 = (g6 = A7 >>> 21 | 0) + Q5 | 0, cA2 = B5 = (A7 = (2097151 & A7) << 11 | (FA2 = aA2 - -1048576 | 0) >>> 21) >>> 0 > (hA2 = A7 + hA2 | 0) >>> 0 ? B5 + 1 | 0 : B5, UA2 = A7 = B5 - ((hA2 >>> 0 < 4293918720) - 1 | 0) | 0, yA2 = (2097151 & A7) << 11 | (wA2 = hA2 - -1048576 | 0) >>> 21, E5 = A7 >>> 21 | 0, A7 = AI(k5, 0, t5, 0), g6 = n4, B5 = A7, A7 = AI(y5, 0, S4, 0), g6 = n4 + g6 | 0, g6 = A7 >>> 0 > (B5 = B5 + A7 | 0) >>> 0 ? g6 + 1 | 0 : g6, tA2 = (A7 = B5) + (B5 = AI(f5, 0, M5, 0)) | 0, A7 = n4 + g6 | 0, A7 = B5 >>> 0 > tA2 >>> 0 ? A7 + 1 | 0 : A7, fA2 = tA2 - (g6 = -2097152 & (B5 = tA2 - -1048576 | 0)) | 0, g6 = (A7 - ((131071 & (Q5 = A7 - ((tA2 >>> 0 < 4293918720) - 1 | 0) | 0)) + (g6 >>> 0 > tA2 >>> 0) | 0) | 0) + E5 | 0, O3 = g6 = (A7 = yA2 + fA2 | 0) >>> 0 < fA2 >>> 0 ? g6 + 1 | 0 : g6, q3 = A7, fA2 = AI(A7, g6, 470296, 0), yA2 = n4, g6 = AI(y5, 0, M5, 0), A7 = n4, E5 = g6, g6 = AI(f5, 0, k5, 0), A7 = n4 + A7 | 0, g6 = g6 >>> 0 > (E5 = E5 + g6 | 0) >>> 0 ? A7 + 1 | 0 : A7, A7 = Q5 >>> 21 | 0, Q5 = (2097151 & Q5) << 11 | B5 >>> 21, B5 = A7 + g6 | 0, sA2 = Q5 = (B5 = Q5 >>> 0 > (E5 = Q5 + E5 | 0) >>> 0 ? B5 + 1 | 0 : B5) - ((E5 >>> 0 < 4293918720) - 1 | 0) | 0, A7 = E5 - (g6 = -2097152 & (HA2 = E5 - -1048576 | 0)) | 0, x3 = E5 = B5 - ((131071 & Q5) + (g6 >>> 0 > E5 >>> 0) | 0) | 0, j3 = g6 = hA2 - (B5 = -2097152 & wA2) | 0, m3 = Q5 = cA2 - ((B5 >>> 0 > hA2 >>> 0) + UA2 | 0) | 0, l3 = A7, B5 = AI(A7, E5, 666643, 0), A7 = n4 + yA2 | 0, A7 = B5 >>> 0 > (E5 = B5 + fA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, B5 = AI(g6, Q5, 654183, 0), g6 = n4 + A7 | 0, kA2 = Q5 = B5 + E5 | 0, wA2 = B5 >>> 0 > Q5 >>> 0 ? g6 + 1 | 0 : g6, tA2 = aA2 - (A7 = -2097152 & FA2) | 0, nA2 = MA2 - ((A7 >>> 0 > aA2 >>> 0) + nA2 | 0) | 0, g6 = AI(f5, 0, U5, rA2), B5 = n4, Q5 = (A7 = g6) + (g6 = AI(e4 = YA2 >>> 6 & 2097151, 0, y5, 0)) | 0, A7 = n4 + B5 | 0, A7 = g6 >>> 0 > Q5 >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(S4, 0, a5, 0), B5 = n4 + A7 | 0, B5 = g6 >>> 0 > (Q5 = g6 + Q5 | 0) >>> 0 ? B5 + 1 | 0 : B5, A7 = AI(F5, 0, t5, 0), g6 = n4 + B5 | 0, g6 = A7 >>> 0 > (Q5 = A7 + Q5 | 0) >>> 0 ? g6 + 1 | 0 : g6, B5 = AI(k5, 0, N5 = JA2 >>> 6 & 2097151, 0), A7 = n4 + g6 | 0, A7 = B5 >>> 0 > (Q5 = B5 + Q5 | 0) >>> 0 ? A7 + 1 | 0 : A7, B5 = AI(M5, 0, J5, K5), g6 = n4 + A7 | 0, aA2 = Q5 = B5 + Q5 | 0, E5 = B5 >>> 0 > Q5 >>> 0 ? g6 + 1 | 0 : g6, g6 = 0, Q5 = (A7 = c4[h5 + 14 | 0]) << 8 | (MA2 = c4[h5 + 10 | 0] | c4[h5 + 11 | 0] << 8 | c4[h5 + 12 | 0] << 16 | c4[h5 + 13 | 0] << 24) >>> 24, B5 = c4[h5 + 15 | 0], g6 = AI(G5 = 2097151 & ((1 & (g6 |= A7 = 0)) << 31 | (A7 = (B5 <<= 16) | Q5) >>> 1), 0, y5, 0), A7 = n4, B5 = g6, g6 = AI(f5, 0, e4, 0), A7 = n4 + A7 | 0, A7 = g6 >>> 0 > (B5 = B5 + g6 | 0) >>> 0 ? A7 + 1 | 0 : A7, Q5 = (g6 = AI(t5, 0, U5, rA2)) + B5 | 0, B5 = n4 + A7 | 0, B5 = g6 >>> 0 > Q5 >>> 0 ? B5 + 1 | 0 : B5, A7 = AI(S4, 0, J5, K5), g6 = n4 + B5 | 0, g6 = A7 >>> 0 > (Q5 = A7 + Q5 | 0) >>> 0 ? g6 + 1 | 0 : g6, A7 = AI(F5, 0, a5, 0), g6 = n4 + g6 | 0, FA2 = B5 = A7 + Q5 | 0, Q5 = A7 >>> 0 > B5 >>> 0 ? g6 + 1 | 0 : g6, g6 = 0, cA2 = (A7 = c4[SA2 + 14 | 0]) << 8 | (hA2 = c4[SA2 + 10 | 0] | c4[SA2 + 11 | 0] << 8 | c4[SA2 + 12 | 0] << 16 | c4[SA2 + 13 | 0] << 24) >>> 24, g6 = AI(H5 = 2097151 & ((1 & (g6 |= g6)) << 31 | (A7 = (A7 = c4[SA2 + 15 | 0]) << 16 | cA2) >>> 1), 0, k5, 0), A7 = n4 + Q5 | 0, A7 = g6 >>> 0 > (B5 = g6 + FA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(M5, 0, N5, 0), A7 = n4 + A7 | 0, cA2 = A7 = g6 >>> 0 > (FA2 = g6 + B5 | 0) >>> 0 ? A7 + 1 | 0 : A7, pA2 = g6 = A7 - ((FA2 >>> 0 < 4293918720) - 1 | 0) | 0, B5 = (A7 = g6 >>> 21 | 0) + E5 | 0, yA2 = B5 = (g6 = (2097151 & g6) << 11 | (fA2 = FA2 - -1048576 | 0) >>> 21) >>> 0 > (UA2 = g6 + aA2 | 0) >>> 0 ? B5 + 1 | 0 : B5, NA2 = g6 = B5 - ((UA2 >>> 0 < 4293918720) - 1 | 0) | 0, A7 = (A7 = g6 >>> 21 | 0) + nA2 | 0, _3 = A7 = (g6 = (B5 = (2097151 & g6) << 11 | (aA2 = UA2 - -1048576 | 0) >>> 21) + tA2 | 0) >>> 0 < B5 >>> 0 ? A7 + 1 | 0 : A7, X3 = g6, A7 = AI(g6, A7, -997805, -1), g6 = n4 + wA2 | 0, kA2 = B5 = A7 + kA2 | 0, wA2 = A7 >>> 0 > B5 >>> 0 ? g6 + 1 | 0 : g6, tA2 = (PA2 = c4[23 + (D5 = w5 + 224 | 0) | 0] | c4[D5 + 24 | 0] << 8 | c4[D5 + 25 | 0] << 16 | c4[D5 + 26 | 0] << 24) >>> 5 & 2097151, B5 = AI(s5 = (A7 = c4[h5 + 2 | 0]) << 16 & 2031616 | c4[0 | h5] | c4[h5 + 1 | 0] << 8, 0, t5, 0), g6 = n4, Q5 = (A7 = AI(a5, 0, p5 = (E5 = c4[h5 + 2 | 0] | c4[h5 + 3 | 0] << 8 | c4[h5 + 4 | 0] << 16 | c4[h5 + 5 | 0] << 24) >>> 5 & 2097151, 0)) + B5 | 0, B5 = n4 + g6 | 0, B5 = A7 >>> 0 > Q5 >>> 0 ? B5 + 1 | 0 : B5, A7 = AI(L5 = (c4[h5 + 7 | 0] | c4[h5 + 8 | 0] << 8 | c4[h5 + 9 | 0] << 16 | c4[h5 + 10 | 0] << 24) >>> 7 & 2097151, 0, N5, 0), g6 = n4 + B5 | 0, g6 = A7 >>> 0 > (Q5 = A7 + Q5 | 0) >>> 0 ? g6 + 1 | 0 : g6, B5 = AI(H5, 0, d5 = MA2 >>> 4 & 2097151, 0), A7 = n4 + g6 | 0, MA2 = Q5 = B5 + Q5 | 0, Q5 = B5 >>> 0 > Q5 >>> 0 ? A7 + 1 | 0 : A7, E5 = (g6 = c4[h5 + 6 | 0]) << 8 | E5 >>> 24, g6 = 0, g6 = AI(P5 = 2097151 & ((3 & (g6 |= B5 = A7 = 0)) << 30 | (A7 = (A7 = c4[h5 + 7 | 0]) << 16 | E5) >>> 2), 0, J5, K5), A7 = n4 + Q5 | 0, A7 = g6 >>> 0 > (B5 = g6 + MA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, Q5 = (g6 = AI(e4, 0, R4 = (c4[SA2 + 7 | 0] | c4[SA2 + 8 | 0] << 8 | c4[SA2 + 9 | 0] << 16 | c4[SA2 + 10 | 0] << 24) >>> 7 & 2097151, 0)) + B5 | 0, B5 = n4 + A7 | 0, B5 = g6 >>> 0 > Q5 >>> 0 ? B5 + 1 | 0 : B5, g6 = AI(G5, 0, GA2 = hA2 >>> 4 & 2097151, 0), A7 = n4 + B5 | 0, E5 = g6 >>> 0 > (Q5 = g6 + Q5 | 0) >>> 0 ? A7 + 1 | 0 : A7, A7 = 0, MA2 = (g6 = c4[SA2 + 6 | 0]) << 8 | (hA2 = c4[SA2 + 2 | 0] | c4[SA2 + 3 | 0] << 8 | c4[SA2 + 4 | 0] << 16 | c4[SA2 + 5 | 0] << 24) >>> 24, g6 = A7, A7 = AI(U5, rA2, b4 = 2097151 & ((3 & (g6 |= B5 = 0)) << 30 | (A7 = (A7 = c4[SA2 + 7 | 0]) << 16 | MA2) >>> 2), 0), g6 = n4 + E5 | 0, g6 = A7 >>> 0 > (B5 = A7 + Q5 | 0) >>> 0 ? g6 + 1 | 0 : g6, Q5 = B5, B5 = AI(v5 = (A7 = c4[SA2 + 2 | 0]) << 16 & 2031616 | c4[0 | SA2] | c4[SA2 + 1 | 0] << 8, 0, S4, 0), A7 = n4 + g6 | 0, A7 = B5 >>> 0 > (Q5 = Q5 + B5 | 0) >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(F5, 0, u4 = hA2 >>> 5 & 2097151, 0), A7 = n4 + A7 | 0, A7 = g6 >>> 0 > (B5 = g6 + Q5 | 0) >>> 0 ? A7 + 1 | 0 : A7, g6 = B5, MA2 = B5 = B5 + tA2 | 0, E5 = g6 = g6 >>> 0 > B5 >>> 0 ? A7 + 1 | 0 : A7, Q5 = c4[D5 + 21 | 0] | c4[D5 + 22 | 0] << 8, A7 = AI(a5, 0, s5, 0), g6 = n4, hA2 = (B5 = A7) + (A7 = AI(J5, K5, p5, 0)) | 0, B5 = n4 + g6 | 0, B5 = A7 >>> 0 > hA2 >>> 0 ? B5 + 1 | 0 : B5, A7 = AI(H5, 0, L5, 0), g6 = n4 + B5 | 0, g6 = A7 >>> 0 > (hA2 = A7 + hA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, A7 = AI(d5, 0, GA2, 0), g6 = n4 + g6 | 0, g6 = A7 >>> 0 > (B5 = A7 + hA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, hA2 = (A7 = B5) + (B5 = AI(N5, 0, P5, 0)) | 0, A7 = n4 + g6 | 0, A7 = B5 >>> 0 > hA2 >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(e4, 0, b4, 0), A7 = n4 + A7 | 0, A7 = g6 >>> 0 > (B5 = g6 + hA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, hA2 = (g6 = AI(G5, 0, R4, 0)) + B5 | 0, B5 = n4 + A7 | 0, B5 = g6 >>> 0 > hA2 >>> 0 ? B5 + 1 | 0 : B5, A7 = AI(U5, rA2, u4, 0), g6 = n4 + B5 | 0, g6 = A7 >>> 0 > (hA2 = A7 + hA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, A7 = AI(F5, 0, v5, 0), g6 = n4 + g6 | 0, A7 = A7 >>> 0 > (B5 = A7 + hA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, g6 = (g6 = B5) >>> 0 > (B5 = B5 + Q5 | 0) >>> 0 ? A7 + 1 | 0 : A7, Q5 = B5, B5 = (A7 = c4[D5 + 23 | 0]) << 16 & 2031616, A7 = g6, B5 = A7 = B5 >>> 0 > (Q5 = Q5 + B5 | 0) >>> 0 ? A7 + 1 | 0 : A7, SA2 = A7 = A7 - ((Q5 >>> 0 < 4293918720) - 1 | 0) | 0, g6 = (g6 = A7 >>> 21 | 0) + E5 | 0, A7 = (g6 = (E5 = MA2 = (A7 = (2097151 & A7) << 11 | (hA2 = Q5 - -1048576 | 0) >>> 21) + MA2 | 0) >>> 0 < A7 >>> 0 ? g6 + 1 | 0 : g6) + wA2 | 0, A7 = (wA2 = E5 + kA2 | 0) >>> 0 < E5 >>> 0 ? A7 + 1 | 0 : A7, JA2 = E5 - -1048576 | 0, KA2 = E5 = g6 - ((E5 >>> 0 < 4293918720) - 1 | 0) | 0, eA2 = wA2 - (g6 = -2097152 & JA2) | 0, LA2 = A7 - ((g6 >>> 0 > wA2 >>> 0) + E5 | 0) | 0, MA2 = Q5, wA2 = B5, A7 = AI(j3, m3, 470296, 0), g6 = n4, B5 = A7, A7 = AI(q3, O3, 666643, 0), g6 = n4 + g6 | 0, g6 = A7 >>> 0 > (B5 = B5 + A7 | 0) >>> 0 ? g6 + 1 | 0 : g6, Q5 = (A7 = B5) + (B5 = AI(X3, _3, 654183, 0)) | 0, A7 = n4 + g6 | 0, YA2 = Q5, E5 = B5 >>> 0 > Q5 >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(J5, K5, s5, 0), A7 = n4, B5 = g6, g6 = AI(N5, 0, p5, 0), A7 = n4 + A7 | 0, A7 = g6 >>> 0 > (B5 = B5 + g6 | 0) >>> 0 ? A7 + 1 | 0 : A7, Q5 = (g6 = B5) + (B5 = AI(L5, 0, GA2, 0)) | 0, g6 = n4 + A7 | 0, g6 = B5 >>> 0 > Q5 >>> 0 ? g6 + 1 | 0 : g6, A7 = AI(d5, 0, R4, 0), B5 = n4 + g6 | 0, B5 = A7 >>> 0 > (Q5 = A7 + Q5 | 0) >>> 0 ? B5 + 1 | 0 : B5, A7 = AI(H5, 0, P5, 0), g6 = n4 + B5 | 0, g6 = A7 >>> 0 > (Q5 = A7 + Q5 | 0) >>> 0 ? g6 + 1 | 0 : g6, B5 = AI(e4, 0, u4, 0), A7 = n4 + g6 | 0, A7 = B5 >>> 0 > (Q5 = B5 + Q5 | 0) >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(G5, 0, b4, 0), A7 = n4 + A7 | 0, A7 = g6 >>> 0 > (B5 = g6 + Q5 | 0) >>> 0 ? A7 + 1 | 0 : A7, Q5 = (g6 = B5) + (B5 = AI(U5, rA2, v5, 0)) | 0, g6 = n4 + A7 | 0, tA2 = Q5, B5 = B5 >>> 0 > Q5 >>> 0 ? g6 + 1 | 0 : g6, g6 = 0, nA2 = (A7 = c4[D5 + 19 | 0]) << 8 | (kA2 = c4[D5 + 15 | 0] | c4[D5 + 16 | 0] << 8 | c4[D5 + 17 | 0] << 16 | c4[D5 + 18 | 0] << 24) >>> 24, Q5 = c4[D5 + 20 | 0], B5 = ((dA2 = (A7 = 0) | g6) >>> 3 | 0) + B5 | 0, tA2 = Q5 = (g6 = (7 & dA2) << 29 | (g6 = (Q5 <<= 16) | nA2) >>> 3) + tA2 | 0, Q5 = g6 >>> 0 > Q5 >>> 0 ? B5 + 1 | 0 : B5, nA2 = kA2 >>> 6 & 2097151, A7 = AI(N5, 0, s5, 0), g6 = n4, B5 = A7, A7 = AI(H5, 0, p5, 0), g6 = n4 + g6 | 0, g6 = A7 >>> 0 > (B5 = B5 + A7 | 0) >>> 0 ? g6 + 1 | 0 : g6, kA2 = (A7 = B5) + (B5 = AI(L5, 0, R4, 0)) | 0, A7 = n4 + g6 | 0, A7 = B5 >>> 0 > kA2 >>> 0 ? A7 + 1 | 0 : A7, B5 = AI(d5, 0, b4, 0), g6 = n4 + A7 | 0, g6 = B5 >>> 0 > (kA2 = B5 + kA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, B5 = AI(P5, 0, GA2, 0), A7 = n4 + g6 | 0, A7 = B5 >>> 0 > (kA2 = B5 + kA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(e4, 0, v5, 0), B5 = n4 + A7 | 0, B5 = g6 >>> 0 > (kA2 = g6 + kA2 | 0) >>> 0 ? B5 + 1 | 0 : B5, A7 = AI(G5, 0, u4, 0), g6 = n4 + B5 | 0, A7 = A7 >>> 0 > (kA2 = A7 + kA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, jA2 = A7 = (vA2 = kA2 + nA2 | 0) >>> 0 < kA2 >>> 0 ? A7 + 1 | 0 : A7, $A2 = A7 = A7 - ((vA2 >>> 0 < 4293918720) - 1 | 0) | 0, B5 = (2097151 & A7) << 11 | (xA2 = vA2 - -1048576 | 0) >>> 21, A7 = (A7 >>> 21 | 0) + Q5 | 0, lA2 = A7 = B5 >>> 0 > (mA2 = B5 + tA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, II2 = A7 = A7 - ((mA2 >>> 0 < 4293918720) - 1 | 0) | 0, B5 = (2097151 & A7) << 11 | (OA2 = mA2 - -1048576 | 0) >>> 21, A7 = (A7 >>> 21 | 0) + E5 | 0, g6 = (B5 >>> 0 > (Q5 = B5 + YA2 | 0) >>> 0 ? A7 + 1 | 0 : A7) + wA2 | 0, wA2 = (B5 = Q5 + MA2 | 0) - (A7 = -2097152 & hA2) | 0, SA2 = A7 = (g6 = B5 >>> 0 < Q5 >>> 0 ? g6 + 1 | 0 : g6) - ((A7 >>> 0 > B5 >>> 0) + SA2 | 0) | 0, gI2 = A7 = A7 - ((wA2 >>> 0 < 4293918720) - 1 | 0) | 0, B5 = (2097151 & A7) << 11 | (qA2 = wA2 - -1048576 | 0) >>> 21, A7 = (A7 >> 21) + LA2 | 0, Q5 = A7 = B5 >>> 0 > (E5 = B5 + eA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, ZA2 = A7 = A7 - ((E5 >>> 0 < 4293918720) - 1 | 0) | 0, WA2 = (2097151 & A7) << 11 | (YA2 = E5 - -1048576 | 0) >>> 21, MA2 = A7 >> 21, dA2 = UA2 - (A7 = -2097152 & aA2) | 0, NA2 = yA2 - ((A7 >>> 0 > UA2 >>> 0) + NA2 | 0) | 0, A7 = AI(y5, 0, k5, 0), VA2 = g6 = n4, eA2 = A7, kA2 = A7 - -1048576 | 0, zA2 = g6 = g6 - ((A7 >>> 0 < 4293918720) - 1 | 0) | 0, T3 = A7 = g6 >>> 21 | 0, A7 = AI(z3 = (2097151 & g6) << 11 | kA2 >>> 21, A7, -683901, -1), g6 = n4 + cA2 | 0, g6 = A7 >>> 0 > (B5 = A7 + FA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, aA2 = B5 - (A7 = -2097152 & fA2) | 0, hA2 = g6 - ((A7 >>> 0 > B5 >>> 0) + pA2 | 0) | 0, g6 = AI(t5, 0, e4, 0), A7 = n4, B5 = g6, g6 = AI(y5, 0, d5, 0), A7 = n4 + A7 | 0, A7 = g6 >>> 0 > (B5 = B5 + g6 | 0) >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(f5, 0, G5, 0), A7 = n4 + A7 | 0, A7 = g6 >>> 0 > (B5 = g6 + B5 | 0) >>> 0 ? A7 + 1 | 0 : A7, cA2 = (g6 = B5) + (B5 = AI(a5, 0, U5, rA2)) | 0, g6 = n4 + A7 | 0, g6 = B5 >>> 0 > cA2 >>> 0 ? g6 + 1 | 0 : g6, A7 = AI(S4, 0, N5, 0), B5 = n4 + g6 | 0, B5 = A7 >>> 0 > (cA2 = A7 + cA2 | 0) >>> 0 ? B5 + 1 | 0 : B5, A7 = AI(F5, 0, J5, K5), g6 = n4 + B5 | 0, g6 = A7 >>> 0 > (cA2 = A7 + cA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, B5 = AI(k5, 0, GA2, 0), A7 = n4 + g6 | 0, A7 = B5 >>> 0 > (cA2 = B5 + cA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(M5, 0, H5, 0), A7 = n4 + A7 | 0, FA2 = B5 = g6 + cA2 | 0, cA2 = g6 >>> 0 > B5 >>> 0 ? A7 + 1 | 0 : A7, A7 = AI(f5, 0, d5, 0), g6 = n4, B5 = A7, A7 = AI(y5, 0, L5, 0), g6 = n4 + g6 | 0, g6 = A7 >>> 0 > (B5 = B5 + A7 | 0) >>> 0 ? g6 + 1 | 0 : g6, yA2 = (A7 = AI(a5, 0, e4, 0)) + B5 | 0, B5 = n4 + g6 | 0, B5 = A7 >>> 0 > yA2 >>> 0 ? B5 + 1 | 0 : B5, A7 = AI(t5, 0, G5, 0), g6 = n4 + B5 | 0, g6 = A7 >>> 0 > (yA2 = A7 + yA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, B5 = AI(U5, rA2, J5, K5), A7 = n4 + g6 | 0, A7 = B5 >>> 0 > (yA2 = B5 + yA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(S4, 0, H5, 0), A7 = n4 + A7 | 0, A7 = g6 >>> 0 > (B5 = g6 + yA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, yA2 = (g6 = B5) + (B5 = AI(F5, 0, N5, 0)) | 0, g6 = n4 + A7 | 0, g6 = B5 >>> 0 > yA2 >>> 0 ? g6 + 1 | 0 : g6, A7 = AI(k5, 0, R4, 0), B5 = n4 + g6 | 0, B5 = A7 >>> 0 > (yA2 = A7 + yA2 | 0) >>> 0 ? B5 + 1 | 0 : B5, A7 = AI(M5, 0, GA2, 0), g6 = n4 + B5 | 0, nA2 = g6 = A7 >>> 0 > (tA2 = A7 + yA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, XA2 = A7 = g6 - ((tA2 >>> 0 < 4293918720) - 1 | 0) | 0, g6 = (2097151 & A7) << 11 | (UA2 = tA2 - -1048576 | 0) >>> 21, A7 = (A7 >>> 21 | 0) + cA2 | 0, fA2 = A7 = g6 >>> 0 > (pA2 = g6 + FA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, bA2 = A7 = A7 - ((pA2 >>> 0 < 4293918720) - 1 | 0) | 0, g6 = (B5 = A7 >>> 21 | 0) + hA2 | 0, aA2 = g6 = (A7 = (2097151 & A7) << 11 | (yA2 = pA2 - -1048576 | 0) >>> 21) >>> 0 > (LA2 = A7 + aA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, _A2 = A7 = g6 - ((LA2 >>> 0 < 4293918720) - 1 | 0) | 0, cA2 = (2097151 & A7) << 11 | (hA2 = LA2 - -1048576 | 0) >>> 21, A7 = (A7 >> 21) + NA2 | 0, Z3 = A7 = (g6 = cA2 + dA2 | 0) >>> 0 < cA2 >>> 0 ? A7 + 1 | 0 : A7, $3 = g6, A7 = AI(g6, A7, -683901, -1), g6 = n4 + MA2 | 0, WA2 = B5 = A7 + WA2 | 0, MA2 = A7 >>> 0 > B5 >>> 0 ? g6 + 1 | 0 : g6, A7 = AI(f5, 0, s5, 0), g6 = n4, B5 = A7, A7 = AI(t5, 0, p5, 0), g6 = n4 + g6 | 0, g6 = A7 >>> 0 > (B5 = B5 + A7 | 0) >>> 0 ? g6 + 1 | 0 : g6, cA2 = (A7 = B5) + (B5 = AI(J5, K5, L5, 0)) | 0, A7 = n4 + g6 | 0, A7 = B5 >>> 0 > cA2 >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(N5, 0, d5, 0), B5 = n4 + A7 | 0, B5 = g6 >>> 0 > (cA2 = g6 + cA2 | 0) >>> 0 ? B5 + 1 | 0 : B5, g6 = AI(a5, 0, P5, 0), A7 = n4 + B5 | 0, A7 = g6 >>> 0 > (cA2 = g6 + cA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, B5 = AI(e4, 0, GA2, 0), g6 = n4 + A7 | 0, g6 = B5 >>> 0 > (cA2 = B5 + cA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, A7 = AI(G5, 0, H5, 0), g6 = n4 + g6 | 0, g6 = A7 >>> 0 > (B5 = A7 + cA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, cA2 = (A7 = B5) + (B5 = AI(U5, rA2, R4, 0)) | 0, A7 = n4 + g6 | 0, A7 = B5 >>> 0 > cA2 >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(S4, 0, u4, 0), B5 = n4 + A7 | 0, B5 = g6 >>> 0 > (cA2 = g6 + cA2 | 0) >>> 0 ? B5 + 1 | 0 : B5, g6 = AI(F5, 0, b4, 0), A7 = n4 + B5 | 0, A7 = g6 >>> 0 > (cA2 = g6 + cA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, B5 = AI(M5, 0, v5, 0), g6 = n4 + A7 | 0, NA2 = cA2 = B5 + cA2 | 0, B5 = B5 >>> 0 > cA2 >>> 0 ? g6 + 1 | 0 : g6, g6 = 0, FA2 = (A7 = c4[D5 + 27 | 0]) << 8 | PA2 >>> 24, cA2 = c4[D5 + 28 | 0], cA2 = 2097151 & ((3 & (g6 |= A7 = 0)) << 30 | (A7 = (cA2 <<= 16) | FA2) >>> 2), g6 = B5, FA2 = A7 = cA2 + NA2 | 0, cA2 = A7 >>> 0 < cA2 >>> 0 ? g6 + 1 | 0 : g6, dA2 = AI(l3, x3, 470296, 0), NA2 = n4, A7 = (B5 = (2097151 & sA2) << 11 | HA2 >>> 21) + (eA2 - (g6 = -2097152 & kA2) | 0) | 0, g6 = VA2 - ((524287 & zA2) + (g6 >>> 0 > eA2 >>> 0) | 0) + (sA2 >>> 21) | 0, AA2 = g6 = A7 >>> 0 < B5 >>> 0 ? g6 + 1 | 0 : g6, IA2 = A7, g6 = AI(A7, g6, 666643, 0), A7 = n4 + NA2 | 0, A7 = g6 >>> 0 > (B5 = g6 + dA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, kA2 = (g6 = AI(q3, O3, 654183, 0)) + B5 | 0, B5 = n4 + A7 | 0, B5 = g6 >>> 0 > kA2 >>> 0 ? B5 + 1 | 0 : B5, g6 = AI(j3, m3, -997805, -1), A7 = n4 + B5 | 0, A7 = g6 >>> 0 > (kA2 = g6 + kA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, B5 = AI(X3, _3, 136657, 0), g6 = n4 + A7 | 0, JA2 = (A7 = (2097151 & KA2) << 11 | JA2 >>> 21) + (kA2 = B5 + kA2 | 0) | 0, g6 = (KA2 >>> 21 | 0) + (B5 >>> 0 > kA2 >>> 0 ? g6 + 1 | 0 : g6) | 0, zA2 = kA2 = cA2 - ((FA2 >>> 0 < 4293918720) - 1 | 0) | 0, A7 = (A7 >>> 0 > JA2 >>> 0 ? g6 + 1 | 0 : g6) + cA2 | 0, g6 = (cA2 = FA2 + JA2 | 0) - (B5 = -2097152 & (VA2 = FA2 - -1048576 | 0)) | 0, B5 = (A7 = (A7 = cA2 >>> 0 < JA2 >>> 0 ? A7 + 1 | 0 : A7) - ((B5 >>> 0 > cA2 >>> 0) + kA2 | 0) | 0) + MA2 | 0, dA2 = cA2 = A7 - ((g6 >>> 0 < 4293918720) - 1 | 0) | 0, eA2 = (B5 = (FA2 = g6 + WA2 | 0) >>> 0 < g6 >>> 0 ? B5 + 1 | 0 : B5) - (((g6 = -2097152 & (NA2 = g6 - -1048576 | 0)) >>> 0 > FA2 >>> 0) + cA2 | 0) | 0, PA2 = A7 = FA2 - g6 | 0, cA2 = E5, E5 = Q5, TA2 = LA2 - (A7 = -2097152 & hA2) | 0, kA2 = aA2 - ((A7 >>> 0 > LA2 >>> 0) + _A2 | 0) | 0, A7 = AI(IA2, AA2, -683901, -1), g6 = n4, Q5 = (B5 = A7) + (A7 = AI(z3, T3, 136657, 0)) | 0, B5 = n4 + g6 | 0, g6 = fA2 + (A7 >>> 0 > Q5 >>> 0 ? B5 + 1 | 0 : B5) | 0, yA2 = (B5 = Q5 + pA2 | 0) - (A7 = -2097152 & yA2) | 0, aA2 = (g6 = B5 >>> 0 < pA2 >>> 0 ? g6 + 1 | 0 : g6) - ((A7 >>> 0 > B5 >>> 0) + bA2 | 0) | 0, g6 = AI(z3, T3, -997805, -1), A7 = n4 + nA2 | 0, A7 = g6 >>> 0 > (B5 = g6 + tA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, Q5 = (g6 = AI(IA2, AA2, 136657, 0)) + B5 | 0, B5 = n4 + A7 | 0, B5 = g6 >>> 0 > Q5 >>> 0 ? B5 + 1 | 0 : B5, A7 = AI(l3, x3, -683901, -1), g6 = n4 + B5 | 0, g6 = A7 >>> 0 > (Q5 = A7 + Q5 | 0) >>> 0 ? g6 + 1 | 0 : g6, hA2 = Q5 - (A7 = -2097152 & UA2) | 0, MA2 = g6 - ((A7 >>> 0 > Q5 >>> 0) + XA2 | 0) | 0, g6 = AI(t5, 0, d5, 0), A7 = n4, B5 = g6, g6 = AI(f5, 0, L5, 0), A7 = n4 + A7 | 0, A7 = g6 >>> 0 > (B5 = B5 + g6 | 0) >>> 0 ? A7 + 1 | 0 : A7, Q5 = (g6 = AI(y5, 0, P5, 0)) + B5 | 0, B5 = n4 + A7 | 0, B5 = g6 >>> 0 > Q5 >>> 0 ? B5 + 1 | 0 : B5, A7 = AI(J5, K5, e4, 0), g6 = n4 + B5 | 0, g6 = A7 >>> 0 > (Q5 = A7 + Q5 | 0) >>> 0 ? g6 + 1 | 0 : g6, B5 = AI(a5, 0, G5, 0), A7 = n4 + g6 | 0, A7 = B5 >>> 0 > (Q5 = B5 + Q5 | 0) >>> 0 ? A7 + 1 | 0 : A7, B5 = AI(U5, rA2, N5, 0), g6 = n4 + A7 | 0, g6 = B5 >>> 0 > (Q5 = B5 + Q5 | 0) >>> 0 ? g6 + 1 | 0 : g6, B5 = AI(S4, 0, GA2, 0), A7 = n4 + g6 | 0, A7 = B5 >>> 0 > (Q5 = B5 + Q5 | 0) >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(F5, 0, H5, 0), B5 = n4 + A7 | 0, B5 = g6 >>> 0 > (Q5 = g6 + Q5 | 0) >>> 0 ? B5 + 1 | 0 : B5, A7 = AI(k5, 0, b4, 0), g6 = n4 + B5 | 0, g6 = A7 >>> 0 > (Q5 = A7 + Q5 | 0) >>> 0 ? g6 + 1 | 0 : g6, B5 = AI(M5, 0, R4, 0), A7 = n4 + g6 | 0, FA2 = Q5 = B5 + Q5 | 0, Q5 = B5 >>> 0 > Q5 >>> 0 ? A7 + 1 | 0 : A7, A7 = AI(t5, 0, L5, 0), g6 = n4, B5 = A7, A7 = AI(y5, 0, p5, 0), g6 = n4 + g6 | 0, g6 = A7 >>> 0 > (B5 = B5 + A7 | 0) >>> 0 ? g6 + 1 | 0 : g6, fA2 = (A7 = B5) + (B5 = AI(a5, 0, d5, 0)) | 0, A7 = n4 + g6 | 0, A7 = B5 >>> 0 > fA2 >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(f5, 0, P5, 0), B5 = n4 + A7 | 0, B5 = g6 >>> 0 > (fA2 = g6 + fA2 | 0) >>> 0 ? B5 + 1 | 0 : B5, A7 = AI(e4, 0, N5, 0), g6 = n4 + B5 | 0, g6 = A7 >>> 0 > (fA2 = A7 + fA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, B5 = AI(J5, K5, G5, 0), A7 = n4 + g6 | 0, A7 = B5 >>> 0 > (fA2 = B5 + fA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, B5 = AI(U5, rA2, H5, 0), g6 = n4 + A7 | 0, g6 = B5 >>> 0 > (fA2 = B5 + fA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, B5 = AI(S4, 0, R4, 0), A7 = n4 + g6 | 0, A7 = B5 >>> 0 > (fA2 = B5 + fA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(F5, 0, GA2, 0), B5 = n4 + A7 | 0, B5 = g6 >>> 0 > (fA2 = g6 + fA2 | 0) >>> 0 ? B5 + 1 | 0 : B5, fA2 = (A7 = AI(k5, 0, u4, 0)) + fA2 | 0, g6 = n4 + B5 | 0, B5 = AI(M5, 0, b4, 0), A7 = n4 + (A7 >>> 0 > fA2 >>> 0 ? g6 + 1 | 0 : g6) | 0, LA2 = A7 = B5 >>> 0 > (_A2 = B5 + fA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, BA2 = A7 = A7 - ((_A2 >>> 0 < 4293918720) - 1 | 0) | 0, B5 = (2097151 & A7) << 11 | (sA2 = _A2 - -1048576 | 0) >>> 21, A7 = (A7 >>> 21 | 0) + Q5 | 0, HA2 = A7 = B5 >>> 0 > (WA2 = B5 + FA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, QA2 = A7 = A7 - ((WA2 >>> 0 < 4293918720) - 1 | 0) | 0, B5 = (2097151 & A7) << 11 | (KA2 = WA2 - -1048576 | 0) >>> 21, A7 = (A7 >>> 21 | 0) + MA2 | 0, JA2 = A7 = B5 >>> 0 > (pA2 = B5 + hA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, iA2 = A7 = A7 - ((pA2 >>> 0 < 4293918720) - 1 | 0) | 0, B5 = (2097151 & A7) << 11 | (nA2 = pA2 - -1048576 | 0) >>> 21, A7 = (A7 >> 21) + aA2 | 0, Q5 = A7 = B5 >>> 0 > (hA2 = B5 + yA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, aA2 = A7 = A7 - ((hA2 >>> 0 < 4293918720) - 1 | 0) | 0, MA2 = (2097151 & A7) << 11 | (B5 = hA2 - -1048576 | 0) >>> 21, A7 = (A7 >> 21) + kA2 | 0, XA2 = A7 = (FA2 = MA2 + TA2 | 0) >>> 0 < MA2 >>> 0 ? A7 + 1 | 0 : A7, bA2 = FA2, A7 = AI(FA2, A7, -683901, -1), g6 = n4, FA2 = A7, A7 = AI($3, Z3, 136657, 0), g6 = n4 + g6 | 0, A7 = (A7 >>> 0 > (FA2 = FA2 + A7 | 0) >>> 0 ? g6 + 1 | 0 : g6) + E5 | 0, CI2 = (E5 = cA2 + FA2 | 0) - (g6 = -2097152 & YA2) | 0, BI2 = (A7 = E5 >>> 0 < FA2 >>> 0 ? A7 + 1 | 0 : A7) - ((g6 >>> 0 > E5 >>> 0) + ZA2 | 0) | 0, MA2 = wA2, FA2 = SA2, wA2 = AI(bA2, XA2, 136657, 0), E5 = n4, TA2 = A7 = hA2 - (g6 = -2097152 & B5) | 0, gA2 = Q5 = Q5 - ((g6 >>> 0 > hA2 >>> 0) + aA2 | 0) | 0, B5 = AI($3, Z3, -997805, -1), g6 = n4 + E5 | 0, g6 = B5 >>> 0 > (wA2 = B5 + wA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, B5 = AI(A7, Q5, -683901, -1), A7 = n4 + g6 | 0, ZA2 = Q5 = B5 + wA2 | 0, cA2 = B5 >>> 0 > Q5 >>> 0 ? A7 + 1 | 0 : A7, A7 = AI(X3, _3, 470296, 0), g6 = n4, Q5 = (B5 = A7) + (A7 = AI(j3, m3, 666643, 0)) | 0, B5 = n4 + g6 | 0, g6 = lA2 + (A7 >>> 0 > Q5 >>> 0 ? B5 + 1 | 0 : B5) | 0, YA2 = A7 = Q5 + mA2 | 0, E5 = g6 = A7 >>> 0 < mA2 >>> 0 ? g6 + 1 | 0 : g6, g6 = AI(X3, _3, 666643, 0), A7 = n4 + jA2 | 0, A7 = g6 >>> 0 > (B5 = g6 + vA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, yA2 = B5 - (g6 = -2097152 & xA2) | 0, tA2 = A7 - ((g6 >>> 0 > B5 >>> 0) + $A2 | 0) | 0, g6 = AI(H5, 0, s5, 0), A7 = n4, B5 = g6, g6 = AI(p5, 0, GA2, 0), A7 = n4 + A7 | 0, A7 = g6 >>> 0 > (B5 = B5 + g6 | 0) >>> 0 ? A7 + 1 | 0 : A7, Q5 = (g6 = B5) + (B5 = AI(L5, 0, b4, 0)) | 0, g6 = n4 + A7 | 0, g6 = B5 >>> 0 > Q5 >>> 0 ? g6 + 1 | 0 : g6, B5 = AI(d5, 0, u4, 0), A7 = n4 + g6 | 0, A7 = B5 >>> 0 > (Q5 = B5 + Q5 | 0) >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(P5, 0, R4, 0), B5 = n4 + A7 | 0, B5 = g6 >>> 0 > (Q5 = g6 + Q5 | 0) >>> 0 ? B5 + 1 | 0 : B5, A7 = AI(G5, 0, v5, 0), g6 = n4 + B5 | 0, hA2 = Q5 = A7 + Q5 | 0, Q5 = A7 >>> 0 > Q5 >>> 0 ? g6 + 1 | 0 : g6, g6 = 0, g6 = 2097151 & ((1 & (g6 |= B5 = 0)) << 31 | (A7 = (wA2 = (A7 = c4[D5 + 14 | 0]) << 8 | (aA2 = c4[D5 + 10 | 0] | c4[D5 + 11 | 0] << 8 | c4[D5 + 12 | 0] << 16 | c4[D5 + 13 | 0] << 24) >>> 24) | (A7 = c4[D5 + 15 | 0]) << 16) >>> 1), A7 = Q5, hA2 = B5 = g6 + hA2 | 0, Q5 = g6 >>> 0 > B5 >>> 0 ? A7 + 1 | 0 : A7, wA2 = aA2 >>> 4 & 2097151, A7 = AI(s5, 0, GA2, 0), g6 = n4, B5 = A7, A7 = AI(p5, 0, R4, 0), g6 = n4 + g6 | 0, g6 = A7 >>> 0 > (B5 = B5 + A7 | 0) >>> 0 ? g6 + 1 | 0 : g6, A7 = AI(L5, 0, u4, 0), g6 = n4 + g6 | 0, g6 = A7 >>> 0 > (B5 = A7 + B5 | 0) >>> 0 ? g6 + 1 | 0 : g6, aA2 = (A7 = B5) + (B5 = AI(d5, 0, v5, 0)) | 0, A7 = n4 + g6 | 0, A7 = B5 >>> 0 > aA2 >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(P5, 0, b4, 0), B5 = n4 + A7 | 0, A7 = g6 >>> 0 > (aA2 = g6 + aA2 | 0) >>> 0 ? B5 + 1 | 0 : B5, SA2 = A7 = (xA2 = wA2 + aA2 | 0) >>> 0 < aA2 >>> 0 ? A7 + 1 | 0 : A7, EA2 = A7 = A7 - ((xA2 >>> 0 < 4293918720) - 1 | 0) | 0, g6 = (B5 = A7 >>> 21 | 0) + Q5 | 0, UA2 = g6 = (A7 = (2097151 & A7) << 11 | (kA2 = xA2 - -1048576 | 0) >>> 21) >>> 0 > (lA2 = A7 + hA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, DA2 = A7 = g6 - ((lA2 >>> 0 < 4293918720) - 1 | 0) | 0, g6 = (2097151 & A7) << 11 | (fA2 = lA2 - -1048576 | 0) >>> 21, A7 = (A7 >>> 21 | 0) + tA2 | 0, aA2 = A7 = g6 >>> 0 > (yA2 = g6 + yA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, oA2 = A7 = A7 - ((yA2 >>> 0 < 4293918720) - 1 | 0) | 0, g6 = (B5 = A7 >> 21) + E5 | 0, $A2 = g6 = (g6 = (A7 = (2097151 & A7) << 11 | (hA2 = yA2 - -1048576 | 0) >>> 21) >>> 0 > (Q5 = A7 + YA2 | 0) >>> 0 ? g6 + 1 | 0 : g6) - (((B5 = -2097152 & OA2) >>> 0 > Q5 >>> 0) + II2 | 0) | 0, OA2 = A7 = Q5 - B5 | 0, wA2 = A7 - -1048576 | 0, II2 = A7 = g6 - ((A7 >>> 0 < 4293918720) - 1 | 0) | 0, B5 = (g6 = A7 >> 21) + cA2 | 0, g6 = ((A7 = (2097151 & A7) << 11 | wA2 >>> 21) >>> 0 > (Q5 = A7 + ZA2 | 0) >>> 0 ? B5 + 1 | 0 : B5) + FA2 | 0, vA2 = g6 = (g6 = (A7 = Q5) >>> 0 > (Q5 = Q5 + MA2 | 0) >>> 0 ? g6 + 1 | 0 : g6) - (((B5 = -2097152 & qA2) >>> 0 > Q5 >>> 0) + gI2 | 0) | 0, FA2 = A7 = Q5 - B5 | 0, E5 = A7 - -1048576 | 0, jA2 = A7 = g6 - ((A7 >>> 0 < 4293918720) - 1 | 0) | 0, B5 = (g6 = A7 >> 21) + BI2 | 0, qA2 = A7 = (B5 = (A7 = (2097151 & A7) << 11 | E5 >>> 21) >>> 0 > (cA2 = A7 + CI2 | 0) >>> 0 ? B5 + 1 | 0 : B5) - ((cA2 >>> 0 < 4293918720) - 1 | 0) | 0, YA2 = PA2 - -1048576 | 0, tA2 = eA2 - ((PA2 >>> 0 < 4293918720) - 1 | 0) | 0, MA2 = (2097151 & A7) << 11 | (Q5 = cA2 - -1048576 | 0) >>> 21, A7 = (A7 >> 21) + eA2 | 0, gI2 = (PA2 = MA2 + PA2 | 0) - (g6 = -2097152 & YA2) | 0, CI2 = (MA2 >>> 0 > PA2 >>> 0 ? A7 + 1 | 0 : A7) - ((g6 >>> 0 > PA2 >>> 0) + tA2 | 0) | 0, BI2 = cA2 - (A7 = -2097152 & Q5) | 0, ZA2 = B5 - ((A7 >>> 0 > cA2 >>> 0) + qA2 | 0) | 0, mA2 = FA2 - (A7 = -2097152 & E5) | 0, PA2 = vA2 - ((A7 >>> 0 > FA2 >>> 0) + jA2 | 0) | 0, A7 = AI(bA2, XA2, -997805, -1), g6 = n4, B5 = A7, A7 = AI($3, Z3, 654183, 0), g6 = n4 + g6 | 0, g6 = A7 >>> 0 > (B5 = B5 + A7 | 0) >>> 0 ? g6 + 1 | 0 : g6, Q5 = (A7 = B5) + (B5 = AI(TA2, gA2, 136657, 0)) | 0, A7 = n4 + g6 | 0, g6 = $A2 + (B5 >>> 0 > Q5 >>> 0 ? A7 + 1 | 0 : A7) | 0, vA2 = (B5 = Q5 + OA2 | 0) - (A7 = -2097152 & wA2) | 0, jA2 = (g6 = B5 >>> 0 < OA2 >>> 0 ? g6 + 1 | 0 : g6) - ((A7 >>> 0 > B5 >>> 0) + II2 | 0) | 0, OA2 = pA2 - (A7 = -2097152 & nA2) | 0, eA2 = JA2 - ((A7 >>> 0 > pA2 >>> 0) + iA2 | 0) | 0, g6 = AI(IA2, AA2, -997805, -1), A7 = n4, B5 = g6, g6 = AI(z3, T3, 654183, 0), A7 = n4 + A7 | 0, A7 = g6 >>> 0 > (B5 = B5 + g6 | 0) >>> 0 ? A7 + 1 | 0 : A7, Q5 = (g6 = B5) + (B5 = AI(l3, x3, 136657, 0)) | 0, g6 = n4 + A7 | 0, g6 = B5 >>> 0 > Q5 >>> 0 ? g6 + 1 | 0 : g6, A7 = AI(q3, O3, -683901, -1), B5 = n4 + g6 | 0, g6 = HA2 + (A7 >>> 0 > (Q5 = A7 + Q5 | 0) >>> 0 ? B5 + 1 | 0 : B5) | 0, nA2 = (B5 = Q5 + WA2 | 0) - (A7 = -2097152 & KA2) | 0, JA2 = (g6 = B5 >>> 0 < WA2 >>> 0 ? g6 + 1 | 0 : g6) - ((A7 >>> 0 > B5 >>> 0) + QA2 | 0) | 0, g6 = AI(IA2, AA2, 654183, 0), A7 = n4, B5 = g6, g6 = AI(z3, T3, 470296, 0), A7 = n4 + A7 | 0, A7 = g6 >>> 0 > (B5 = B5 + g6 | 0) >>> 0 ? A7 + 1 | 0 : A7, Q5 = (g6 = AI(l3, x3, -997805, -1)) + B5 | 0, B5 = n4 + A7 | 0, g6 = LA2 + (g6 >>> 0 > Q5 >>> 0 ? B5 + 1 | 0 : B5) | 0, g6 = (A7 = Q5 + _A2 | 0) >>> 0 < _A2 >>> 0 ? g6 + 1 | 0 : g6, B5 = A7, A7 = AI(q3, O3, 136657, 0), g6 = n4 + g6 | 0, g6 = A7 >>> 0 > (B5 = B5 + A7 | 0) >>> 0 ? g6 + 1 | 0 : g6, Q5 = (A7 = B5) + (B5 = AI(j3, m3, -683901, -1)) | 0, A7 = n4 + g6 | 0, wA2 = Q5 - (g6 = -2097152 & sA2) | 0, E5 = (B5 >>> 0 > Q5 >>> 0 ? A7 + 1 | 0 : A7) - ((g6 >>> 0 > Q5 >>> 0) + BA2 | 0) | 0, Q5 = (c4[D5 + 28 | 0] | c4[D5 + 29 | 0] << 8 | c4[D5 + 30 | 0] << 16 | c4[D5 + 31 | 0] << 24) >>> 7 | 0, A7 = AI(y5, 0, s5, 0), g6 = n4, cA2 = (B5 = A7) + (A7 = AI(f5, 0, p5, 0)) | 0, B5 = n4 + g6 | 0, B5 = A7 >>> 0 > cA2 >>> 0 ? B5 + 1 | 0 : B5, A7 = AI(a5, 0, L5, 0), g6 = n4 + B5 | 0, g6 = A7 >>> 0 > (cA2 = A7 + cA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, B5 = AI(J5, K5, d5, 0), A7 = n4 + g6 | 0, A7 = B5 >>> 0 > (cA2 = B5 + cA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, B5 = AI(t5, 0, P5, 0), g6 = n4 + A7 | 0, g6 = B5 >>> 0 > (cA2 = B5 + cA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, B5 = AI(e4, 0, H5, 0), A7 = n4 + g6 | 0, A7 = B5 >>> 0 > (cA2 = B5 + cA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(N5, 0, G5, 0), B5 = n4 + A7 | 0, B5 = g6 >>> 0 > (cA2 = g6 + cA2 | 0) >>> 0 ? B5 + 1 | 0 : B5, A7 = AI(U5, rA2, GA2, 0), g6 = n4 + B5 | 0, g6 = A7 >>> 0 > (cA2 = A7 + cA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, B5 = AI(S4, 0, b4, 0), A7 = n4 + g6 | 0, A7 = B5 >>> 0 > (cA2 = B5 + cA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, B5 = AI(F5, 0, R4, 0), g6 = n4 + A7 | 0, g6 = B5 >>> 0 > (cA2 = B5 + cA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, B5 = AI(k5, 0, v5, 0), A7 = n4 + g6 | 0, A7 = B5 >>> 0 > (cA2 = B5 + cA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(M5, 0, u4, 0), B5 = n4 + A7 | 0, g6 = B5 = g6 >>> 0 > (cA2 = g6 + cA2 | 0) >>> 0 ? B5 + 1 | 0 : B5, HA2 = (B5 = (2097151 & zA2) << 11 | VA2 >>> 21) + (A7 = Q5 + cA2 | 0) | 0, A7 = (zA2 >>> 21 | 0) + (g6 = A7 >>> 0 < cA2 >>> 0 ? g6 + 1 | 0 : g6) | 0, MA2 = A7 = B5 >>> 0 > HA2 >>> 0 ? A7 + 1 | 0 : A7, qA2 = g6 = A7 - ((HA2 >>> 0 < 4293918720) - 1 | 0) | 0, B5 = (A7 = g6 >>> 21 | 0) + E5 | 0, FA2 = B5 = (g6 = (2097151 & g6) << 11 | (rA2 = HA2 - -1048576 | 0) >>> 21) >>> 0 > (KA2 = g6 + wA2 | 0) >>> 0 ? B5 + 1 | 0 : B5, VA2 = g6 = B5 - ((KA2 >>> 0 < 4293918720) - 1 | 0) | 0, A7 = (A7 = g6 >> 21) + JA2 | 0, wA2 = A7 = (g6 = (2097151 & g6) << 11 | (cA2 = KA2 - -1048576 | 0) >>> 21) >>> 0 > (nA2 = g6 + nA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, sA2 = g6 = A7 - ((nA2 >>> 0 < 4293918720) - 1 | 0) | 0, B5 = (A7 = g6 >> 21) + eA2 | 0, zA2 = B5 = (g6 = (Q5 = (2097151 & g6) << 11 | (E5 = nA2 - -1048576 | 0) >>> 21) + OA2 | 0) >>> 0 < Q5 >>> 0 ? B5 + 1 | 0 : B5, eA2 = g6, A7 = AI(g6, B5, -683901, -1), g6 = n4 + jA2 | 0, JA2 = B5 = A7 + vA2 | 0, Q5 = A7 >>> 0 > B5 >>> 0 ? g6 + 1 | 0 : g6, g6 = AI($3, Z3, 470296, 0), A7 = n4 + aA2 | 0, A7 = g6 >>> 0 > (yA2 = g6 + yA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(bA2, XA2, 654183, 0), A7 = n4 + (A7 - (((B5 = -2097152 & hA2) >>> 0 > yA2 >>> 0) + oA2 | 0) | 0) | 0, A7 = g6 >>> 0 > (hA2 = g6 + (yA2 - B5 | 0) | 0) >>> 0 ? A7 + 1 | 0 : A7, B5 = AI(TA2, gA2, -997805, -1), g6 = n4 + A7 | 0, g6 = B5 >>> 0 > (hA2 = B5 + hA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, LA2 = B5 = nA2 - (A7 = -2097152 & E5) | 0, GA2 = wA2 = wA2 - ((A7 >>> 0 > nA2 >>> 0) + sA2 | 0) | 0, hA2 = (E5 = AI(eA2, zA2, 136657, 0)) + hA2 | 0, A7 = n4 + g6 | 0, B5 = AI(B5, wA2, -683901, -1), g6 = n4 + (E5 >>> 0 > hA2 >>> 0 ? A7 + 1 | 0 : A7) | 0, wA2 = g6 = B5 >>> 0 > (aA2 = B5 + hA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, sA2 = A7 = g6 - ((aA2 >>> 0 < 4293918720) - 1 | 0) | 0, g6 = (2097151 & A7) << 11 | (E5 = aA2 - -1048576 | 0) >>> 21, A7 = (A7 >> 21) + Q5 | 0, nA2 = g6 = (A7 = g6 >>> 0 > (hA2 = g6 + JA2 | 0) >>> 0 ? A7 + 1 | 0 : A7) - ((hA2 >>> 0 < 4293918720) - 1 | 0) | 0, yA2 = (2097151 & g6) << 11 | (Q5 = hA2 - -1048576 | 0) >>> 21, g6 = (g6 >> 21) + PA2 | 0, mA2 = JA2 = yA2 + mA2 | 0, JA2 = yA2 >>> 0 > JA2 >>> 0 ? g6 + 1 | 0 : g6, PA2 = hA2 - (g6 = -2097152 & Q5) | 0, _A2 = A7 - ((g6 >>> 0 > hA2 >>> 0) + nA2 | 0) | 0, vA2 = aA2 - (A7 = -2097152 & E5) | 0, jA2 = wA2 - ((A7 >>> 0 > aA2 >>> 0) + sA2 | 0) | 0, A7 = AI($3, Z3, 666643, 0), B5 = UA2 + n4 | 0, B5 = (E5 = A7 + lA2 | 0) >>> 0 < lA2 >>> 0 ? B5 + 1 | 0 : B5, Q5 = (A7 = AI(bA2, XA2, 470296, 0)) + (E5 - (g6 = -2097152 & fA2) | 0) | 0, g6 = n4 + (B5 - ((g6 >>> 0 > E5 >>> 0) + DA2 | 0) | 0) | 0, g6 = A7 >>> 0 > Q5 >>> 0 ? g6 + 1 | 0 : g6, B5 = AI(TA2, gA2, 654183, 0), A7 = n4 + g6 | 0, hA2 = Q5 = B5 + Q5 | 0, Q5 = B5 >>> 0 > Q5 >>> 0 ? A7 + 1 | 0 : A7, E5 = KA2 - (A7 = -2097152 & cA2) | 0, wA2 = FA2 - ((A7 >>> 0 > KA2 >>> 0) + VA2 | 0) | 0, A7 = AI(IA2, AA2, 470296, 0), g6 = n4, B5 = A7, A7 = AI(z3, T3, 666643, 0), g6 = n4 + g6 | 0, g6 = A7 >>> 0 > (B5 = B5 + A7 | 0) >>> 0 ? g6 + 1 | 0 : g6, A7 = AI(l3, x3, 654183, 0), g6 = n4 + g6 | 0, g6 = A7 >>> 0 > (B5 = A7 + B5 | 0) >>> 0 ? g6 + 1 | 0 : g6, cA2 = (A7 = B5) + (B5 = AI(q3, O3, -997805, -1)) | 0, A7 = n4 + g6 | 0, A7 = B5 >>> 0 > cA2 >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(j3, m3, 136657, 0), A7 = n4 + A7 | 0, A7 = g6 >>> 0 > (B5 = g6 + cA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, cA2 = (g6 = AI(X3, _3, -683901, -1)) + B5 | 0, B5 = n4 + A7 | 0, g6 = MA2 + (g6 >>> 0 > cA2 >>> 0 ? B5 + 1 | 0 : B5) | 0, KA2 = (B5 = (2097151 & dA2) << 11 | NA2 >>> 21) + ((cA2 = cA2 + HA2 | 0) - (A7 = -2097152 & rA2) | 0) | 0, A7 = ((g6 = cA2 >>> 0 < HA2 >>> 0 ? g6 + 1 | 0 : g6) - ((A7 >>> 0 > cA2 >>> 0) + qA2 | 0) | 0) + (dA2 >> 21) | 0, nA2 = A7 = B5 >>> 0 > KA2 >>> 0 ? A7 + 1 | 0 : A7, OA2 = A7 = A7 - ((KA2 >>> 0 < 4293918720) - 1 | 0) | 0, g6 = E5, E5 = (2097151 & A7) << 11 | (fA2 = KA2 - -1048576 | 0) >>> 21, A7 = (A7 >> 21) + wA2 | 0, sA2 = A7 = (B5 = g6 + E5 | 0) >>> 0 < E5 >>> 0 ? A7 + 1 | 0 : A7, HA2 = B5, A7 = AI(B5, A7, -683901, -1), g6 = n4 + Q5 | 0, g6 = A7 >>> 0 > (B5 = A7 + hA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, Q5 = (A7 = B5) + (B5 = AI(eA2, zA2, -997805, -1)) | 0, A7 = n4 + g6 | 0, A7 = B5 >>> 0 > Q5 >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(LA2, GA2, 136657, 0), B5 = n4 + A7 | 0, NA2 = Q5 = g6 + Q5 | 0, FA2 = g6 >>> 0 > Q5 >>> 0 ? B5 + 1 | 0 : B5, hA2 = xA2 - (A7 = -2097152 & kA2) | 0, MA2 = SA2 - ((A7 >>> 0 > xA2 >>> 0) + EA2 | 0) | 0, g6 = AI(s5, 0, R4, 0), A7 = n4, B5 = g6, g6 = AI(p5, 0, b4, 0), A7 = n4 + A7 | 0, A7 = g6 >>> 0 > (B5 = B5 + g6 | 0) >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(L5, 0, v5, 0), A7 = n4 + A7 | 0, A7 = g6 >>> 0 > (B5 = g6 + B5 | 0) >>> 0 ? A7 + 1 | 0 : A7, Q5 = (g6 = AI(P5, 0, u4, 0)) + B5 | 0, B5 = n4 + A7 | 0, g6 = g6 >>> 0 > Q5 >>> 0 ? B5 + 1 | 0 : B5, rA2 = B5 = (A7 = (c4[D5 + 7 | 0] | c4[D5 + 8 | 0] << 8 | c4[D5 + 9 | 0] << 16 | c4[D5 + 10 | 0] << 24) >>> 7 & 2097151) + Q5 | 0, cA2 = A7 >>> 0 > B5 >>> 0 ? g6 + 1 | 0 : g6, A7 = AI(s5, 0, b4, 0), g6 = n4, B5 = A7, A7 = AI(p5, 0, u4, 0), g6 = n4 + g6 | 0, g6 = A7 >>> 0 > (B5 = B5 + A7 | 0) >>> 0 ? g6 + 1 | 0 : g6, Q5 = (A7 = B5) + (B5 = AI(P5, 0, v5, 0)) | 0, A7 = n4 + g6 | 0, wA2 = Q5, Q5 = B5 >>> 0 > Q5 >>> 0 ? A7 + 1 | 0 : A7, A7 = 0, E5 = (g6 = c4[D5 + 6 | 0]) << 8 | (qA2 = c4[D5 + 2 | 0] | c4[D5 + 3 | 0] << 8 | c4[D5 + 4 | 0] << 16 | c4[D5 + 5 | 0] << 24) >>> 24, g6 = 0, g6 |= B5 = A7, B5 = Q5, E5 = B5 = (A7 = 2097151 & ((3 & g6) << 30 | (A7 = (A7 = c4[D5 + 7 | 0]) << 16 | E5) >>> 2)) >>> 0 > (wA2 = A7 + wA2 | 0) >>> 0 ? B5 + 1 | 0 : B5, WA2 = A7 = B5 - ((wA2 >>> 0 < 4293918720) - 1 | 0) | 0, B5 = (2097151 & A7) << 11 | (UA2 = wA2 - -1048576 | 0) >>> 21, A7 = (A7 >>> 21 | 0) + cA2 | 0, yA2 = A7 = B5 >>> 0 > (SA2 = B5 + rA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, VA2 = A7 = A7 - ((SA2 >>> 0 < 4293918720) - 1 | 0) | 0, B5 = (g6 = A7 >>> 21 | 0) + MA2 | 0, B5 = (A7 = (2097151 & A7) << 11 | (aA2 = SA2 - -1048576 | 0) >>> 21) >>> 0 > (Q5 = A7 + hA2 | 0) >>> 0 ? B5 + 1 | 0 : B5, g6 = AI(bA2, XA2, 666643, 0), A7 = n4 + B5 | 0, A7 = g6 >>> 0 > (Q5 = g6 + Q5 | 0) >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(TA2, gA2, 470296, 0), A7 = n4 + A7 | 0, A7 = g6 >>> 0 > (B5 = g6 + Q5 | 0) >>> 0 ? A7 + 1 | 0 : A7, Q5 = (g6 = B5) + (B5 = AI(HA2, sA2, 136657, 0)) | 0, g6 = n4 + A7 | 0, g6 = B5 >>> 0 > Q5 >>> 0 ? g6 + 1 | 0 : g6, A7 = AI(eA2, zA2, 654183, 0), g6 = n4 + g6 | 0, g6 = A7 >>> 0 > (B5 = A7 + Q5 | 0) >>> 0 ? g6 + 1 | 0 : g6, hA2 = (A7 = AI(LA2, GA2, -997805, -1)) + B5 | 0, B5 = n4 + g6 | 0, MA2 = B5 = A7 >>> 0 > hA2 >>> 0 ? B5 + 1 | 0 : B5, dA2 = A7 = B5 - ((hA2 >>> 0 < 4293918720) - 1 | 0) | 0, B5 = (2097151 & A7) << 11 | (rA2 = hA2 - -1048576 | 0) >>> 21, A7 = (A7 >> 21) + FA2 | 0, NA2 = B5 = (A7 = B5 >>> 0 > (Q5 = B5 + NA2 | 0) >>> 0 ? A7 + 1 | 0 : A7) - ((Q5 >>> 0 < 4293918720) - 1 | 0) | 0, cA2 = (2097151 & B5) << 11 | (FA2 = Q5 - -1048576 | 0) >>> 21, B5 = (B5 >> 21) + jA2 | 0, pA2 = kA2 = cA2 + vA2 | 0, kA2 = cA2 >>> 0 > kA2 >>> 0 ? B5 + 1 | 0 : B5, cA2 = Q5, g6 = A7, Q5 = (KA2 - (A7 = -2097152 & fA2) | 0) + (fA2 = (2097151 & tA2) << 11 | YA2 >>> 21) | 0, A7 = (nA2 - ((A7 >>> 0 > KA2 >>> 0) + OA2 | 0) | 0) + (tA2 >> 21) | 0, tA2 = A7 = Q5 >>> 0 < fA2 >>> 0 ? A7 + 1 | 0 : A7, vA2 = A7 = A7 - ((Q5 >>> 0 < 4293918720) - 1 | 0) | 0, KA2 = B5 = A7 >> 21, A7 = AI(bA2 = (2097151 & A7) << 11 | (nA2 = Q5 - -1048576 | 0) >>> 21, B5, -683901, -1), g6 = n4 + g6 | 0, g6 = A7 >>> 0 > (B5 = A7 + cA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, jA2 = B5 - (A7 = -2097152 & FA2) | 0, xA2 = g6 - ((A7 >>> 0 > B5 >>> 0) + NA2 | 0) | 0, g6 = AI(bA2, KA2, 136657, 0), A7 = n4 + MA2 | 0, A7 = g6 >>> 0 > (B5 = g6 + hA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, lA2 = B5 - (g6 = -2097152 & rA2) | 0, dA2 = A7 - ((g6 >>> 0 > B5 >>> 0) + dA2 | 0) | 0, g6 = AI(TA2, gA2, 666643, 0), A7 = n4 + (yA2 - (((B5 = -2097152 & aA2) >>> 0 > SA2 >>> 0) + VA2 | 0) | 0) | 0, A7 = g6 >>> 0 > (cA2 = g6 + (SA2 - B5 | 0) | 0) >>> 0 ? A7 + 1 | 0 : A7, B5 = AI(HA2, sA2, -997805, -1), g6 = n4 + A7 | 0, g6 = B5 >>> 0 > (cA2 = B5 + cA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, A7 = AI(eA2, zA2, 470296, 0), B5 = n4 + g6 | 0, B5 = A7 >>> 0 > (cA2 = A7 + cA2 | 0) >>> 0 ? B5 + 1 | 0 : B5, g6 = AI(LA2, GA2, 654183, 0), A7 = n4 + B5 | 0, NA2 = cA2 = g6 + cA2 | 0, MA2 = g6 >>> 0 > cA2 >>> 0 ? A7 + 1 | 0 : A7, B5 = qA2 >>> 5 & 2097151, A7 = AI(s5, 0, u4, 0), g6 = n4, FA2 = A7, A7 = AI(p5, 0, v5, 0), g6 = n4 + g6 | 0, A7 = A7 >>> 0 > (cA2 = FA2 + A7 | 0) >>> 0 ? g6 + 1 | 0 : g6, FA2 = g6 = B5 + cA2 | 0, B5 = A7 = g6 >>> 0 < cA2 >>> 0 ? A7 + 1 | 0 : A7, SA2 = (g6 = AI(s5, 0, v5, 0)) + (A7 = (A7 = c4[D5 + 2 | 0]) << 16 & 2031616 | c4[0 | D5] | c4[D5 + 1 | 0] << 8) | 0, g6 = n4, fA2 = g6 = A7 >>> 0 > SA2 >>> 0 ? g6 + 1 | 0 : g6, OA2 = g6 = g6 - ((SA2 >>> 0 < 4293918720) - 1 | 0) | 0, A7 = (A7 = g6 >>> 21 | 0) + B5 | 0, aA2 = A7 = (g6 = (2097151 & g6) << 11 | (yA2 = SA2 - -1048576 | 0) >>> 21) >>> 0 > (YA2 = g6 + FA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, qA2 = g6 = A7 - ((YA2 >>> 0 < 4293918720) - 1 | 0) | 0, B5 = (2097151 & g6) << 11 | (hA2 = YA2 - -1048576 | 0) >>> 21, g6 = (g6 >>> 21 | 0) + E5 | 0, g6 = B5 >>> 0 > (cA2 = B5 + wA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, B5 = AI(HA2, sA2, 654183, 0), A7 = n4 + (g6 - (((E5 = -2097152 & UA2) >>> 0 > cA2 >>> 0) + WA2 | 0) | 0) | 0, A7 = B5 >>> 0 > (wA2 = B5 + (cA2 - E5 | 0) | 0) >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(eA2, zA2, 666643, 0), A7 = n4 + A7 | 0, A7 = g6 >>> 0 > (B5 = g6 + wA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, rA2 = (g6 = B5) + (B5 = AI(LA2, GA2, 470296, 0)) | 0, g6 = n4 + A7 | 0, FA2 = g6 = B5 >>> 0 > rA2 >>> 0 ? g6 + 1 | 0 : g6, VA2 = g6 = g6 - ((rA2 >>> 0 < 4293918720) - 1 | 0) | 0, B5 = (A7 = g6 >> 21) + MA2 | 0, UA2 = g6 = (B5 = (g6 = (2097151 & g6) << 11 | (cA2 = rA2 - -1048576 | 0) >>> 21) >>> 0 > (wA2 = g6 + NA2 | 0) >>> 0 ? B5 + 1 | 0 : B5) - ((wA2 >>> 0 < 4293918720) - 1 | 0) | 0, MA2 = (2097151 & g6) << 11 | (E5 = wA2 - -1048576 | 0) >>> 21, g6 = (g6 >> 21) + dA2 | 0, zA2 = eA2 = MA2 + lA2 | 0, MA2 = MA2 >>> 0 > eA2 >>> 0 ? g6 + 1 | 0 : g6, A7 = AI(bA2, KA2, -997805, -1), g6 = n4 + B5 | 0, g6 = A7 >>> 0 > (wA2 = A7 + wA2 | 0) >>> 0 ? g6 + 1 | 0 : g6, dA2 = wA2 - (A7 = -2097152 & E5) | 0, NA2 = g6 - ((A7 >>> 0 > wA2 >>> 0) + UA2 | 0) | 0, g6 = AI(bA2, KA2, 654183, 0), A7 = n4 + FA2 | 0, A7 = g6 >>> 0 > (B5 = g6 + rA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, eA2 = B5 - (g6 = -2097152 & cA2) | 0, UA2 = A7 - ((g6 >>> 0 > B5 >>> 0) + VA2 | 0) | 0, A7 = AI(HA2, sA2, 470296, 0), B5 = n4 + (aA2 - (((g6 = -2097152 & hA2) >>> 0 > YA2 >>> 0) + qA2 | 0) | 0) | 0, B5 = A7 >>> 0 > (E5 = A7 + (YA2 - g6 | 0) | 0) >>> 0 ? B5 + 1 | 0 : B5, g6 = AI(LA2, GA2, 666643, 0), A7 = n4 + B5 | 0, wA2 = E5 = g6 + E5 | 0, B5 = g6 >>> 0 > E5 >>> 0 ? A7 + 1 | 0 : A7, g6 = AI(HA2, sA2, 666643, 0), A7 = n4 + (fA2 - ((4095 & OA2) + ((E5 = -2097152 & yA2) >>> 0 > SA2 >>> 0) | 0) | 0) | 0, rA2 = A7 = g6 >>> 0 > (hA2 = g6 + (SA2 - E5 | 0) | 0) >>> 0 ? A7 + 1 | 0 : A7, fA2 = A7 = A7 - ((hA2 >>> 0 < 4293918720) - 1 | 0) | 0, E5 = (2097151 & A7) << 11 | (FA2 = hA2 - -1048576 | 0) >>> 21, A7 = (A7 >> 21) + B5 | 0, B5 = A7 = E5 >>> 0 > (cA2 = E5 + wA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, yA2 = A7 = A7 - ((cA2 >>> 0 < 4293918720) - 1 | 0) | 0, E5 = (2097151 & A7) << 11 | (wA2 = cA2 - -1048576 | 0) >>> 21, A7 = (A7 >> 21) + UA2 | 0, E5 = E5 >>> 0 > (aA2 = E5 + eA2 | 0) >>> 0 ? A7 + 1 | 0 : A7, A7 = AI(bA2, KA2, 470296, 0), B5 = n4 + B5 | 0, B5 = A7 >>> 0 > (g6 = A7 + cA2 | 0) >>> 0 ? B5 + 1 | 0 : B5, cA2 = g6 - (A7 = -2097152 & wA2) | 0, wA2 = B5 - ((A7 >>> 0 > g6 >>> 0) + yA2 | 0) | 0, g6 = AI(bA2, KA2, 666643, 0), A7 = n4 + (rA2 - (((B5 = -2097152 & FA2) >>> 0 > hA2 >>> 0) + fA2 | 0) | 0) | 0, g6 = (B5 = (A7 = g6 >>> 0 > (UA2 = g6 + (hA2 - B5 | 0) | 0) >>> 0 ? A7 + 1 | 0 : A7) >> 21) + wA2 | 0, A7 = (A7 = (g6 = (A7 = (2097151 & A7) << 11 | UA2 >>> 21) >>> 0 > (fA2 = A7 + cA2 | 0) >>> 0 ? g6 + 1 | 0 : g6) >> 21) + E5 | 0, g6 = (g6 = (A7 = (g6 = (2097151 & g6) << 11 | fA2 >>> 21) >>> 0 > (yA2 = g6 + aA2 | 0) >>> 0 ? A7 + 1 | 0 : A7) >> 21) + NA2 | 0, B5 = (A7 = (g6 = (A7 = (2097151 & A7) << 11 | yA2 >>> 21) >>> 0 > (E5 = A7 + dA2 | 0) >>> 0 ? g6 + 1 | 0 : g6) >> 21) + MA2 | 0, A7 = (g6 = (B5 = (g6 = (2097151 & g6) << 11 | E5 >>> 21) >>> 0 > (aA2 = g6 + zA2 | 0) >>> 0 ? B5 + 1 | 0 : B5) >> 21) + xA2 | 0, g6 = (B5 = (A7 = (B5 = (2097151 & B5) << 11 | aA2 >>> 21) >>> 0 > (hA2 = B5 + jA2 | 0) >>> 0 ? A7 + 1 | 0 : A7) >> 21) + kA2 | 0, A7 = (A7 = (g6 = (A7 = (2097151 & A7) << 11 | hA2 >>> 21) >>> 0 > (MA2 = A7 + pA2 | 0) >>> 0 ? g6 + 1 | 0 : g6) >> 21) + _A2 | 0, g6 = (g6 = (A7 = (g6 = (2097151 & g6) << 11 | MA2 >>> 21) >>> 0 > (rA2 = g6 + PA2 | 0) >>> 0 ? A7 + 1 | 0 : A7) >> 21) + JA2 | 0, B5 = (A7 = (g6 = (A7 = (2097151 & A7) << 11 | rA2 >>> 21) >>> 0 > (FA2 = A7 + mA2 | 0) >>> 0 ? g6 + 1 | 0 : g6) >> 21) + ZA2 | 0, A7 = (g6 = (B5 = (g6 = (2097151 & g6) << 11 | FA2 >>> 21) >>> 0 > (cA2 = g6 + BI2 | 0) >>> 0 ? B5 + 1 | 0 : B5) >> 21) + CI2 | 0, nA2 = (kA2 = Q5 - (g6 = -2097152 & nA2) | 0) + ((2097151 & (A7 = (B5 = (2097151 & B5) << 11 | cA2 >>> 21) >>> 0 > (wA2 = B5 + gI2 | 0) >>> 0 ? A7 + 1 | 0 : A7)) << 11 | wA2 >>> 21) | 0, A7 = (tA2 - ((g6 >>> 0 > Q5 >>> 0) + vA2 | 0) | 0) + (A7 >> 21) | 0, tA2 = g6 = (A7 = kA2 >>> 0 > nA2 >>> 0 ? A7 + 1 | 0 : A7) >> 21, UA2 = (A7 = AI(JA2 = (2097151 & A7) << 11 | nA2 >>> 21, g6, 666643, 0)) + (g6 = 2097151 & UA2) | 0, A7 = n4, Q5 = A7 = g6 >>> 0 > UA2 >>> 0 ? A7 + 1 | 0 : A7, C5[0 | i2] = UA2, C5[i2 + 1 | 0] = (255 & A7) << 24 | UA2 >>> 8, A7 = 2097151 & fA2, g6 = AI(JA2, tA2, 470296, 0) + A7 | 0, B5 = n4, A7 = (Q5 >> 21) + (A7 >>> 0 > g6 >>> 0 ? B5 + 1 | 0 : B5) | 0, A7 = (fA2 = (kA2 = (2097151 & Q5) << 11 | UA2 >>> 21) + g6 | 0) >>> 0 < kA2 >>> 0 ? A7 + 1 | 0 : A7, C5[i2 + 4 | 0] = (2047 & A7) << 21 | fA2 >>> 11, g6 = A7, B5 = fA2, C5[i2 + 3 | 0] = (7 & A7) << 29 | B5 >>> 3, C5[i2 + 2 | 0] = 31 & ((65535 & Q5) << 16 | UA2 >>> 16) | B5 << 5, Q5 = 2097151 & yA2, yA2 = AI(JA2, tA2, 654183, 0) + Q5 | 0, A7 = n4, fA2 = (2097151 & g6) << 11 | B5 >>> 21, g6 = (g6 >> 21) + (Q5 = Q5 >>> 0 > yA2 >>> 0 ? A7 + 1 | 0 : A7) | 0, A7 = g6 = (yA2 = fA2 + yA2 | 0) >>> 0 < fA2 >>> 0 ? g6 + 1 | 0 : g6, C5[i2 + 6 | 0] = (63 & A7) << 26 | yA2 >>> 6, Q5 = yA2, C5[i2 + 5 | 0] = Q5 << 2 | (1572864 & B5) >>> 19, B5 = 2097151 & E5, E5 = AI(JA2, tA2, -997805, -1) + B5 | 0, g6 = n4, g6 = B5 >>> 0 > E5 >>> 0 ? g6 + 1 | 0 : g6, yA2 = (2097151 & (B5 = A7)) << 11 | Q5 >>> 21, B5 = (A7 >>= 21) + g6 | 0, B5 = (E5 = yA2 + E5 | 0) >>> 0 < yA2 >>> 0 ? B5 + 1 | 0 : B5, C5[i2 + 9 | 0] = (511 & B5) << 23 | E5 >>> 9, C5[i2 + 8 | 0] = (1 & B5) << 31 | E5 >>> 1, C5[i2 + 7 | 0] = E5 << 7 | (2080768 & Q5) >>> 14, g6 = 2097151 & aA2, Q5 = AI(JA2, tA2, 136657, 0) + g6 | 0, A7 = n4, A7 = g6 >>> 0 > Q5 >>> 0 ? A7 + 1 | 0 : A7, aA2 = (2097151 & (g6 = B5)) << 11 | E5 >>> 21, g6 = A7 + (B5 = g6 >> 21) | 0, g6 = (Q5 = aA2 + Q5 | 0) >>> 0 < aA2 >>> 0 ? g6 + 1 | 0 : g6, C5[i2 + 12 | 0] = (4095 & g6) << 20 | Q5 >>> 12, B5 = Q5, C5[i2 + 11 | 0] = (15 & g6) << 28 | B5 >>> 4, C5[i2 + 10 | 0] = B5 << 4 | (1966080 & E5) >>> 17, Q5 = 2097151 & hA2, E5 = AI(JA2, tA2, -683901, -1) + Q5 | 0, A7 = n4, A7 = Q5 >>> 0 > E5 >>> 0 ? A7 + 1 | 0 : A7, Q5 = g6, g6 = A7 + (g6 >>= 21) | 0, g6 = (Q5 = (hA2 = E5) + (E5 = (2097151 & Q5) << 11 | B5 >>> 21) | 0) >>> 0 < E5 >>> 0 ? g6 + 1 | 0 : g6, C5[i2 + 14 | 0] = (127 & g6) << 25 | Q5 >>> 7, C5[i2 + 13 | 0] = Q5 << 1 | (1048576 & B5) >>> 20, A7 = g6 >> 21, B5 = (g6 = (2097151 & g6) << 11 | Q5 >>> 21) >>> 0 > (E5 = g6 + (2097151 & MA2) | 0) >>> 0 ? A7 + 1 | 0 : A7, C5[i2 + 17 | 0] = (1023 & B5) << 22 | E5 >>> 10, C5[i2 + 16 | 0] = (3 & B5) << 30 | E5 >>> 2, C5[i2 + 15 | 0] = E5 << 6 | (2064384 & Q5) >>> 15, A7 = B5 >> 21, A7 = (g6 = (2097151 & B5) << 11 | E5 >>> 21) >>> 0 > (B5 = g6 + (2097151 & rA2) | 0) >>> 0 ? A7 + 1 | 0 : A7, C5[i2 + 20 | 0] = (8191 & A7) << 19 | B5 >>> 13, C5[i2 + 19 | 0] = (31 & A7) << 27 | B5 >>> 5, Q5 = (g6 = 2097151 & FA2) + (FA2 = (2097151 & A7) << 11 | B5 >>> 21) | 0, g6 = A7 >> 21, g6 = Q5 >>> 0 < FA2 >>> 0 ? g6 + 1 | 0 : g6, FA2 = Q5, C5[i2 + 21 | 0] = Q5, C5[i2 + 18 | 0] = B5 << 3 | (1835008 & E5) >>> 18, C5[i2 + 22 | 0] = (255 & g6) << 24 | Q5 >>> 8, B5 = g6 >> 21, B5 = (Q5 = (E5 = (2097151 & g6) << 11 | Q5 >>> 21) + (2097151 & cA2) | 0) >>> 0 < E5 >>> 0 ? B5 + 1 | 0 : B5, C5[i2 + 25 | 0] = (2047 & B5) << 21 | Q5 >>> 11, C5[i2 + 24 | 0] = (7 & B5) << 29 | Q5 >>> 3, C5[i2 + 23 | 0] = 31 & ((65535 & g6) << 16 | FA2 >>> 16) | Q5 << 5, A7 = B5 >> 21, A7 = (g6 = (2097151 & B5) << 11 | Q5 >>> 21) >>> 0 > (B5 = g6 + (2097151 & wA2) | 0) >>> 0 ? A7 + 1 | 0 : A7, C5[i2 + 27 | 0] = (63 & A7) << 26 | B5 >>> 6, C5[i2 + 26 | 0] = B5 << 2 | (1572864 & Q5) >>> 19, g6 = A7, A7 >>= 21, g6 = (Q5 = (wA2 = (2097151 & g6) << 11 | B5 >>> 21) + (E5 = 2097151 & nA2) | 0) >>> 0 < E5 >>> 0 ? A7 + 1 | 0 : A7, C5[i2 + 31 | 0] = (131071 & g6) << 15 | Q5 >>> 17, A7 = Q5, C5[i2 + 30 | 0] = (511 & g6) << 23 | A7 >>> 9, C5[i2 + 28 | 0] = A7 << 7 | (2080768 & B5) >>> 14, C5[i2 + 29 | 0] = wA2 + nA2 >>> 1, xI(h5, 64), xI(D5, 64), I6 && (o4[I6 >> 2] = 64, o4[I6 + 4 >> 2] = 0), r4 = w5 + 560 | 0, 0;
            }
            function K4(A7) {
              var I6 = 0, g6 = 0, B5 = 0, Q5 = 0, i2 = 0, E5 = 0, D5 = 0, o5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, r5 = 0, t5 = 0, U5 = 0, J5 = 0, K5 = 0, e4 = 0, Y5 = 0, N5 = 0, G5 = 0, H5 = 0, s5 = 0, p5 = 0, L5 = 0, d5 = 0, P5 = 0, R4 = 0, b4 = 0, v5 = 0, u4 = 0, z3 = 0, O3 = 0, q3 = 0, W3 = 0, x3 = 0, V3 = 0, j3 = 0, m3 = 0, l3 = 0, _3 = 0, X3 = 0, T3 = 0, Z3 = 0, $3 = 0, AA2 = 0, IA2 = 0, gA2 = 0, CA2 = 0, BA2 = 0, QA2 = 0, iA2 = 0, EA2 = 0, DA2 = 0, oA2 = 0, cA2 = 0, hA2 = 0, wA2 = 0, FA2 = 0, yA2 = 0, fA2 = 0, SA2 = 0, aA2 = 0, kA2 = 0, MA2 = 0, rA2 = 0, nA2 = 0, tA2 = 0, UA2 = 0, JA2 = 0, KA2 = 0, eA2 = 0, YA2 = 0, NA2 = 0, GA2 = 0, HA2 = 0, sA2 = 0, pA2 = 0, LA2 = 0, dA2 = 0, PA2 = 0, RA2 = 0, bA2 = 0, vA2 = 0, uA2 = 0;
              S4 = (d5 = c4[A7 + 172 | 0] | c4[A7 + 173 | 0] << 8 | c4[A7 + 174 | 0] << 16 | c4[A7 + 175 | 0] << 24) ^ (dA2 = c4[A7 + 132 | 0] | c4[A7 + 133 | 0] << 8 | c4[A7 + 134 | 0] << 16 | c4[A7 + 135 | 0] << 24) ^ (kA2 = c4[A7 + 92 | 0] | c4[A7 + 93 | 0] << 8 | c4[A7 + 94 | 0] << 16 | c4[A7 + 95 | 0] << 24) ^ (s5 = c4[A7 + 52 | 0] | c4[A7 + 53 | 0] << 8 | c4[A7 + 54 | 0] << 16 | c4[A7 + 55 | 0] << 24) ^ (g6 = c4[A7 + 12 | 0] | c4[A7 + 13 | 0] << 8 | c4[A7 + 14 | 0] << 16 | c4[A7 + 15 | 0] << 24), V3 = a5 = (x3 = c4[A7 + 188 | 0] | c4[A7 + 189 | 0] << 8 | c4[A7 + 190 | 0] << 16 | c4[A7 + 191 | 0] << 24) ^ (MA2 = c4[A7 + 148 | 0] | c4[A7 + 149 | 0] << 8 | c4[A7 + 150 | 0] << 16 | c4[A7 + 151 | 0] << 24) ^ (hA2 = c4[A7 + 108 | 0] | c4[A7 + 109 | 0] << 8 | c4[A7 + 110 | 0] << 16 | c4[A7 + 111 | 0] << 24) ^ (aA2 = c4[A7 + 68 | 0] | c4[A7 + 69 | 0] << 8 | c4[A7 + 70 | 0] << 16 | c4[A7 + 71 | 0] << 24) ^ (DA2 = c4[A7 + 28 | 0] | c4[A7 + 29 | 0] << 8 | c4[A7 + 30 | 0] << 16 | c4[A7 + 31 | 0] << 24), l3 = (q3 = (y5 = c4[A7 + 168 | 0] | c4[A7 + 169 | 0] << 8 | c4[A7 + 170 | 0] << 16 | c4[A7 + 171 | 0] << 24) ^ (B5 = c4[A7 + 128 | 0] | c4[A7 + 129 | 0] << 8 | c4[A7 + 130 | 0] << 16 | c4[A7 + 131 | 0] << 24) ^ (f5 = c4[A7 + 88 | 0] | c4[A7 + 89 | 0] << 8 | c4[A7 + 90 | 0] << 16 | c4[A7 + 91 | 0] << 24) ^ (H5 = c4[A7 + 48 | 0] | c4[A7 + 49 | 0] << 8 | c4[A7 + 50 | 0] << 16 | c4[A7 + 51 | 0] << 24) ^ (w5 = c4[A7 + 8 | 0] | c4[A7 + 9 | 0] << 8 | c4[A7 + 10 | 0] << 16 | c4[A7 + 11 | 0] << 24)) ^ xA(j3 = (e4 = c4[A7 + 184 | 0] | c4[A7 + 185 | 0] << 8 | c4[A7 + 186 | 0] << 16 | c4[A7 + 187 | 0] << 24) ^ (i2 = c4[A7 + 144 | 0] | c4[A7 + 145 | 0] << 8 | c4[A7 + 146 | 0] << 16 | c4[A7 + 147 | 0] << 24) ^ (M5 = c4[A7 + 104 | 0] | c4[A7 + 105 | 0] << 8 | c4[A7 + 106 | 0] << 16 | c4[A7 + 107 | 0] << 24) ^ (p5 = c4[A7 + 64 | 0] | c4[A7 + 65 | 0] << 8 | c4[A7 + 66 | 0] << 16 | c4[A7 + 67 | 0] << 24) ^ (L5 = c4[A7 + 24 | 0] | c4[A7 + 25 | 0] << 8 | c4[A7 + 26 | 0] << 16 | c4[A7 + 27 | 0] << 24), a5, 1), t5 = xA(l3 ^ (I6 = c4[A7 + 56 | 0] | c4[A7 + 57 | 0] << 8 | c4[A7 + 58 | 0] << 16 | c4[A7 + 59 | 0] << 24), (b4 = n4 ^ S4) ^ (D5 = c4[A7 + 60 | 0] | c4[A7 + 61 | 0] << 8 | c4[A7 + 62 | 0] << 16 | c4[A7 + 63 | 0] << 24), 6), P5 = n4, h5 = (u4 = c4[A7 + 164 | 0] | c4[A7 + 165 | 0] << 8 | c4[A7 + 166 | 0] << 16 | c4[A7 + 167 | 0] << 24) ^ (JA2 = c4[A7 + 124 | 0] | c4[A7 + 125 | 0] << 8 | c4[A7 + 126 | 0] << 16 | c4[A7 + 127 | 0] << 24) ^ (IA2 = c4[A7 + 84 | 0] | c4[A7 + 85 | 0] << 8 | c4[A7 + 86 | 0] << 16 | c4[A7 + 87 | 0] << 24) ^ (T3 = c4[A7 + 44 | 0] | c4[A7 + 45 | 0] << 8 | c4[A7 + 46 | 0] << 16 | c4[A7 + 47 | 0] << 24) ^ (AA2 = c4[A7 + 4 | 0] | c4[A7 + 5 | 0] << 8 | c4[A7 + 6 | 0] << 16 | c4[A7 + 7 | 0] << 24), gA2 = U5 = (oA2 = c4[A7 + 180 | 0] | c4[A7 + 181 | 0] << 8 | c4[A7 + 182 | 0] << 16 | c4[A7 + 183 | 0] << 24) ^ (rA2 = c4[A7 + 140 | 0] | c4[A7 + 141 | 0] << 8 | c4[A7 + 142 | 0] << 16 | c4[A7 + 143 | 0] << 24) ^ (wA2 = c4[A7 + 100 | 0] | c4[A7 + 101 | 0] << 8 | c4[A7 + 102 | 0] << 16 | c4[A7 + 103 | 0] << 24) ^ (BA2 = c4[A7 + 20 | 0] | c4[A7 + 21 | 0] << 8 | c4[A7 + 22 | 0] << 16 | c4[A7 + 23 | 0] << 24) ^ D5, J5 = w5, X3 = (CA2 = (w5 = c4[A7 + 160 | 0] | c4[A7 + 161 | 0] << 8 | c4[A7 + 162 | 0] << 16 | c4[A7 + 163 | 0] << 24) ^ (D5 = c4[A7 + 120 | 0] | c4[A7 + 121 | 0] << 8 | c4[A7 + 122 | 0] << 16 | c4[A7 + 123 | 0] << 24) ^ (k5 = c4[A7 + 80 | 0] | c4[A7 + 81 | 0] << 8 | c4[A7 + 82 | 0] << 16 | c4[A7 + 83 | 0] << 24) ^ (a5 = c4[A7 + 40 | 0] | c4[A7 + 41 | 0] << 8 | c4[A7 + 42 | 0] << 16 | c4[A7 + 43 | 0] << 24) ^ (G5 = c4[0 | A7] | c4[A7 + 1 | 0] << 8 | c4[A7 + 2 | 0] << 16 | c4[A7 + 3 | 0] << 24)) ^ xA(KA2 = (r5 = c4[A7 + 176 | 0] | c4[A7 + 177 | 0] << 8 | c4[A7 + 178 | 0] << 16 | c4[A7 + 179 | 0] << 24) ^ (E5 = c4[A7 + 136 | 0] | c4[A7 + 137 | 0] << 8 | c4[A7 + 138 | 0] << 16 | c4[A7 + 139 | 0] << 24) ^ (F5 = c4[A7 + 96 | 0] | c4[A7 + 97 | 0] << 8 | c4[A7 + 98 | 0] << 16 | c4[A7 + 99 | 0] << 24) ^ (o5 = c4[A7 + 16 | 0] | c4[A7 + 17 | 0] << 8 | c4[A7 + 18 | 0] << 16 | c4[A7 + 19 | 0] << 24) ^ I6, U5, 1), v5 = xA(J5 ^ X3, (O3 = n4 ^ h5) ^ g6, 1), QA2 = n4, N5 = (z3 = c4[A7 + 196 | 0] | c4[A7 + 197 | 0] << 8 | c4[A7 + 198 | 0] << 16 | c4[A7 + 199 | 0] << 24) ^ (Z3 = c4[A7 + 156 | 0] | c4[A7 + 157 | 0] << 8 | c4[A7 + 158 | 0] << 16 | c4[A7 + 159 | 0] << 24) ^ (eA2 = c4[A7 + 116 | 0] | c4[A7 + 117 | 0] << 8 | c4[A7 + 118 | 0] << 16 | c4[A7 + 119 | 0] << 24) ^ (cA2 = c4[A7 + 76 | 0] | c4[A7 + 77 | 0] << 8 | c4[A7 + 78 | 0] << 16 | c4[A7 + 79 | 0] << 24) ^ (iA2 = c4[A7 + 36 | 0] | c4[A7 + 37 | 0] << 8 | c4[A7 + 38 | 0] << 16 | c4[A7 + 39 | 0] << 24), q3 = (Y5 = (I6 = c4[A7 + 192 | 0] | c4[A7 + 193 | 0] << 8 | c4[A7 + 194 | 0] << 16 | c4[A7 + 195 | 0] << 24) ^ (K5 = c4[A7 + 152 | 0] | c4[A7 + 153 | 0] << 8 | c4[A7 + 154 | 0] << 16 | c4[A7 + 155 | 0] << 24) ^ (Q5 = c4[A7 + 112 | 0] | c4[A7 + 113 | 0] << 8 | c4[A7 + 114 | 0] << 16 | c4[A7 + 115 | 0] << 24) ^ (g6 = c4[A7 + 72 | 0] | c4[A7 + 73 | 0] << 8 | c4[A7 + 74 | 0] << 16 | c4[A7 + 75 | 0] << 24) ^ (U5 = c4[A7 + 32 | 0] | c4[A7 + 33 | 0] << 8 | c4[A7 + 34 | 0] << 16 | c4[A7 + 35 | 0] << 24)) ^ xA(q3, S4, 1), J5 = xA(w5 ^ q3, u4 ^ (m3 = n4 ^ N5), 18), W3 = (R4 = n4) ^ (-1 ^ QA2) & P5, j3 = xA(CA2, h5, 1) ^ j3, S4 = xA(I6 ^ j3, z3 ^ (V3 ^= n4), 14), CA2 = n4, h5 = xA(H5 ^ X3, s5 ^ O3, 44), z3 = I6 = m3 ^ AA2, yA2 = (_3 = n4) & (-1 ^ I6) ^ CA2, s5 = xA(Y5, N5, 1) ^ KA2, N5 = xA(e4 ^ s5, x3 ^ (u4 = gA2 ^ n4), 56), x3 = n4, a5 = xA(a5 ^ q3, m3 ^ T3, 36), T3 = n4, I6 = xA(U5 ^ j3, V3 ^ iA2, 27), gA2 = w5 = n4, r5 = xA(r5 ^ l3, b4 ^ oA2, 61), AA2 = n4, g6 = xA(g6 ^ j3, V3 ^ cA2, 20), oA2 = n4, Y5 = xA(s5 ^ L5, u4 ^ DA2, 28), KA2 = e4 = n4, U5 = xA(y5 ^ X3, d5 ^ O3, 2), DA2 = n4, d5 = xA(s5 ^ p5, u4 ^ aA2, 55), aA2 = n4, H5 = xA(o5 ^ l3, b4 ^ BA2, 62), BA2 = p5 = n4, FA2 = o5 = (NA2 = (-1 ^ p5) & aA2 ^ DA2) ^ (GA2 = (-1 ^ e4) & oA2 ^ AA2) ^ (iA2 = (-1 ^ w5) & T3 ^ x3) ^ W3 ^ yA2, p5 = N5, L5 = a5, fA2 = N5 ^ a5 & (-1 ^ I6), e4 = J5, w5 = t5, t5 = S4, J5 = h5, cA2 = G5 ^ q3, a5 = g6, G5 = U5, UA2 = xA(SA2 = fA2 ^ (tA2 = e4 ^ w5 & (-1 ^ v5)) ^ (HA2 = S4 ^ h5 & (-1 ^ cA2)) ^ (EA2 = (y5 = r5) ^ g6 & (-1 ^ Y5)) ^ ($3 = U5 ^ (r5 = d5) & (-1 ^ H5)), o5, 1), YA2 = n4, o5 = xA(f5 ^ X3, O3 ^ kA2, 10), h5 = n4, g6 = xA(E5 ^ l3, b4 ^ rA2, 15), kA2 = n4, U5 = xA(F5 ^ l3, b4 ^ wA2, 43), N5 = n4, f5 = xA(i2 ^ s5, u4 ^ MA2, 21), MA2 = n4, Q5 = xA(Q5 ^ j3, V3 ^ eA2, 39), d5 = n4, i2 = xA(D5 ^ q3, m3 ^ JA2, 41), JA2 = n4, S4 = xA(M5 ^ s5, u4 ^ hA2, 25), l3 = n4, M5 = xA(K5 ^ j3, V3 ^ Z3, 8), j3 = n4, K5 = xA(k5 ^ q3, m3 ^ IA2, 3), b4 = n4, B5 = xA(B5 ^ X3, O3 ^ dA2, 45), E5 = I6, D5 = Q5, k5 = S4, p5 = xA((U5 = (V3 = (m3 = (F5 = o5) ^ (-1 ^ (I6 = g6)) & p5) ^ (u4 = (o5 = U5) ^ (-1 ^ f5) & t5) ^ (dA2 = Q5 ^ (-1 ^ i2) & G5) ^ (Q5 = S4 ^ (-1 ^ M5) & e4) ^ (q3 = (g6 = K5) ^ (-1 ^ B5) & y5)) ^ UA2) ^ (S4 = I6 ^ (-1 ^ p5) & E5), (K5 = (Z3 = (s5 = (-1 ^ kA2) & x3 ^ h5) ^ (hA2 = (-1 ^ MA2) & CA2 ^ N5) ^ (IA2 = (-1 ^ JA2) & DA2 ^ d5) ^ (rA2 = (-1 ^ j3) & R4 ^ l3) ^ (wA2 = (-1 ^ (O3 = X3 = n4)) & AA2 ^ b4)) ^ YA2) ^ (x3 = kA2 ^ (-1 ^ x3) & gA2), 21), X3 = n4, eA2 = O3 ^ (-1 ^ AA2) & KA2, AA2 = Q5, PA2 = (YA2 = w5 ^ (-1 ^ k5) & M5) ^ (sA2 = J5 ^ (-1 ^ o5) & f5) ^ (pA2 = (-1 ^ D5) & i2 ^ r5) ^ (LA2 = L5 ^ (-1 ^ F5) & I6) ^ (nA2 = a5 ^ (-1 ^ g6) & B5), Q5 = xA(y5 = (RA2 = B5 ^ (-1 ^ y5) & Y5) ^ (bA2 = i2 ^ (-1 ^ G5) & H5) ^ (e4 = M5 ^ (-1 ^ e4) & v5) ^ (vA2 = (-1 ^ t5) & cA2 ^ f5) ^ S4, R4 = x3 ^= eA2 ^ (UA2 = JA2 ^ (-1 ^ DA2) & BA2) ^ (DA2 = j3 ^ (-1 ^ R4) & QA2) ^ (CA2 = (-1 ^ CA2) & z3 ^ MA2), 1) ^ PA2, I6 = xA(AA2 ^ Q5, (S4 = (i2 = (f5 = P5 ^ (-1 ^ l3) & j3) ^ (MA2 = _3 ^ (-1 ^ N5) & MA2) ^ (M5 = (-1 ^ d5) & JA2 ^ aA2) ^ (G5 = T3 ^ (-1 ^ h5) & kA2) ^ (t5 = oA2 ^ (-1 ^ b4) & O3)) ^ n4) ^ rA2, 43), AA2 = O3 = n4, Y5 = (D5 = H5 ^ (-1 ^ r5) & D5) ^ (v5 ^= (-1 ^ w5) & k5) ^ (w5 = E5 ^ (-1 ^ L5) & F5) ^ (cA2 = (-1 ^ J5) & o5 ^ cA2 ^ -2147450741) ^ (H5 = (-1 ^ a5) & g6 ^ Y5), B5 = xA(V3, Z3, 1) ^ Y5, t5 = xA(B5 ^ nA2, (E5 = (J5 = (BA2 ^= (-1 ^ aA2) & d5) ^ (a5 = QA2 ^ (-1 ^ P5) & l3) ^ (F5 = gA2 ^ (-1 ^ T3) & h5) ^ (_3 = (-1 ^ _3) & N5 ^ z3) ^ (r5 = (-1 ^ oA2) & b4 ^ KA2)) ^ n4) ^ t5, 44), T3 = (x3 = n4) ^ (-1 ^ O3) & X3, k5 = xA(Y5, J5, 1) ^ y5, J5 = xA(EA2 ^ k5, GA2 ^ (g6 = R4 ^ n4), 20), d5 = n4, L5 = xA(B5 ^ LA2, E5 ^ G5, 45), l3 = n4, h5 = xA(PA2, i2, 1) ^ SA2, v5 = xA(h5 ^ v5, (N5 = FA2 ^ n4) ^ a5, 3), oA2 = o5 = n4, y5 = xA(Q5 ^ q3, S4 ^ wA2, 6), b4 = n4, a5 = xA(k5 ^ fA2, g6 ^ iA2, 8), O3 = n4, Y5 = xA(U5 ^ e4, K5 ^ DA2, 25), DA2 = e4 = n4, G5 = xA(h5 ^ H5, N5 ^ r5, 36), q3 = n4, r5 = xA(Q5 ^ m3, S4 ^ s5, 15), m3 = n4, H5 = xA(B5 ^ YA2, E5 ^ f5, 10), aA2 = s5 = n4, f5 = xA(U5 ^ RA2, K5 ^ eA2, 55), j3 = n4, i2 = xA(h5 ^ w5, F5 ^ N5, 41), V3 = n4, w5 = xA(k5 ^ tA2, g6 ^ W3, 39), QA2 = F5 = n4, Z3 = F5 = (wA2 = (-1 ^ F5) & V3 ^ j3) ^ (rA2 = (-1 ^ s5) & m3 ^ q3) ^ (JA2 = (-1 ^ e4) & O3 ^ b4) ^ (kA2 = (-1 ^ o5) & l3 ^ d5) ^ T3, e4 = p5, p5 = L5, iA2 = L5 & (-1 ^ v5) ^ J5, L5 = y5, y5 = a5, a5 = G5, G5 = r5, FA2 = a5 ^ r5 & (-1 ^ H5), r5 = f5, f5 = i2, EA2 = xA(fA2 = (eA2 = t5 ^ e4 & (-1 ^ I6)) ^ iA2 ^ (GA2 = L5 ^ y5 & (-1 ^ Y5)) ^ FA2 ^ (tA2 = r5 ^ i2 & (-1 ^ w5)), F5, 1), SA2 = n4, F5 = xA(B5 ^ pA2, E5 ^ M5, 2), s5 = n4, i2 = xA(Q5 ^ u4, S4 ^ hA2, 62), R4 = n4, o5 = xA(U5 ^ bA2, K5 ^ UA2, 56), u4 = n4, M5 = xA(k5 ^ HA2, g6 ^ yA2, 27), W3 = n4, D5 = xA(D5 ^ h5, N5 ^ BA2, 18), P5 = n4, B5 = xA(B5 ^ sA2, E5 ^ MA2, 1), z3 = n4, k5 = xA(k5 ^ $3, g6 ^ NA2, 14), _3 = E5 = N5 ^ _3, gA2 = (yA2 = n4) ^ (-1 ^ E5) & x3, g6 = xA(Q5 ^ dA2, S4 ^ IA2, 61), N5 = n4, E5 = xA(U5 ^ vA2, K5 ^ CA2, 28), KA2 = K5 = n4, Q5 = h5 ^ cA2, CA2 = (U5 = (h5 = (BA2 = (-1 ^ i2) & r5 ^ F5) ^ (cA2 = (-1 ^ M5) & a5 ^ o5) ^ (MA2 = (-1 ^ B5) & L5 ^ D5) ^ (dA2 = (-1 ^ Q5) & t5 ^ k5) ^ (hA2 = (-1 ^ E5) & J5 ^ g6)) ^ EA2) ^ (IA2 = (-1 ^ t5) & I6 ^ Q5 ^ 139), x3 = (K5 = (t5 = SA2) ^ (SA2 = (NA2 = (-1 ^ R4) & j3 ^ s5) ^ (HA2 = (-1 ^ W3) & q3 ^ u4) ^ (EA2 = (-1 ^ z3) & b4 ^ P5) ^ ($3 = (-1 ^ K5) & d5 ^ N5) ^ gA2)) ^ (UA2 = (-1 ^ x3) & AA2 ^ _3 ^ -2147483648), nA2 = t5 = (YA2 = V3 ^ (-1 ^ s5) & R4) ^ (sA2 = m3 ^ (-1 ^ u4) & W3) ^ (pA2 = O3 ^ (-1 ^ P5) & z3) ^ (LA2 = l3 ^ (-1 ^ N5) & KA2) ^ (_3 = X3 ^ (-1 ^ yA2) & _3), Q5 = (S4 = fA2) ^ xA(uA2 = (fA2 = f5 ^ (-1 ^ F5) & i2) ^ (PA2 = G5 ^ (-1 ^ o5) & M5) ^ (RA2 = y5 ^ (-1 ^ D5) & B5) ^ (bA2 = p5 ^ (-1 ^ g6) & E5) ^ (vA2 = e4 ^ (-1 ^ k5) & Q5), t5, 1), t5 = xA(Q5 ^ (y5 = Y5 ^ (-1 ^ y5) & D5), (S4 = n4 ^ Z3) ^ (D5 = DA2 ^ (-1 ^ O3) & P5), 43), O3 = n4, Z3 = QA2 ^ (-1 ^ V3) & s5, V3 = AA2 ^ (-1 ^ X3) & yA2, B5 = (L5 = (i2 ^= (-1 ^ r5) & w5) ^ (s5 = M5 ^ (-1 ^ a5) & H5) ^ (Y5 = B5 ^ (-1 ^ L5) & Y5) ^ (r5 = E5 ^ (-1 ^ J5) & v5) ^ IA2) ^ xA(w5 = (yA2 = w5 ^ (-1 ^ f5) & F5) ^ (P5 = H5 ^ (-1 ^ G5) & o5) ^ y5 ^ (I6 ^= (-1 ^ e4) & k5) ^ (H5 = v5 ^ (-1 ^ p5) & g6), D5 = Z3 ^ (u4 = aA2 ^ (-1 ^ m3) & u4) ^ D5 ^ V3 ^ (m3 = oA2 ^ (-1 ^ l3) & N5), 1), v5 = xA(B5 ^ iA2, (o5 = kA2) ^ (E5 = (y5 = (kA2 = R4 ^ (-1 ^ j3) & QA2) ^ (F5 = W3 ^ (-1 ^ q3) & aA2) ^ (e4 = z3 ^ (-1 ^ b4) & DA2) ^ (f5 = KA2 ^ (-1 ^ d5) & oA2) ^ UA2) ^ n4), 44), AA2 = o5 = n4, M5 = xA(h5, SA2, 1) ^ w5, J5 = xA(vA2 ^ M5, _3 ^ (g6 = D5 ^ n4), 28), d5 = n4, p5 = xA(U5 ^ Y5, K5 ^ e4, 3), l3 = n4, h5 = xA(L5, y5, 1) ^ uA2, Y5 = xA(hA2 ^ h5, $3 ^ (N5 = nA2 ^ n4), 20), oA2 = e4 = n4, L5 = xA(B5 ^ eA2, E5 ^ T3, 1), b4 = n4, y5 = xA(M5 ^ RA2, g6 ^ pA2, 25), X3 = n4, H5 = xA(Q5 ^ H5, S4 ^ m3, 6), DA2 = D5 = n4, a5 = xA(h5 ^ dA2, N5 ^ gA2, 27), q3 = n4, G5 = xA(B5 ^ GA2, E5 ^ JA2, 10), m3 = n4, w5 = xA(U5 ^ r5, f5 ^ K5, 36), aA2 = k5 = n4, r5 = xA(I6 ^ Q5, S4 ^ V3, 62), j3 = n4, f5 = xA(h5 ^ MA2, N5 ^ EA2, 39), V3 = n4, I6 = xA(M5 ^ bA2, g6 ^ LA2, 55), QA2 = T3 = n4, dA2 = o5 = (JA2 = (-1 ^ T3) & V3 ^ j3) ^ (MA2 = (-1 ^ k5) & m3 ^ q3) ^ (KA2 = (-1 ^ D5) & X3 ^ b4) ^ (gA2 = (-1 ^ o5) & O3 ^ x3 ^ -2147483648) ^ (_3 = (-1 ^ e4) & l3 ^ d5), e4 = t5, t5 = J5, J5 = p5, p5 = L5, L5 = y5, eA2 = p5 ^ y5 & (-1 ^ H5), y5 = a5, a5 = G5, G5 = r5, r5 = f5, $3 = xA(EA2 = (hA2 = e4 & (-1 ^ v5) ^ CA2 ^ 32905) ^ (IA2 = t5 ^ J5 & (-1 ^ Y5)) ^ eA2 ^ (iA2 = y5 ^ a5 & (-1 ^ w5)) ^ (GA2 = G5 ^ f5 & (-1 ^ I6)), o5, 1), SA2 = n4, F5 = xA(U5 ^ s5, F5 ^ K5, 41), s5 = n4, o5 = xA(B5 ^ tA2, E5 ^ wA2, 2), R4 = n4, D5 = xA(Q5 ^ P5, S4 ^ u4, 15), u4 = n4, f5 = xA(M5 ^ fA2, g6 ^ YA2, 56), W3 = n4, k5 = xA(h5 ^ cA2, N5 ^ HA2, 8), P5 = n4, i2 = xA(i2 ^ U5, K5 ^ kA2, 18), z3 = K5 = n4, g6 = xA(M5 ^ PA2, g6 ^ sA2, 21), T3 = n4, M5 = xA(h5 ^ BA2, N5 ^ NA2, 14), N5 = n4, U5 = xA(B5 ^ FA2, E5 ^ rA2, 45), h5 = n4, B5 = xA(Q5 ^ yA2, S4 ^ Z3, 61), S4 = Q5 = n4, E5 = I6, I6 = o5, o5 = D5, BA2 = D5 ^ (-1 ^ f5) & y5, D5 = k5, k5 = g6, G5 = xA((U5 = (wA2 = (yA2 = (-1 ^ I6) & G5 ^ F5) ^ BA2 ^ (cA2 = D5 ^ (-1 ^ i2) & p5) ^ (kA2 = g6 ^ (-1 ^ M5) & CA2) ^ (rA2 = (g6 = U5) ^ (-1 ^ B5) & t5)) ^ $3) ^ (Z3 = I6 ^ (-1 ^ G5) & E5), (K5 = ($3 = (NA2 = (-1 ^ R4) & j3 ^ s5) ^ (FA2 = (-1 ^ W3) & q3 ^ u4) ^ (tA2 = (-1 ^ K5) & b4 ^ P5) ^ (HA2 = (-1 ^ N5) & x3 ^ T3) ^ (fA2 = (-1 ^ Q5) & d5 ^ h5)) ^ SA2) ^ (Q5 = R4 ^ (-1 ^ j3) & QA2), 14), j3 = n4, d5 = Q5 ^= (q3 = W3 ^ (-1 ^ q3) & aA2) ^ (SA2 = z3 ^ (-1 ^ b4) & DA2) ^ (UA2 = N5 ^ (-1 ^ x3) & AA2) ^ (YA2 = S4 ^ (-1 ^ d5) & oA2), nA2 = BA2, Q5 = (LA2 = (I6 = r5 ^ (-1 ^ F5) & I6) ^ (BA2 = a5 ^ (-1 ^ o5) & f5) ^ (b4 = L5 ^ (-1 ^ D5) & i2) ^ (sA2 = e4 ^ (-1 ^ k5) & M5) ^ (pA2 = J5 ^ (-1 ^ g6) & B5)) ^ xA(p5 = (x3 = Z3) ^ (f5 ^= (-1 ^ y5) & w5) ^ (i2 ^= (-1 ^ p5) & H5) ^ (M5 ^= (-1 ^ CA2) & v5) ^ (Z3 = B5 ^ (-1 ^ t5) & Y5), Q5, 1), t5 = xA(nA2 ^ Q5, (t5 = FA2) ^ (S4 = (FA2 = (y5 = V3 ^ (-1 ^ s5) & R4) ^ (R4 = m3 ^ (-1 ^ u4) & W3) ^ (x3 = X3 ^ (-1 ^ P5) & z3) ^ (W3 = O3 ^ (-1 ^ T3) & N5) ^ (z3 = l3 ^ (-1 ^ h5) & S4)) ^ n4), 21), CA2 = N5 = n4, v5 = (nA2 = E5 ^ (-1 ^ r5) & F5) ^ (w5 ^= (-1 ^ a5) & o5) ^ (H5 ^= (-1 ^ L5) & D5) ^ (k5 = v5 ^ (-1 ^ e4) & k5) ^ (PA2 = Y5 ^ (-1 ^ J5) & g6), B5 = xA(wA2, $3, 1) ^ v5, e4 = xA(B5 ^ b4, (E5 = (J5 = (o5 = QA2 ^ (-1 ^ V3) & s5) ^ (Y5 = aA2 ^ (-1 ^ m3) & u4) ^ (a5 = DA2 ^ (-1 ^ X3) & P5) ^ (P5 = AA2 ^ (-1 ^ O3) & T3) ^ (wA2 = oA2 ^ (-1 ^ l3) & h5)) ^ n4) ^ x3, 43), T3 = (x3 = n4) ^ (-1 ^ N5) & j3, h5 = xA(v5, J5, 1) ^ p5, J5 = xA(eA2 ^ h5, KA2 ^ (N5 = d5 ^ n4), 3), d5 = n4, p5 = xA(I6 ^ B5, E5 ^ y5, 61), l3 = n4, F5 = xA(LA2, FA2, 1) ^ EA2, I6 = xA(w5 ^ F5, Y5 ^ (g6 = dA2 ^ n4), 45), AA2 = w5 = n4, L5 = xA(Q5 ^ cA2, S4 ^ tA2, 25), b4 = n4, y5 = xA(h5 ^ GA2, N5 ^ JA2, 18), X3 = n4, v5 = xA(f5 ^ U5, K5 ^ q3, 8), oA2 = D5 = n4, a5 = xA(F5 ^ H5, g6 ^ a5, 10), O3 = n4, r5 = xA(Q5 ^ yA2, S4 ^ NA2, 56), q3 = n4, Y5 = xA(B5 ^ BA2, E5 ^ R4, 15), DA2 = s5 = n4, f5 = xA(i2 ^ U5, K5 ^ SA2, 39), m3 = n4, i2 = xA(F5 ^ nA2, g6 ^ o5, 2), V3 = n4, H5 = xA(h5 ^ iA2, N5 ^ MA2, 41), aA2 = o5 = n4, MA2 = o5 = (cA2 = (-1 ^ o5) & V3 ^ m3) ^ (BA2 = (-1 ^ s5) & q3 ^ O3) ^ (KA2 = (-1 ^ D5) & X3 ^ b4) ^ (yA2 = (-1 ^ w5) & l3 ^ d5) ^ T3, w5 = G5, G5 = r5, iA2 = r5 & (-1 ^ Y5) ^ a5, r5 = f5, f5 = i2, FA2 = xA(NA2 = (eA2 = (-1 ^ v5) & y5 ^ L5) ^ (JA2 = e4 ^ w5 & (-1 ^ t5)) ^ (dA2 = (-1 ^ I6) & p5 ^ J5) ^ iA2 ^ (GA2 = r5 ^ i2 & (-1 ^ H5)), o5, 1), tA2 = n4, o5 = xA(B5 ^ sA2, E5 ^ W3, 62), s5 = n4, i2 = xA(Q5 ^ rA2, S4 ^ fA2, 55), QA2 = n4, D5 = xA(M5 ^ U5, K5 ^ UA2, 27), u4 = n4, M5 = xA(h5 ^ IA2, N5 ^ _3, 36), R4 = n4, k5 = xA(F5 ^ k5, g6 ^ P5, 1), P5 = n4, B5 = xA(B5 ^ pA2, E5 ^ z3, 6), W3 = n4, E5 = xA(F5 ^ PA2, g6 ^ wA2, 44), z3 = n4, g6 = xA(Q5 ^ kA2, S4 ^ HA2, 28), S4 = n4, U5 = xA(U5 ^ Z3, K5 ^ YA2, 20), F5 = I6, _3 = Q5 = n4, I6 = U5, J5 = xA((K5 = (Z3 = (kA2 = (-1 ^ i2) & r5 ^ o5) ^ (IA2 = (-1 ^ M5) & a5 ^ D5) ^ (rA2 = (-1 ^ B5) & L5 ^ k5) ^ (hA2 = (U5 = h5 ^ hA2) ^ (-1 ^ E5) & e4 ^ 32771) ^ (wA2 = (-1 ^ I6) & J5 ^ g6)) ^ FA2) ^ (FA2 = I6 ^ (-1 ^ J5) & F5), (Q5 = (J5 = tA2) ^ ($3 = (tA2 = (-1 ^ QA2) & m3 ^ s5) ^ (HA2 = (-1 ^ R4) & O3 ^ u4) ^ (fA2 = (-1 ^ W3) & b4 ^ P5) ^ (gA2 = (h5 = N5 ^ gA2) ^ (-1 ^ z3) & x3 ^ -2147483648) ^ (EA2 = (-1 ^ Q5) & d5 ^ S4))) ^ (d5 = _3 ^ (-1 ^ d5) & AA2), 44), N5 = n4, b4 = d5 = (SA2 = QA2 ^ (-1 ^ m3) & aA2) ^ (UA2 = R4 ^ (-1 ^ O3) & DA2) ^ (YA2 = W3 ^ (-1 ^ b4) & oA2) ^ d5 ^ (m3 = z3 ^ (-1 ^ x3) & CA2), x3 = hA2, LA2 = (O3 = f5 ^ (-1 ^ o5) & i2) ^ (hA2 = G5 ^ (-1 ^ D5) & M5) ^ (sA2 = y5 ^ (-1 ^ k5) & B5) ^ (pA2 = w5 ^ (-1 ^ U5) & E5) ^ (I6 = p5 ^ (-1 ^ g6) & I6), d5 = x3 ^ (B5 = xA(L5 = (r5 = i2 ^ (-1 ^ r5) & H5) ^ (nA2 = M5 ^ (-1 ^ a5) & Y5) ^ (PA2 = B5 ^ (-1 ^ L5) & v5) ^ FA2 ^ (a5 = E5 ^ (-1 ^ e4) & t5), d5, 1) ^ LA2), x3 = (i2 = gA2) ^ (E5 = (z3 = (e4 = V3 ^ (-1 ^ s5) & QA2) ^ (gA2 = q3 ^ (-1 ^ u4) & R4) ^ (R4 = X3 ^ (-1 ^ P5) & W3) ^ (QA2 = j3 ^ (-1 ^ h5) & z3) ^ (W3 = l3 ^ (-1 ^ S4) & _3)) ^ n4), Y5 = (H5 ^= (-1 ^ f5) & o5) ^ (_3 = Y5 ^ (-1 ^ G5) & D5) ^ (k5 = v5 ^ (-1 ^ y5) & k5) ^ (v5 = t5 ^ (-1 ^ w5) & U5) ^ (w5 = F5 ^ (-1 ^ p5) & g6), i2 = xA(Z3, $3, 1) ^ Y5, e4 = xA(i2 ^ O3, (M5 = (t5 = (G5 = aA2 ^ (-1 ^ V3) & s5) ^ (Z3 = DA2 ^ (-1 ^ q3) & u4) ^ (P5 = oA2 ^ (-1 ^ X3) & P5) ^ (y5 = CA2 ^ (-1 ^ j3) & h5) ^ (f5 = AA2 ^ (-1 ^ l3) & S4)) ^ n4) ^ e4, 14), oA2 = (AA2 = n4) ^ (-1 ^ x3) & N5, g6 = xA(Y5, t5, 1) ^ L5, t5 = xA(GA2 ^ g6, cA2 ^ (U5 = b4 ^ n4), 61), l3 = n4, p5 = xA(I6 ^ i2, M5 ^ W3, 20), b4 = n4, S4 = xA(LA2, z3, 1) ^ NA2, v5 = xA(v5 ^ S4, y5 ^ (h5 = MA2 ^ n4), 28), DA2 = F5 = n4, L5 = xA(B5 ^ kA2, E5 ^ tA2, 18), X3 = n4, y5 = xA(g6 ^ dA2, U5 ^ yA2, 6), O3 = n4, Y5 = xA(a5 ^ K5, Q5 ^ m3, 1), aA2 = o5 = n4, a5 = xA(S4 ^ H5, h5 ^ G5, 56), q3 = n4, G5 = xA(B5 ^ wA2, E5 ^ EA2, 36), m3 = n4, I6 = xA(i2 ^ pA2, M5 ^ QA2, 27), QA2 = D5 = n4, r5 = xA(r5 ^ K5, Q5 ^ SA2, 2), j3 = n4, f5 = xA(S4 ^ w5, h5 ^ f5, 55), V3 = n4, H5 = xA(g6 ^ JA2, U5 ^ T3, 62), T3 = w5 = n4, JA2 = F5 = (MA2 = (-1 ^ w5) & V3 ^ j3) ^ (kA2 = (-1 ^ D5) & m3 ^ q3) ^ (cA2 = (-1 ^ o5) & O3 ^ X3) ^ (yA2 = (-1 ^ F5) & b4 ^ l3) ^ oA2, w5 = J5, J5 = p5, p5 = L5, L5 = y5, GA2 = p5 ^ y5 & (-1 ^ Y5), y5 = a5, a5 = G5, G5 = r5, r5 = f5, EA2 = xA(tA2 = (dA2 = e4 ^ w5 & (-1 ^ d5)) ^ (wA2 = J5 & (-1 ^ v5) ^ t5) ^ GA2 ^ (NA2 = y5 ^ a5 & (-1 ^ I6)) ^ (FA2 = G5 ^ f5 & (-1 ^ H5)), F5, 1), $3 = n4, F5 = xA(i2 ^ sA2, M5 ^ R4, 39), s5 = n4, f5 = xA(B5 ^ IA2, E5 ^ HA2, 41), R4 = n4, o5 = xA(K5 ^ PA2, Q5 ^ YA2, 10), u4 = n4, D5 = xA(g6 ^ iA2, U5 ^ BA2, 15), W3 = n4, k5 = xA(S4 ^ k5, h5 ^ P5, 25), P5 = n4, i2 = xA(i2 ^ hA2, M5 ^ gA2, 8), z3 = n4, g6 = xA(g6 ^ eA2, U5 ^ KA2, 43), CA2 = n4, M5 = xA(S4 ^ _3, h5 ^ Z3, 21), S4 = n4, U5 = xA(B5 ^ rA2, E5 ^ fA2, 3), h5 = n4, B5 = xA(K5 ^ nA2, Q5 ^ UA2, 45), _3 = K5 = n4, E5 = I6, I6 = D5, D5 = k5, k5 = g6, y5 = xA((U5 = (IA2 = (KA2 = (-1 ^ f5) & G5 ^ F5) ^ (gA2 = (-1 ^ I6) & y5 ^ o5) ^ (Q5 = D5 ^ (-1 ^ i2) & p5) ^ (BA2 = g6 ^ (-1 ^ M5) & e4) ^ (hA2 = (g6 = U5) ^ (-1 ^ B5) & t5)) ^ EA2) ^ (rA2 = I6 ^ (-1 ^ y5) & E5), (K5 = (EA2 = (Z3 = (-1 ^ R4) & j3 ^ s5) ^ (eA2 = (-1 ^ W3) & q3 ^ u4) ^ (iA2 = (-1 ^ z3) & X3 ^ P5) ^ (HA2 = (-1 ^ S4) & AA2 ^ CA2) ^ (fA2 = (-1 ^ K5) & l3 ^ h5)) ^ $3) ^ ($3 = W3 ^ (-1 ^ q3) & QA2), 21), q3 = n4, l3 = (SA2 = R4 ^ (-1 ^ j3) & T3) ^ (nA2 = $3) ^ (j3 = z3 ^ (-1 ^ X3) & aA2) ^ ($3 = S4 ^ (-1 ^ AA2) & x3) ^ (UA2 = _3 ^ (-1 ^ l3) & DA2), AA2 = Q5, nA2 = (YA2 = r5 ^ (-1 ^ F5) & f5) ^ (X3 = a5 ^ (-1 ^ o5) & I6) ^ (sA2 = L5 ^ (-1 ^ D5) & i2) ^ (pA2 = w5 ^ (-1 ^ k5) & M5) ^ (LA2 = J5 ^ (-1 ^ g6) & B5), Q5 = xA(p5 = (PA2 = f5 ^ (-1 ^ G5) & H5) ^ (Q5 = rA2) ^ (G5 = i2 ^ (-1 ^ p5) & Y5) ^ (rA2 = M5 ^ (-1 ^ e4) & d5) ^ (e4 = B5 ^ (-1 ^ t5) & v5), l3, 1) ^ nA2, I6 = xA(AA2 ^ Q5, (S4 = (R4 = (M5 = V3 ^ (-1 ^ s5) & R4) ^ (f5 = m3 ^ (-1 ^ u4) & W3) ^ (i2 = O3 ^ (-1 ^ P5) & z3) ^ (z3 = N5 ^ (-1 ^ CA2) & S4) ^ (t5 = b4 ^ (-1 ^ h5) & _3)) ^ n4) ^ iA2, 43), AA2 = n4, v5 = (_3 = H5 ^ (-1 ^ r5) & F5) ^ (F5 = E5 ^ (-1 ^ a5) & o5) ^ (Y5 ^= (-1 ^ L5) & D5) ^ (iA2 = (-1 ^ w5) & k5 ^ d5 ^ 32770) ^ (H5 = v5 ^ (-1 ^ J5) & g6), B5 = xA(IA2, EA2, 1) ^ v5, t5 = xA(B5 ^ LA2, (E5 = (J5 = (D5 = T3 ^ (-1 ^ V3) & s5) ^ (w5 = QA2 ^ (-1 ^ m3) & u4) ^ (L5 = aA2 ^ (-1 ^ O3) & P5) ^ (CA2 = (-1 ^ N5) & CA2 ^ x3 ^ -2147483648) ^ (r5 = DA2 ^ (-1 ^ b4) & h5)) ^ n4) ^ t5, 44), T3 = (x3 = n4) ^ (-1 ^ AA2) & q3, k5 = xA(v5, J5, 1) ^ p5, J5 = xA(wA2 ^ k5, yA2 ^ (g6 = l3 ^ n4), 20), d5 = n4, p5 = xA(B5 ^ X3, E5 ^ f5, 45), l3 = n4, h5 = xA(nA2, R4, 1) ^ tA2, v5 = xA(Y5 ^ h5, L5 ^ (N5 = JA2 ^ n4), 3), DA2 = o5 = n4, L5 = xA(Q5 ^ hA2, S4 ^ fA2, 6), b4 = n4, a5 = xA(k5 ^ NA2, g6 ^ kA2, 8), X3 = n4, Y5 = xA(U5 ^ G5, K5 ^ j3, 25), aA2 = s5 = n4, G5 = xA(h5 ^ H5, N5 ^ r5, 36), O3 = n4, r5 = xA(Q5 ^ gA2, S4 ^ eA2, 15), m3 = n4, H5 = xA(B5 ^ sA2, E5 ^ i2, 10), QA2 = u4 = n4, f5 = xA(U5 ^ e4, K5 ^ UA2, 55), j3 = n4, i2 = xA(h5 ^ F5, w5 ^ N5, 41), V3 = n4, w5 = xA(k5 ^ GA2, g6 ^ cA2, 39), R4 = e4 = n4, IA2 = F5 = (hA2 = (-1 ^ e4) & V3 ^ j3) ^ (JA2 = (-1 ^ u4) & m3 ^ O3) ^ (kA2 = (-1 ^ s5) & X3 ^ b4) ^ (cA2 = (-1 ^ o5) & l3 ^ d5) ^ T3, e4 = y5, wA2 = t5 ^ y5 & (-1 ^ I6), y5 = a5, a5 = G5, G5 = r5, NA2 = a5 ^ r5 & (-1 ^ H5), r5 = f5, f5 = i2, EA2 = xA(fA2 = wA2 ^ (eA2 = (-1 ^ v5) & p5 ^ J5) ^ (GA2 = y5 & (-1 ^ Y5) ^ L5) ^ NA2 ^ (tA2 = r5 ^ i2 & (-1 ^ w5)), F5, 1), UA2 = n4, F5 = xA(B5 ^ YA2, E5 ^ M5, 2), s5 = n4, i2 = xA(Q5 ^ BA2, S4 ^ HA2, 62), W3 = n4, o5 = xA(U5 ^ PA2, K5 ^ SA2, 56), u4 = n4, M5 = xA(k5 ^ dA2, g6 ^ oA2, 27), oA2 = n4, D5 = xA(h5 ^ _3, D5 ^ N5, 18), P5 = n4, B5 = xA(B5 ^ pA2, E5 ^ z3, 1), z3 = n4, k5 = xA(k5 ^ FA2, g6 ^ MA2, 14), _3 = E5 = N5 ^ CA2, gA2 = (yA2 = n4) ^ (-1 ^ E5) & x3, g6 = xA(Q5 ^ KA2, S4 ^ Z3, 61), N5 = n4, E5 = xA(U5 ^ rA2, K5 ^ $3, 28), KA2 = K5 = n4, CA2 = (U5 = (h5 = (BA2 = (-1 ^ i2) & r5 ^ F5) ^ (MA2 = (-1 ^ M5) & a5 ^ o5) ^ (dA2 = (-1 ^ B5) & L5 ^ D5) ^ (rA2 = (-1 ^ (Q5 = h5 ^ iA2)) & t5 ^ k5) ^ (Z3 = (-1 ^ E5) & J5 ^ g6)) ^ EA2) ^ (iA2 = (-1 ^ t5) & I6 ^ Q5 ^ 128), x3 = (K5 = (SA2 = (FA2 = (-1 ^ W3) & j3 ^ s5) ^ (HA2 = (-1 ^ oA2) & O3 ^ u4) ^ (EA2 = (-1 ^ z3) & b4 ^ P5) ^ ($3 = (-1 ^ K5) & d5 ^ N5) ^ gA2) ^ UA2) ^ (UA2 = (-1 ^ x3) & AA2 ^ _3 ^ -2147483648), nA2 = t5 = (YA2 = V3 ^ (-1 ^ s5) & W3) ^ (sA2 = m3 ^ (-1 ^ u4) & oA2) ^ (pA2 = X3 ^ (-1 ^ P5) & z3) ^ (_3 = q3 ^ (-1 ^ yA2) & _3) ^ (LA2 = l3 ^ (-1 ^ N5) & KA2), Q5 = (S4 = fA2) ^ xA(uA2 = (fA2 = f5 ^ (-1 ^ F5) & i2) ^ (PA2 = G5 ^ (-1 ^ o5) & M5) ^ (RA2 = y5 ^ (-1 ^ D5) & B5) ^ (bA2 = e4 ^ (-1 ^ k5) & Q5) ^ (vA2 = p5 ^ (-1 ^ g6) & E5), t5, 1), t5 = xA(Q5 ^ (y5 = Y5 ^ (-1 ^ y5) & D5), (S4 = n4 ^ IA2) ^ (D5 = aA2 ^ (-1 ^ X3) & P5), 43), X3 = n4, IA2 = R4 ^ (-1 ^ V3) & s5, V3 = AA2 ^ (-1 ^ q3) & yA2, B5 = (L5 = (i2 ^= (-1 ^ r5) & w5) ^ (s5 = M5 ^ (-1 ^ a5) & H5) ^ (Y5 = B5 ^ (-1 ^ L5) & Y5) ^ (r5 = E5 ^ (-1 ^ J5) & v5) ^ iA2) ^ xA(w5 = (yA2 = w5 ^ (-1 ^ f5) & F5) ^ (P5 = H5 ^ (-1 ^ G5) & o5) ^ y5 ^ (I6 ^= (-1 ^ e4) & k5) ^ (H5 = v5 ^ (-1 ^ p5) & g6), D5 = IA2 ^ (u4 = QA2 ^ (-1 ^ m3) & u4) ^ D5 ^ V3 ^ (q3 = DA2 ^ (-1 ^ l3) & N5), 1), v5 = xA(B5 ^ eA2, (o5 = cA2) ^ (E5 = (y5 = (cA2 = W3 ^ (-1 ^ j3) & R4) ^ (F5 = oA2 ^ (-1 ^ O3) & QA2) ^ (e4 = z3 ^ (-1 ^ b4) & aA2) ^ (f5 = KA2 ^ (-1 ^ d5) & DA2) ^ UA2) ^ n4), 44), AA2 = o5 = n4, M5 = xA(h5, SA2, 1) ^ w5, J5 = xA(bA2 ^ M5, _3 ^ (g6 = D5 ^ n4), 28), d5 = n4, p5 = xA(U5 ^ Y5, K5 ^ e4, 3), l3 = n4, h5 = xA(L5, y5, 1) ^ uA2, Y5 = xA(Z3 ^ h5, $3 ^ (N5 = nA2 ^ n4), 20), oA2 = e4 = n4, L5 = xA(B5 ^ wA2, E5 ^ T3, 1), b4 = n4, y5 = xA(M5 ^ RA2, g6 ^ pA2, 25), O3 = n4, H5 = xA(Q5 ^ H5, S4 ^ q3, 6), DA2 = D5 = n4, a5 = xA(h5 ^ rA2, N5 ^ gA2, 27), q3 = n4, G5 = xA(B5 ^ GA2, E5 ^ kA2, 10), m3 = n4, w5 = xA(U5 ^ r5, f5 ^ K5, 36), aA2 = k5 = n4, r5 = xA(I6 ^ Q5, S4 ^ V3, 62), j3 = n4, f5 = xA(h5 ^ dA2, N5 ^ EA2, 39), V3 = n4, I6 = xA(M5 ^ vA2, g6 ^ LA2, 55), QA2 = T3 = n4, rA2 = o5 = (dA2 = (-1 ^ T3) & V3 ^ j3) ^ (kA2 = (-1 ^ k5) & m3 ^ q3) ^ (KA2 = (-1 ^ D5) & O3 ^ b4) ^ (gA2 = (-1 ^ o5) & X3 ^ x3) ^ (_3 = (-1 ^ e4) & l3 ^ d5), e4 = t5, t5 = J5, J5 = p5, p5 = L5, L5 = y5, eA2 = p5 ^ y5 & (-1 ^ H5), y5 = a5, a5 = G5, G5 = r5, r5 = f5, $3 = xA(EA2 = (wA2 = e4 & (-1 ^ v5) ^ CA2 ^ 32778) ^ (Z3 = t5 ^ J5 & (-1 ^ Y5)) ^ eA2 ^ (iA2 = y5 ^ a5 & (-1 ^ w5)) ^ (GA2 = G5 ^ f5 & (-1 ^ I6)), o5, 1), SA2 = n4, F5 = xA(U5 ^ s5, F5 ^ K5, 41), s5 = n4, o5 = xA(B5 ^ tA2, E5 ^ hA2, 2), R4 = n4, D5 = xA(Q5 ^ P5, S4 ^ u4, 15), u4 = n4, f5 = xA(M5 ^ fA2, g6 ^ YA2, 56), W3 = n4, k5 = xA(h5 ^ MA2, N5 ^ HA2, 8), P5 = n4, i2 = xA(i2 ^ U5, K5 ^ cA2, 18), z3 = K5 = n4, g6 = xA(M5 ^ PA2, g6 ^ sA2, 21), T3 = n4, M5 = xA(h5 ^ BA2, N5 ^ FA2, 14), N5 = n4, U5 = xA(B5 ^ NA2, E5 ^ JA2, 45), h5 = n4, B5 = xA(Q5 ^ yA2, S4 ^ IA2, 61), S4 = Q5 = n4, E5 = I6, I6 = o5, o5 = D5, BA2 = D5 ^ (-1 ^ f5) & y5, D5 = k5, k5 = g6, G5 = xA((U5 = (hA2 = (yA2 = (-1 ^ I6) & G5 ^ F5) ^ BA2 ^ (cA2 = D5 ^ (-1 ^ i2) & p5) ^ (MA2 = g6 ^ (-1 ^ M5) & CA2) ^ (JA2 = (g6 = U5) ^ (-1 ^ B5) & t5)) ^ $3) ^ (IA2 = I6 ^ (-1 ^ G5) & E5), (K5 = ($3 = (NA2 = (-1 ^ R4) & j3 ^ s5) ^ (FA2 = (-1 ^ W3) & q3 ^ u4) ^ (tA2 = (-1 ^ K5) & b4 ^ P5) ^ (HA2 = (-1 ^ N5) & x3 ^ T3) ^ (fA2 = (-1 ^ Q5) & d5 ^ h5)) ^ SA2) ^ (Q5 = R4 ^ (-1 ^ j3) & QA2), 14), j3 = n4, d5 = Q5 ^= (q3 = W3 ^ (-1 ^ q3) & aA2) ^ (SA2 = z3 ^ (-1 ^ b4) & DA2) ^ (UA2 = N5 ^ (-1 ^ x3) & AA2) ^ (YA2 = S4 ^ (-1 ^ d5) & oA2), nA2 = BA2, Q5 = (LA2 = (I6 = r5 ^ (-1 ^ F5) & I6) ^ (BA2 = a5 ^ (-1 ^ o5) & f5) ^ (b4 = L5 ^ (-1 ^ D5) & i2) ^ (sA2 = e4 ^ (-1 ^ k5) & M5) ^ (pA2 = J5 ^ (-1 ^ g6) & B5)) ^ xA(p5 = (x3 = IA2) ^ (f5 ^= (-1 ^ y5) & w5) ^ (i2 ^= (-1 ^ p5) & H5) ^ (M5 ^= (-1 ^ CA2) & v5) ^ (IA2 = B5 ^ (-1 ^ t5) & Y5), Q5, 1), t5 = xA(nA2 ^ Q5, (t5 = FA2) ^ (S4 = (FA2 = (y5 = V3 ^ (-1 ^ s5) & R4) ^ (R4 = m3 ^ (-1 ^ u4) & W3) ^ (x3 = O3 ^ (-1 ^ P5) & z3) ^ (W3 = X3 ^ (-1 ^ T3) & N5) ^ (z3 = l3 ^ (-1 ^ h5) & S4)) ^ n4), 21), CA2 = N5 = n4, v5 = (nA2 = E5 ^ (-1 ^ r5) & F5) ^ (w5 ^= (-1 ^ a5) & o5) ^ (H5 ^= (-1 ^ L5) & D5) ^ (k5 = v5 ^ (-1 ^ e4) & k5) ^ (PA2 = Y5 ^ (-1 ^ J5) & g6), B5 = xA(hA2, $3, 1) ^ v5, e4 = xA(B5 ^ b4, (E5 = (J5 = (o5 = QA2 ^ (-1 ^ V3) & s5) ^ (Y5 = aA2 ^ (-1 ^ m3) & u4) ^ (a5 = DA2 ^ (-1 ^ O3) & P5) ^ (P5 = AA2 ^ (-1 ^ X3) & T3) ^ (hA2 = oA2 ^ (-1 ^ l3) & h5)) ^ n4) ^ x3, 43), T3 = (x3 = n4) ^ (-1 ^ N5) & j3, h5 = xA(v5, J5, 1) ^ p5, J5 = xA(eA2 ^ h5, KA2 ^ (N5 = d5 ^ n4), 3), d5 = n4, p5 = xA(I6 ^ B5, E5 ^ y5, 61), l3 = n4, F5 = xA(LA2, FA2, 1) ^ EA2, I6 = xA(w5 ^ F5, Y5 ^ (g6 = rA2 ^ n4), 45), AA2 = w5 = n4, L5 = xA(Q5 ^ cA2, S4 ^ tA2, 25), b4 = n4, y5 = xA(h5 ^ GA2, N5 ^ dA2, 18), X3 = n4, v5 = xA(f5 ^ U5, K5 ^ q3, 8), oA2 = D5 = n4, a5 = xA(F5 ^ H5, g6 ^ a5, 10), O3 = n4, r5 = xA(Q5 ^ yA2, S4 ^ NA2, 56), q3 = n4, Y5 = xA(B5 ^ BA2, E5 ^ R4, 15), DA2 = s5 = n4, f5 = xA(i2 ^ U5, K5 ^ SA2, 39), m3 = n4, i2 = xA(F5 ^ nA2, g6 ^ o5, 2), V3 = n4, H5 = xA(h5 ^ iA2, N5 ^ kA2, 41), aA2 = o5 = n4, kA2 = o5 = (cA2 = (-1 ^ o5) & V3 ^ m3) ^ (BA2 = (-1 ^ s5) & q3 ^ O3) ^ (KA2 = (-1 ^ D5) & X3 ^ b4) ^ (yA2 = (-1 ^ w5) & l3 ^ d5) ^ T3, w5 = G5, G5 = r5, iA2 = r5 & (-1 ^ Y5) ^ a5, r5 = f5, f5 = i2, FA2 = xA(NA2 = (eA2 = (-1 ^ v5) & y5 ^ L5) ^ (dA2 = e4 ^ w5 & (-1 ^ t5)) ^ (rA2 = (-1 ^ I6) & p5 ^ J5) ^ iA2 ^ (GA2 = r5 ^ i2 & (-1 ^ H5)), o5, 1), tA2 = n4, o5 = xA(B5 ^ sA2, E5 ^ W3, 62), s5 = n4, i2 = xA(Q5 ^ JA2, S4 ^ fA2, 55), QA2 = n4, D5 = xA(M5 ^ U5, K5 ^ UA2, 27), u4 = n4, M5 = xA(h5 ^ Z3, N5 ^ _3, 36), R4 = n4, k5 = xA(F5 ^ k5, g6 ^ P5, 1), P5 = n4, B5 = xA(B5 ^ pA2, E5 ^ z3, 6), W3 = n4, E5 = xA(F5 ^ PA2, g6 ^ hA2, 44), z3 = n4, g6 = xA(Q5 ^ MA2, S4 ^ HA2, 28), S4 = n4, U5 = xA(U5 ^ IA2, K5 ^ YA2, 20), F5 = I6, _3 = Q5 = n4, I6 = U5, J5 = xA((K5 = (Z3 = (MA2 = (-1 ^ i2) & r5 ^ o5) ^ (JA2 = (-1 ^ M5) & a5 ^ D5) ^ (hA2 = (-1 ^ B5) & L5 ^ k5) ^ (IA2 = (U5 = h5 ^ wA2) ^ (-1 ^ E5) & e4 ^ -2147483638) ^ (wA2 = (-1 ^ I6) & J5 ^ g6)) ^ FA2) ^ (FA2 = I6 ^ (-1 ^ J5) & F5), (Q5 = (J5 = tA2) ^ ($3 = (tA2 = (-1 ^ QA2) & m3 ^ s5) ^ (HA2 = (-1 ^ R4) & O3 ^ u4) ^ (fA2 = (-1 ^ W3) & b4 ^ P5) ^ (gA2 = (h5 = N5 ^ gA2) ^ (-1 ^ z3) & x3 ^ -2147483648) ^ (EA2 = (-1 ^ Q5) & d5 ^ S4))) ^ (d5 = _3 ^ (-1 ^ d5) & AA2), 44), N5 = n4, b4 = d5 = (SA2 = QA2 ^ (-1 ^ m3) & aA2) ^ (UA2 = R4 ^ (-1 ^ O3) & DA2) ^ (YA2 = W3 ^ (-1 ^ b4) & oA2) ^ d5 ^ (m3 = z3 ^ (-1 ^ x3) & CA2), x3 = IA2, LA2 = (O3 = f5 ^ (-1 ^ o5) & i2) ^ (IA2 = G5 ^ (-1 ^ D5) & M5) ^ (sA2 = y5 ^ (-1 ^ k5) & B5) ^ (pA2 = w5 ^ (-1 ^ U5) & E5) ^ (I6 = p5 ^ (-1 ^ g6) & I6), d5 = x3 ^ (B5 = xA(L5 = (r5 = i2 ^ (-1 ^ r5) & H5) ^ (nA2 = M5 ^ (-1 ^ a5) & Y5) ^ (PA2 = B5 ^ (-1 ^ L5) & v5) ^ FA2 ^ (a5 = E5 ^ (-1 ^ e4) & t5), d5, 1) ^ LA2), x3 = (i2 = gA2) ^ (E5 = (z3 = (e4 = V3 ^ (-1 ^ s5) & QA2) ^ (gA2 = q3 ^ (-1 ^ u4) & R4) ^ (R4 = X3 ^ (-1 ^ P5) & W3) ^ (QA2 = j3 ^ (-1 ^ h5) & z3) ^ (W3 = l3 ^ (-1 ^ S4) & _3)) ^ n4), Y5 = (H5 ^= (-1 ^ f5) & o5) ^ (_3 = Y5 ^ (-1 ^ G5) & D5) ^ (k5 = v5 ^ (-1 ^ y5) & k5) ^ (v5 = t5 ^ (-1 ^ w5) & U5) ^ (w5 = F5 ^ (-1 ^ p5) & g6), i2 = xA(Z3, $3, 1) ^ Y5, e4 = xA(i2 ^ O3, (M5 = (t5 = (G5 = aA2 ^ (-1 ^ V3) & s5) ^ (Z3 = DA2 ^ (-1 ^ q3) & u4) ^ (P5 = oA2 ^ (-1 ^ X3) & P5) ^ (y5 = CA2 ^ (-1 ^ j3) & h5) ^ (f5 = AA2 ^ (-1 ^ l3) & S4)) ^ n4) ^ e4, 14), oA2 = (AA2 = n4) ^ (-1 ^ x3) & N5, g6 = xA(Y5, t5, 1) ^ L5, t5 = xA(GA2 ^ g6, cA2 ^ (U5 = b4 ^ n4), 61), l3 = n4, p5 = xA(I6 ^ i2, M5 ^ W3, 20), b4 = n4, S4 = xA(LA2, z3, 1) ^ NA2, v5 = xA(v5 ^ S4, y5 ^ (h5 = kA2 ^ n4), 28), DA2 = F5 = n4, L5 = xA(B5 ^ MA2, E5 ^ tA2, 18), X3 = n4, y5 = xA(g6 ^ rA2, U5 ^ yA2, 6), O3 = n4, Y5 = xA(a5 ^ K5, Q5 ^ m3, 1), aA2 = o5 = n4, a5 = xA(S4 ^ H5, h5 ^ G5, 56), q3 = n4, G5 = xA(B5 ^ wA2, E5 ^ EA2, 36), m3 = n4, I6 = xA(i2 ^ pA2, M5 ^ QA2, 27), QA2 = D5 = n4, r5 = xA(r5 ^ K5, Q5 ^ SA2, 2), j3 = n4, f5 = xA(S4 ^ w5, h5 ^ f5, 55), V3 = n4, H5 = xA(g6 ^ dA2, U5 ^ T3, 62), T3 = w5 = n4, dA2 = F5 = (MA2 = (-1 ^ w5) & V3 ^ j3) ^ (kA2 = (-1 ^ D5) & m3 ^ q3) ^ (cA2 = (-1 ^ o5) & O3 ^ X3) ^ (yA2 = (-1 ^ F5) & b4 ^ l3) ^ oA2, w5 = J5, J5 = p5, p5 = L5, L5 = y5, GA2 = p5 ^ y5 & (-1 ^ Y5), y5 = a5, a5 = G5, G5 = r5, r5 = f5, EA2 = xA(tA2 = (rA2 = e4 ^ w5 & (-1 ^ d5)) ^ (wA2 = J5 & (-1 ^ v5) ^ t5) ^ GA2 ^ (NA2 = y5 ^ a5 & (-1 ^ I6)) ^ (FA2 = G5 ^ f5 & (-1 ^ H5)), F5, 1), $3 = n4, F5 = xA(i2 ^ sA2, M5 ^ R4, 39), s5 = n4, f5 = xA(B5 ^ JA2, E5 ^ HA2, 41), R4 = n4, o5 = xA(K5 ^ PA2, Q5 ^ YA2, 10), u4 = n4, D5 = xA(g6 ^ iA2, U5 ^ BA2, 15), W3 = n4, k5 = xA(S4 ^ k5, h5 ^ P5, 25), P5 = n4, i2 = xA(i2 ^ IA2, M5 ^ gA2, 8), z3 = n4, g6 = xA(g6 ^ eA2, U5 ^ KA2, 43), CA2 = n4, M5 = xA(S4 ^ _3, h5 ^ Z3, 21), S4 = n4, U5 = xA(B5 ^ hA2, E5 ^ fA2, 3), h5 = n4, B5 = xA(K5 ^ nA2, Q5 ^ UA2, 45), _3 = K5 = n4, E5 = I6, I6 = D5, D5 = k5, k5 = g6, y5 = xA((U5 = (hA2 = (gA2 = (-1 ^ f5) & G5 ^ F5) ^ (KA2 = (-1 ^ I6) & y5 ^ o5) ^ (Q5 = D5 ^ (-1 ^ i2) & p5) ^ (BA2 = g6 ^ (-1 ^ M5) & e4) ^ (JA2 = (g6 = U5) ^ (-1 ^ B5) & t5)) ^ EA2) ^ (IA2 = I6 ^ (-1 ^ y5) & E5), (K5 = (EA2 = (Z3 = (-1 ^ R4) & j3 ^ s5) ^ (eA2 = (-1 ^ W3) & q3 ^ u4) ^ (iA2 = (-1 ^ z3) & X3 ^ P5) ^ (HA2 = (-1 ^ S4) & AA2 ^ CA2) ^ (fA2 = (-1 ^ K5) & l3 ^ h5)) ^ $3) ^ ($3 = W3 ^ (-1 ^ q3) & QA2), 21), q3 = n4, l3 = (SA2 = R4 ^ (-1 ^ j3) & T3) ^ (nA2 = $3) ^ (j3 = z3 ^ (-1 ^ X3) & aA2) ^ ($3 = S4 ^ (-1 ^ AA2) & x3) ^ (UA2 = _3 ^ (-1 ^ l3) & DA2), AA2 = Q5, nA2 = (YA2 = r5 ^ (-1 ^ F5) & f5) ^ (X3 = a5 ^ (-1 ^ o5) & I6) ^ (sA2 = L5 ^ (-1 ^ D5) & i2) ^ (pA2 = w5 ^ (-1 ^ k5) & M5) ^ (LA2 = J5 ^ (-1 ^ g6) & B5), Q5 = xA(p5 = (PA2 = f5 ^ (-1 ^ G5) & H5) ^ (Q5 = IA2) ^ (G5 = i2 ^ (-1 ^ p5) & Y5) ^ (IA2 = M5 ^ (-1 ^ e4) & d5) ^ (e4 = B5 ^ (-1 ^ t5) & v5), l3, 1) ^ nA2, I6 = xA(AA2 ^ Q5, (S4 = (R4 = (M5 = V3 ^ (-1 ^ s5) & R4) ^ (f5 = m3 ^ (-1 ^ u4) & W3) ^ (i2 = O3 ^ (-1 ^ P5) & z3) ^ (W3 = N5 ^ (-1 ^ CA2) & S4) ^ (t5 = b4 ^ (-1 ^ h5) & _3)) ^ n4) ^ iA2, 43), AA2 = n4, v5 = (z3 = H5 ^ (-1 ^ r5) & F5) ^ (F5 = E5 ^ (-1 ^ a5) & o5) ^ (Y5 ^= (-1 ^ L5) & D5) ^ (iA2 = (-1 ^ w5) & k5 ^ d5 ^ -2147450751) ^ (H5 = v5 ^ (-1 ^ J5) & g6), B5 = xA(hA2, EA2, 1) ^ v5, t5 = xA(B5 ^ LA2, (E5 = (J5 = (D5 = T3 ^ (-1 ^ V3) & s5) ^ (w5 = QA2 ^ (-1 ^ m3) & u4) ^ (L5 = aA2 ^ (-1 ^ O3) & P5) ^ (_3 = (-1 ^ N5) & CA2 ^ x3 ^ -2147483648) ^ (r5 = DA2 ^ (-1 ^ b4) & h5)) ^ n4) ^ t5, 44), x3 = (CA2 = n4) ^ (-1 ^ AA2) & q3, k5 = xA(v5, J5, 1) ^ p5, J5 = xA(wA2 ^ k5, yA2 ^ (g6 = l3 ^ n4), 20), d5 = n4, p5 = xA(B5 ^ X3, E5 ^ f5, 45), l3 = n4, h5 = xA(nA2, R4, 1) ^ tA2, v5 = xA(Y5 ^ h5, L5 ^ (N5 = dA2 ^ n4), 3), T3 = o5 = n4, L5 = xA(Q5 ^ JA2, S4 ^ fA2, 6), b4 = n4, a5 = xA(k5 ^ NA2, g6 ^ kA2, 8), X3 = n4, Y5 = xA(U5 ^ G5, K5 ^ j3, 25), DA2 = s5 = n4, G5 = xA(h5 ^ H5, N5 ^ r5, 36), O3 = n4, r5 = xA(Q5 ^ KA2, S4 ^ eA2, 15), m3 = n4, H5 = xA(B5 ^ sA2, E5 ^ i2, 10), aA2 = u4 = n4, f5 = xA(U5 ^ e4, K5 ^ UA2, 55), j3 = n4, i2 = xA(h5 ^ F5, w5 ^ N5, 41), V3 = n4, w5 = xA(k5 ^ GA2, g6 ^ cA2, 39), QA2 = e4 = n4, dA2 = F5 = (JA2 = (-1 ^ e4) & V3 ^ j3) ^ (kA2 = (-1 ^ u4) & m3 ^ O3) ^ (cA2 = (-1 ^ s5) & X3 ^ b4) ^ (KA2 = (-1 ^ o5) & l3 ^ d5) ^ x3, e4 = y5, hA2 = t5 ^ y5 & (-1 ^ I6), y5 = a5, a5 = G5, G5 = r5, GA2 = a5 ^ r5 & (-1 ^ H5), r5 = f5, f5 = i2, fA2 = xA(tA2 = hA2 ^ (wA2 = (-1 ^ v5) & p5 ^ J5) ^ (eA2 = y5 & (-1 ^ Y5) ^ L5) ^ GA2 ^ (NA2 = r5 ^ i2 & (-1 ^ w5)), F5, 1), EA2 = n4, F5 = xA(B5 ^ YA2, E5 ^ M5, 2), s5 = n4, i2 = xA(Q5 ^ BA2, S4 ^ HA2, 62), R4 = n4, o5 = xA(U5 ^ PA2, K5 ^ SA2, 56), u4 = n4, M5 = xA(k5 ^ rA2, g6 ^ oA2, 27), oA2 = n4, D5 = xA(h5 ^ z3, D5 ^ N5, 18), P5 = n4, B5 = xA(B5 ^ pA2, E5 ^ W3, 1), W3 = n4, k5 = xA(k5 ^ FA2, g6 ^ MA2, 14), z3 = E5 = N5 ^ _3, yA2 = (_3 = n4) ^ (-1 ^ E5) & CA2, g6 = xA(Q5 ^ gA2, S4 ^ Z3, 61), S4 = n4, E5 = xA(U5 ^ IA2, K5 ^ $3, 28), gA2 = K5 = n4, Q5 = h5 ^ iA2, N5 = (U5 = (Z3 = (h5 = (-1 ^ i2) & r5 ^ F5) ^ (BA2 = (-1 ^ M5) & a5 ^ o5) ^ (MA2 = (-1 ^ B5) & L5 ^ D5) ^ (IA2 = (-1 ^ Q5) & t5 ^ k5) ^ (rA2 = (-1 ^ E5) & J5 ^ g6)) ^ fA2) ^ (t5 = (-1 ^ t5) & I6 ^ Q5 ^ 32896), CA2 = (K5 = ($3 = EA2) ^ (EA2 = (iA2 = (-1 ^ R4) & j3 ^ s5) ^ (FA2 = (-1 ^ oA2) & O3 ^ u4) ^ (HA2 = (-1 ^ W3) & b4 ^ P5) ^ (fA2 = (-1 ^ K5) & d5 ^ S4) ^ yA2)) ^ ($3 = (-1 ^ CA2) & AA2 ^ z3 ^ -2147483648), d5 = (j3 = R4 ^ (-1 ^ j3) & QA2) ^ (SA2 = oA2 ^ (-1 ^ O3) & aA2) ^ (UA2 = W3 ^ (-1 ^ b4) & DA2) ^ (b4 = $3) ^ ($3 = gA2 ^ (-1 ^ d5) & T3), nA2 = h5, E5 = (O3 = (YA2 = f5 ^ (-1 ^ F5) & i2) ^ (h5 = G5 ^ (-1 ^ o5) & M5) ^ (sA2 = y5 ^ (-1 ^ D5) & B5) ^ (b4 = e4 ^ (-1 ^ k5) & Q5) ^ (pA2 = p5 ^ (-1 ^ g6) & E5)) ^ xA(J5 = (r5 = i2 ^ (-1 ^ r5) & w5) ^ (i2 = M5 ^ (-1 ^ a5) & H5) ^ (LA2 = B5 ^ (-1 ^ L5) & Y5) ^ (M5 = E5 ^ (-1 ^ J5) & v5) ^ t5, d5, 1), t5 = xA(nA2 ^ E5, (t5 = iA2) ^ (Q5 = (z3 = (R4 = V3 ^ (-1 ^ s5) & R4) ^ (L5 = m3 ^ (-1 ^ u4) & oA2) ^ (iA2 = X3 ^ (-1 ^ P5) & W3) ^ (a5 = q3 ^ (-1 ^ _3) & z3) ^ (W3 = l3 ^ (-1 ^ S4) & gA2)) ^ n4), 14), oA2 = n4, v5 = (w5 ^= (-1 ^ f5) & F5) ^ (H5 ^= (-1 ^ G5) & o5) ^ (gA2 = Y5 ^ (-1 ^ y5) & D5) ^ (f5 = I6 ^ (-1 ^ e4) & k5) ^ (D5 = v5 ^ (-1 ^ p5) & g6), I6 = xA(Z3, EA2, 1) ^ v5, e4 = xA(h5 ^ I6, L5 ^ (B5 = (p5 = (Y5 = QA2 ^ (-1 ^ V3) & s5) ^ (G5 = aA2 ^ (-1 ^ m3) & u4) ^ (Z3 = DA2 ^ (-1 ^ X3) & P5) ^ (F5 = AA2 ^ (-1 ^ q3) & _3) ^ (u4 = T3 ^ (-1 ^ l3) & S4)) ^ n4), 21), AA2 = (T3 = n4) ^ (-1 ^ oA2) & CA2, k5 = xA(v5, p5, 1) ^ J5, J5 = xA(GA2 ^ k5, kA2 ^ (g6 = d5 ^ n4), 45), d5 = n4, p5 = xA(I6 ^ b4, B5 ^ a5, 28), l3 = n4, S4 = xA(O3, z3, 1) ^ tA2, v5 = xA(w5 ^ S4, Y5 ^ (h5 = dA2 ^ n4), 61), DA2 = o5 = n4, L5 = xA(E5 ^ BA2, Q5 ^ FA2, 8), b4 = n4, y5 = xA(k5 ^ hA2, g6 ^ x3, 1), X3 = n4, Y5 = xA(U5 ^ r5, K5 ^ j3, 18), x3 = V3 = n4, a5 = xA(S4 ^ H5, h5 ^ G5, 15), O3 = n4, G5 = xA(E5 ^ IA2, Q5 ^ yA2, 27), q3 = n4, H5 = xA(I6 ^ YA2, B5 ^ R4, 56), aA2 = s5 = n4, r5 = xA(i2 ^ U5, K5 ^ SA2, 41), m3 = n4, f5 = xA(f5 ^ S4, h5 ^ F5, 62), j3 = n4, w5 = xA(k5 ^ NA2, g6 ^ JA2, 2), QA2 = i2 = n4, dA2 = i2 = (JA2 = (-1 ^ i2) & j3 ^ m3) ^ (kA2 = (-1 ^ s5) & q3 ^ O3) ^ (BA2 = (-1 ^ V3) & X3 ^ b4) ^ (yA2 = (-1 ^ o5) & l3 ^ d5) ^ AA2, EA2 = xA(tA2 = (FA2 = (-1 ^ w5) & f5 ^ r5) ^ (NA2 = (-1 ^ H5) & G5 ^ a5) ^ (GA2 = (-1 ^ Y5) & y5 ^ L5) ^ (hA2 = e4 ^ (-1 ^ t5) & N5) ^ (IA2 = (-1 ^ v5) & p5 ^ J5), i2, 1), SA2 = n4, F5 = xA(I6 ^ pA2, B5 ^ W3, 55), V3 = n4, i2 = xA(E5 ^ MA2, Q5 ^ HA2, 39), R4 = n4, o5 = xA(M5 ^ U5, K5 ^ $3, 36), s5 = n4, M5 = xA(k5 ^ eA2, g6 ^ cA2, 10), W3 = n4, D5 = xA(D5 ^ S4, h5 ^ u4, 6), u4 = n4, B5 = xA(I6 ^ sA2, B5 ^ iA2, 25), z3 = n4, k5 = xA(k5 ^ wA2, g6 ^ KA2, 44), P5 = n4, I6 = xA(S4 ^ gA2, h5 ^ Z3, 43), h5 = S4 = n4, g6 = xA(E5 ^ rA2, Q5 ^ fA2, 20), Q5 = n4, E5 = xA(U5 ^ LA2, K5 ^ UA2, 3), _3 = K5 = n4, e4 = xA((U5 = (wA2 = (gA2 = (-1 ^ i2) & r5 ^ F5) ^ (KA2 = (-1 ^ M5) & a5 ^ o5) ^ (cA2 = (-1 ^ B5) & L5 ^ D5) ^ (MA2 = (-1 ^ I6) & e4 ^ k5) ^ (rA2 = (-1 ^ E5) & J5 ^ g6)) ^ EA2) ^ (Z3 = I6 ^ (-1 ^ e4) & t5), (K5 = ($3 = (eA2 = (-1 ^ R4) & m3 ^ V3) ^ (iA2 = (-1 ^ W3) & O3 ^ s5) ^ (HA2 = (-1 ^ z3) & b4 ^ u4) ^ (fA2 = (-1 ^ h5) & T3 ^ P5) ^ (EA2 = (-1 ^ K5) & d5 ^ Q5)) ^ SA2) ^ (T3 = h5 ^ (-1 ^ T3) & oA2), 62), S4 = n4, d5 = (SA2 = R4 ^ (-1 ^ m3) & QA2) ^ (O3 = W3 ^ (-1 ^ O3) & aA2) ^ (UA2 = z3 ^ (-1 ^ b4) & x3) ^ (m3 = _3 ^ (-1 ^ d5) & DA2) ^ T3, T3 = gA2, LA2 = (gA2 = f5 ^ (-1 ^ F5) & i2) ^ (b4 = G5 ^ (-1 ^ o5) & M5) ^ (YA2 = y5 ^ (-1 ^ D5) & B5) ^ (sA2 = (-1 ^ k5) & I6 ^ N5 ^ -2147483647) ^ (pA2 = p5 ^ (-1 ^ g6) & E5), M5 = xA(J5 = (r5 = i2 ^ (-1 ^ r5) & w5) ^ (a5 = M5 ^ (-1 ^ a5) & H5) ^ (nA2 = B5 ^ (-1 ^ L5) & Y5) ^ (L5 = E5 ^ (-1 ^ J5) & v5) ^ Z3, d5, 1) ^ LA2, h5 = xA(T3 ^ M5, (B5 = (i2 = (R4 = j3 ^ (-1 ^ V3) & R4) ^ (I6 = q3 ^ (-1 ^ s5) & W3) ^ (W3 = X3 ^ (-1 ^ u4) & z3) ^ (z3 = (-1 ^ P5) & h5 ^ CA2) ^ (_3 = l3 ^ (-1 ^ Q5) & _3)) ^ n4) ^ eA2, 2), T3 = n4, w5 = (Z3 = w5 ^ (-1 ^ f5) & F5) ^ (G5 = H5 ^ (-1 ^ G5) & o5) ^ (H5 = Y5 ^ (-1 ^ y5) & D5) ^ (t5 ^= (-1 ^ N5) & k5) ^ (f5 = v5 ^ (-1 ^ p5) & g6), E5 = xA(wA2, $3, 1) ^ w5, Y5 = (v5 = xA(b4 ^ E5, I6 ^ (F5 = (D5 = (wA2 = QA2 ^ (-1 ^ j3) & V3) ^ (q3 = aA2 ^ (-1 ^ q3) & s5) ^ (p5 = x3 ^ (-1 ^ X3) & u4) ^ (y5 = oA2 ^ (-1 ^ CA2) & P5) ^ (V3 = DA2 ^ (-1 ^ l3) & Q5)) ^ n4), 41)) ^ (I6 = e4) & (-1 ^ h5), C5[A7 + 184 | 0] = Y5, C5[A7 + 185 | 0] = Y5 >>> 8, C5[A7 + 186 | 0] = Y5 >>> 16, C5[A7 + 187 | 0] = Y5 >>> 24, Y5 = (CA2 = n4) ^ (-1 ^ T3) & S4, C5[A7 + 188 | 0] = Y5, C5[A7 + 189 | 0] = Y5 >>> 8, C5[A7 + 190 | 0] = Y5 >>> 16, C5[A7 + 191 | 0] = Y5 >>> 24, i2 = xA(LA2, i2, 1) ^ tA2, H5 = xA(H5 ^ i2, p5 ^ (o5 = dA2 ^ n4), 39), g6 = n4, D5 = xA(w5, D5, 1) ^ J5, Y5 = xA(IA2 ^ D5, yA2 ^ (k5 = d5 ^ n4), 55), x3 = e4 = n4, w5 = I6 ^ (-1 ^ Y5) & H5, C5[A7 + 160 | 0] = w5, C5[A7 + 161 | 0] = w5 >>> 8, C5[A7 + 162 | 0] = w5 >>> 16, C5[A7 + 163 | 0] = w5 >>> 24, w5 = S4 ^ (-1 ^ e4) & g6, C5[A7 + 164 | 0] = w5, C5[A7 + 165 | 0] = w5 >>> 8, C5[A7 + 166 | 0] = w5 >>> 16, C5[A7 + 167 | 0] = w5 >>> 24, w5 = xA(a5 ^ U5, K5 ^ O3, 15), Q5 = n4, e4 = xA(i2 ^ t5, o5 ^ y5, 27), N5 = n4, d5 = xA(D5 ^ FA2, k5 ^ JA2, 56), oA2 = J5 = n4, t5 = (-1 ^ d5) & e4 ^ w5, C5[A7 + 144 | 0] = t5, C5[A7 + 145 | 0] = t5 >>> 8, C5[A7 + 146 | 0] = t5 >>> 16, C5[A7 + 147 | 0] = t5 >>> 24, t5 = (-1 ^ J5) & N5 ^ Q5, C5[A7 + 148 | 0] = t5, C5[A7 + 149 | 0] = t5 >>> 8, C5[A7 + 150 | 0] = t5 >>> 16, C5[A7 + 151 | 0] = t5 >>> 24, t5 = xA(E5 ^ pA2, F5 ^ _3, 36), l3 = n4, b4 = xA(M5 ^ cA2, B5 ^ HA2, 10), DA2 = p5 = n4, J5 = (-1 ^ b4) & w5 ^ t5, C5[A7 + 128 | 0] = J5, C5[A7 + 129 | 0] = J5 >>> 8, C5[A7 + 130 | 0] = J5 >>> 16, C5[A7 + 131 | 0] = J5 >>> 24, J5 = (-1 ^ p5) & Q5 ^ l3, C5[A7 + 132 | 0] = J5, C5[A7 + 133 | 0] = J5 >>> 8, C5[A7 + 134 | 0] = J5 >>> 16, C5[A7 + 135 | 0] = J5 >>> 24, p5 = xA(E5 ^ gA2, F5 ^ R4, 18), X3 = n4, L5 = xA(U5 ^ L5, K5 ^ m3, 6), O3 = n4, J5 = xA(M5 ^ MA2, B5 ^ fA2, 1), aA2 = a5 = n4, y5 = (-1 ^ J5) & L5 ^ p5, C5[A7 + 112 | 0] = y5, C5[A7 + 113 | 0] = y5 >>> 8, C5[A7 + 114 | 0] = y5 >>> 16, C5[A7 + 115 | 0] = y5 >>> 24, y5 = (-1 ^ a5) & O3 ^ X3, C5[A7 + 116 | 0] = y5, C5[A7 + 117 | 0] = y5 >>> 8, C5[A7 + 118 | 0] = y5 >>> 16, C5[A7 + 119 | 0] = y5 >>> 24, y5 = xA(i2 ^ G5, o5 ^ q3, 8), q3 = n4, m3 = xA(D5 ^ GA2, k5 ^ BA2, 25), QA2 = G5 = n4, a5 = L5 ^ (-1 ^ m3) & y5, C5[A7 + 88 | 0] = a5, C5[A7 + 89 | 0] = a5 >>> 8, C5[A7 + 90 | 0] = a5 >>> 16, C5[A7 + 91 | 0] = a5 >>> 24, a5 = O3 ^ (-1 ^ G5) & q3, C5[A7 + 92 | 0] = a5, C5[A7 + 93 | 0] = a5 >>> 8, C5[A7 + 94 | 0] = a5 >>> 16, C5[A7 + 95 | 0] = a5 >>> 24, G5 = xA(U5 ^ r5, K5 ^ SA2, 61), j3 = n4, r5 = xA(i2 ^ f5, o5 ^ V3, 20), V3 = n4, a5 = xA(D5 ^ hA2, k5 ^ AA2, 28), AA2 = s5 = n4, f5 = (-1 ^ a5) & r5 ^ G5, C5[A7 + 72 | 0] = f5, C5[A7 + 73 | 0] = f5 >>> 8, C5[A7 + 74 | 0] = f5 >>> 16, C5[A7 + 75 | 0] = f5 >>> 24, f5 = (-1 ^ s5) & V3 ^ j3, C5[A7 + 76 | 0] = f5, C5[A7 + 77 | 0] = f5 >>> 8, C5[A7 + 78 | 0] = f5 >>> 16, C5[A7 + 79 | 0] = f5 >>> 24, f5 = xA(E5 ^ YA2, F5 ^ W3, 3), s5 = n4, P5 = (-1 ^ (u4 = xA(M5 ^ KA2, B5 ^ iA2, 45))) & G5 ^ f5, C5[A7 + 56 | 0] = P5, C5[A7 + 57 | 0] = P5 >>> 8, C5[A7 + 58 | 0] = P5 >>> 16, C5[A7 + 59 | 0] = P5 >>> 24, P5 = (-1 ^ (R4 = n4)) & j3 ^ s5, C5[A7 + 60 | 0] = P5, C5[A7 + 61 | 0] = P5 >>> 8, C5[A7 + 62 | 0] = P5 >>> 16, C5[A7 + 63 | 0] = P5 >>> 24, i2 = xA(i2 ^ Z3, o5 ^ wA2, 14), o5 = n4, P5 = F5 ^= z3, B5 = (M5 = xA(M5 ^ rA2, B5 ^ EA2, 44)) & (-1 ^ (W3 = E5 ^ sA2)) ^ i2, C5[A7 + 32 | 0] = B5, C5[A7 + 33 | 0] = B5 >>> 8, C5[A7 + 34 | 0] = B5 >>> 16, C5[A7 + 35 | 0] = B5 >>> 24, B5 = (z3 = n4) & (-1 ^ F5) ^ o5, C5[A7 + 36 | 0] = B5, C5[A7 + 37 | 0] = B5 >>> 8, C5[A7 + 38 | 0] = B5 >>> 16, C5[A7 + 39 | 0] = B5 >>> 24, B5 = xA(U5 ^ nA2, K5 ^ UA2, 43), E5 = n4, D5 = (-1 ^ (F5 = xA(D5 ^ NA2, k5 ^ kA2, 21))) & i2 ^ B5, C5[A7 + 16 | 0] = D5, C5[A7 + 17 | 0] = D5 >>> 8, C5[A7 + 18 | 0] = D5 >>> 16, C5[A7 + 19 | 0] = D5 >>> 24, D5 = (-1 ^ (k5 = n4)) & o5 ^ E5, C5[A7 + 20 | 0] = D5, C5[A7 + 21 | 0] = D5 >>> 8, C5[A7 + 22 | 0] = D5 >>> 16, C5[A7 + 23 | 0] = D5 >>> 24, I6 = h5 ^ (-1 ^ I6) & Y5, C5[A7 + 192 | 0] = I6, C5[A7 + 193 | 0] = I6 >>> 8, C5[A7 + 194 | 0] = I6 >>> 16, C5[A7 + 195 | 0] = I6 >>> 24, I6 = T3 ^ (-1 ^ S4) & x3, C5[A7 + 196 | 0] = I6, C5[A7 + 197 | 0] = I6 >>> 8, C5[A7 + 198 | 0] = I6 >>> 16, C5[A7 + 199 | 0] = I6 >>> 24, I6 = H5 ^ (-1 ^ v5) & h5, C5[A7 + 176 | 0] = I6, C5[A7 + 177 | 0] = I6 >>> 8, C5[A7 + 178 | 0] = I6 >>> 16, C5[A7 + 179 | 0] = I6 >>> 24, I6 = g6 ^ (-1 ^ CA2) & T3, C5[A7 + 180 | 0] = I6, C5[A7 + 181 | 0] = I6 >>> 8, C5[A7 + 182 | 0] = I6 >>> 16, C5[A7 + 183 | 0] = I6 >>> 24, I6 = Y5 ^ (-1 ^ H5) & v5, C5[A7 + 168 | 0] = I6, C5[A7 + 169 | 0] = I6 >>> 8, C5[A7 + 170 | 0] = I6 >>> 16, C5[A7 + 171 | 0] = I6 >>> 24, I6 = x3 ^ (-1 ^ g6) & CA2, C5[A7 + 172 | 0] = I6, C5[A7 + 173 | 0] = I6 >>> 8, C5[A7 + 174 | 0] = I6 >>> 16, C5[A7 + 175 | 0] = I6 >>> 24, I6 = d5 ^ (-1 ^ e4) & t5, C5[A7 + 152 | 0] = I6, C5[A7 + 153 | 0] = I6 >>> 8, C5[A7 + 154 | 0] = I6 >>> 16, C5[A7 + 155 | 0] = I6 >>> 24, I6 = oA2 ^ (-1 ^ N5) & l3, C5[A7 + 156 | 0] = I6, C5[A7 + 157 | 0] = I6 >>> 8, C5[A7 + 158 | 0] = I6 >>> 16, C5[A7 + 159 | 0] = I6 >>> 24, I6 = b4 ^ (-1 ^ w5) & d5, C5[A7 + 136 | 0] = I6, C5[A7 + 137 | 0] = I6 >>> 8, C5[A7 + 138 | 0] = I6 >>> 16, C5[A7 + 139 | 0] = I6 >>> 24, I6 = DA2 ^ (-1 ^ Q5) & oA2, C5[A7 + 140 | 0] = I6, C5[A7 + 141 | 0] = I6 >>> 8, C5[A7 + 142 | 0] = I6 >>> 16, C5[A7 + 143 | 0] = I6 >>> 24, I6 = e4 ^ (-1 ^ t5) & b4, C5[A7 + 120 | 0] = I6, C5[A7 + 121 | 0] = I6 >>> 8, C5[A7 + 122 | 0] = I6 >>> 16, C5[A7 + 123 | 0] = I6 >>> 24, I6 = N5 ^ (-1 ^ l3) & DA2, C5[A7 + 124 | 0] = I6, C5[A7 + 125 | 0] = I6 >>> 8, C5[A7 + 126 | 0] = I6 >>> 16, C5[A7 + 127 | 0] = I6 >>> 24, I6 = y5 ^ (-1 ^ p5) & J5, C5[A7 + 104 | 0] = I6, C5[A7 + 105 | 0] = I6 >>> 8, C5[A7 + 106 | 0] = I6 >>> 16, C5[A7 + 107 | 0] = I6 >>> 24, I6 = q3 ^ (-1 ^ X3) & aA2, C5[A7 + 108 | 0] = I6, C5[A7 + 109 | 0] = I6 >>> 8, C5[A7 + 110 | 0] = I6 >>> 16, C5[A7 + 111 | 0] = I6 >>> 24, I6 = m3 ^ (-1 ^ y5) & p5, C5[A7 + 96 | 0] = I6, C5[A7 + 97 | 0] = I6 >>> 8, C5[A7 + 98 | 0] = I6 >>> 16, C5[A7 + 99 | 0] = I6 >>> 24, I6 = QA2 ^ (-1 ^ q3) & X3, C5[A7 + 100 | 0] = I6, C5[A7 + 101 | 0] = I6 >>> 8, C5[A7 + 102 | 0] = I6 >>> 16, C5[A7 + 103 | 0] = I6 >>> 24, I6 = J5 ^ (-1 ^ L5) & m3, C5[A7 + 80 | 0] = I6, C5[A7 + 81 | 0] = I6 >>> 8, C5[A7 + 82 | 0] = I6 >>> 16, C5[A7 + 83 | 0] = I6 >>> 24, I6 = aA2 ^ (-1 ^ O3) & QA2, C5[A7 + 84 | 0] = I6, C5[A7 + 85 | 0] = I6 >>> 8, C5[A7 + 86 | 0] = I6 >>> 16, C5[A7 + 87 | 0] = I6 >>> 24, I6 = u4 ^ (-1 ^ G5) & a5, C5[A7 + 64 | 0] = I6, C5[A7 + 65 | 0] = I6 >>> 8, C5[A7 + 66 | 0] = I6 >>> 16, C5[A7 + 67 | 0] = I6 >>> 24, I6 = R4 ^ (-1 ^ j3) & AA2, C5[A7 + 68 | 0] = I6, C5[A7 + 69 | 0] = I6 >>> 8, C5[A7 + 70 | 0] = I6 >>> 16, C5[A7 + 71 | 0] = I6 >>> 24, I6 = r5 ^ (-1 ^ f5) & u4, C5[A7 + 48 | 0] = I6, C5[A7 + 49 | 0] = I6 >>> 8, C5[A7 + 50 | 0] = I6 >>> 16, C5[A7 + 51 | 0] = I6 >>> 24, I6 = V3 ^ (-1 ^ s5) & R4, C5[A7 + 52 | 0] = I6, C5[A7 + 53 | 0] = I6 >>> 8, C5[A7 + 54 | 0] = I6 >>> 16, C5[A7 + 55 | 0] = I6 >>> 24, I6 = a5 ^ (-1 ^ r5) & f5, C5[A7 + 40 | 0] = I6, C5[A7 + 41 | 0] = I6 >>> 8, C5[A7 + 42 | 0] = I6 >>> 16, C5[A7 + 43 | 0] = I6 >>> 24, I6 = AA2 ^ (-1 ^ V3) & s5, C5[A7 + 44 | 0] = I6, C5[A7 + 45 | 0] = I6 >>> 8, C5[A7 + 46 | 0] = I6 >>> 16, C5[A7 + 47 | 0] = I6 >>> 24, I6 = F5 ^ (-1 ^ i2) & W3, C5[A7 + 24 | 0] = I6, C5[A7 + 25 | 0] = I6 >>> 8, C5[A7 + 26 | 0] = I6 >>> 16, C5[A7 + 27 | 0] = I6 >>> 24, I6 = k5 ^ (-1 ^ o5) & P5, C5[A7 + 28 | 0] = I6, C5[A7 + 29 | 0] = I6 >>> 8, C5[A7 + 30 | 0] = I6 >>> 16, C5[A7 + 31 | 0] = I6 >>> 24, I6 = M5 ^ (-1 ^ B5) & F5, C5[A7 + 8 | 0] = I6, C5[A7 + 9 | 0] = I6 >>> 8, C5[A7 + 10 | 0] = I6 >>> 16, C5[A7 + 11 | 0] = I6 >>> 24, I6 = z3 ^ (-1 ^ E5) & k5, C5[A7 + 12 | 0] = I6, C5[A7 + 13 | 0] = I6 >>> 8, C5[A7 + 14 | 0] = I6 >>> 16, C5[A7 + 15 | 0] = I6 >>> 24, I6 = (-1 ^ M5) & B5 ^ W3 ^ -2147450872, C5[0 | A7] = I6, C5[A7 + 1 | 0] = I6 >>> 8, C5[A7 + 2 | 0] = I6 >>> 16, C5[A7 + 3 | 0] = I6 >>> 24, I6 = (-1 ^ z3) & E5 ^ P5 ^ -2147483648, C5[A7 + 4 | 0] = I6, C5[A7 + 5 | 0] = I6 >>> 8, C5[A7 + 6 | 0] = I6 >>> 16, C5[A7 + 7 | 0] = I6 >>> 24;
            }
            function e3(A7, I6, g6, C6) {
              for (var B5 = 0, Q5 = 0, i2 = 0, E5 = 0, D5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, r5 = 0, t5 = 0, U5 = 0, J5 = 0, K5 = 0, e4 = 0, Y5 = 0, N5 = 0, G5 = 0, H5 = 0, s5 = 0, p5 = 0, L5 = 0, d5 = 0, P5 = 0, R4 = 0, b4 = 0, v5 = 0, u4 = 0, z3 = 0, O3 = 0, q3 = 0, W3 = 0, x3 = 0, V3 = 0, j3 = 0, m3 = 0, l3 = 0, _3 = 0; i2 = (B5 = D5 << 3) + g6 | 0, Q5 = c4[0 | (B5 = I6 + B5 | 0)] | c4[B5 + 1 | 0] << 8 | c4[B5 + 2 | 0] << 16 | c4[B5 + 3 | 0] << 24, U5 = c4[B5 + 4 | 0] | c4[B5 + 5 | 0] << 8 | c4[B5 + 6 | 0] << 16 | c4[B5 + 7 | 0] << 24, F5 = Q5 << 24 | (65280 & Q5) << 8, a5 = (E5 = 16711680 & Q5) << 24, E5 = E5 >>> 8 | 0, B5 = (h5 = -16777216 & Q5) >>> 24 | 0, o4[i2 >> 2] = a5 | h5 << 8 | -16777216 & ((255 & U5) << 24 | Q5 >>> 8) | 16711680 & ((16777215 & U5) << 8 | Q5 >>> 24) | U5 >>> 8 & 65280 | U5 >>> 24, B5 = B5 | E5 | F5, o4[i2 + 4 >> 2] = B5, 16 != (0 | (D5 = D5 + 1 | 0)); ) ;
              for (I6 = o4[A7 + 60 >> 2], o4[C6 + 56 >> 2] = o4[A7 + 56 >> 2], o4[C6 + 60 >> 2] = I6, I6 = o4[A7 + 52 >> 2], o4[C6 + 48 >> 2] = o4[A7 + 48 >> 2], o4[C6 + 52 >> 2] = I6, I6 = o4[A7 + 44 >> 2], o4[C6 + 40 >> 2] = o4[A7 + 40 >> 2], o4[C6 + 44 >> 2] = I6, I6 = o4[A7 + 36 >> 2], o4[C6 + 32 >> 2] = o4[A7 + 32 >> 2], o4[C6 + 36 >> 2] = I6, I6 = o4[A7 + 28 >> 2], o4[C6 + 24 >> 2] = o4[A7 + 24 >> 2], o4[C6 + 28 >> 2] = I6, I6 = o4[A7 + 20 >> 2], o4[C6 + 16 >> 2] = o4[A7 + 16 >> 2], o4[C6 + 20 >> 2] = I6, I6 = o4[A7 + 12 >> 2], o4[C6 + 8 >> 2] = o4[A7 + 8 >> 2], o4[C6 + 12 >> 2] = I6, I6 = o4[A7 + 4 >> 2], o4[C6 >> 2] = o4[A7 >> 2], o4[C6 + 4 >> 2] = I6; i2 = o4[C6 + 56 >> 2], E5 = o4[C6 + 60 >> 2], B5 = o4[(I6 = U5 = (N5 = b4 << 3) + g6 | 0) >> 2], I6 = o4[I6 + 4 >> 2], r5 = Q5 = o4[C6 + 36 >> 2], Q5 = xA(y5 = o4[C6 + 32 >> 2], Q5, 50), D5 = n4, Q5 = xA(y5, r5, 46) ^ Q5, D5 ^= n4, Q5 = xA(y5, r5, 23) ^ Q5, I6 = (n4 ^ D5) + I6 | 0, I6 = (B5 = Q5 + B5 | 0) >>> 0 < Q5 >>> 0 ? I6 + 1 | 0 : I6, B5 = (D5 = o4[(Q5 = N5 + 38592 | 0) >> 2]) + B5 | 0, I6 = o4[Q5 + 4 >> 2] + I6 | 0, I6 = B5 >>> 0 < D5 >>> 0 ? I6 + 1 | 0 : I6, Q5 = (D5 = ((a5 = o4[C6 + 48 >> 2]) ^ (K5 = o4[C6 + 40 >> 2])) & y5 ^ a5) + B5 | 0, B5 = (((M5 = o4[C6 + 52 >> 2]) ^ (f5 = o4[C6 + 44 >> 2])) & r5 ^ M5) + I6 | 0, I6 = (Q5 >>> 0 < D5 >>> 0 ? B5 + 1 | 0 : B5) + E5 | 0, I6 = (i2 = Q5 + i2 | 0) >>> 0 < Q5 >>> 0 ? I6 + 1 | 0 : I6, D5 = (Q5 = o4[C6 + 24 >> 2]) + i2 | 0, B5 = o4[C6 + 28 >> 2] + I6 | 0, e4 = B5 = Q5 >>> 0 > D5 >>> 0 ? B5 + 1 | 0 : B5, o4[C6 + 24 >> 2] = D5, o4[C6 + 28 >> 2] = B5, J5 = B5 = o4[C6 + 4 >> 2], B5 = xA(Q5 = o4[C6 >> 2], B5, 36), E5 = n4, B5 = xA(Q5, J5, 30) ^ B5, E5 ^= n4, h5 = i2 + (xA(Q5, J5, 25) ^ B5) | 0, B5 = I6 + (n4 ^ E5) | 0, B5 = i2 >>> 0 > h5 >>> 0 ? B5 + 1 | 0 : B5, F5 = (I6 = h5) + (h5 = Q5 & ((E5 = o4[C6 + 16 >> 2]) | (i2 = o4[C6 + 8 >> 2])) | i2 & E5) | 0, I6 = (I6 = B5) + (J5 & ((B5 = o4[C6 + 20 >> 2]) | (w5 = o4[C6 + 12 >> 2])) | B5 & w5) | 0, h5 = I6 = h5 >>> 0 > F5 >>> 0 ? I6 + 1 | 0 : I6, o4[C6 + 56 >> 2] = F5, o4[C6 + 60 >> 2] = I6, S4 = E5, k5 = B5, Y5 = o4[(I6 = G5 = (t5 = 8 | N5) + g6 | 0) >> 2], p5 = o4[I6 + 4 >> 2], B5 = ((r5 ^ f5) & e4 ^ f5) + M5 | 0, B5 = (I6 = (E5 = (y5 ^ K5) & D5 ^ K5) + a5 | 0) >>> 0 < E5 >>> 0 ? B5 + 1 | 0 : B5, E5 = xA(D5, e4, 50), a5 = n4, E5 = xA(D5, e4, 46) ^ E5, a5 ^= n4, E5 = (M5 = xA(D5, e4, 23) ^ E5) + I6 | 0, I6 = (n4 ^ a5) + B5 | 0, I6 = (E5 >>> 0 < M5 >>> 0 ? I6 + 1 | 0 : I6) + p5 | 0, I6 = (B5 = E5 + Y5 | 0) >>> 0 < E5 >>> 0 ? I6 + 1 | 0 : I6, E5 = (E5 = B5) + (a5 = o4[(B5 = t5 + 38592 | 0) >> 2]) | 0, B5 = o4[B5 + 4 >> 2] + I6 | 0, B5 = (I6 = E5 >>> 0 < a5 >>> 0 ? B5 + 1 | 0 : B5) + k5 | 0, M5 = B5 = (a5 = E5 + S4 | 0) >>> 0 < E5 >>> 0 ? B5 + 1 | 0 : B5, o4[C6 + 16 >> 2] = a5, o4[C6 + 20 >> 2] = B5, I6 = I6 + ((w5 | J5) & h5 | w5 & J5) | 0, I6 = (B5 = E5 + ((Q5 | i2) & F5 | Q5 & i2) | 0) >>> 0 < E5 >>> 0 ? I6 + 1 | 0 : I6, E5 = xA(F5, h5, 36), S4 = n4, E5 = xA(F5, h5, 30) ^ E5, S4 ^= n4, k5 = B5, B5 = xA(F5, h5, 25) ^ E5, I6 = (n4 ^ S4) + I6 | 0, S4 = I6 = B5 >>> 0 > (E5 = k5 + B5 | 0) >>> 0 ? I6 + 1 | 0 : I6, o4[C6 + 48 >> 2] = E5, o4[C6 + 52 >> 2] = I6, k5 = i2, t5 = w5, I6 = (w5 = o4[(B5 = (i2 = 16 | N5) + g6 | 0) >> 2]) + K5 | 0, B5 = o4[B5 + 4 >> 2] + f5 | 0, B5 = I6 >>> 0 < w5 >>> 0 ? B5 + 1 | 0 : B5, i2 = (f5 = I6) + (w5 = o4[(I6 = i2 + 38592 | 0) >> 2]) | 0, I6 = o4[I6 + 4 >> 2] + B5 | 0, I6 = ((r5 ^ e4) & M5 ^ r5) + (I6 = i2 >>> 0 < w5 >>> 0 ? I6 + 1 | 0 : I6) | 0, I6 = (B5 = (B5 = i2) + (i2 = (D5 ^ y5) & a5 ^ y5) | 0) >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, i2 = xA(a5, M5, 50), w5 = n4, i2 = xA(a5, M5, 46) ^ i2, w5 ^= n4, i2 = (K5 = xA(a5, M5, 23) ^ i2) + B5 | 0, B5 = (n4 ^ w5) + I6 | 0, B5 = (K5 = i2 >>> 0 < K5 >>> 0 ? B5 + 1 | 0 : B5) + t5 | 0, t5 = B5 = (w5 = i2) >>> 0 > (i2 = i2 + k5 | 0) >>> 0 ? B5 + 1 | 0 : B5, o4[C6 + 8 >> 2] = i2, o4[C6 + 12 >> 2] = B5, I6 = xA(E5, S4, 36), B5 = n4, I6 = xA(E5, S4, 30) ^ I6, B5 ^= n4, f5 = xA(E5, S4, 25) ^ I6, I6 = ((h5 | J5) & S4 | h5 & J5) + (n4 ^ B5) | 0, B5 = K5 + ((k5 = f5 + ((Q5 | F5) & E5 | Q5 & F5) | 0) >>> 0 < f5 >>> 0 ? I6 + 1 | 0 : I6) | 0, w5 = B5 = (K5 = w5 + k5 | 0) >>> 0 < w5 >>> 0 ? B5 + 1 | 0 : B5, o4[C6 + 40 >> 2] = K5, o4[C6 + 44 >> 2] = B5, k5 = Q5, B5 = (B5 = y5) + (y5 = o4[(I6 = (Q5 = 24 | N5) + g6 | 0) >> 2]) | 0, I6 = o4[I6 + 4 >> 2] + r5 | 0, I6 = B5 >>> 0 < y5 >>> 0 ? I6 + 1 | 0 : I6, Q5 = (f5 = B5) + (y5 = o4[(B5 = Q5 + 38592 | 0) >> 2]) | 0, B5 = o4[B5 + 4 >> 2] + I6 | 0, B5 = (e4 ^ (M5 ^ e4) & t5) + (B5 = Q5 >>> 0 < y5 >>> 0 ? B5 + 1 | 0 : B5) | 0, B5 = (I6 = (I6 = Q5) + (Q5 = D5 ^ (D5 ^ a5) & i2) | 0) >>> 0 < Q5 >>> 0 ? B5 + 1 | 0 : B5, Q5 = xA(i2, t5, 50), y5 = n4, Q5 = xA(i2, t5, 46) ^ Q5, y5 ^= n4, Q5 = (r5 = xA(i2, t5, 23) ^ Q5) + I6 | 0, I6 = (n4 ^ y5) + B5 | 0, B5 = (I6 = Q5 >>> 0 < r5 >>> 0 ? I6 + 1 | 0 : I6) + J5 | 0, r5 = B5 = (J5 = Q5 + k5 | 0) >>> 0 < Q5 >>> 0 ? B5 + 1 | 0 : B5, o4[C6 >> 2] = J5, o4[C6 + 4 >> 2] = B5, B5 = xA(K5, w5, 36), y5 = n4, B5 = xA(K5, w5, 30) ^ B5, k5 = n4 ^ y5, f5 = xA(K5, w5, 25) ^ B5, B5 = ((h5 | S4) & w5 | h5 & S4) + (n4 ^ k5) | 0, I6 = I6 + ((y5 = f5 + ((E5 | F5) & K5 | E5 & F5) | 0) >>> 0 < f5 >>> 0 ? B5 + 1 | 0 : B5) | 0, y5 = I6 = (k5 = Q5 + y5 | 0) >>> 0 < Q5 >>> 0 ? I6 + 1 | 0 : I6, o4[C6 + 32 >> 2] = k5, o4[C6 + 36 >> 2] = I6, Q5 = o4[(B5 = (I6 = 32 | N5) + g6 | 0) >> 2], B5 = e4 + o4[B5 + 4 >> 2] | 0, B5 = (Q5 = Q5 + D5 | 0) >>> 0 < D5 >>> 0 ? B5 + 1 | 0 : B5, Q5 = (D5 = o4[(I6 = I6 + 38592 | 0) >> 2]) + Q5 | 0, I6 = o4[I6 + 4 >> 2] + B5 | 0, I6 = (M5 ^ (M5 ^ t5) & r5) + (I6 = Q5 >>> 0 < D5 >>> 0 ? I6 + 1 | 0 : I6) | 0, I6 = (B5 = (B5 = Q5) + (Q5 = a5 ^ (i2 ^ a5) & J5) | 0) >>> 0 < Q5 >>> 0 ? I6 + 1 | 0 : I6, Q5 = xA(J5, r5, 50), D5 = n4, Q5 = xA(J5, r5, 46) ^ Q5, D5 ^= n4, Q5 = (e4 = xA(J5, r5, 23) ^ Q5) + B5 | 0, B5 = (n4 ^ D5) + I6 | 0, f5 = B5 = Q5 >>> 0 < e4 >>> 0 ? B5 + 1 | 0 : B5, I6 = B5, B5 = xA(k5, y5, 36), D5 = n4, B5 = xA(k5, y5, 30) ^ B5, e4 = n4 ^ D5, Y5 = xA(k5, y5, 25) ^ B5, B5 = ((S4 | w5) & y5 | S4 & w5) + (n4 ^ e4) | 0, I6 = ((D5 = Y5 + ((E5 | K5) & k5 | E5 & K5) | 0) >>> 0 < Y5 >>> 0 ? B5 + 1 | 0 : B5) + I6 | 0, D5 = I6 = (e4 = Q5 + D5 | 0) >>> 0 < D5 >>> 0 ? I6 + 1 | 0 : I6, o4[C6 + 24 >> 2] = e4, o4[C6 + 28 >> 2] = I6, B5 = h5 + f5 | 0, f5 = B5 = (h5 = Q5 + F5 | 0) >>> 0 < Q5 >>> 0 ? B5 + 1 | 0 : B5, o4[C6 + 56 >> 2] = h5, o4[C6 + 60 >> 2] = B5, Q5 = o4[(I6 = (B5 = 40 | N5) + g6 | 0) >> 2], I6 = M5 + o4[I6 + 4 >> 2] | 0, I6 = (Q5 = Q5 + a5 | 0) >>> 0 < a5 >>> 0 ? I6 + 1 | 0 : I6, Q5 = (F5 = o4[(B5 = B5 + 38592 | 0) >> 2]) + Q5 | 0, B5 = o4[B5 + 4 >> 2] + I6 | 0, B5 = (t5 ^ (r5 ^ t5) & f5) + (B5 = Q5 >>> 0 < F5 >>> 0 ? B5 + 1 | 0 : B5) | 0, B5 = (I6 = (I6 = Q5) + (Q5 = i2 ^ (i2 ^ J5) & h5) | 0) >>> 0 < Q5 >>> 0 ? B5 + 1 | 0 : B5, Q5 = xA(h5, f5, 50), F5 = n4, Q5 = xA(h5, f5, 46) ^ Q5, F5 ^= n4, Q5 = (a5 = xA(h5, f5, 23) ^ Q5) + I6 | 0, I6 = (n4 ^ F5) + B5 | 0, I6 = Q5 >>> 0 < a5 >>> 0 ? I6 + 1 | 0 : I6, B5 = xA(e4, D5, 36), F5 = n4, B5 = xA(e4, D5, 30) ^ B5, a5 = n4 ^ F5, M5 = xA(e4, D5, 25) ^ B5, B5 = ((w5 | y5) & D5 | w5 & y5) + (n4 ^ a5) | 0, B5 = ((F5 = M5 + ((k5 | K5) & e4 | k5 & K5) | 0) >>> 0 < M5 >>> 0 ? B5 + 1 | 0 : B5) + I6 | 0, F5 = B5 = (a5 = Q5 + F5 | 0) >>> 0 < F5 >>> 0 ? B5 + 1 | 0 : B5, o4[C6 + 16 >> 2] = a5, o4[C6 + 20 >> 2] = B5, I6 = I6 + S4 | 0, M5 = I6 = (B5 = E5) >>> 0 > (E5 = Q5 + E5 | 0) >>> 0 ? I6 + 1 | 0 : I6, o4[C6 + 48 >> 2] = E5, o4[C6 + 52 >> 2] = I6, Q5 = o4[(B5 = (I6 = 48 | N5) + g6 | 0) >> 2], B5 = t5 + o4[B5 + 4 >> 2] | 0, B5 = (Q5 = Q5 + i2 | 0) >>> 0 < i2 >>> 0 ? B5 + 1 | 0 : B5, Q5 = (i2 = o4[(I6 = I6 + 38592 | 0) >> 2]) + Q5 | 0, I6 = o4[I6 + 4 >> 2] + B5 | 0, I6 = (r5 ^ (r5 ^ f5) & M5) + (I6 = Q5 >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6) | 0, I6 = (B5 = (B5 = Q5) + (Q5 = J5 ^ (h5 ^ J5) & E5) | 0) >>> 0 < Q5 >>> 0 ? I6 + 1 | 0 : I6, Q5 = xA(E5, M5, 50), i2 = n4, Q5 = xA(E5, M5, 46) ^ Q5, i2 ^= n4, Q5 = (S4 = xA(E5, M5, 23) ^ Q5) + B5 | 0, B5 = (n4 ^ i2) + I6 | 0, t5 = B5 = Q5 >>> 0 < S4 >>> 0 ? B5 + 1 | 0 : B5, I6 = B5, B5 = xA(a5, F5, 36), i2 = n4, B5 = xA(a5, F5, 30) ^ B5, S4 = n4 ^ i2, Y5 = xA(a5, F5, 25) ^ B5, B5 = ((D5 | y5) & F5 | D5 & y5) + (n4 ^ S4) | 0, I6 = ((i2 = Y5 + ((k5 | e4) & a5 | k5 & e4) | 0) >>> 0 < Y5 >>> 0 ? B5 + 1 | 0 : B5) + I6 | 0, S4 = I6 = (B5 = i2) >>> 0 > (i2 = Q5 + i2 | 0) >>> 0 ? I6 + 1 | 0 : I6, o4[C6 + 8 >> 2] = i2, o4[C6 + 12 >> 2] = I6, B5 = w5 + t5 | 0, t5 = B5 = (Y5 = Q5 + K5 | 0) >>> 0 < Q5 >>> 0 ? B5 + 1 | 0 : B5, o4[C6 + 40 >> 2] = Y5, o4[C6 + 44 >> 2] = B5, Q5 = o4[(I6 = (B5 = 56 | N5) + g6 | 0) >> 2], I6 = r5 + o4[I6 + 4 >> 2] | 0, I6 = (Q5 = Q5 + J5 | 0) >>> 0 < J5 >>> 0 ? I6 + 1 | 0 : I6, Q5 = (w5 = o4[(B5 = B5 + 38592 | 0) >> 2]) + Q5 | 0, B5 = o4[B5 + 4 >> 2] + I6 | 0, B5 = (f5 ^ (M5 ^ f5) & t5) + (B5 = Q5 >>> 0 < w5 >>> 0 ? B5 + 1 | 0 : B5) | 0, B5 = (I6 = (I6 = Q5) + (Q5 = h5 ^ (E5 ^ h5) & Y5) | 0) >>> 0 < Q5 >>> 0 ? B5 + 1 | 0 : B5, Q5 = xA(Y5, t5, 50), w5 = n4, Q5 = xA(Y5, t5, 46) ^ Q5, w5 ^= n4, Q5 = (K5 = xA(Y5, t5, 23) ^ Q5) + I6 | 0, I6 = (n4 ^ w5) + B5 | 0, I6 = Q5 >>> 0 < K5 >>> 0 ? I6 + 1 | 0 : I6, B5 = xA(i2, S4, 36), w5 = n4, B5 = xA(i2, S4, 30) ^ B5, K5 = n4 ^ w5, J5 = xA(i2, S4, 25) ^ B5, B5 = ((D5 | F5) & S4 | D5 & F5) + (n4 ^ K5) | 0, B5 = ((w5 = J5 + ((a5 | e4) & i2 | a5 & e4) | 0) >>> 0 < J5 >>> 0 ? B5 + 1 | 0 : B5) + I6 | 0, w5 = B5 = (K5 = Q5 + w5 | 0) >>> 0 < w5 >>> 0 ? B5 + 1 | 0 : B5, o4[C6 >> 2] = K5, o4[C6 + 4 >> 2] = B5, I6 = I6 + y5 | 0, r5 = I6 = (J5 = Q5 + k5 | 0) >>> 0 < Q5 >>> 0 ? I6 + 1 | 0 : I6, o4[C6 + 32 >> 2] = J5, o4[C6 + 36 >> 2] = I6, Q5 = o4[(B5 = (I6 = 64 | N5) + g6 | 0) >> 2], B5 = f5 + o4[B5 + 4 >> 2] | 0, B5 = (Q5 = Q5 + h5 | 0) >>> 0 < h5 >>> 0 ? B5 + 1 | 0 : B5, Q5 = (h5 = o4[(I6 = I6 + 38592 | 0) >> 2]) + Q5 | 0, I6 = o4[I6 + 4 >> 2] + B5 | 0, I6 = (M5 ^ (M5 ^ t5) & r5) + (I6 = Q5 >>> 0 < h5 >>> 0 ? I6 + 1 | 0 : I6) | 0, I6 = (B5 = (B5 = Q5) + (Q5 = E5 ^ (E5 ^ Y5) & J5) | 0) >>> 0 < Q5 >>> 0 ? I6 + 1 | 0 : I6, Q5 = xA(J5, r5, 50), h5 = n4, Q5 = xA(J5, r5, 46) ^ Q5, h5 ^= n4, Q5 = (y5 = xA(J5, r5, 23) ^ Q5) + B5 | 0, B5 = (n4 ^ h5) + I6 | 0, k5 = B5 = Q5 >>> 0 < y5 >>> 0 ? B5 + 1 | 0 : B5, I6 = B5, B5 = xA(K5, w5, 36), h5 = n4, B5 = xA(K5, w5, 30) ^ B5, y5 = n4 ^ h5, f5 = xA(K5, w5, 25) ^ B5, B5 = ((F5 | S4) & w5 | F5 & S4) + (n4 ^ y5) | 0, I6 = ((h5 = f5 + ((i2 | a5) & K5 | i2 & a5) | 0) >>> 0 < f5 >>> 0 ? B5 + 1 | 0 : B5) + I6 | 0, h5 = I6 = (y5 = Q5 + h5 | 0) >>> 0 < h5 >>> 0 ? I6 + 1 | 0 : I6, o4[C6 + 56 >> 2] = y5, o4[C6 + 60 >> 2] = I6, B5 = D5 + k5 | 0, f5 = B5 = (D5 = Q5 + e4 | 0) >>> 0 < Q5 >>> 0 ? B5 + 1 | 0 : B5, o4[C6 + 24 >> 2] = D5, o4[C6 + 28 >> 2] = B5, Q5 = o4[(I6 = p5 = (B5 = 72 | N5) + g6 | 0) >> 2], I6 = M5 + o4[I6 + 4 >> 2] | 0, I6 = (Q5 = Q5 + E5 | 0) >>> 0 < E5 >>> 0 ? I6 + 1 | 0 : I6, Q5 = (E5 = o4[(B5 = B5 + 38592 | 0) >> 2]) + Q5 | 0, B5 = o4[B5 + 4 >> 2] + I6 | 0, B5 = (t5 ^ (r5 ^ t5) & f5) + (B5 = Q5 >>> 0 < E5 >>> 0 ? B5 + 1 | 0 : B5) | 0, B5 = (I6 = (I6 = Q5) + (Q5 = Y5 ^ (J5 ^ Y5) & D5) | 0) >>> 0 < Q5 >>> 0 ? B5 + 1 | 0 : B5, Q5 = xA(D5, f5, 50), E5 = n4, Q5 = xA(D5, f5, 46) ^ Q5, E5 ^= n4, Q5 = (k5 = xA(D5, f5, 23) ^ Q5) + I6 | 0, I6 = (n4 ^ E5) + B5 | 0, I6 = Q5 >>> 0 < k5 >>> 0 ? I6 + 1 | 0 : I6, B5 = xA(y5, h5, 36), E5 = n4, B5 = xA(y5, h5, 30) ^ B5, k5 = n4 ^ E5, e4 = xA(y5, h5, 25) ^ B5, B5 = ((S4 | w5) & h5 | S4 & w5) + (n4 ^ k5) | 0, B5 = ((E5 = e4 + ((i2 | K5) & y5 | i2 & K5) | 0) >>> 0 < e4 >>> 0 ? B5 + 1 | 0 : B5) + I6 | 0, E5 = B5 = (k5 = Q5 + E5 | 0) >>> 0 < E5 >>> 0 ? B5 + 1 | 0 : B5, o4[C6 + 48 >> 2] = k5, o4[C6 + 52 >> 2] = B5, I6 = I6 + F5 | 0, M5 = I6 = (F5 = Q5 + a5 | 0) >>> 0 < Q5 >>> 0 ? I6 + 1 | 0 : I6, o4[C6 + 16 >> 2] = F5, o4[C6 + 20 >> 2] = I6, I6 = (a5 = o4[(B5 = W3 = (Q5 = 80 | N5) + g6 | 0) >> 2]) + Y5 | 0, B5 = o4[B5 + 4 >> 2] + t5 | 0, B5 = I6 >>> 0 < a5 >>> 0 ? B5 + 1 | 0 : B5, Q5 = (t5 = I6) + (a5 = o4[(I6 = Q5 + 38592 | 0) >> 2]) | 0, I6 = o4[I6 + 4 >> 2] + B5 | 0, I6 = (r5 ^ (r5 ^ f5) & M5) + (I6 = Q5 >>> 0 < a5 >>> 0 ? I6 + 1 | 0 : I6) | 0, I6 = (B5 = (B5 = Q5) + (Q5 = J5 ^ (D5 ^ J5) & F5) | 0) >>> 0 < Q5 >>> 0 ? I6 + 1 | 0 : I6, Q5 = xA(F5, M5, 50), a5 = n4, Q5 = xA(F5, M5, 46) ^ Q5, a5 ^= n4, Q5 = (e4 = xA(F5, M5, 23) ^ Q5) + B5 | 0, B5 = (n4 ^ a5) + I6 | 0, t5 = B5 = Q5 >>> 0 < e4 >>> 0 ? B5 + 1 | 0 : B5, I6 = B5, B5 = xA(k5, E5, 36), a5 = n4, B5 = xA(k5, E5, 30) ^ B5, e4 = n4 ^ a5, Y5 = xA(k5, E5, 25) ^ B5, B5 = ((h5 | w5) & E5 | h5 & w5) + (n4 ^ e4) | 0, I6 = ((a5 = Y5 + ((y5 | K5) & k5 | y5 & K5) | 0) >>> 0 < Y5 >>> 0 ? B5 + 1 | 0 : B5) + I6 | 0, a5 = I6 = (e4 = Q5 + a5 | 0) >>> 0 < a5 >>> 0 ? I6 + 1 | 0 : I6, o4[C6 + 40 >> 2] = e4, o4[C6 + 44 >> 2] = I6, B5 = S4 + t5 | 0, t5 = B5 = (S4 = Q5 + i2 | 0) >>> 0 < i2 >>> 0 ? B5 + 1 | 0 : B5, o4[C6 + 8 >> 2] = S4, o4[C6 + 12 >> 2] = B5, B5 = 38592 + (I6 = 88 | N5) | 0, i2 = o4[(I6 = x3 = I6 + g6 | 0) >> 2], Q5 = o4[B5 >> 2] + i2 | 0, I6 = o4[B5 + 4 >> 2] + o4[I6 + 4 >> 2] | 0, B5 = r5 + (Q5 >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6) | 0, B5 = (f5 ^ (M5 ^ f5) & t5) + (B5 = (I6 = Q5 + J5 | 0) >>> 0 < J5 >>> 0 ? B5 + 1 | 0 : B5) | 0, B5 = (I6 = (Q5 = D5 ^ (D5 ^ F5) & S4) + I6 | 0) >>> 0 < Q5 >>> 0 ? B5 + 1 | 0 : B5, Q5 = xA(S4, t5, 50), i2 = n4, Q5 = xA(S4, t5, 46) ^ Q5, i2 ^= n4, Q5 = (J5 = xA(S4, t5, 23) ^ Q5) + I6 | 0, I6 = (n4 ^ i2) + B5 | 0, I6 = Q5 >>> 0 < J5 >>> 0 ? I6 + 1 | 0 : I6, B5 = xA(e4, a5, 36), i2 = n4, B5 = xA(e4, a5, 30) ^ B5, J5 = n4 ^ i2, r5 = xA(e4, a5, 25) ^ B5, B5 = ((E5 | h5) & a5 | E5 & h5) + (n4 ^ J5) | 0, B5 = ((i2 = r5 + ((y5 | k5) & e4 | y5 & k5) | 0) >>> 0 < r5 >>> 0 ? B5 + 1 | 0 : B5) + I6 | 0, J5 = B5 = (r5 = i2) >>> 0 > (i2 = Q5 + i2 | 0) >>> 0 ? B5 + 1 | 0 : B5, o4[C6 + 32 >> 2] = i2, o4[C6 + 36 >> 2] = B5, I6 = I6 + w5 | 0, K5 = I6 = (w5 = Q5 + K5 | 0) >>> 0 < Q5 >>> 0 ? I6 + 1 | 0 : I6, o4[C6 >> 2] = w5, o4[C6 + 4 >> 2] = I6, B5 = 38592 + (I6 = 96 | N5) | 0, r5 = o4[(I6 = V3 = I6 + g6 | 0) >> 2], Q5 = o4[B5 >> 2] + r5 | 0, B5 = o4[B5 + 4 >> 2] + o4[I6 + 4 >> 2] | 0, I6 = f5 + (Q5 >>> 0 < r5 >>> 0 ? B5 + 1 | 0 : B5) | 0, I6 = (B5 = Q5 + D5 | 0) >>> 0 < D5 >>> 0 ? I6 + 1 | 0 : I6, Q5 = (D5 = F5 ^ (F5 ^ S4) & w5) + B5 | 0, B5 = (M5 ^ (M5 ^ t5) & K5) + I6 | 0, B5 = Q5 >>> 0 < D5 >>> 0 ? B5 + 1 | 0 : B5, I6 = xA(w5, K5, 50), D5 = n4, I6 = xA(w5, K5, 46) ^ I6, D5 ^= n4, f5 = Q5, Q5 = xA(w5, K5, 23) ^ I6, B5 = (n4 ^ D5) + B5 | 0, f5 = B5 = (I6 = f5 + Q5 | 0) >>> 0 < Q5 >>> 0 ? B5 + 1 | 0 : B5, Q5 = I6, I6 = xA(i2, J5, 36), D5 = n4, I6 = xA(i2, J5, 30) ^ I6, r5 = n4 ^ D5, Y5 = xA(i2, J5, 25) ^ I6, I6 = ((E5 | a5) & J5 | E5 & a5) + (n4 ^ r5) | 0, B5 = ((D5 = Y5 + ((k5 | e4) & i2 | k5 & e4) | 0) >>> 0 < Y5 >>> 0 ? I6 + 1 | 0 : I6) + B5 | 0, D5 = B5 = (r5 = Q5 + D5 | 0) >>> 0 < D5 >>> 0 ? B5 + 1 | 0 : B5, o4[C6 + 24 >> 2] = r5, o4[C6 + 28 >> 2] = B5, B5 = h5 + f5 | 0, h5 = B5 = (y5 = Q5 + y5 | 0) >>> 0 < Q5 >>> 0 ? B5 + 1 | 0 : B5, o4[C6 + 56 >> 2] = y5, o4[C6 + 60 >> 2] = B5, B5 = 38592 + (I6 = 104 | N5) | 0, f5 = o4[(I6 = j3 = I6 + g6 | 0) >> 2], Q5 = o4[B5 >> 2] + f5 | 0, I6 = o4[B5 + 4 >> 2] + o4[I6 + 4 >> 2] | 0, B5 = M5 + (Q5 >>> 0 < f5 >>> 0 ? I6 + 1 | 0 : I6) | 0, B5 = (I6 = Q5 + F5 | 0) >>> 0 < F5 >>> 0 ? B5 + 1 | 0 : B5, Q5 = (F5 = S4 ^ (S4 ^ w5) & y5) + I6 | 0, I6 = (t5 ^ (t5 ^ K5) & h5) + B5 | 0, I6 = Q5 >>> 0 < F5 >>> 0 ? I6 + 1 | 0 : I6, B5 = xA(y5, h5, 50), F5 = n4, B5 = xA(y5, h5, 46) ^ B5, F5 ^= n4, M5 = xA(y5, h5, 23) ^ B5, B5 = (n4 ^ F5) + I6 | 0, f5 = B5 = (Q5 = M5 + Q5 | 0) >>> 0 < M5 >>> 0 ? B5 + 1 | 0 : B5, I6 = B5, B5 = xA(r5, D5, 36), F5 = n4, B5 = xA(r5, D5, 30) ^ B5, M5 = n4 ^ F5, Y5 = xA(r5, D5, 25) ^ B5, B5 = ((a5 | J5) & D5 | a5 & J5) + (n4 ^ M5) | 0, I6 = ((F5 = Y5 + ((i2 | e4) & r5 | i2 & e4) | 0) >>> 0 < Y5 >>> 0 ? B5 + 1 | 0 : B5) + I6 | 0, F5 = I6 = (M5 = Q5 + F5 | 0) >>> 0 < F5 >>> 0 ? I6 + 1 | 0 : I6, o4[C6 + 16 >> 2] = M5, o4[C6 + 20 >> 2] = I6, I6 = E5 + f5 | 0, E5 = I6 = (k5 = Q5 + k5 | 0) >>> 0 < Q5 >>> 0 ? I6 + 1 | 0 : I6, o4[C6 + 48 >> 2] = k5, o4[C6 + 52 >> 2] = I6, B5 = 38592 + (I6 = 112 | N5) | 0, f5 = o4[(Q5 = Y5 = I6 + g6 | 0) >> 2], I6 = o4[B5 >> 2] + f5 | 0, B5 = o4[B5 + 4 >> 2] + o4[Q5 + 4 >> 2] | 0, B5 = t5 + (I6 >>> 0 < f5 >>> 0 ? B5 + 1 | 0 : B5) | 0, B5 = (K5 ^ (h5 ^ K5) & E5) + (B5 = (I6 = I6 + S4 | 0) >>> 0 < S4 >>> 0 ? B5 + 1 | 0 : B5) | 0, B5 = (I6 = (Q5 = w5 ^ (w5 ^ y5) & k5) + I6 | 0) >>> 0 < Q5 >>> 0 ? B5 + 1 | 0 : B5, Q5 = xA(k5, E5, 50), S4 = n4, Q5 = xA(k5, E5, 46) ^ Q5, S4 ^= n4, Q5 = (t5 = xA(k5, E5, 23) ^ Q5) + I6 | 0, I6 = (n4 ^ S4) + B5 | 0, f5 = I6 = Q5 >>> 0 < t5 >>> 0 ? I6 + 1 | 0 : I6, B5 = I6, I6 = xA(M5, F5, 36), S4 = n4, I6 = xA(M5, F5, 30) ^ I6, t5 = n4 ^ S4, L5 = xA(M5, F5, 25) ^ I6, I6 = ((D5 | J5) & F5 | D5 & J5) + (n4 ^ t5) | 0, B5 = ((S4 = L5 + ((i2 | r5) & M5 | i2 & r5) | 0) >>> 0 < L5 >>> 0 ? I6 + 1 | 0 : I6) + B5 | 0, S4 = B5 = (t5 = Q5 + S4 | 0) >>> 0 < S4 >>> 0 ? B5 + 1 | 0 : B5, o4[C6 + 8 >> 2] = t5, o4[C6 + 12 >> 2] = B5, B5 = a5 + f5 | 0, Q5 = B5 = (a5 = Q5 + e4 | 0) >>> 0 < Q5 >>> 0 ? B5 + 1 | 0 : B5, o4[C6 + 40 >> 2] = a5, o4[C6 + 44 >> 2] = B5, B5 = 38592 + (I6 = 120 | N5) | 0, f5 = o4[(I6 = m3 = I6 + g6 | 0) >> 2], e4 = o4[B5 >> 2] + f5 | 0, B5 = o4[B5 + 4 >> 2] + o4[I6 + 4 >> 2] | 0, I6 = K5 + (f5 >>> 0 > e4 >>> 0 ? B5 + 1 | 0 : B5) | 0, I6 = (h5 ^ (E5 ^ h5) & Q5) + ((B5 = w5 + e4 | 0) >>> 0 < w5 >>> 0 ? I6 + 1 | 0 : I6) | 0, E5 = xA(a5, Q5, 50), h5 = n4, E5 = xA(a5, Q5, 46) ^ E5, h5 ^= n4, Q5 = (B5 = (w5 = y5 ^ (y5 ^ k5) & a5) + B5 | 0) + (E5 = xA(a5, Q5, 23) ^ E5) | 0, B5 = (n4 ^ h5) + (B5 >>> 0 < w5 >>> 0 ? I6 + 1 | 0 : I6) | 0, B5 = Q5 >>> 0 < E5 >>> 0 ? B5 + 1 | 0 : B5, E5 = Q5, h5 = B5, I6 = B5, B5 = xA(t5, S4, 36), a5 = n4, B5 = xA(t5, S4, 30) ^ B5, w5 = n4 ^ a5, K5 = xA(t5, S4, 25) ^ B5, B5 = ((D5 | F5) & S4 | D5 & F5) + (n4 ^ w5) | 0, I6 = ((a5 = K5 + ((M5 | r5) & t5 | M5 & r5) | 0) >>> 0 < K5 >>> 0 ? B5 + 1 | 0 : B5) + I6 | 0, I6 = (Q5 = Q5 + a5 | 0) >>> 0 < a5 >>> 0 ? I6 + 1 | 0 : I6, o4[C6 >> 2] = Q5, o4[C6 + 4 >> 2] = I6, B5 = h5 + J5 | 0, B5 = (w5 = i2) >>> 0 > (i2 = i2 + E5 | 0) >>> 0 ? B5 + 1 | 0 : B5, o4[C6 + 32 >> 2] = i2, o4[C6 + 36 >> 2] = B5, 64 != (0 | b4); ) E5 = ((b4 = b4 + 16 | 0) << 3) + g6 | 0, i2 = o4[U5 >> 2], D5 = o4[U5 + 4 >> 2], l3 = I6 = o4[p5 >> 2], _3 = B5 = o4[p5 + 4 >> 2], K5 = Q5 = o4[Y5 + 4 >> 2], Q5 = xA(p5 = o4[Y5 >> 2], Q5, 45), h5 = n4, Q5 = (F5 = ((63 & K5) << 26 | p5 >>> 6) ^ xA(p5, K5, 3) ^ Q5) + I6 | 0, I6 = (n4 ^ h5 ^ K5 >>> 6) + B5 | 0, B5 = (Q5 >>> 0 < F5 >>> 0 ? I6 + 1 | 0 : I6) + D5 | 0, B5 = (I6 = Q5 + i2 | 0) >>> 0 < Q5 >>> 0 ? B5 + 1 | 0 : B5, i2 = Q5 = o4[G5 + 4 >> 2], Q5 = xA(h5 = o4[G5 >> 2], Q5, 63), D5 = n4, F5 = ((127 & i2) << 25 | h5 >>> 7) ^ xA(h5, i2, 56) ^ Q5, B5 = (n4 ^ D5 ^ i2 >>> 7) + B5 | 0, e4 = Q5 = F5 + I6 | 0, o4[E5 >> 2] = Q5, B5 = Q5 >>> 0 < F5 >>> 0 ? B5 + 1 | 0 : B5, o4[E5 + 4 >> 2] = B5, F5 = I6 = o4[U5 + 20 >> 2], w5 = o4[U5 + 16 >> 2], E5 = I6, d5 = o4[U5 + 88 >> 2], L5 = I6 = o4[U5 + 92 >> 2], D5 = I6, a5 = B5, I6 = xA(Q5, B5, 45), J5 = n4, y5 = (f5 = xA(Q5, B5, 3) ^ I6) ^ ((63 & (I6 = B5)) << 26 | Q5 >>> 6), I6 = ((B5 = B5 >>> 6 | 0) ^ n4 ^ J5) + D5 | 0, B5 = ((Q5 = y5 + d5 | 0) >>> 0 < y5 >>> 0 ? I6 + 1 | 0 : I6) + E5 | 0, B5 = (I6 = Q5 + w5 | 0) >>> 0 < Q5 >>> 0 ? B5 + 1 | 0 : B5, E5 = Q5 = o4[U5 + 28 >> 2], Q5 = xA(D5 = o4[U5 + 24 >> 2], Q5, 63), S4 = n4, y5 = (Q5 = ((127 & E5) << 25 | D5 >>> 7) ^ xA(D5, E5, 56) ^ Q5) + I6 | 0, I6 = (n4 ^ S4 ^ E5 >>> 7) + B5 | 0, S4 = I6 = Q5 >>> 0 > y5 >>> 0 ? I6 + 1 | 0 : I6, o4[U5 + 144 >> 2] = y5, o4[U5 + 148 >> 2] = I6, I6 = (M5 = o4[U5 + 80 >> 2]) + h5 | 0, B5 = (P5 = o4[U5 + 84 >> 2]) + i2 | 0, i2 = xA(J5 = o4[U5 + 120 >> 2], Q5 = o4[U5 + 124 >> 2], 45), h5 = n4, k5 = ((63 & Q5) << 26 | J5 >>> 6) ^ xA(J5, Q5, 3) ^ i2, B5 = (n4 ^ h5 ^ Q5 >>> 6) + (I6 >>> 0 < M5 >>> 0 ? B5 + 1 | 0 : B5) | 0, I6 = (i2 = k5 + I6 | 0) >>> 0 < k5 >>> 0 ? B5 + 1 | 0 : B5, B5 = xA(w5, F5, 63), h5 = n4, f5 = i2, i2 = ((127 & F5) << 25 | w5 >>> 7) ^ xA(w5, F5, 56) ^ B5, I6 = (n4 ^ h5 ^ F5 >>> 7) + I6 | 0, F5 = I6 = i2 >>> 0 > (t5 = f5 + i2 | 0) >>> 0 ? I6 + 1 | 0 : I6, o4[U5 + 136 >> 2] = t5, o4[U5 + 140 >> 2] = I6, k5 = I6 = o4[U5 + 36 >> 2], w5 = f5 = o4[U5 + 32 >> 2], v5 = o4[U5 + 104 >> 2], u4 = B5 = o4[U5 + 108 >> 2], i2 = B5, B5 = xA(y5, S4, 45), h5 = n4, Y5 = ((63 & S4) << 26 | y5 >>> 6) ^ (B5 = xA(y5, S4, 3) ^ B5), B5 = (S4 >>> 6 ^ (r5 = n4 ^ h5)) + i2 | 0, I6 = ((h5 = Y5 + v5 | 0) >>> 0 < Y5 >>> 0 ? B5 + 1 | 0 : B5) + I6 | 0, I6 = (B5 = h5 + w5 | 0) >>> 0 < h5 >>> 0 ? I6 + 1 | 0 : I6, h5 = i2 = o4[U5 + 44 >> 2], i2 = xA(w5 = o4[U5 + 40 >> 2], i2, 63), r5 = n4, i2 = xA(w5, h5, 56) ^ i2, Y5 = n4 ^ r5, r5 = (i2 ^= (127 & h5) << 25 | w5 >>> 7) + B5 | 0, B5 = (h5 >>> 7 ^ Y5) + I6 | 0, i2 = B5 = i2 >>> 0 > r5 >>> 0 ? B5 + 1 | 0 : B5, o4[U5 + 160 >> 2] = r5, o4[U5 + 164 >> 2] = B5, z3 = o4[U5 + 96 >> 2], O3 = I6 = o4[U5 + 100 >> 2], B5 = I6, I6 = xA(t5, F5, 45), Y5 = n4, I6 = xA(t5, F5, 3) ^ I6, B5 = (F5 >>> 6 ^ (N5 = n4 ^ Y5)) + B5 | 0, I6 = ((Y5 = (G5 = ((63 & F5) << 26 | t5 >>> 6) ^ I6) + z3 | 0) >>> 0 < G5 >>> 0 ? B5 + 1 | 0 : B5) + E5 | 0, I6 = (B5 = D5 + Y5 | 0) >>> 0 < Y5 >>> 0 ? I6 + 1 | 0 : I6, E5 = xA(f5, k5, 63), D5 = n4, f5 = (E5 = ((127 & k5) << 25 | f5 >>> 7) ^ xA(f5, k5, 56) ^ E5) + B5 | 0, B5 = (n4 ^ D5 ^ k5 >>> 7) + I6 | 0, E5 = B5 = E5 >>> 0 > f5 >>> 0 ? B5 + 1 | 0 : B5, o4[U5 + 152 >> 2] = f5, o4[U5 + 156 >> 2] = B5, N5 = I6 = o4[U5 + 52 >> 2], k5 = G5 = o4[U5 + 48 >> 2], B5 = I6, I6 = xA(r5, i2, 45), D5 = n4, H5 = ((63 & i2) << 26 | r5 >>> 6) ^ (I6 = xA(r5, i2, 3) ^ I6), I6 = (i2 >>> 6 ^ (Y5 = n4 ^ D5)) + Q5 | 0, B5 = ((D5 = H5 + J5 | 0) >>> 0 < H5 >>> 0 ? I6 + 1 | 0 : I6) + B5 | 0, B5 = (I6 = D5 + k5 | 0) >>> 0 < D5 >>> 0 ? B5 + 1 | 0 : B5, H5 = D5 = o4[U5 + 60 >> 2], D5 = xA(k5 = o4[U5 + 56 >> 2], D5, 63), Y5 = n4, D5 = xA(k5, H5, 56) ^ D5, B5 = (H5 >>> 7 ^ (R4 = n4 ^ Y5)) + B5 | 0, D5 = B5 = (D5 ^= (127 & H5) << 25 | k5 >>> 7) >>> 0 > (Y5 = D5 + I6 | 0) >>> 0 ? B5 + 1 | 0 : B5, o4[U5 + 176 >> 2] = Y5, o4[U5 + 180 >> 2] = B5, q3 = o4[U5 + 112 >> 2], R4 = I6 = o4[U5 + 116 >> 2], B5 = xA(f5, E5, 45), s5 = n4, B5 = xA(f5, E5, 3) ^ B5, I6 = (E5 >>> 6 ^ n4 ^ s5) + I6 | 0, B5 = ((B5 ^= (63 & E5) << 26 | f5 >>> 6) >>> 0 > (s5 = B5 + q3 | 0) >>> 0 ? I6 + 1 | 0 : I6) + h5 | 0, B5 = (I6 = w5 + s5 | 0) >>> 0 < s5 >>> 0 ? B5 + 1 | 0 : B5, h5 = xA(G5, N5, 63), w5 = n4, s5 = I6, I6 = N5 >>> 7 | 0, h5 = ((127 & N5) << 25 | G5 >>> 7) ^ xA(G5, N5, 56) ^ h5, B5 = (I6 ^ n4 ^ w5) + B5 | 0, h5 = B5 = h5 >>> 0 > (N5 = s5 + h5 | 0) >>> 0 ? B5 + 1 | 0 : B5, o4[U5 + 168 >> 2] = N5, o4[U5 + 172 >> 2] = B5, B5 = a5 + H5 | 0, I6 = (w5 = k5 + e4 | 0) >>> 0 < k5 >>> 0 ? B5 + 1 | 0 : B5, B5 = xA(N5, h5, 45), k5 = n4, G5 = ((63 & h5) << 26 | N5 >>> 6) ^ xA(N5, h5, 3) ^ B5, I6 = (n4 ^ k5 ^ h5 >>> 6) + I6 | 0, I6 = (w5 = G5 + w5 | 0) >>> 0 < G5 >>> 0 ? I6 + 1 | 0 : I6, G5 = o4[(B5 = U5 - -64 | 0) >> 2], H5 = B5 = o4[B5 + 4 >> 2], B5 = xA(G5, B5, 63), k5 = n4, B5 = xA(G5, H5, 56) ^ B5, s5 = n4 ^ k5, k5 = w5, I6 = (H5 >>> 7 ^ s5) + I6 | 0, w5 = I6 = (w5 = ((127 & H5) << 25 | G5 >>> 7) ^ B5) >>> 0 > (k5 = k5 + w5 | 0) >>> 0 ? I6 + 1 | 0 : I6, o4[U5 + 184 >> 2] = k5, o4[U5 + 188 >> 2] = I6, B5 = F5 + H5 | 0, B5 = (I6 = t5 + G5 | 0) >>> 0 < G5 >>> 0 ? B5 + 1 | 0 : B5, F5 = xA(Y5, D5, 45), t5 = n4, F5 = xA(Y5, D5, 3) ^ F5, G5 = n4 ^ t5, t5 = (F5 ^= (63 & D5) << 26 | Y5 >>> 6) + I6 | 0, I6 = (D5 >>> 6 ^ G5) + B5 | 0, G5 = F5 >>> 0 > t5 >>> 0 ? I6 + 1 | 0 : I6, F5 = xA(I6 = o4[U5 + 72 >> 2], B5 = o4[U5 + 76 >> 2], 63), H5 = n4, s5 = xA(I6, B5, 56) ^ F5, F5 = B5, B5 = ((B5 = B5 >>> 7 | 0) ^ n4 ^ H5) + G5 | 0, F5 = B5 = (I6 = s5 ^ ((127 & F5) << 25 | I6 >>> 7)) >>> 0 > (t5 = I6 + t5 | 0) >>> 0 ? B5 + 1 | 0 : B5, o4[U5 + 192 >> 2] = t5, o4[U5 + 196 >> 2] = B5, I6 = xA(M5, P5, 63), B5 = n4, G5 = ((127 & P5) << 25 | M5 >>> 7) ^ xA(M5, P5, 56) ^ I6, B5 = (n4 ^ B5 ^ P5 >>> 7) + _3 | 0, I6 = S4 + ((M5 = G5 + l3 | 0) >>> 0 < G5 >>> 0 ? B5 + 1 | 0 : B5) | 0, I6 = (B5 = y5 + M5 | 0) >>> 0 < y5 >>> 0 ? I6 + 1 | 0 : I6, S4 = xA(k5, w5, 45), y5 = n4, S4 = xA(k5, w5, 3) ^ S4, M5 = n4 ^ y5, y5 = (S4 ^= (63 & w5) << 26 | k5 >>> 6) + B5 | 0, B5 = (w5 >>> 6 ^ M5) + I6 | 0, S4 = B5 = S4 >>> 0 > y5 >>> 0 ? B5 + 1 | 0 : B5, o4[U5 + 200 >> 2] = y5, o4[U5 + 204 >> 2] = B5, G5 = o4[W3 >> 2], B5 = o4[W3 + 4 >> 2], I6 = xA(d5, L5, 63), M5 = n4, I6 = xA(d5, L5, 56) ^ I6, P5 = n4 ^ M5, M5 = f5, f5 = ((127 & L5) << 25 | d5 >>> 7) ^ I6, I6 = (L5 >>> 7 ^ P5) + E5 | 0, B5 = ((M5 = M5 + f5 | 0) >>> 0 < f5 >>> 0 ? I6 + 1 | 0 : I6) + B5 | 0, B5 = (I6 = M5 + G5 | 0) >>> 0 < M5 >>> 0 ? B5 + 1 | 0 : B5, E5 = xA(t5, F5, 45), M5 = n4, E5 = xA(t5, F5, 3) ^ E5, B5 = (F5 >>> 6 ^ (f5 = n4 ^ M5)) + B5 | 0, E5 = B5 = (E5 ^= (63 & F5) << 26 | t5 >>> 6) >>> 0 > (M5 = E5 + I6 | 0) >>> 0 ? B5 + 1 | 0 : B5, o4[U5 + 208 >> 2] = M5, o4[U5 + 212 >> 2] = B5, f5 = o4[x3 >> 2], G5 = o4[x3 + 4 >> 2], I6 = xA(z3, O3, 63), B5 = n4, d5 = ((127 & O3) << 25 | z3 >>> 7) ^ xA(z3, O3, 56) ^ I6, I6 = (n4 ^ B5 ^ O3 >>> 7) + i2 | 0, B5 = ((r5 = d5 + r5 | 0) >>> 0 < d5 >>> 0 ? I6 + 1 | 0 : I6) + G5 | 0, B5 = (I6 = r5 + f5 | 0) >>> 0 < r5 >>> 0 ? B5 + 1 | 0 : B5, i2 = xA(y5, S4, 45), r5 = n4, f5 = I6, I6 = S4 >>> 6 | 0, i2 = ((63 & S4) << 26 | y5 >>> 6) ^ xA(y5, S4, 3) ^ i2, B5 = (I6 ^ n4 ^ r5) + B5 | 0, i2 = B5 = i2 >>> 0 > (S4 = f5 + i2 | 0) >>> 0 ? B5 + 1 | 0 : B5, o4[U5 + 216 >> 2] = S4, o4[U5 + 220 >> 2] = B5, r5 = o4[V3 >> 2], I6 = o4[V3 + 4 >> 2], B5 = xA(v5, u4, 63), y5 = n4, H5 = N5, N5 = ((127 & u4) << 25 | v5 >>> 7) ^ (B5 = xA(v5, u4, 56) ^ B5), B5 = (u4 >>> 7 ^ (f5 = n4 ^ y5)) + h5 | 0, I6 = ((y5 = H5 + N5 | 0) >>> 0 < N5 >>> 0 ? B5 + 1 | 0 : B5) + I6 | 0, I6 = (B5 = y5 + r5 | 0) >>> 0 < y5 >>> 0 ? I6 + 1 | 0 : I6, h5 = xA(M5, E5, 45), y5 = n4, f5 = B5, B5 = E5 >>> 6 | 0, E5 = ((63 & E5) << 26 | M5 >>> 6) ^ xA(M5, E5, 3) ^ h5, B5 = (B5 ^ n4 ^ y5) + I6 | 0, E5 = B5 = E5 >>> 0 > (h5 = f5 + E5 | 0) >>> 0 ? B5 + 1 | 0 : B5, o4[U5 + 224 >> 2] = h5, o4[U5 + 228 >> 2] = B5, M5 = o4[j3 >> 2], r5 = o4[j3 + 4 >> 2], I6 = xA(q3, R4, 63), B5 = n4, f5 = ((127 & R4) << 25 | q3 >>> 7) ^ xA(q3, R4, 56) ^ I6, B5 = (n4 ^ B5 ^ R4 >>> 7) + D5 | 0, I6 = ((y5 = f5 + Y5 | 0) >>> 0 < f5 >>> 0 ? B5 + 1 | 0 : B5) + r5 | 0, I6 = (B5 = y5 + M5 | 0) >>> 0 < y5 >>> 0 ? I6 + 1 | 0 : I6, D5 = xA(S4, i2, 45), y5 = n4, f5 = B5, B5 = i2 >>> 6 | 0, i2 = ((63 & i2) << 26 | S4 >>> 6) ^ xA(S4, i2, 3) ^ D5, B5 = (B5 ^ n4 ^ y5) + I6 | 0, i2 = B5 = i2 >>> 0 > (D5 = f5 + i2 | 0) >>> 0 ? B5 + 1 | 0 : B5, o4[U5 + 232 >> 2] = D5, o4[U5 + 236 >> 2] = B5, I6 = xA(J5, Q5, 63), B5 = n4, f5 = xA(J5, Q5, 56) ^ I6, I6 = ((I6 = Q5 >>> 7 | 0) ^ n4 ^ B5) + K5 | 0, B5 = w5 + ((Q5 = (S4 = f5 ^ ((127 & Q5) << 25 | J5 >>> 7)) + p5 | 0) >>> 0 < S4 >>> 0 ? I6 + 1 | 0 : I6) | 0, B5 = (I6 = Q5 + k5 | 0) >>> 0 < k5 >>> 0 ? B5 + 1 | 0 : B5, Q5 = xA(h5, E5, 45), S4 = n4, w5 = I6, I6 = E5 >>> 6 | 0, Q5 = w5 + (E5 = ((63 & E5) << 26 | h5 >>> 6) ^ xA(h5, E5, 3) ^ Q5) | 0, B5 = (I6 ^ n4 ^ S4) + B5 | 0, o4[U5 + 240 >> 2] = Q5, o4[U5 + 244 >> 2] = Q5 >>> 0 < E5 >>> 0 ? B5 + 1 | 0 : B5, E5 = o4[m3 >> 2], h5 = o4[m3 + 4 >> 2], I6 = xA(e4, a5, 63), B5 = n4, I6 = xA(e4, a5, 56) ^ I6, S4 = n4 ^ B5, B5 = a5 >>> 7 | 0, a5 = ((127 & a5) << 25 | e4 >>> 7) ^ I6, I6 = (B5 ^ S4) + F5 | 0, B5 = ((Q5 = a5 + t5 | 0) >>> 0 < a5 >>> 0 ? I6 + 1 | 0 : I6) + h5 | 0, B5 = (I6 = Q5 + E5 | 0) >>> 0 < Q5 >>> 0 ? B5 + 1 | 0 : B5, Q5 = xA(D5, i2, 45), E5 = n4, w5 = I6, I6 = i2 >>> 6 | 0, Q5 = w5 + (i2 = ((63 & i2) << 26 | D5 >>> 6) ^ xA(D5, i2, 3) ^ Q5) | 0, B5 = (I6 ^ n4 ^ E5) + B5 | 0, o4[U5 + 248 >> 2] = Q5, o4[U5 + 252 >> 2] = Q5 >>> 0 < i2 >>> 0 ? B5 + 1 | 0 : B5;
              B5 = I6 + o4[A7 + 4 >> 2] | 0, B5 = (I6 = Q5 + o4[A7 >> 2] | 0) >>> 0 < Q5 >>> 0 ? B5 + 1 | 0 : B5, o4[A7 >> 2] = I6, o4[A7 + 4 >> 2] = B5, I6 = o4[A7 + 12 >> 2] + o4[C6 + 12 >> 2] | 0, g6 = (B5 = o4[C6 + 8 >> 2]) + o4[A7 + 8 >> 2] | 0, o4[A7 + 8 >> 2] = g6, o4[A7 + 12 >> 2] = g6 >>> 0 < B5 >>> 0 ? I6 + 1 | 0 : I6, B5 = o4[A7 + 20 >> 2] + o4[C6 + 20 >> 2] | 0, I6 = (g6 = o4[C6 + 16 >> 2]) + o4[A7 + 16 >> 2] | 0, o4[A7 + 16 >> 2] = I6, o4[A7 + 20 >> 2] = I6 >>> 0 < g6 >>> 0 ? B5 + 1 | 0 : B5, B5 = o4[A7 + 28 >> 2] + o4[C6 + 28 >> 2] | 0, I6 = (g6 = o4[C6 + 24 >> 2]) + o4[A7 + 24 >> 2] | 0, o4[A7 + 24 >> 2] = I6, o4[A7 + 28 >> 2] = I6 >>> 0 < g6 >>> 0 ? B5 + 1 | 0 : B5, I6 = o4[A7 + 36 >> 2] + o4[C6 + 36 >> 2] | 0, g6 = (B5 = o4[C6 + 32 >> 2]) + o4[A7 + 32 >> 2] | 0, o4[A7 + 32 >> 2] = g6, o4[A7 + 36 >> 2] = g6 >>> 0 < B5 >>> 0 ? I6 + 1 | 0 : I6, B5 = o4[A7 + 44 >> 2] + o4[C6 + 44 >> 2] | 0, I6 = (g6 = o4[C6 + 40 >> 2]) + o4[A7 + 40 >> 2] | 0, o4[A7 + 40 >> 2] = I6, o4[A7 + 44 >> 2] = I6 >>> 0 < g6 >>> 0 ? B5 + 1 | 0 : B5, I6 = o4[A7 + 52 >> 2] + o4[C6 + 52 >> 2] | 0, g6 = (B5 = o4[C6 + 48 >> 2]) + o4[A7 + 48 >> 2] | 0, o4[A7 + 48 >> 2] = g6, o4[A7 + 52 >> 2] = g6 >>> 0 < B5 >>> 0 ? I6 + 1 | 0 : I6, B5 = o4[A7 + 60 >> 2] + o4[C6 + 60 >> 2] | 0, I6 = (g6 = o4[C6 + 56 >> 2]) + o4[A7 + 56 >> 2] | 0, o4[A7 + 56 >> 2] = I6, o4[A7 + 60 >> 2] = I6 >>> 0 < g6 >>> 0 ? B5 + 1 | 0 : B5;
            }
            function Y4(A7) {
              var I6, g6, B5, Q5, i2, E5, D5, o5, h5, w5, F5, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, r5 = 0, t5 = 0, U5 = 0, J5 = 0, K5 = 0, e4 = 0, Y5 = 0, N5 = 0, G5 = 0, H5 = 0, s5 = 0, p5 = 0, L5 = 0, d5 = 0, P5 = 0, R4 = 0, b4 = 0, v5 = 0, u4 = 0, z3 = 0, O3 = 0, q3 = 0, W3 = 0, x3 = 0, V3 = 0, j3 = 0, m3 = 0, l3 = 0, _3 = 0, X3 = 0, T3 = 0;
              a5 = (H5 = c4[A7 + 44 | 0] | c4[A7 + 45 | 0] << 8 | c4[A7 + 46 | 0] << 16 | c4[A7 + 47 | 0] << 24) >>> 5 & 2097151, S4 = AI(I6 = (c4[A7 + 60 | 0] | c4[A7 + 61 | 0] << 8 | c4[A7 + 62 | 0] << 16 | c4[A7 + 63 | 0] << 24) >>> 3 | 0, 0, -683901, -1), f5 = (y5 = c4[A7 + 44 | 0]) << 16 & 2031616 | c4[A7 + 42 | 0] | c4[A7 + 43 | 0] << 8, y5 = n4, t5 = y5 = f5 >>> 0 > (J5 = S4 + f5 | 0) >>> 0 ? y5 + 1 | 0 : y5, Y5 = y5 = y5 - ((J5 >>> 0 < 4293918720) - 1 | 0) | 0, S4 = y5 >> 21, y5 = (f5 = a5) + (a5 = (2097151 & y5) << 11 | (M5 = J5 - -1048576 | 0) >>> 21) | 0, f5 = S4, R4 = f5 = y5 >>> 0 < a5 >>> 0 ? f5 + 1 | 0 : f5, V3 = y5, N5 = AI(y5, f5, -683901, -1), U5 = n4, r5 = AI(g6 = (c4[A7 + 49 | 0] | c4[A7 + 50 | 0] << 8 | c4[A7 + 51 | 0] << 16 | c4[A7 + 52 | 0] << 24) >>> 7 & 2097151, 0, -997805, -1), f5 = 0, f5 = 2097151 & ((3 & (f5 |= S4 = 0)) << 30 | (y5 = (a5 = (y5 = c4[A7 + 27 | 0]) << 8 | (G5 = c4[A7 + 23 | 0] | c4[A7 + 24 | 0] << 8 | c4[A7 + 25 | 0] << 16 | c4[A7 + 26 | 0] << 24) >>> 24) | (y5 = c4[A7 + 28 | 0]) << 16) >>> 2), y5 = n4, y5 = f5 >>> 0 > (S4 = f5 + r5 | 0) >>> 0 ? y5 + 1 | 0 : y5, f5 = AI(W3 = (K5 = c4[A7 + 52 | 0] | c4[A7 + 53 | 0] << 8 | c4[A7 + 54 | 0] << 16 | c4[A7 + 55 | 0] << 24) >>> 4 & 2097151, 0, 654183, 0), y5 = n4 + y5 | 0, r5 = S4 = f5 + S4 | 0, S4 = f5 >>> 0 > S4 >>> 0 ? y5 + 1 | 0 : y5, y5 = 0, k5 = (f5 = c4[A7 + 48 | 0]) << 8 | H5 >>> 24, a5 = c4[A7 + 49 | 0], y5 = AI(B5 = 2097151 & ((3 & (H5 = y5 | y5)) << 30 | (f5 = (a5 <<= 16) | k5) >>> 2), 0, 136657, 0), S4 = n4 + S4 | 0, S4 = y5 >>> 0 > (f5 = y5 + r5 | 0) >>> 0 ? S4 + 1 | 0 : S4, a5 = (y5 = AI(Q5 = (c4[A7 + 57 | 0] | c4[A7 + 58 | 0] << 8 | c4[A7 + 59 | 0] << 16 | c4[A7 + 60 | 0] << 24) >>> 6 & 2097151, 0, 666643, 0)) + f5 | 0, f5 = n4 + S4 | 0, r5 = a5, S4 = y5 >>> 0 > a5 >>> 0 ? f5 + 1 | 0 : f5, f5 = 0, k5 = (y5 = c4[A7 + 56 | 0]) << 8 | K5 >>> 24, a5 = c4[A7 + 57 | 0], f5 = AI(i2 = 2097151 & ((1 & (K5 = (y5 = 0) | f5)) << 31 | (f5 = (a5 <<= 16) | k5) >>> 1), 0, 470296, 0), y5 = n4 + S4 | 0, f5 = (y5 = (S4 = a5 = f5 + r5 | 0) >>> 0 < f5 >>> 0 ? y5 + 1 | 0 : y5) + U5 | 0, f5 = S4 >>> 0 > (a5 = S4 + N5 | 0) >>> 0 ? f5 + 1 | 0 : f5, s5 = S4 - -1048576 | 0, b4 = S4 = y5 - ((S4 >>> 0 < 4293918720) - 1 | 0) | 0, U5 = a5 - (y5 = -2097152 & s5) | 0, N5 = f5 - ((y5 >>> 0 > a5 >>> 0) + S4 | 0) | 0, f5 = AI(g6, 0, 654183, 0), y5 = n4, y5 = f5 >>> 0 > (S4 = f5 + (G5 >>> 5 & 2097151) | 0) >>> 0 ? y5 + 1 | 0 : y5, a5 = (f5 = S4) + (S4 = AI(W3, 0, 470296, 0)) | 0, f5 = n4 + y5 | 0, f5 = S4 >>> 0 > a5 >>> 0 ? f5 + 1 | 0 : f5, y5 = AI(B5, j3, -997805, -1), f5 = n4 + f5 | 0, f5 = y5 >>> 0 > (S4 = y5 + a5 | 0) >>> 0 ? f5 + 1 | 0 : f5, a5 = (y5 = S4) + (S4 = AI(i2, m3, 666643, 0)) | 0, y5 = n4 + f5 | 0, k5 = a5, a5 = S4 >>> 0 > a5 >>> 0 ? y5 + 1 | 0 : y5, r5 = (S4 = AI(g6, 0, 470296, 0)) + (y5 = (y5 = c4[A7 + 23 | 0]) << 16 & 2031616 | c4[A7 + 21 | 0] | c4[A7 + 22 | 0] << 8) | 0, S4 = n4, S4 = y5 >>> 0 > r5 >>> 0 ? S4 + 1 | 0 : S4, r5 = (f5 = AI(W3, 0, 666643, 0)) + r5 | 0, y5 = n4 + S4 | 0, S4 = AI(B5, j3, 654183, 0), f5 = n4 + (f5 >>> 0 > r5 >>> 0 ? y5 + 1 | 0 : y5) | 0, K5 = f5 = S4 >>> 0 > (G5 = S4 + r5 | 0) >>> 0 ? f5 + 1 | 0 : f5, q3 = f5 = f5 - ((G5 >>> 0 < 4293918720) - 1 | 0) | 0, y5 = (y5 = f5 >>> 21 | 0) + a5 | 0, S4 = y5 = (f5 = (2097151 & f5) << 11 | (r5 = G5 - -1048576 | 0) >>> 21) >>> 0 > (k5 = f5 + k5 | 0) >>> 0 ? y5 + 1 | 0 : y5, e4 = f5 = y5 - ((k5 >>> 0 < 4293918720) - 1 | 0) | 0, y5 = U5, U5 = (2097151 & f5) << 11 | (a5 = k5 - -1048576 | 0) >>> 21, f5 = (f5 >> 21) + N5 | 0, H5 = U5 = (f5 = U5 >>> 0 > (p5 = y5 + U5 | 0) >>> 0 ? f5 + 1 | 0 : f5) - ((p5 >>> 0 < 4293918720) - 1 | 0) | 0, x3 = p5 - (y5 = -2097152 & (N5 = p5 - -1048576 | 0)) | 0, l3 = f5 - ((y5 >>> 0 > p5 >>> 0) + U5 | 0) | 0, y5 = AI(V3, R4, 136657, 0), S4 = n4 + S4 | 0, S4 = y5 >>> 0 > (f5 = y5 + k5 | 0) >>> 0 ? S4 + 1 | 0 : S4, P5 = f5 - (y5 = -2097152 & a5) | 0, L5 = S4 - ((y5 >>> 0 > f5 >>> 0) + e4 | 0) | 0, p5 = J5 - (y5 = -2097152 & M5) | 0, Y5 = t5 - ((y5 >>> 0 > J5 >>> 0) + Y5 | 0) | 0, t5 = AI(I6, 0, 136657, 0), S4 = 0, f5 = (S4 |= f5 = 0) >>> 3 | 0, S4 = (7 & S4) << 29 | (y5 = (a5 = (y5 = c4[A7 + 40 | 0]) << 8 | (M5 = c4[A7 + 36 | 0] | c4[A7 + 37 | 0] << 8 | c4[A7 + 38 | 0] << 16 | c4[A7 + 39 | 0] << 24) >>> 24) | (y5 = c4[A7 + 41 | 0]) << 16) >>> 3, y5 = f5 + n4 | 0, y5 = S4 >>> 0 > (a5 = S4 + t5 | 0) >>> 0 ? y5 + 1 | 0 : y5, f5 = AI(Q5, 0, -683901, -1), y5 = n4 + y5 | 0, y5 = f5 >>> 0 > (S4 = f5 + a5 | 0) >>> 0 ? y5 + 1 | 0 : y5, k5 = S4, f5 = AI(I6, 0, -997805, -1), S4 = n4, S4 = f5 >>> 0 > (a5 = f5 + (M5 >>> 6 & 2097151) | 0) >>> 0 ? S4 + 1 | 0 : S4, M5 = (f5 = a5) + (a5 = AI(Q5, 0, 136657, 0)) | 0, f5 = n4 + S4 | 0, S4 = AI(i2, m3, -683901, -1), f5 = n4 + (a5 >>> 0 > M5 >>> 0 ? f5 + 1 | 0 : f5) | 0, U5 = f5 = S4 >>> 0 > (v5 = S4 + M5 | 0) >>> 0 ? f5 + 1 | 0 : f5, _3 = S4 = f5 - ((v5 >>> 0 < 4293918720) - 1 | 0) | 0, y5 = y5 + (f5 = S4 >> 21) | 0, M5 = y5 = (S4 = (2097151 & S4) << 11 | (J5 = v5 - -1048576 | 0) >>> 21) >>> 0 > (e4 = S4 + k5 | 0) >>> 0 ? y5 + 1 | 0 : y5, u4 = y5 = y5 - ((e4 >>> 0 < 4293918720) - 1 | 0) | 0, f5 = (f5 = y5 >> 21) + Y5 | 0, O3 = f5 = (y5 = (S4 = (2097151 & y5) << 11 | (k5 = e4 - -1048576 | 0) >>> 21) + p5 | 0) >>> 0 < S4 >>> 0 ? f5 + 1 | 0 : f5, z3 = y5, f5 = AI(y5, f5, -683901, -1), y5 = n4 + L5 | 0, d5 = S4 = f5 + P5 | 0, a5 = f5 >>> 0 > S4 >>> 0 ? y5 + 1 | 0 : y5, p5 = G5 - (y5 = -2097152 & r5) | 0, Y5 = K5 - ((4095 & q3) + (y5 >>> 0 > G5 >>> 0) | 0) | 0, G5 = AI(g6, 0, 666643, 0), y5 = 0, r5 = (f5 = c4[A7 + 19 | 0]) << 8 | (K5 = c4[A7 + 15 | 0] | c4[A7 + 16 | 0] << 8 | c4[A7 + 17 | 0] << 16 | c4[A7 + 18 | 0] << 24) >>> 24, S4 = y5, y5 = c4[A7 + 20 | 0], f5 = (7 & (S4 |= f5 = 0)) << 29 | (f5 = (y5 <<= 16) | r5) >>> 3, S4 = n4 + (S4 >>> 3 | 0) | 0, S4 = f5 >>> 0 > (r5 = f5 + G5 | 0) >>> 0 ? S4 + 1 | 0 : S4, y5 = AI(B5, j3, 470296, 0), f5 = n4 + S4 | 0, y5 = y5 >>> 0 > (r5 = y5 + r5 | 0) >>> 0 ? f5 + 1 | 0 : f5, S4 = AI(B5, j3, 666643, 0), f5 = n4, G5 = f5 = S4 >>> 0 > (P5 = S4 + (K5 >>> 6 & 2097151) | 0) >>> 0 ? f5 + 1 | 0 : f5, X3 = S4 = f5 - ((P5 >>> 0 < 4293918720) - 1 | 0) | 0, y5 = y5 + (f5 = S4 >>> 21 | 0) | 0, K5 = y5 = (S4 = (2097151 & S4) << 11 | (t5 = P5 - -1048576 | 0) >>> 21) >>> 0 > (L5 = S4 + r5 | 0) >>> 0 ? y5 + 1 | 0 : y5, T3 = y5 = y5 - ((L5 >>> 0 < 4293918720) - 1 | 0) | 0, f5 = (f5 = y5 >>> 21 | 0) + Y5 | 0, f5 = (y5 = (2097151 & y5) << 11 | (r5 = L5 - -1048576 | 0) >>> 21) >>> 0 > (S4 = y5 + p5 | 0) >>> 0 ? f5 + 1 | 0 : f5, Y5 = (y5 = S4) + (S4 = AI(V3, R4, -997805, -1)) | 0, y5 = n4 + f5 | 0, y5 = S4 >>> 0 > Y5 >>> 0 ? y5 + 1 | 0 : y5, q3 = f5 = e4 - (S4 = -2097152 & k5) | 0, E5 = k5 = M5 - ((S4 >>> 0 > e4 >>> 0) + u4 | 0) | 0, S4 = AI(z3, O3, 136657, 0), y5 = n4 + y5 | 0, y5 = S4 >>> 0 > (M5 = S4 + Y5 | 0) >>> 0 ? y5 + 1 | 0 : y5, S4 = AI(f5, k5, -683901, -1), f5 = n4 + y5 | 0, M5 = f5 = S4 >>> 0 > (Y5 = S4 + M5 | 0) >>> 0 ? f5 + 1 | 0 : f5, u4 = y5 = f5 - ((Y5 >>> 0 < 4293918720) - 1 | 0) | 0, f5 = (2097151 & y5) << 11 | (k5 = Y5 - -1048576 | 0) >>> 21, y5 = (y5 >> 21) + a5 | 0, d5 = f5 = (y5 = f5 >>> 0 > (e4 = f5 + d5 | 0) >>> 0 ? y5 + 1 | 0 : y5) - ((e4 >>> 0 < 4293918720) - 1 | 0) | 0, p5 = (2097151 & f5) << 11 | (a5 = e4 - -1048576 | 0) >>> 21, f5 = (f5 >> 21) + l3 | 0, o5 = x3 = p5 + x3 | 0, p5 = p5 >>> 0 > x3 >>> 0 ? f5 + 1 | 0 : f5, h5 = e4 - (f5 = -2097152 & a5) | 0, w5 = y5 - ((f5 >>> 0 > e4 >>> 0) + d5 | 0) | 0, x3 = Y5 - (y5 = -2097152 & k5) | 0, l3 = M5 - ((y5 >>> 0 > Y5 >>> 0) + u4 | 0) | 0, S4 = (y5 = AI(V3, R4, 654183, 0)) + (L5 - (f5 = -2097152 & r5) | 0) | 0, f5 = n4 + (K5 - ((2147483647 & T3) + (f5 >>> 0 > L5 >>> 0) | 0) | 0) | 0, f5 = y5 >>> 0 > S4 >>> 0 ? f5 + 1 | 0 : f5, y5 = AI(z3, O3, -997805, -1), f5 = n4 + f5 | 0, f5 = y5 >>> 0 > (S4 = y5 + S4 | 0) >>> 0 ? f5 + 1 | 0 : f5, a5 = (y5 = S4) + (S4 = AI(q3, E5, 136657, 0)) | 0, y5 = n4 + f5 | 0, d5 = a5, M5 = S4 >>> 0 > a5 >>> 0 ? y5 + 1 | 0 : y5, L5 = v5 - (y5 = -2097152 & J5) | 0, e4 = U5 - ((y5 >>> 0 > v5 >>> 0) + _3 | 0) | 0, K5 = AI(W3, 0, -683901, -1), y5 = 0, a5 = (f5 = c4[A7 + 35 | 0]) << 8 | (r5 = c4[A7 + 31 | 0] | c4[A7 + 32 | 0] << 8 | c4[A7 + 33 | 0] << 16 | c4[A7 + 34 | 0] << 24) >>> 24, S4 = y5, y5 = c4[A7 + 36 | 0], f5 = 0, f5 |= S4, S4 = n4, S4 = (y5 = 2097151 & ((1 & f5) << 31 | (y5 = y5 << 16 | a5) >>> 1)) >>> 0 > (f5 = y5 + K5 | 0) >>> 0 ? S4 + 1 | 0 : S4, a5 = (y5 = AI(I6, 0, 654183, 0)) + f5 | 0, f5 = n4 + S4 | 0, f5 = y5 >>> 0 > a5 >>> 0 ? f5 + 1 | 0 : f5, S4 = AI(Q5, 0, -997805, -1), y5 = n4 + f5 | 0, y5 = S4 >>> 0 > (a5 = S4 + a5 | 0) >>> 0 ? y5 + 1 | 0 : y5, f5 = AI(i2, m3, 136657, 0), y5 = n4 + y5 | 0, k5 = S4 = f5 + a5 | 0, a5 = f5 >>> 0 > S4 >>> 0 ? y5 + 1 | 0 : y5, y5 = AI(g6, 0, -683901, -1), f5 = n4, f5 = y5 >>> 0 > (S4 = y5 + (r5 >>> 4 & 2097151) | 0) >>> 0 ? f5 + 1 | 0 : f5, r5 = (y5 = AI(W3, 0, 136657, 0)) + S4 | 0, S4 = n4 + f5 | 0, S4 = y5 >>> 0 > r5 >>> 0 ? S4 + 1 | 0 : S4, y5 = AI(I6, 0, 470296, 0), f5 = n4 + S4 | 0, f5 = y5 >>> 0 > (r5 = y5 + r5 | 0) >>> 0 ? f5 + 1 | 0 : f5, r5 = (S4 = AI(Q5, 0, 654183, 0)) + r5 | 0, y5 = n4 + f5 | 0, f5 = AI(i2, m3, -997805, -1), y5 = n4 + (S4 >>> 0 > r5 >>> 0 ? y5 + 1 | 0 : y5) | 0, K5 = y5 = f5 >>> 0 > (U5 = f5 + r5 | 0) >>> 0 ? y5 + 1 | 0 : y5, F5 = f5 = y5 - ((U5 >>> 0 < 4293918720) - 1 | 0) | 0, S4 = (y5 = f5 >> 21) + a5 | 0, Y5 = f5 = (S4 = (f5 = (2097151 & f5) << 11 | (r5 = U5 - -1048576 | 0) >>> 21) >>> 0 > (J5 = f5 + k5 | 0) >>> 0 ? S4 + 1 | 0 : S4) - ((J5 >>> 0 < 4293918720) - 1 | 0) | 0, y5 = (y5 = f5 >> 21) + e4 | 0, u4 = y5 = (f5 = (a5 = (2097151 & f5) << 11 | (k5 = J5 - -1048576 | 0) >>> 21) + L5 | 0) >>> 0 < a5 >>> 0 ? y5 + 1 | 0 : y5, a5 = d5, d5 = f5, y5 = AI(f5, y5, -683901, -1), f5 = n4 + M5 | 0, e4 = a5 = a5 + y5 | 0, a5 = y5 >>> 0 > a5 >>> 0 ? f5 + 1 | 0 : f5, M5 = (y5 = AI(V3, R4, 470296, 0)) + (P5 - (f5 = -2097152 & t5) | 0) | 0, f5 = n4 + (G5 - ((2047 & X3) + (f5 >>> 0 > P5 >>> 0) | 0) | 0) | 0, f5 = y5 >>> 0 > M5 >>> 0 ? f5 + 1 | 0 : f5, t5 = (y5 = M5) + (M5 = AI(z3, O3, 654183, 0)) | 0, y5 = n4 + f5 | 0, y5 = M5 >>> 0 > t5 >>> 0 ? y5 + 1 | 0 : y5, M5 = AI(q3, E5, -997805, -1), f5 = n4 + y5 | 0, f5 = M5 >>> 0 > (t5 = M5 + t5 | 0) >>> 0 ? f5 + 1 | 0 : f5, v5 = k5 = J5 - (y5 = -2097152 & k5) | 0, D5 = M5 = S4 - ((y5 >>> 0 > J5 >>> 0) + Y5 | 0) | 0, S4 = AI(d5, u4, 136657, 0), y5 = n4 + f5 | 0, y5 = S4 >>> 0 > (t5 = S4 + t5 | 0) >>> 0 ? y5 + 1 | 0 : y5, S4 = AI(k5, M5, -683901, -1), f5 = n4 + y5 | 0, M5 = f5 = S4 >>> 0 > (G5 = S4 + t5 | 0) >>> 0 ? f5 + 1 | 0 : f5, L5 = y5 = f5 - ((G5 >>> 0 < 4293918720) - 1 | 0) | 0, f5 = (2097151 & y5) << 11 | (k5 = G5 - -1048576 | 0) >>> 21, y5 = (y5 >> 21) + a5 | 0, e4 = f5 = (y5 = f5 >>> 0 > (t5 = f5 + e4 | 0) >>> 0 ? y5 + 1 | 0 : y5) - ((t5 >>> 0 < 4293918720) - 1 | 0) | 0, J5 = (2097151 & f5) << 11 | (a5 = t5 - -1048576 | 0) >>> 21, f5 = (f5 >> 21) + l3 | 0, _3 = Y5 = J5 + x3 | 0, Y5 = J5 >>> 0 > Y5 >>> 0 ? f5 + 1 | 0 : f5, X3 = t5 - (f5 = -2097152 & a5) | 0, T3 = y5 - ((f5 >>> 0 > t5 >>> 0) + e4 | 0) | 0, x3 = G5 - (y5 = -2097152 & k5) | 0, l3 = M5 - ((y5 >>> 0 > G5 >>> 0) + L5 | 0) | 0, M5 = AI(V3, R4, 666643, 0), y5 = 0, a5 = (f5 = c4[A7 + 14 | 0]) << 8 | (e4 = c4[A7 + 10 | 0] | c4[A7 + 11 | 0] << 8 | c4[A7 + 12 | 0] << 16 | c4[A7 + 13 | 0] << 24) >>> 24, S4 = y5, y5 = c4[A7 + 15 | 0], f5 = 0, f5 |= S4, S4 = n4, S4 = (y5 = 2097151 & ((1 & f5) << 31 | (y5 = y5 << 16 | a5) >>> 1)) >>> 0 > (f5 = y5 + M5 | 0) >>> 0 ? S4 + 1 | 0 : S4, a5 = (y5 = f5) + (f5 = AI(z3, O3, 470296, 0)) | 0, y5 = n4 + S4 | 0, y5 = f5 >>> 0 > a5 >>> 0 ? y5 + 1 | 0 : y5, f5 = AI(q3, E5, 654183, 0), y5 = n4 + y5 | 0, y5 = f5 >>> 0 > (S4 = f5 + a5 | 0) >>> 0 ? y5 + 1 | 0 : y5, a5 = (f5 = S4) + (S4 = AI(d5, u4, -997805, -1)) | 0, f5 = n4 + y5 | 0, f5 = S4 >>> 0 > a5 >>> 0 ? f5 + 1 | 0 : f5, y5 = AI(v5, D5, 136657, 0), f5 = n4 + f5 | 0, G5 = S4 = y5 + a5 | 0, a5 = y5 >>> 0 > S4 >>> 0 ? f5 + 1 | 0 : f5, r5 = U5 - (y5 = -2097152 & r5) | 0, M5 = K5 - ((y5 >>> 0 > U5 >>> 0) + F5 | 0) | 0, S4 = AI(g6, 0, 136657, 0), y5 = n4, y5 = (f5 = (c4[A7 + 28 | 0] | c4[A7 + 29 | 0] << 8 | c4[A7 + 30 | 0] << 16 | c4[A7 + 31 | 0] << 24) >>> 7 & 2097151) >>> 0 > (S4 = f5 + S4 | 0) >>> 0 ? y5 + 1 | 0 : y5, k5 = (f5 = S4) + (S4 = AI(W3, 0, -997805, -1)) | 0, f5 = n4 + y5 | 0, f5 = S4 >>> 0 > k5 >>> 0 ? f5 + 1 | 0 : f5, y5 = AI(B5, j3, -683901, -1), f5 = n4 + f5 | 0, f5 = y5 >>> 0 > (S4 = y5 + k5 | 0) >>> 0 ? f5 + 1 | 0 : f5, k5 = (y5 = AI(I6, 0, 666643, 0)) + S4 | 0, S4 = n4 + f5 | 0, S4 = y5 >>> 0 > k5 >>> 0 ? S4 + 1 | 0 : S4, f5 = AI(Q5, 0, 470296, 0), y5 = n4 + S4 | 0, y5 = f5 >>> 0 > (k5 = f5 + k5 | 0) >>> 0 ? y5 + 1 | 0 : y5, f5 = AI(i2, m3, 654183, 0), y5 = n4 + y5 | 0, f5 = (b4 >> 21) + (f5 >>> 0 > (S4 = f5 + k5 | 0) >>> 0 ? y5 + 1 | 0 : y5) | 0, J5 = f5 = (k5 = (2097151 & b4) << 11 | s5 >>> 21) >>> 0 > (s5 = k5 + S4 | 0) >>> 0 ? f5 + 1 | 0 : f5, b4 = y5 = f5 - ((s5 >>> 0 < 4293918720) - 1 | 0) | 0, k5 = (2097151 & y5) << 11 | (t5 = s5 - -1048576 | 0) >>> 21, y5 = (y5 >> 21) + M5 | 0, P5 = y5 = (f5 = k5 + r5 | 0) >>> 0 < k5 >>> 0 ? y5 + 1 | 0 : y5, L5 = f5, f5 = AI(f5, y5, -683901, -1), y5 = n4 + a5 | 0, k5 = S4 = f5 + G5 | 0, a5 = f5 >>> 0 > S4 >>> 0 ? y5 + 1 | 0 : y5, y5 = AI(z3, O3, 666643, 0), f5 = n4, f5 = y5 >>> 0 > (S4 = y5 + (e4 >>> 4 & 2097151) | 0) >>> 0 ? f5 + 1 | 0 : f5, y5 = AI(q3, E5, 470296, 0), f5 = n4 + f5 | 0, f5 = y5 >>> 0 > (S4 = y5 + S4 | 0) >>> 0 ? f5 + 1 | 0 : f5, M5 = (y5 = AI(d5, u4, 654183, 0)) + S4 | 0, S4 = n4 + f5 | 0, S4 = y5 >>> 0 > M5 >>> 0 ? S4 + 1 | 0 : S4, f5 = AI(v5, D5, -997805, -1), y5 = n4 + S4 | 0, y5 = f5 >>> 0 > (M5 = f5 + M5 | 0) >>> 0 ? y5 + 1 | 0 : y5, f5 = AI(L5, P5, 136657, 0), y5 = n4 + y5 | 0, K5 = y5 = f5 >>> 0 > (U5 = f5 + M5 | 0) >>> 0 ? y5 + 1 | 0 : y5, O3 = f5 = y5 - ((U5 >>> 0 < 4293918720) - 1 | 0) | 0, y5 = k5, k5 = (2097151 & f5) << 11 | (r5 = U5 - -1048576 | 0) >>> 21, f5 = (f5 >> 21) + a5 | 0, z3 = a5 = (f5 = (S4 = y5 + k5 | 0) >>> 0 < k5 >>> 0 ? f5 + 1 | 0 : f5) - ((S4 >>> 0 < 4293918720) - 1 | 0) | 0, y5 = (y5 = a5 >> 21) + l3 | 0, V3 = k5 = (a5 = (2097151 & a5) << 11 | (M5 = S4 - -1048576 | 0) >>> 21) + x3 | 0, G5 = a5 >>> 0 > k5 >>> 0 ? y5 + 1 | 0 : y5, k5 = S4, S4 = f5, a5 = (s5 - (f5 = -2097152 & t5) | 0) + (t5 = (2097151 & H5) << 11 | N5 >>> 21) | 0, f5 = (J5 - ((f5 >>> 0 > s5 >>> 0) + b4 | 0) | 0) + (H5 >> 21) | 0, e4 = f5 = a5 >>> 0 < t5 >>> 0 ? f5 + 1 | 0 : f5, W3 = f5 = f5 - ((a5 >>> 0 < 4293918720) - 1 | 0) | 0, N5 = y5 = f5 >> 21, y5 = AI(R4 = (2097151 & f5) << 11 | (b4 = a5 - -1048576 | 0) >>> 21, y5, -683901, -1), S4 = n4 + S4 | 0, S4 = y5 >>> 0 > (f5 = y5 + k5 | 0) >>> 0 ? S4 + 1 | 0 : S4, j3 = f5 - (y5 = -2097152 & M5) | 0, m3 = S4 - ((y5 >>> 0 > f5 >>> 0) + z3 | 0) | 0, y5 = AI(R4, N5, 136657, 0), f5 = K5 + n4 | 0, z3 = (S4 = y5 + U5 | 0) - (y5 = -2097152 & r5) | 0, s5 = (f5 = S4 >>> 0 < U5 >>> 0 ? f5 + 1 | 0 : f5) - ((y5 >>> 0 > S4 >>> 0) + O3 | 0) | 0, f5 = AI(q3, E5, 666643, 0), S4 = n4, S4 = (y5 = (c4[A7 + 7 | 0] | c4[A7 + 8 | 0] << 8 | c4[A7 + 9 | 0] << 16 | c4[A7 + 10 | 0] << 24) >>> 7 & 2097151) >>> 0 > (f5 = y5 + f5 | 0) >>> 0 ? S4 + 1 | 0 : S4, k5 = (y5 = AI(d5, u4, 470296, 0)) + f5 | 0, f5 = n4 + S4 | 0, f5 = y5 >>> 0 > k5 >>> 0 ? f5 + 1 | 0 : f5, y5 = AI(v5, D5, 654183, 0), f5 = n4 + f5 | 0, f5 = y5 >>> 0 > (S4 = y5 + k5 | 0) >>> 0 ? f5 + 1 | 0 : f5, k5 = (y5 = S4) + (S4 = AI(L5, P5, -997805, -1)) | 0, y5 = n4 + f5 | 0, t5 = k5, k5 = S4 >>> 0 > k5 >>> 0 ? y5 + 1 | 0 : y5, K5 = AI(d5, u4, 666643, 0), y5 = 0, M5 = (f5 = c4[A7 + 6 | 0]) << 8 | (O3 = c4[A7 + 2 | 0] | c4[A7 + 3 | 0] << 8 | c4[A7 + 4 | 0] << 16 | c4[A7 + 5 | 0] << 24) >>> 24, f5 = 0, f5 = 2097151 & ((3 & (f5 |= S4 = y5)) << 30 | (y5 = (y5 = c4[A7 + 7 | 0]) << 16 | M5) >>> 2), y5 = n4, y5 = f5 >>> 0 > (S4 = f5 + K5 | 0) >>> 0 ? y5 + 1 | 0 : y5, M5 = (f5 = AI(v5, D5, 470296, 0)) + S4 | 0, S4 = n4 + y5 | 0, S4 = f5 >>> 0 > M5 >>> 0 ? S4 + 1 | 0 : S4, f5 = AI(L5, P5, 654183, 0), y5 = n4 + S4 | 0, K5 = y5 = f5 >>> 0 > (J5 = f5 + M5 | 0) >>> 0 ? y5 + 1 | 0 : y5, H5 = y5 = y5 - ((J5 >>> 0 < 4293918720) - 1 | 0) | 0, f5 = (S4 = y5 >> 21) + k5 | 0, U5 = y5 = (f5 = (y5 = (2097151 & y5) << 11 | (r5 = J5 - -1048576 | 0) >>> 21) >>> 0 > (M5 = y5 + t5 | 0) >>> 0 ? f5 + 1 | 0 : f5) - ((M5 >>> 0 < 4293918720) - 1 | 0) | 0, t5 = (2097151 & y5) << 11 | (k5 = M5 - -1048576 | 0) >>> 21, y5 = (y5 >> 21) + s5 | 0, z3 = d5 = t5 + z3 | 0, t5 = t5 >>> 0 > d5 >>> 0 ? y5 + 1 | 0 : y5, y5 = AI(R4, N5, -997805, -1), f5 = n4 + f5 | 0, f5 = y5 >>> 0 > (S4 = y5 + M5 | 0) >>> 0 ? f5 + 1 | 0 : f5, q3 = S4 - (y5 = -2097152 & k5) | 0, u4 = f5 - ((y5 >>> 0 > S4 >>> 0) + U5 | 0) | 0, f5 = AI(R4, N5, 654183, 0), y5 = K5 + n4 | 0, d5 = (S4 = f5 + J5 | 0) - (f5 = -2097152 & r5) | 0, s5 = (y5 = S4 >>> 0 < J5 >>> 0 ? y5 + 1 | 0 : y5) - ((f5 >>> 0 > S4 >>> 0) + H5 | 0) | 0, y5 = AI(v5, D5, 666643, 0), f5 = n4, f5 = y5 >>> 0 > (S4 = y5 + (O3 >>> 5 & 2097151) | 0) >>> 0 ? f5 + 1 | 0 : f5, y5 = AI(L5, P5, 470296, 0), f5 = n4 + f5 | 0, M5 = S4 = y5 + S4 | 0, S4 = y5 >>> 0 > S4 >>> 0 ? f5 + 1 | 0 : f5, k5 = AI(L5, P5, 666643, 0), f5 = (y5 = c4[A7 + 2 | 0]) << 16 & 2031616 | c4[0 | A7] | c4[A7 + 1 | 0] << 8, y5 = n4, K5 = y5 = f5 >>> 0 > (U5 = k5 + f5 | 0) >>> 0 ? y5 + 1 | 0 : y5, P5 = y5 = y5 - ((U5 >>> 0 < 4293918720) - 1 | 0) | 0, k5 = (2097151 & y5) << 11 | (r5 = U5 - -1048576 | 0) >>> 21, y5 = (y5 >> 21) + S4 | 0, S4 = y5 = k5 >>> 0 > (J5 = k5 + M5 | 0) >>> 0 ? y5 + 1 | 0 : y5, H5 = y5 = y5 - ((J5 >>> 0 < 4293918720) - 1 | 0) | 0, k5 = (2097151 & y5) << 11 | (M5 = J5 - -1048576 | 0) >>> 21, y5 = (y5 >> 21) + s5 | 0, k5 = k5 >>> 0 > (L5 = k5 + d5 | 0) >>> 0 ? y5 + 1 | 0 : y5, y5 = AI(R4, N5, 470296, 0), S4 = S4 + n4 | 0, S4 = (f5 = y5 + J5 | 0) >>> 0 < J5 >>> 0 ? S4 + 1 | 0 : S4, J5 = f5 - (y5 = -2097152 & M5) | 0, M5 = S4 - ((y5 >>> 0 > f5 >>> 0) + H5 | 0) | 0, f5 = AI(R4, N5, 666643, 0), y5 = n4 + (K5 - (((S4 = -2097152 & r5) >>> 0 > U5 >>> 0) + P5 | 0) | 0) | 0, f5 = (S4 = (y5 = f5 >>> 0 > (s5 = f5 + (U5 - S4 | 0) | 0) >>> 0 ? y5 + 1 | 0 : y5) >> 21) + M5 | 0, y5 = (y5 = (f5 = (y5 = (2097151 & y5) << 11 | s5 >>> 21) >>> 0 > (H5 = y5 + J5 | 0) >>> 0 ? f5 + 1 | 0 : f5) >> 21) + k5 | 0, f5 = (f5 = (y5 = (f5 = (2097151 & f5) << 11 | H5 >>> 21) >>> 0 > (N5 = f5 + L5 | 0) >>> 0 ? y5 + 1 | 0 : y5) >> 21) + u4 | 0, S4 = (y5 = (f5 = (y5 = (2097151 & y5) << 11 | N5 >>> 21) >>> 0 > (k5 = y5 + q3 | 0) >>> 0 ? f5 + 1 | 0 : f5) >> 21) + t5 | 0, y5 = (f5 = (S4 = (f5 = (2097151 & f5) << 11 | k5 >>> 21) >>> 0 > (U5 = f5 + z3 | 0) >>> 0 ? S4 + 1 | 0 : S4) >> 21) + m3 | 0, f5 = (S4 = (y5 = (S4 = (2097151 & S4) << 11 | U5 >>> 21) >>> 0 > (J5 = S4 + j3 | 0) >>> 0 ? y5 + 1 | 0 : y5) >> 21) + G5 | 0, G5 = M5 = (y5 = (2097151 & y5) << 11 | J5 >>> 21) + V3 | 0, y5 = (y5 = (f5 = y5 >>> 0 > M5 >>> 0 ? f5 + 1 | 0 : f5) >> 21) + T3 | 0, f5 = (f5 = (y5 = (f5 = (2097151 & f5) << 11 | M5 >>> 21) >>> 0 > (t5 = f5 + X3 | 0) >>> 0 ? y5 + 1 | 0 : y5) >> 21) + Y5 | 0, S4 = (y5 = (f5 = (y5 = (2097151 & y5) << 11 | t5 >>> 21) >>> 0 > (K5 = y5 + _3 | 0) >>> 0 ? f5 + 1 | 0 : f5) >> 21) + w5 | 0, y5 = (f5 = (S4 = (f5 = (2097151 & f5) << 11 | K5 >>> 21) >>> 0 > (r5 = f5 + h5 | 0) >>> 0 ? S4 + 1 | 0 : S4) >> 21) + p5 | 0, b4 = (Y5 = a5 - (f5 = -2097152 & b4) | 0) + ((2097151 & (y5 = (S4 = (2097151 & S4) << 11 | r5 >>> 21) >>> 0 > (M5 = S4 + o5 | 0) >>> 0 ? y5 + 1 | 0 : y5)) << 11 | M5 >>> 21) | 0, y5 = (e4 - ((f5 >>> 0 > a5 >>> 0) + W3 | 0) | 0) + (y5 >> 21) | 0, e4 = f5 = (y5 = Y5 >>> 0 > b4 >>> 0 ? y5 + 1 | 0 : y5) >> 21, s5 = (y5 = AI(p5 = (2097151 & y5) << 11 | b4 >>> 21, f5, 666643, 0)) + (f5 = 2097151 & s5) | 0, y5 = n4, a5 = y5 = f5 >>> 0 > s5 >>> 0 ? y5 + 1 | 0 : y5, C5[0 | A7] = s5, C5[A7 + 1 | 0] = (255 & y5) << 24 | s5 >>> 8, y5 = 2097151 & H5, f5 = AI(p5, e4, 470296, 0) + y5 | 0, S4 = n4, y5 = (a5 >> 21) + (y5 >>> 0 > f5 >>> 0 ? S4 + 1 | 0 : S4) | 0, y5 = (Y5 = (2097151 & a5) << 11 | s5 >>> 21) >>> 0 > (H5 = Y5 + f5 | 0) >>> 0 ? y5 + 1 | 0 : y5, C5[A7 + 4 | 0] = (2047 & y5) << 21 | H5 >>> 11, f5 = y5, S4 = H5, C5[A7 + 3 | 0] = (7 & y5) << 29 | S4 >>> 3, C5[A7 + 2 | 0] = 31 & ((65535 & a5) << 16 | s5 >>> 16) | S4 << 5, a5 = 2097151 & N5, N5 = AI(p5, e4, 654183, 0) + a5 | 0, y5 = n4, H5 = (2097151 & f5) << 11 | S4 >>> 21, f5 = (f5 >> 21) + (a5 = a5 >>> 0 > N5 >>> 0 ? y5 + 1 | 0 : y5) | 0, y5 = f5 = (N5 = H5 + N5 | 0) >>> 0 < H5 >>> 0 ? f5 + 1 | 0 : f5, C5[A7 + 6 | 0] = (63 & y5) << 26 | N5 >>> 6, a5 = N5, C5[A7 + 5 | 0] = a5 << 2 | (1572864 & S4) >>> 19, S4 = 2097151 & k5, k5 = AI(p5, e4, -997805, -1) + S4 | 0, f5 = n4, f5 = S4 >>> 0 > k5 >>> 0 ? f5 + 1 | 0 : f5, N5 = (2097151 & (S4 = y5)) << 11 | a5 >>> 21, S4 = (y5 >>= 21) + f5 | 0, S4 = (k5 = N5 + k5 | 0) >>> 0 < N5 >>> 0 ? S4 + 1 | 0 : S4, C5[A7 + 9 | 0] = (511 & S4) << 23 | k5 >>> 9, C5[A7 + 8 | 0] = (1 & S4) << 31 | k5 >>> 1, C5[A7 + 7 | 0] = k5 << 7 | (2080768 & a5) >>> 14, f5 = 2097151 & U5, a5 = AI(p5, e4, 136657, 0) + f5 | 0, y5 = n4, y5 = f5 >>> 0 > a5 >>> 0 ? y5 + 1 | 0 : y5, U5 = (2097151 & (f5 = S4)) << 11 | k5 >>> 21, f5 = y5 + (S4 = f5 >> 21) | 0, f5 = (a5 = U5 + a5 | 0) >>> 0 < U5 >>> 0 ? f5 + 1 | 0 : f5, C5[A7 + 12 | 0] = (4095 & f5) << 20 | a5 >>> 12, S4 = a5, C5[A7 + 11 | 0] = (15 & f5) << 28 | S4 >>> 4, C5[A7 + 10 | 0] = S4 << 4 | (1966080 & k5) >>> 17, a5 = 2097151 & J5, k5 = AI(p5, e4, -683901, -1) + a5 | 0, y5 = n4, y5 = a5 >>> 0 > k5 >>> 0 ? y5 + 1 | 0 : y5, a5 = f5, f5 = y5 + (f5 >>= 21) | 0, f5 = (a5 = (d5 = k5) + (k5 = (2097151 & a5) << 11 | S4 >>> 21) | 0) >>> 0 < k5 >>> 0 ? f5 + 1 | 0 : f5, C5[A7 + 14 | 0] = (127 & f5) << 25 | a5 >>> 7, C5[A7 + 13 | 0] = a5 << 1 | (1048576 & S4) >>> 20, y5 = f5 >> 21, S4 = (f5 = (2097151 & f5) << 11 | a5 >>> 21) >>> 0 > (k5 = f5 + (2097151 & G5) | 0) >>> 0 ? y5 + 1 | 0 : y5, C5[A7 + 17 | 0] = (1023 & S4) << 22 | k5 >>> 10, C5[A7 + 16 | 0] = (3 & S4) << 30 | k5 >>> 2, C5[A7 + 15 | 0] = k5 << 6 | (2064384 & a5) >>> 15, y5 = S4 >> 21, y5 = (f5 = (2097151 & S4) << 11 | k5 >>> 21) >>> 0 > (S4 = f5 + (2097151 & t5) | 0) >>> 0 ? y5 + 1 | 0 : y5, C5[A7 + 20 | 0] = (8191 & y5) << 19 | S4 >>> 13, C5[A7 + 19 | 0] = (31 & y5) << 27 | S4 >>> 5, a5 = (f5 = 2097151 & K5) + (K5 = (2097151 & y5) << 11 | S4 >>> 21) | 0, f5 = y5 >> 21, f5 = a5 >>> 0 < K5 >>> 0 ? f5 + 1 | 0 : f5, K5 = a5, C5[A7 + 21 | 0] = a5, C5[A7 + 18 | 0] = S4 << 3 | (1835008 & k5) >>> 18, C5[A7 + 22 | 0] = (255 & f5) << 24 | a5 >>> 8, S4 = f5 >> 21, S4 = (a5 = (k5 = (2097151 & f5) << 11 | a5 >>> 21) + (2097151 & r5) | 0) >>> 0 < k5 >>> 0 ? S4 + 1 | 0 : S4, C5[A7 + 25 | 0] = (2047 & S4) << 21 | a5 >>> 11, C5[A7 + 24 | 0] = (7 & S4) << 29 | a5 >>> 3, C5[A7 + 23 | 0] = 31 & ((65535 & f5) << 16 | K5 >>> 16) | a5 << 5, y5 = S4 >> 21, y5 = (f5 = (2097151 & S4) << 11 | a5 >>> 21) >>> 0 > (S4 = f5 + (2097151 & M5) | 0) >>> 0 ? y5 + 1 | 0 : y5, C5[A7 + 27 | 0] = (63 & y5) << 26 | S4 >>> 6, C5[A7 + 26 | 0] = S4 << 2 | (1572864 & a5) >>> 19, f5 = y5, y5 >>= 21, f5 = (a5 = (M5 = (2097151 & f5) << 11 | S4 >>> 21) + (k5 = 2097151 & b4) | 0) >>> 0 < k5 >>> 0 ? y5 + 1 | 0 : y5, C5[A7 + 31 | 0] = (131071 & f5) << 15 | a5 >>> 17, y5 = a5, C5[A7 + 30 | 0] = (511 & f5) << 23 | y5 >>> 9, C5[A7 + 28 | 0] = y5 << 7 | (2080768 & S4) >>> 14, C5[A7 + 29 | 0] = M5 + b4 >>> 1;
            }
            function N4(A7, I6, g6) {
              var C6, B5, Q5, i2, E5, D5, h5, w5, F5, y5, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, n5 = 0, t5 = 0, U5 = 0, J5 = 0, K5 = 0, e4 = 0;
              for (r4 = C6 = r4 - 800 | 0, a5 = c4[I6 + 4 | 0] | c4[I6 + 5 | 0] << 8 | c4[I6 + 6 | 0] << 16 | c4[I6 + 7 | 0] << 24, M5 = c4[I6 + 8 | 0] | c4[I6 + 9 | 0] << 8 | c4[I6 + 10 | 0] << 16 | c4[I6 + 11 | 0] << 24, n5 = c4[I6 + 12 | 0] | c4[I6 + 13 | 0] << 8 | c4[I6 + 14 | 0] << 16 | c4[I6 + 15 | 0] << 24, t5 = c4[I6 + 16 | 0] | c4[I6 + 17 | 0] << 8 | c4[I6 + 18 | 0] << 16 | c4[I6 + 19 | 0] << 24, U5 = c4[I6 + 20 | 0] | c4[I6 + 21 | 0] << 8 | c4[I6 + 22 | 0] << 16 | c4[I6 + 23 | 0] << 24, J5 = c4[I6 + 24 | 0] | c4[I6 + 25 | 0] << 8 | c4[I6 + 26 | 0] << 16 | c4[I6 + 27 | 0] << 24, K5 = c4[I6 + 28 | 0] | c4[I6 + 29 | 0] << 8 | c4[I6 + 30 | 0] << 16 | c4[I6 + 31 | 0] << 24, B5 = c4[A7 + 4 | 0] | c4[A7 + 5 | 0] << 8 | c4[A7 + 6 | 0] << 16 | c4[A7 + 7 | 0] << 24, Q5 = c4[A7 + 8 | 0] | c4[A7 + 9 | 0] << 8 | c4[A7 + 10 | 0] << 16 | c4[A7 + 11 | 0] << 24, i2 = c4[A7 + 12 | 0] | c4[A7 + 13 | 0] << 8 | c4[A7 + 14 | 0] << 16 | c4[A7 + 15 | 0] << 24, E5 = c4[A7 + 16 | 0] | c4[A7 + 17 | 0] << 8 | c4[A7 + 18 | 0] << 16 | c4[A7 + 19 | 0] << 24, D5 = c4[A7 + 20 | 0] | c4[A7 + 21 | 0] << 8 | c4[A7 + 22 | 0] << 16 | c4[A7 + 23 | 0] << 24, h5 = c4[A7 + 24 | 0] | c4[A7 + 25 | 0] << 8 | c4[A7 + 26 | 0] << 16 | c4[A7 + 27 | 0] << 24, w5 = c4[A7 + 28 | 0] | c4[A7 + 29 | 0] << 8 | c4[A7 + 30 | 0] << 16 | c4[A7 + 31 | 0] << 24, e4 = c4[0 | I6] | c4[I6 + 1 | 0] << 8 | c4[I6 + 2 | 0] << 16 | c4[I6 + 3 | 0] << 24, I6 = g6 - -64 | 0, F5 = c4[0 | A7] | c4[A7 + 1 | 0] << 8 | c4[A7 + 2 | 0] << 16 | c4[A7 + 3 | 0] << 24, o4[I6 >> 2] = 33620224 ^ F5, o4[g6 + 56 >> 2] = 1496785429, o4[g6 + 60 >> 2] = 1652156816, o4[g6 + 48 >> 2] = 33620224, o4[g6 + 52 >> 2] = 218629379, o4[g6 + 40 >> 2] = 1110511904, o4[g6 + 44 >> 2] = -584534669, o4[g6 + 32 >> 2] = 1427652059, o4[g6 + 36 >> 2] = -248528275, e4 ^= F5, o4[g6 >> 2] = e4, o4[g6 + 92 >> 2] = -584534669 ^ w5, o4[g6 + 88 >> 2] = 1110511904 ^ h5, o4[g6 + 84 >> 2] = -248528275 ^ D5, o4[g6 + 80 >> 2] = 1427652059 ^ E5, o4[g6 + 76 >> 2] = 1652156816 ^ i2, o4[g6 + 72 >> 2] = 1496785429 ^ Q5, o4[g6 + 68 >> 2] = 218629379 ^ B5, K5 ^= w5, o4[g6 + 28 >> 2] = K5, J5 ^= h5, o4[g6 + 24 >> 2] = J5, U5 ^= D5, o4[g6 + 20 >> 2] = U5, t5 ^= E5, o4[g6 + 16 >> 2] = t5, n5 ^= i2, o4[g6 + 12 >> 2] = n5, M5 ^= Q5, o4[g6 + 8 >> 2] = M5, y5 = a5 ^ B5, o4[g6 + 4 >> 2] = y5, a5 = 0; A7 = o4[g6 + 92 >> 2], o4[C6 + 792 >> 2] = o4[g6 + 88 >> 2], o4[C6 + 796 >> 2] = A7, A7 = o4[g6 + 84 >> 2], o4[C6 + 784 >> 2] = o4[g6 + 80 >> 2], o4[C6 + 788 >> 2] = A7, A7 = o4[I6 + 4 >> 2], o4[C6 + 752 >> 2] = o4[I6 >> 2], o4[C6 + 756 >> 2] = A7, A7 = o4[I6 + 12 >> 2], o4[C6 + 760 >> 2] = o4[I6 + 8 >> 2], o4[C6 + 764 >> 2] = A7, A7 = o4[g6 + 84 >> 2], o4[C6 + 736 >> 2] = o4[g6 + 80 >> 2], o4[C6 + 740 >> 2] = A7, A7 = o4[g6 + 92 >> 2], o4[C6 + 744 >> 2] = o4[g6 + 88 >> 2], o4[C6 + 748 >> 2] = A7, GA(A7 = C6 + 768 | 0, C6 + 752 | 0, C6 + 736 | 0), f5 = o4[C6 + 780 >> 2], o4[g6 + 88 >> 2] = o4[C6 + 776 >> 2], o4[g6 + 92 >> 2] = f5, f5 = o4[C6 + 772 >> 2], o4[g6 + 80 >> 2] = o4[C6 + 768 >> 2], o4[g6 + 84 >> 2] = f5, f5 = o4[g6 + 52 >> 2], o4[C6 + 720 >> 2] = o4[g6 + 48 >> 2], o4[C6 + 724 >> 2] = f5, f5 = o4[g6 + 60 >> 2], o4[C6 + 728 >> 2] = o4[g6 + 56 >> 2], o4[C6 + 732 >> 2] = f5, f5 = o4[I6 + 4 >> 2], o4[C6 + 704 >> 2] = o4[I6 >> 2], o4[C6 + 708 >> 2] = f5, f5 = o4[I6 + 12 >> 2], o4[C6 + 712 >> 2] = o4[I6 + 8 >> 2], o4[C6 + 716 >> 2] = f5, GA(A7, C6 + 720 | 0, C6 + 704 | 0), f5 = o4[C6 + 780 >> 2], o4[I6 + 8 >> 2] = o4[C6 + 776 >> 2], o4[I6 + 12 >> 2] = f5, f5 = o4[C6 + 772 >> 2], o4[I6 >> 2] = o4[C6 + 768 >> 2], o4[I6 + 4 >> 2] = f5, f5 = o4[g6 + 36 >> 2], o4[C6 + 688 >> 2] = o4[g6 + 32 >> 2], o4[C6 + 692 >> 2] = f5, f5 = o4[g6 + 44 >> 2], o4[C6 + 696 >> 2] = o4[g6 + 40 >> 2], o4[C6 + 700 >> 2] = f5, f5 = o4[g6 + 52 >> 2], o4[C6 + 672 >> 2] = o4[g6 + 48 >> 2], o4[C6 + 676 >> 2] = f5, f5 = o4[g6 + 60 >> 2], o4[C6 + 680 >> 2] = o4[g6 + 56 >> 2], o4[C6 + 684 >> 2] = f5, GA(A7, C6 + 688 | 0, C6 + 672 | 0), f5 = o4[C6 + 780 >> 2], o4[g6 + 56 >> 2] = o4[C6 + 776 >> 2], o4[g6 + 60 >> 2] = f5, f5 = o4[C6 + 772 >> 2], o4[g6 + 48 >> 2] = o4[C6 + 768 >> 2], o4[g6 + 52 >> 2] = f5, f5 = o4[g6 + 20 >> 2], o4[C6 + 656 >> 2] = o4[g6 + 16 >> 2], o4[C6 + 660 >> 2] = f5, f5 = o4[g6 + 28 >> 2], o4[C6 + 664 >> 2] = o4[g6 + 24 >> 2], o4[C6 + 668 >> 2] = f5, f5 = o4[g6 + 36 >> 2], o4[C6 + 640 >> 2] = o4[g6 + 32 >> 2], o4[C6 + 644 >> 2] = f5, f5 = o4[g6 + 44 >> 2], o4[C6 + 648 >> 2] = o4[g6 + 40 >> 2], o4[C6 + 652 >> 2] = f5, GA(A7, C6 + 656 | 0, C6 + 640 | 0), f5 = o4[C6 + 780 >> 2], o4[g6 + 40 >> 2] = o4[C6 + 776 >> 2], o4[g6 + 44 >> 2] = f5, f5 = o4[C6 + 772 >> 2], o4[g6 + 32 >> 2] = o4[C6 + 768 >> 2], o4[g6 + 36 >> 2] = f5, f5 = o4[g6 + 4 >> 2], o4[C6 + 624 >> 2] = o4[g6 >> 2], o4[C6 + 628 >> 2] = f5, f5 = o4[g6 + 12 >> 2], o4[C6 + 632 >> 2] = o4[g6 + 8 >> 2], o4[C6 + 636 >> 2] = f5, f5 = o4[g6 + 20 >> 2], o4[C6 + 608 >> 2] = o4[g6 + 16 >> 2], o4[C6 + 612 >> 2] = f5, f5 = o4[g6 + 28 >> 2], o4[C6 + 616 >> 2] = o4[g6 + 24 >> 2], o4[C6 + 620 >> 2] = f5, GA(A7, C6 + 624 | 0, C6 + 608 | 0), f5 = o4[C6 + 780 >> 2], o4[g6 + 24 >> 2] = o4[C6 + 776 >> 2], o4[g6 + 28 >> 2] = f5, f5 = o4[C6 + 772 >> 2], o4[g6 + 16 >> 2] = o4[C6 + 768 >> 2], o4[g6 + 20 >> 2] = f5, f5 = o4[C6 + 788 >> 2], o4[C6 + 592 >> 2] = o4[C6 + 784 >> 2], o4[C6 + 596 >> 2] = f5, f5 = o4[C6 + 796 >> 2], o4[C6 + 600 >> 2] = o4[C6 + 792 >> 2], o4[C6 + 604 >> 2] = f5, f5 = o4[g6 + 4 >> 2], o4[C6 + 576 >> 2] = o4[g6 >> 2], o4[C6 + 580 >> 2] = f5, f5 = o4[g6 + 12 >> 2], o4[C6 + 584 >> 2] = o4[g6 + 8 >> 2], o4[C6 + 588 >> 2] = f5, GA(A7, C6 + 592 | 0, C6 + 576 | 0), f5 = o4[C6 + 768 >> 2], S4 = o4[C6 + 772 >> 2], k5 = o4[C6 + 776 >> 2], o4[g6 + 12 >> 2] = o4[C6 + 780 >> 2] ^ i2, o4[g6 + 8 >> 2] = k5 ^ Q5, o4[g6 + 4 >> 2] = S4 ^ B5, o4[g6 >> 2] = f5 ^ F5, f5 = o4[g6 + 92 >> 2], o4[C6 + 792 >> 2] = o4[g6 + 88 >> 2], o4[C6 + 796 >> 2] = f5, f5 = o4[g6 + 84 >> 2], o4[C6 + 784 >> 2] = o4[g6 + 80 >> 2], o4[C6 + 788 >> 2] = f5, f5 = o4[I6 + 4 >> 2], o4[C6 + 560 >> 2] = o4[I6 >> 2], o4[C6 + 564 >> 2] = f5, f5 = o4[I6 + 12 >> 2], o4[C6 + 568 >> 2] = o4[I6 + 8 >> 2], o4[C6 + 572 >> 2] = f5, f5 = o4[g6 + 92 >> 2], o4[C6 + 552 >> 2] = o4[g6 + 88 >> 2], o4[C6 + 556 >> 2] = f5, f5 = o4[g6 + 84 >> 2], o4[C6 + 544 >> 2] = o4[g6 + 80 >> 2], o4[C6 + 548 >> 2] = f5, GA(A7, C6 + 560 | 0, C6 + 544 | 0), f5 = o4[C6 + 780 >> 2], o4[g6 + 88 >> 2] = o4[C6 + 776 >> 2], o4[g6 + 92 >> 2] = f5, f5 = o4[C6 + 772 >> 2], o4[g6 + 80 >> 2] = o4[C6 + 768 >> 2], o4[g6 + 84 >> 2] = f5, f5 = o4[g6 + 52 >> 2], o4[C6 + 528 >> 2] = o4[g6 + 48 >> 2], o4[C6 + 532 >> 2] = f5, f5 = o4[g6 + 60 >> 2], o4[C6 + 536 >> 2] = o4[g6 + 56 >> 2], o4[C6 + 540 >> 2] = f5, f5 = o4[I6 + 4 >> 2], o4[C6 + 512 >> 2] = o4[I6 >> 2], o4[C6 + 516 >> 2] = f5, f5 = o4[I6 + 12 >> 2], o4[C6 + 520 >> 2] = o4[I6 + 8 >> 2], o4[C6 + 524 >> 2] = f5, GA(A7, C6 + 528 | 0, C6 + 512 | 0), f5 = o4[C6 + 780 >> 2], o4[I6 + 8 >> 2] = o4[C6 + 776 >> 2], o4[I6 + 12 >> 2] = f5, f5 = o4[C6 + 772 >> 2], o4[I6 >> 2] = o4[C6 + 768 >> 2], o4[I6 + 4 >> 2] = f5, f5 = o4[g6 + 36 >> 2], o4[C6 + 496 >> 2] = o4[g6 + 32 >> 2], o4[C6 + 500 >> 2] = f5, f5 = o4[g6 + 44 >> 2], o4[C6 + 504 >> 2] = o4[g6 + 40 >> 2], o4[C6 + 508 >> 2] = f5, f5 = o4[g6 + 52 >> 2], o4[C6 + 480 >> 2] = o4[g6 + 48 >> 2], o4[C6 + 484 >> 2] = f5, f5 = o4[g6 + 60 >> 2], o4[C6 + 488 >> 2] = o4[g6 + 56 >> 2], o4[C6 + 492 >> 2] = f5, GA(A7, C6 + 496 | 0, C6 + 480 | 0), f5 = o4[C6 + 780 >> 2], o4[g6 + 56 >> 2] = o4[C6 + 776 >> 2], o4[g6 + 60 >> 2] = f5, f5 = o4[C6 + 772 >> 2], o4[g6 + 48 >> 2] = o4[C6 + 768 >> 2], o4[g6 + 52 >> 2] = f5, f5 = o4[g6 + 20 >> 2], o4[C6 + 464 >> 2] = o4[g6 + 16 >> 2], o4[C6 + 468 >> 2] = f5, f5 = o4[g6 + 28 >> 2], o4[C6 + 472 >> 2] = o4[g6 + 24 >> 2], o4[C6 + 476 >> 2] = f5, f5 = o4[g6 + 36 >> 2], o4[C6 + 448 >> 2] = o4[g6 + 32 >> 2], o4[C6 + 452 >> 2] = f5, f5 = o4[g6 + 44 >> 2], o4[C6 + 456 >> 2] = o4[g6 + 40 >> 2], o4[C6 + 460 >> 2] = f5, GA(A7, C6 + 464 | 0, C6 + 448 | 0), f5 = o4[C6 + 780 >> 2], o4[g6 + 40 >> 2] = o4[C6 + 776 >> 2], o4[g6 + 44 >> 2] = f5, f5 = o4[C6 + 772 >> 2], o4[g6 + 32 >> 2] = o4[C6 + 768 >> 2], o4[g6 + 36 >> 2] = f5, f5 = o4[g6 + 4 >> 2], o4[C6 + 432 >> 2] = o4[g6 >> 2], o4[C6 + 436 >> 2] = f5, f5 = o4[g6 + 12 >> 2], o4[C6 + 440 >> 2] = o4[g6 + 8 >> 2], o4[C6 + 444 >> 2] = f5, f5 = o4[g6 + 20 >> 2], o4[C6 + 416 >> 2] = o4[g6 + 16 >> 2], o4[C6 + 420 >> 2] = f5, f5 = o4[g6 + 28 >> 2], o4[C6 + 424 >> 2] = o4[g6 + 24 >> 2], o4[C6 + 428 >> 2] = f5, GA(A7, C6 + 432 | 0, C6 + 416 | 0), f5 = o4[C6 + 780 >> 2], o4[g6 + 24 >> 2] = o4[C6 + 776 >> 2], o4[g6 + 28 >> 2] = f5, f5 = o4[C6 + 772 >> 2], o4[g6 + 16 >> 2] = o4[C6 + 768 >> 2], o4[g6 + 20 >> 2] = f5, f5 = o4[C6 + 788 >> 2], o4[C6 + 400 >> 2] = o4[C6 + 784 >> 2], o4[C6 + 404 >> 2] = f5, f5 = o4[C6 + 796 >> 2], o4[C6 + 408 >> 2] = o4[C6 + 792 >> 2], o4[C6 + 412 >> 2] = f5, f5 = o4[g6 + 4 >> 2], o4[C6 + 384 >> 2] = o4[g6 >> 2], o4[C6 + 388 >> 2] = f5, f5 = o4[g6 + 12 >> 2], o4[C6 + 392 >> 2] = o4[g6 + 8 >> 2], o4[C6 + 396 >> 2] = f5, GA(A7, C6 + 400 | 0, C6 + 384 | 0), f5 = o4[C6 + 768 >> 2], S4 = o4[C6 + 772 >> 2], k5 = o4[C6 + 776 >> 2], o4[g6 + 12 >> 2] = o4[C6 + 780 >> 2] ^ w5, o4[g6 + 8 >> 2] = k5 ^ h5, o4[g6 + 4 >> 2] = S4 ^ D5, o4[g6 >> 2] = f5 ^ E5, f5 = o4[g6 + 92 >> 2], o4[C6 + 792 >> 2] = o4[g6 + 88 >> 2], o4[C6 + 796 >> 2] = f5, f5 = o4[g6 + 84 >> 2], o4[C6 + 784 >> 2] = o4[g6 + 80 >> 2], o4[C6 + 788 >> 2] = f5, f5 = o4[I6 + 4 >> 2], o4[C6 + 368 >> 2] = o4[I6 >> 2], o4[C6 + 372 >> 2] = f5, f5 = o4[I6 + 12 >> 2], o4[C6 + 376 >> 2] = o4[I6 + 8 >> 2], o4[C6 + 380 >> 2] = f5, f5 = o4[g6 + 92 >> 2], o4[C6 + 360 >> 2] = o4[g6 + 88 >> 2], o4[C6 + 364 >> 2] = f5, f5 = o4[g6 + 84 >> 2], o4[C6 + 352 >> 2] = o4[g6 + 80 >> 2], o4[C6 + 356 >> 2] = f5, GA(A7, C6 + 368 | 0, C6 + 352 | 0), f5 = o4[C6 + 780 >> 2], o4[g6 + 88 >> 2] = o4[C6 + 776 >> 2], o4[g6 + 92 >> 2] = f5, f5 = o4[C6 + 772 >> 2], o4[g6 + 80 >> 2] = o4[C6 + 768 >> 2], o4[g6 + 84 >> 2] = f5, f5 = o4[g6 + 52 >> 2], o4[C6 + 336 >> 2] = o4[g6 + 48 >> 2], o4[C6 + 340 >> 2] = f5, f5 = o4[g6 + 60 >> 2], o4[C6 + 344 >> 2] = o4[g6 + 56 >> 2], o4[C6 + 348 >> 2] = f5, f5 = o4[I6 + 4 >> 2], o4[C6 + 320 >> 2] = o4[I6 >> 2], o4[C6 + 324 >> 2] = f5, f5 = o4[I6 + 12 >> 2], o4[C6 + 328 >> 2] = o4[I6 + 8 >> 2], o4[C6 + 332 >> 2] = f5, GA(A7, C6 + 336 | 0, C6 + 320 | 0), f5 = o4[C6 + 780 >> 2], o4[I6 + 8 >> 2] = o4[C6 + 776 >> 2], o4[I6 + 12 >> 2] = f5, f5 = o4[C6 + 772 >> 2], o4[I6 >> 2] = o4[C6 + 768 >> 2], o4[I6 + 4 >> 2] = f5, f5 = o4[g6 + 36 >> 2], o4[C6 + 304 >> 2] = o4[g6 + 32 >> 2], o4[C6 + 308 >> 2] = f5, f5 = o4[g6 + 44 >> 2], o4[C6 + 312 >> 2] = o4[g6 + 40 >> 2], o4[C6 + 316 >> 2] = f5, f5 = o4[g6 + 52 >> 2], o4[C6 + 288 >> 2] = o4[g6 + 48 >> 2], o4[C6 + 292 >> 2] = f5, f5 = o4[g6 + 60 >> 2], o4[C6 + 296 >> 2] = o4[g6 + 56 >> 2], o4[C6 + 300 >> 2] = f5, GA(A7, C6 + 304 | 0, C6 + 288 | 0), f5 = o4[C6 + 780 >> 2], o4[g6 + 56 >> 2] = o4[C6 + 776 >> 2], o4[g6 + 60 >> 2] = f5, f5 = o4[C6 + 772 >> 2], o4[g6 + 48 >> 2] = o4[C6 + 768 >> 2], o4[g6 + 52 >> 2] = f5, f5 = o4[g6 + 20 >> 2], o4[C6 + 272 >> 2] = o4[g6 + 16 >> 2], o4[C6 + 276 >> 2] = f5, f5 = o4[g6 + 28 >> 2], o4[C6 + 280 >> 2] = o4[g6 + 24 >> 2], o4[C6 + 284 >> 2] = f5, f5 = o4[g6 + 36 >> 2], o4[C6 + 256 >> 2] = o4[g6 + 32 >> 2], o4[C6 + 260 >> 2] = f5, f5 = o4[g6 + 44 >> 2], o4[C6 + 264 >> 2] = o4[g6 + 40 >> 2], o4[C6 + 268 >> 2] = f5, GA(A7, C6 + 272 | 0, C6 + 256 | 0), f5 = o4[C6 + 780 >> 2], o4[g6 + 40 >> 2] = o4[C6 + 776 >> 2], o4[g6 + 44 >> 2] = f5, f5 = o4[C6 + 772 >> 2], o4[g6 + 32 >> 2] = o4[C6 + 768 >> 2], o4[g6 + 36 >> 2] = f5, f5 = o4[g6 + 4 >> 2], o4[C6 + 240 >> 2] = o4[g6 >> 2], o4[C6 + 244 >> 2] = f5, f5 = o4[g6 + 12 >> 2], o4[C6 + 248 >> 2] = o4[g6 + 8 >> 2], o4[C6 + 252 >> 2] = f5, f5 = o4[g6 + 20 >> 2], o4[C6 + 224 >> 2] = o4[g6 + 16 >> 2], o4[C6 + 228 >> 2] = f5, f5 = o4[g6 + 28 >> 2], o4[C6 + 232 >> 2] = o4[g6 + 24 >> 2], o4[C6 + 236 >> 2] = f5, GA(A7, C6 + 240 | 0, C6 + 224 | 0), f5 = o4[C6 + 780 >> 2], o4[g6 + 24 >> 2] = o4[C6 + 776 >> 2], o4[g6 + 28 >> 2] = f5, f5 = o4[C6 + 772 >> 2], o4[g6 + 16 >> 2] = o4[C6 + 768 >> 2], o4[g6 + 20 >> 2] = f5, f5 = o4[C6 + 788 >> 2], o4[C6 + 208 >> 2] = o4[C6 + 784 >> 2], o4[C6 + 212 >> 2] = f5, f5 = o4[C6 + 796 >> 2], o4[C6 + 216 >> 2] = o4[C6 + 792 >> 2], o4[C6 + 220 >> 2] = f5, f5 = o4[g6 + 4 >> 2], o4[C6 + 192 >> 2] = o4[g6 >> 2], o4[C6 + 196 >> 2] = f5, f5 = o4[g6 + 12 >> 2], o4[C6 + 200 >> 2] = o4[g6 + 8 >> 2], o4[C6 + 204 >> 2] = f5, GA(A7, C6 + 208 | 0, C6 + 192 | 0), f5 = o4[C6 + 768 >> 2], S4 = o4[C6 + 772 >> 2], k5 = o4[C6 + 776 >> 2], o4[g6 + 12 >> 2] = n5 ^ o4[C6 + 780 >> 2], o4[g6 + 8 >> 2] = k5 ^ M5, o4[g6 + 4 >> 2] = S4 ^ y5, o4[g6 >> 2] = f5 ^ e4, f5 = o4[g6 + 92 >> 2], o4[C6 + 792 >> 2] = o4[g6 + 88 >> 2], o4[C6 + 796 >> 2] = f5, f5 = o4[g6 + 84 >> 2], o4[C6 + 784 >> 2] = o4[g6 + 80 >> 2], o4[C6 + 788 >> 2] = f5, f5 = o4[I6 + 4 >> 2], o4[C6 + 176 >> 2] = o4[I6 >> 2], o4[C6 + 180 >> 2] = f5, f5 = o4[I6 + 12 >> 2], o4[C6 + 184 >> 2] = o4[I6 + 8 >> 2], o4[C6 + 188 >> 2] = f5, f5 = o4[g6 + 92 >> 2], o4[C6 + 168 >> 2] = o4[g6 + 88 >> 2], o4[C6 + 172 >> 2] = f5, f5 = o4[g6 + 84 >> 2], o4[C6 + 160 >> 2] = o4[g6 + 80 >> 2], o4[C6 + 164 >> 2] = f5, GA(A7, C6 + 176 | 0, C6 + 160 | 0), f5 = o4[C6 + 780 >> 2], o4[g6 + 88 >> 2] = o4[C6 + 776 >> 2], o4[g6 + 92 >> 2] = f5, f5 = o4[C6 + 772 >> 2], o4[g6 + 80 >> 2] = o4[C6 + 768 >> 2], o4[g6 + 84 >> 2] = f5, f5 = o4[g6 + 52 >> 2], o4[C6 + 144 >> 2] = o4[g6 + 48 >> 2], o4[C6 + 148 >> 2] = f5, f5 = o4[g6 + 60 >> 2], o4[C6 + 152 >> 2] = o4[g6 + 56 >> 2], o4[C6 + 156 >> 2] = f5, f5 = o4[I6 + 4 >> 2], o4[C6 + 128 >> 2] = o4[I6 >> 2], o4[C6 + 132 >> 2] = f5, f5 = o4[I6 + 12 >> 2], o4[C6 + 136 >> 2] = o4[I6 + 8 >> 2], o4[C6 + 140 >> 2] = f5, GA(A7, C6 + 144 | 0, C6 + 128 | 0), f5 = o4[C6 + 780 >> 2], o4[I6 + 8 >> 2] = o4[C6 + 776 >> 2], o4[I6 + 12 >> 2] = f5, f5 = o4[C6 + 772 >> 2], o4[I6 >> 2] = o4[C6 + 768 >> 2], o4[I6 + 4 >> 2] = f5, f5 = o4[g6 + 36 >> 2], o4[C6 + 112 >> 2] = o4[g6 + 32 >> 2], o4[C6 + 116 >> 2] = f5, f5 = o4[g6 + 44 >> 2], o4[C6 + 120 >> 2] = o4[g6 + 40 >> 2], o4[C6 + 124 >> 2] = f5, f5 = o4[g6 + 52 >> 2], o4[C6 + 96 >> 2] = o4[g6 + 48 >> 2], o4[C6 + 100 >> 2] = f5, f5 = o4[g6 + 60 >> 2], o4[C6 + 104 >> 2] = o4[g6 + 56 >> 2], o4[C6 + 108 >> 2] = f5, GA(A7, C6 + 112 | 0, C6 + 96 | 0), f5 = o4[C6 + 780 >> 2], o4[g6 + 56 >> 2] = o4[C6 + 776 >> 2], o4[g6 + 60 >> 2] = f5, f5 = o4[C6 + 772 >> 2], o4[g6 + 48 >> 2] = o4[C6 + 768 >> 2], o4[g6 + 52 >> 2] = f5, f5 = o4[g6 + 20 >> 2], o4[C6 + 80 >> 2] = o4[g6 + 16 >> 2], o4[C6 + 84 >> 2] = f5, f5 = o4[g6 + 28 >> 2], o4[C6 + 88 >> 2] = o4[g6 + 24 >> 2], o4[C6 + 92 >> 2] = f5, f5 = o4[g6 + 36 >> 2], o4[C6 + 64 >> 2] = o4[g6 + 32 >> 2], o4[C6 + 68 >> 2] = f5, f5 = o4[g6 + 44 >> 2], o4[C6 + 72 >> 2] = o4[g6 + 40 >> 2], o4[C6 + 76 >> 2] = f5, GA(A7, C6 + 80 | 0, C6 - -64 | 0), f5 = o4[C6 + 780 >> 2], o4[g6 + 40 >> 2] = o4[C6 + 776 >> 2], o4[g6 + 44 >> 2] = f5, f5 = o4[C6 + 772 >> 2], o4[g6 + 32 >> 2] = o4[C6 + 768 >> 2], o4[g6 + 36 >> 2] = f5, f5 = o4[g6 + 4 >> 2], o4[C6 + 48 >> 2] = o4[g6 >> 2], o4[C6 + 52 >> 2] = f5, f5 = o4[g6 + 12 >> 2], o4[C6 + 56 >> 2] = o4[g6 + 8 >> 2], o4[C6 + 60 >> 2] = f5, f5 = o4[g6 + 20 >> 2], o4[C6 + 32 >> 2] = o4[g6 + 16 >> 2], o4[C6 + 36 >> 2] = f5, f5 = o4[g6 + 28 >> 2], o4[C6 + 40 >> 2] = o4[g6 + 24 >> 2], o4[C6 + 44 >> 2] = f5, GA(A7, C6 + 48 | 0, C6 + 32 | 0), f5 = o4[C6 + 780 >> 2], o4[g6 + 24 >> 2] = o4[C6 + 776 >> 2], o4[g6 + 28 >> 2] = f5, f5 = o4[C6 + 772 >> 2], o4[g6 + 16 >> 2] = o4[C6 + 768 >> 2], o4[g6 + 20 >> 2] = f5, f5 = o4[C6 + 788 >> 2], o4[C6 + 16 >> 2] = o4[C6 + 784 >> 2], o4[C6 + 20 >> 2] = f5, f5 = o4[C6 + 796 >> 2], o4[C6 + 24 >> 2] = o4[C6 + 792 >> 2], o4[C6 + 28 >> 2] = f5, f5 = o4[g6 + 4 >> 2], o4[C6 >> 2] = o4[g6 >> 2], o4[C6 + 4 >> 2] = f5, f5 = o4[g6 + 12 >> 2], o4[C6 + 8 >> 2] = o4[g6 + 8 >> 2], o4[C6 + 12 >> 2] = f5, GA(A7, C6 + 16 | 0, C6), A7 = o4[C6 + 768 >> 2], f5 = o4[C6 + 772 >> 2], S4 = o4[C6 + 776 >> 2], o4[g6 + 12 >> 2] = K5 ^ o4[C6 + 780 >> 2], o4[g6 + 8 >> 2] = S4 ^ J5, o4[g6 + 4 >> 2] = f5 ^ U5, o4[g6 >> 2] = A7 ^ t5, 4 != (0 | (a5 = a5 + 1 | 0)); ) ;
              r4 = C6 + 800 | 0;
            }
            function G4(A7, I6, g6, B5, Q5, i2) {
              var E5, D5 = 0, h5 = 0, w5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, n5 = 0, t5 = 0, U5 = 0, J5 = 0, K5 = 0, e4 = 0, N5 = 0, G5 = 0, p5 = 0, L5 = 0, d5 = 0, P5 = 0, R4 = 0, b4 = 0, v5 = 0, u4 = 0, z3 = 0, O3 = 0, q3 = 0, x3 = 0, V3 = 0, j3 = 0, l3 = 0, _3 = 0, X3 = 0, T3 = 0, IA2 = 0, gA2 = 0, BA2 = 0;
              for (r4 = E5 = r4 - 592 | 0, e4 = -1, h5 = A7 + 32 | 0, J5 = 32, f5 = 1; k5 = c4[2656 + (y5 = J5 - 1 | 0) | 0], a5 |= (y5 = ((w5 = c4[h5 + y5 | 0]) ^ k5) - 1 >> 8 & f5) & (M5 = c4[h5 + (J5 = J5 - 2 | 0) | 0]) - (S4 = c4[J5 + 2656 | 0]) >> 8 | w5 - k5 >> 8 & f5, f5 = y5 & (S4 ^ M5) - 1 >> 8, J5; ) ;
              if (a5 && !(qA(A7) | !(~((127 & ~c4[Q5 + 31 | 0] | c4[Q5 + 1 | 0] & c4[Q5 + 2 | 0] & c4[Q5 + 3 | 0] & c4[Q5 + 4 | 0] & c4[Q5 + 5 | 0] & c4[Q5 + 6 | 0] & c4[Q5 + 7 | 0] & c4[Q5 + 8 | 0] & c4[Q5 + 9 | 0] & c4[Q5 + 10 | 0] & c4[Q5 + 11 | 0] & c4[Q5 + 12 | 0] & c4[Q5 + 13 | 0] & c4[Q5 + 14 | 0] & c4[Q5 + 15 | 0] & c4[Q5 + 16 | 0] & c4[Q5 + 17 | 0] & c4[Q5 + 18 | 0] & c4[Q5 + 19 | 0] & c4[Q5 + 20 | 0] & c4[Q5 + 21 | 0] & c4[Q5 + 22 | 0] & c4[Q5 + 23 | 0] & c4[Q5 + 24 | 0] & c4[Q5 + 25 | 0] & c4[Q5 + 26 | 0] & c4[Q5 + 27 | 0] & c4[Q5 + 28 | 0] & c4[Q5 + 30 | 0] & c4[Q5 + 29 | 0] ^ 255) - 1 & 236 - c4[0 | Q5]) >>> 8 & 1) || qA(Q5) || m2(f5 = E5 + 128 | 0, Q5))) {
                for (uA(y5 = E5 + 384 | 0), i2 && CA(y5, 39744, 34, 0), CA(y5, A7, 32, 0), CA(y5, Q5, 32, 0), CA(y5, I6, g6, B5), W2(y5, B5 = E5 + 320 | 0), Y4(B5), y5 = E5 + 8 | 0, g6 = h5, Q5 = 0, I6 = 0, r4 = D5 = r4 - 2272 | 0; i2 = D5 + 2016 | 0, h5 = c4[B5 + (Q5 >>> 3 | 0) | 0], C5[i2 + Q5 | 0] = h5 >>> (6 & Q5) & 1, C5[(w5 = i2) + (i2 = 1 | Q5) | 0] = h5 >>> (7 & i2) & 1, 256 != (0 | (Q5 = Q5 + 2 | 0)); ) ;
                for (i2 = 254; ; ) {
                  I6 = (B5 = I6) + 1 | 0;
                  A: if (!(!c4[0 | (k5 = (Q5 = D5 + 2016 | 0) + B5 | 0)] | B5 >>> 0 > 254)) {
                    I: if (Q5 = C5[0 | (S4 = I6 + Q5 | 0)]) if ((0 | (Q5 = (w5 = Q5 << 1) + (h5 = C5[0 | k5]) | 0)) <= 15) C5[0 | k5] = Q5, C5[0 | S4] = 0;
                    else {
                      if ((0 | (Q5 = h5 - w5 | 0)) < -15) break A;
                      for (C5[0 | k5] = Q5, Q5 = I6; ; ) {
                        if (!c4[0 | (h5 = (D5 + 2016 | 0) + Q5 | 0)]) {
                          C5[0 | h5] = 1;
                          break I;
                        }
                        if (C5[0 | h5] = 0, 256 == (0 | (Q5 = Q5 + 1 | 0))) break;
                      }
                    }
                    if (i2) {
                      I: if (h5 = C5[0 | (M5 = (Q5 = B5 + 2 | 0) + (D5 + 2016 | 0) | 0)]) if ((0 | (h5 = (S4 = h5 << 2) + (w5 = C5[0 | k5]) | 0)) >= 16) {
                        if ((0 | (h5 = w5 - S4 | 0)) < -15) break A;
                        for (C5[0 | k5] = h5; ; ) {
                          if (c4[0 | (h5 = (D5 + 2016 | 0) + Q5 | 0)]) {
                            if (C5[0 | h5] = 0, 256 != (0 | (Q5 = Q5 + 1 | 0))) continue;
                            break I;
                          }
                          break;
                        }
                        C5[0 | h5] = 1;
                      } else C5[0 | k5] = h5, C5[0 | M5] = 0;
                      if (2 != (0 | (a5 = (i2 >>> 0 >= 5 ? 5 : i2) + 1 | 0))) {
                        I: if (h5 = C5[0 | (M5 = (Q5 = B5 + 3 | 0) + (D5 + 2016 | 0) | 0)]) if ((0 | (h5 = (S4 = h5 << 3) + (w5 = C5[0 | k5]) | 0)) >= 16) {
                          if ((0 | (h5 = w5 - S4 | 0)) < -15) break A;
                          for (C5[0 | k5] = h5; ; ) {
                            if (c4[0 | (h5 = (D5 + 2016 | 0) + Q5 | 0)]) {
                              if (C5[0 | h5] = 0, 256 != (0 | (Q5 = Q5 + 1 | 0))) continue;
                              break I;
                            }
                            break;
                          }
                          C5[0 | h5] = 1;
                        } else C5[0 | k5] = h5, C5[0 | M5] = 0;
                        if (3 != (0 | a5)) {
                          I: if (h5 = C5[0 | (M5 = (Q5 = B5 + 4 | 0) + (D5 + 2016 | 0) | 0)]) if ((0 | (h5 = (S4 = h5 << 4) + (w5 = C5[0 | k5]) | 0)) >= 16) {
                            if ((0 | (h5 = w5 - S4 | 0)) < -15) break A;
                            for (C5[0 | k5] = h5; ; ) {
                              if (c4[0 | (h5 = (D5 + 2016 | 0) + Q5 | 0)]) {
                                if (C5[0 | h5] = 0, 256 != (0 | (Q5 = Q5 + 1 | 0))) continue;
                                break I;
                              }
                              break;
                            }
                            C5[0 | h5] = 1;
                          } else C5[0 | k5] = h5, C5[0 | M5] = 0;
                          if (4 != (0 | a5)) {
                            I: if (h5 = C5[0 | (M5 = (Q5 = B5 + 5 | 0) + (D5 + 2016 | 0) | 0)]) if ((0 | (h5 = (S4 = h5 << 5) + (w5 = C5[0 | k5]) | 0)) >= 16) {
                              if ((0 | (h5 = w5 - S4 | 0)) < -15) break A;
                              for (C5[0 | k5] = h5; ; ) {
                                if (c4[0 | (h5 = (D5 + 2016 | 0) + Q5 | 0)]) {
                                  if (C5[0 | h5] = 0, 256 != (0 | (Q5 = Q5 + 1 | 0))) continue;
                                  break I;
                                }
                                break;
                              }
                              C5[0 | h5] = 1;
                            } else C5[0 | k5] = h5, C5[0 | M5] = 0;
                            if (5 != (0 | a5) && (B5 = C5[0 | (S4 = (Q5 = B5 + 6 | 0) + (D5 + 2016 | 0) | 0)])) if ((0 | (B5 = (w5 = B5 << 6) + (h5 = C5[0 | k5]) | 0)) >= 16) {
                              if ((0 | (B5 = h5 - w5 | 0)) < -15) break A;
                              for (C5[0 | k5] = B5; ; ) {
                                if (c4[0 | (B5 = (D5 + 2016 | 0) + Q5 | 0)]) {
                                  if (C5[0 | B5] = 0, 256 != (0 | (Q5 = Q5 + 1 | 0))) continue;
                                  break A;
                                }
                                break;
                              }
                              C5[0 | B5] = 1;
                            } else C5[0 | k5] = B5, C5[0 | S4] = 0;
                          }
                        }
                      }
                    }
                  }
                  if (i2 = i2 - 1 | 0, 256 == (0 | I6)) break;
                }
                for (Q5 = 0; I6 = D5 + 1760 | 0, B5 = c4[g6 + (Q5 >>> 3 | 0) | 0], C5[I6 + Q5 | 0] = B5 >>> (6 & Q5) & 1, C5[(i2 = I6) + (I6 = 1 | Q5) | 0] = B5 >>> (7 & I6) & 1, 256 != (0 | (Q5 = Q5 + 2 | 0)); ) ;
                for (I6 = 0, i2 = 254; ; ) {
                  g6 = I6, I6 = I6 + 1 | 0;
                  A: if (!(!c4[0 | (a5 = (B5 = D5 + 1760 | 0) + g6 | 0)] | g6 >>> 0 > 254)) {
                    I: if (B5 = C5[0 | (w5 = I6 + B5 | 0)]) if ((0 | (B5 = (h5 = B5 << 1) + (Q5 = C5[0 | a5]) | 0)) <= 15) C5[0 | a5] = B5, C5[0 | w5] = 0;
                    else {
                      if ((0 | (B5 = Q5 - h5 | 0)) < -15) break A;
                      for (C5[0 | a5] = B5, Q5 = I6; ; ) {
                        if (!c4[0 | (B5 = (D5 + 1760 | 0) + Q5 | 0)]) {
                          C5[0 | B5] = 1;
                          break I;
                        }
                        if (C5[0 | B5] = 0, 256 == (0 | (Q5 = Q5 + 1 | 0))) break;
                      }
                    }
                    if (i2) {
                      I: if (B5 = C5[0 | (S4 = (Q5 = g6 + 2 | 0) + (D5 + 1760 | 0) | 0)]) if ((0 | (B5 = (w5 = B5 << 2) + (h5 = C5[0 | a5]) | 0)) >= 16) {
                        if ((0 | (B5 = h5 - w5 | 0)) < -15) break A;
                        for (C5[0 | a5] = B5; ; ) {
                          if (c4[0 | (B5 = (D5 + 1760 | 0) + Q5 | 0)]) {
                            if (C5[0 | B5] = 0, 256 != (0 | (Q5 = Q5 + 1 | 0))) continue;
                            break I;
                          }
                          break;
                        }
                        C5[0 | B5] = 1;
                      } else C5[0 | a5] = B5, C5[0 | S4] = 0;
                      if (2 != (0 | (M5 = (i2 >>> 0 >= 5 ? 5 : i2) + 1 | 0))) {
                        I: if (B5 = C5[0 | (S4 = (Q5 = g6 + 3 | 0) + (D5 + 1760 | 0) | 0)]) if ((0 | (B5 = (w5 = B5 << 3) + (h5 = C5[0 | a5]) | 0)) >= 16) {
                          if ((0 | (B5 = h5 - w5 | 0)) < -15) break A;
                          for (C5[0 | a5] = B5; ; ) {
                            if (c4[0 | (B5 = (D5 + 1760 | 0) + Q5 | 0)]) {
                              if (C5[0 | B5] = 0, 256 != (0 | (Q5 = Q5 + 1 | 0))) continue;
                              break I;
                            }
                            break;
                          }
                          C5[0 | B5] = 1;
                        } else C5[0 | a5] = B5, C5[0 | S4] = 0;
                        if (3 != (0 | M5)) {
                          I: if (B5 = C5[0 | (S4 = (Q5 = g6 + 4 | 0) + (D5 + 1760 | 0) | 0)]) if ((0 | (B5 = (w5 = B5 << 4) + (h5 = C5[0 | a5]) | 0)) >= 16) {
                            if ((0 | (B5 = h5 - w5 | 0)) < -15) break A;
                            for (C5[0 | a5] = B5; ; ) {
                              if (c4[0 | (B5 = (D5 + 1760 | 0) + Q5 | 0)]) {
                                if (C5[0 | B5] = 0, 256 != (0 | (Q5 = Q5 + 1 | 0))) continue;
                                break I;
                              }
                              break;
                            }
                            C5[0 | B5] = 1;
                          } else C5[0 | a5] = B5, C5[0 | S4] = 0;
                          if (4 != (0 | M5)) {
                            I: if (B5 = C5[0 | (S4 = (Q5 = g6 + 5 | 0) + (D5 + 1760 | 0) | 0)]) if ((0 | (B5 = (w5 = B5 << 5) + (h5 = C5[0 | a5]) | 0)) >= 16) {
                              if ((0 | (B5 = h5 - w5 | 0)) < -15) break A;
                              for (C5[0 | a5] = B5; ; ) {
                                if (c4[0 | (B5 = (D5 + 1760 | 0) + Q5 | 0)]) {
                                  if (C5[0 | B5] = 0, 256 != (0 | (Q5 = Q5 + 1 | 0))) continue;
                                  break I;
                                }
                                break;
                              }
                              C5[0 | B5] = 1;
                            } else C5[0 | a5] = B5, C5[0 | S4] = 0;
                            if (5 != (0 | M5) && (g6 = C5[0 | (w5 = (Q5 = g6 + 6 | 0) + (D5 + 1760 | 0) | 0)])) if ((0 | (g6 = (h5 = g6 << 6) + (B5 = C5[0 | a5]) | 0)) >= 16) {
                              if ((0 | (g6 = B5 - h5 | 0)) < -15) break A;
                              for (C5[0 | a5] = g6; ; ) {
                                if (c4[0 | (g6 = (D5 + 1760 | 0) + Q5 | 0)]) {
                                  if (C5[0 | g6] = 0, 256 != (0 | (Q5 = Q5 + 1 | 0))) continue;
                                  break A;
                                }
                                break;
                              }
                              C5[0 | g6] = 1;
                            } else C5[0 | a5] = g6, C5[0 | w5] = 0;
                          }
                        }
                      }
                    }
                  }
                  if (i2 = i2 - 1 | 0, 256 == (0 | I6)) break;
                }
                for (kA(B5 = D5 + 480 | 0, f5), I6 = o4[f5 + 36 >> 2], o4[D5 + 192 >> 2] = o4[f5 + 32 >> 2], o4[D5 + 196 >> 2] = I6, I6 = o4[f5 + 28 >> 2], o4[D5 + 184 >> 2] = o4[f5 + 24 >> 2], o4[D5 + 188 >> 2] = I6, I6 = o4[f5 + 20 >> 2], o4[D5 + 176 >> 2] = o4[f5 + 16 >> 2], o4[D5 + 180 >> 2] = I6, I6 = o4[f5 + 12 >> 2], o4[D5 + 168 >> 2] = o4[f5 + 8 >> 2], o4[D5 + 172 >> 2] = I6, I6 = o4[f5 + 4 >> 2], o4[D5 + 160 >> 2] = o4[f5 >> 2], o4[D5 + 164 >> 2] = I6, I6 = o4[f5 + 44 >> 2], o4[D5 + 200 >> 2] = o4[f5 + 40 >> 2], o4[D5 + 204 >> 2] = I6, I6 = o4[f5 + 52 >> 2], o4[D5 + 208 >> 2] = o4[f5 + 48 >> 2], o4[D5 + 212 >> 2] = I6, I6 = o4[f5 + 60 >> 2], o4[D5 + 216 >> 2] = o4[f5 + 56 >> 2], o4[D5 + 220 >> 2] = I6, I6 = o4[4 + (g6 = f5 - -64 | 0) >> 2], o4[D5 + 224 >> 2] = o4[g6 >> 2], o4[D5 + 228 >> 2] = I6, I6 = o4[f5 + 76 >> 2], o4[D5 + 232 >> 2] = o4[f5 + 72 >> 2], o4[D5 + 236 >> 2] = I6, I6 = o4[f5 + 84 >> 2], o4[D5 + 240 >> 2] = o4[f5 + 80 >> 2], o4[D5 + 244 >> 2] = I6, I6 = o4[f5 + 92 >> 2], o4[D5 + 248 >> 2] = o4[f5 + 88 >> 2], o4[D5 + 252 >> 2] = I6, I6 = o4[f5 + 100 >> 2], o4[D5 + 256 >> 2] = o4[f5 + 96 >> 2], o4[D5 + 260 >> 2] = I6, I6 = o4[f5 + 108 >> 2], o4[D5 + 264 >> 2] = o4[f5 + 104 >> 2], o4[D5 + 268 >> 2] = I6, I6 = o4[f5 + 116 >> 2], o4[D5 + 272 >> 2] = o4[f5 + 112 >> 2], o4[D5 + 276 >> 2] = I6, s4(Q5 = D5 + 320 | 0, g6 = D5 + 160 | 0), H4(D5, Q5, n5 = D5 + 440 | 0), H4(D5 + 40 | 0, t5 = D5 + 360 | 0, U5 = D5 + 400 | 0), H4(D5 + 80 | 0, U5, n5), H4(D5 + 120 | 0, Q5, t5), Z2(Q5, D5, B5), H4(g6, Q5, n5), H4(N5 = D5 + 200 | 0, t5, U5), H4(G5 = D5 + 240 | 0, U5, n5), H4(K5 = D5 + 280 | 0, Q5, t5), kA(I6 = D5 + 640 | 0, g6), Z2(Q5, D5, I6), H4(g6, Q5, n5), H4(N5, t5, U5), H4(G5, U5, n5), H4(K5, Q5, t5), kA(I6 = D5 + 800 | 0, g6), Z2(Q5, D5, I6), H4(g6, Q5, n5), H4(N5, t5, U5), H4(G5, U5, n5), H4(K5, Q5, t5), kA(I6 = D5 + 960 | 0, g6), Z2(Q5, D5, I6), H4(g6, Q5, n5), H4(N5, t5, U5), H4(G5, U5, n5), H4(K5, Q5, t5), kA(I6 = D5 + 1120 | 0, g6), Z2(Q5, D5, I6), H4(g6, Q5, n5), H4(N5, t5, U5), H4(G5, U5, n5), H4(K5, Q5, t5), kA(I6 = D5 + 1280 | 0, g6), Z2(Q5, D5, I6), H4(g6, Q5, n5), H4(N5, t5, U5), H4(G5, U5, n5), H4(K5, Q5, t5), kA(I6 = D5 + 1440 | 0, g6), Z2(Q5, D5, I6), H4(g6, Q5, n5), H4(N5, t5, U5), H4(G5, U5, n5), H4(K5, Q5, t5), kA(D5 + 1600 | 0, g6), o4[y5 + 32 >> 2] = 0, o4[y5 + 36 >> 2] = 0, o4[y5 + 24 >> 2] = 0, o4[y5 + 28 >> 2] = 0, o4[y5 + 16 >> 2] = 0, o4[y5 + 20 >> 2] = 0, o4[y5 + 8 >> 2] = 0, o4[y5 + 12 >> 2] = 0, o4[y5 >> 2] = 0, o4[y5 + 4 >> 2] = 0, o4[y5 + 44 >> 2] = 0, o4[y5 + 48 >> 2] = 0, o4[(O3 = y5 + 40 | 0) >> 2] = 1, o4[y5 + 52 >> 2] = 0, o4[y5 + 56 >> 2] = 0, o4[y5 + 60 >> 2] = 0, o4[y5 + 64 >> 2] = 0, o4[y5 + 68 >> 2] = 0, o4[y5 + 72 >> 2] = 0, o4[y5 + 84 >> 2] = 0, o4[y5 + 88 >> 2] = 0, o4[y5 + 76 >> 2] = 0, o4[y5 + 80 >> 2] = 1, o4[y5 + 92 >> 2] = 0, o4[y5 + 96 >> 2] = 0, o4[y5 + 100 >> 2] = 0, o4[y5 + 104 >> 2] = 0, o4[y5 + 108 >> 2] = 0, o4[y5 + 112 >> 2] = 0, o4[y5 + 116 >> 2] = 0, X3 = y5 + 80 | 0, i2 = 255; ; ) {
                  A: {
                    I: {
                      if (!c4[(I6 = D5 + 2016 | 0) + i2 | 0] && !c4[(g6 = D5 + 1760 | 0) + i2 | 0]) {
                        if (!(c4[(B5 = I6) + (I6 = i2 - 1 | 0) | 0] | c4[I6 + g6 | 0])) break I;
                        i2 = I6;
                      }
                      if ((0 | i2) < 0) break A;
                      for (; s4(B5 = D5 + 320 | 0, y5), (0 | (Q5 = C5[(I6 = i2) + (D5 + 2016 | 0) | 0])) > 0 ? (H4(g6 = D5 + 160 | 0, B5, n5), H4(N5, t5, U5), H4(G5, U5, n5), H4(K5, B5, t5), Z2(B5, g6, (D5 + 480 | 0) + F4((254 & Q5) >>> 1 | 0, 160) | 0)) : (0 | Q5) >= 0 || (H4(g6 = D5 + 160 | 0, B5 = D5 + 320 | 0, n5), H4(N5, t5, U5), H4(G5, U5, n5), H4(K5, B5, t5), $2(B5, g6, (D5 + 480 | 0) + F4((0 - Q5 & 254) >>> 1 | 0, 160) | 0)), (0 | (u4 = C5[I6 + (D5 + 1760 | 0) | 0])) > 0 ? (H4(g6 = D5 + 160 | 0, B5 = D5 + 320 | 0, n5), H4(N5, t5, U5), H4(G5, U5, n5), H4(K5, B5, t5), AA(B5, g6, F4((254 & u4) >>> 1 | 0, 120) + 1472 | 0)) : (0 | u4) >= 0 || (H4(D5 + 160 | 0, z3 = D5 + 320 | 0, n5), H4(N5, t5, U5), H4(G5, U5, n5), H4(K5, z3, t5), p5 = o4[D5 + 160 >> 2], L5 = o4[D5 + 200 >> 2], d5 = o4[D5 + 164 >> 2], P5 = o4[D5 + 204 >> 2], R4 = o4[D5 + 168 >> 2], b4 = o4[D5 + 208 >> 2], v5 = o4[D5 + 172 >> 2], J5 = o4[D5 + 212 >> 2], f5 = o4[D5 + 176 >> 2], e4 = o4[D5 + 216 >> 2], k5 = o4[D5 + 180 >> 2], a5 = o4[D5 + 220 >> 2], M5 = o4[D5 + 184 >> 2], S4 = o4[D5 + 224 >> 2], w5 = o4[D5 + 188 >> 2], h5 = o4[D5 + 228 >> 2], i2 = o4[D5 + 192 >> 2], Q5 = o4[D5 + 232 >> 2], B5 = o4[D5 + 236 >> 2], g6 = o4[D5 + 196 >> 2], o4[D5 + 396 >> 2] = B5 - g6, o4[D5 + 392 >> 2] = Q5 - i2, o4[D5 + 388 >> 2] = h5 - w5, o4[D5 + 384 >> 2] = S4 - M5, o4[D5 + 380 >> 2] = a5 - k5, o4[D5 + 376 >> 2] = e4 - f5, o4[D5 + 372 >> 2] = J5 - v5, o4[D5 + 368 >> 2] = b4 - R4, o4[D5 + 364 >> 2] = P5 - d5, o4[D5 + 360 >> 2] = L5 - p5, o4[D5 + 356 >> 2] = g6 + B5, o4[D5 + 352 >> 2] = Q5 + i2, o4[D5 + 348 >> 2] = h5 + w5, o4[D5 + 344 >> 2] = S4 + M5, o4[D5 + 340 >> 2] = a5 + k5, o4[D5 + 336 >> 2] = f5 + e4, o4[D5 + 332 >> 2] = J5 + v5, o4[D5 + 328 >> 2] = R4 + b4, o4[D5 + 324 >> 2] = d5 + P5, o4[D5 + 320 >> 2] = p5 + L5, H4(U5, z3, 40 + (g6 = F4((0 - u4 & 254) >>> 1 | 0, 120) + 1472 | 0) | 0), H4(t5, t5, g6), H4(n5, g6 + 80 | 0, K5), T3 = o4[D5 + 276 >> 2], IA2 = o4[D5 + 272 >> 2], u4 = o4[D5 + 268 >> 2], z3 = o4[D5 + 264 >> 2], M5 = o4[D5 + 260 >> 2], S4 = o4[D5 + 256 >> 2], w5 = o4[D5 + 252 >> 2], h5 = o4[D5 + 248 >> 2], i2 = o4[D5 + 244 >> 2], Q5 = o4[D5 + 240 >> 2], q3 = o4[D5 + 360 >> 2], x3 = o4[D5 + 400 >> 2], V3 = o4[D5 + 364 >> 2], j3 = o4[D5 + 404 >> 2], l3 = o4[D5 + 368 >> 2], _3 = o4[D5 + 408 >> 2], p5 = o4[D5 + 372 >> 2], L5 = o4[D5 + 412 >> 2], d5 = o4[D5 + 376 >> 2], P5 = o4[D5 + 416 >> 2], R4 = o4[D5 + 380 >> 2], b4 = o4[D5 + 420 >> 2], v5 = o4[D5 + 384 >> 2], J5 = o4[D5 + 424 >> 2], f5 = o4[D5 + 388 >> 2], e4 = o4[D5 + 428 >> 2], k5 = o4[D5 + 392 >> 2], a5 = o4[D5 + 432 >> 2], B5 = o4[D5 + 396 >> 2], g6 = o4[D5 + 436 >> 2], o4[D5 + 396 >> 2] = B5 + g6, o4[D5 + 392 >> 2] = a5 + k5, o4[D5 + 388 >> 2] = f5 + e4, o4[D5 + 384 >> 2] = J5 + v5, o4[D5 + 380 >> 2] = R4 + b4, o4[D5 + 376 >> 2] = d5 + P5, o4[D5 + 372 >> 2] = p5 + L5, o4[D5 + 368 >> 2] = l3 + _3, o4[D5 + 364 >> 2] = V3 + j3, o4[D5 + 360 >> 2] = q3 + x3, o4[D5 + 356 >> 2] = g6 - B5, o4[D5 + 352 >> 2] = a5 - k5, o4[D5 + 348 >> 2] = e4 - f5, o4[D5 + 344 >> 2] = J5 - v5, o4[D5 + 340 >> 2] = b4 - R4, o4[D5 + 336 >> 2] = P5 - d5, o4[D5 + 332 >> 2] = L5 - p5, o4[D5 + 328 >> 2] = _3 - l3, o4[D5 + 324 >> 2] = j3 - V3, o4[D5 + 320 >> 2] = x3 - q3, p5 = Q5 << 1, L5 = o4[D5 + 440 >> 2], o4[D5 + 400 >> 2] = p5 - L5, d5 = i2 << 1, P5 = o4[D5 + 444 >> 2], o4[D5 + 404 >> 2] = d5 - P5, R4 = h5 << 1, b4 = o4[D5 + 448 >> 2], o4[D5 + 408 >> 2] = R4 - b4, v5 = w5 << 1, J5 = o4[D5 + 452 >> 2], o4[D5 + 412 >> 2] = v5 - J5, f5 = S4 << 1, e4 = o4[D5 + 456 >> 2], o4[D5 + 416 >> 2] = f5 - e4, k5 = M5 << 1, a5 = o4[D5 + 460 >> 2], o4[D5 + 420 >> 2] = k5 - a5, M5 = z3 << 1, S4 = o4[D5 + 464 >> 2], o4[D5 + 424 >> 2] = M5 - S4, w5 = u4 << 1, h5 = o4[D5 + 468 >> 2], o4[D5 + 428 >> 2] = w5 - h5, i2 = IA2 << 1, Q5 = o4[D5 + 472 >> 2], o4[D5 + 432 >> 2] = i2 - Q5, B5 = T3 << 1, g6 = o4[D5 + 476 >> 2], o4[D5 + 436 >> 2] = B5 - g6, o4[D5 + 440 >> 2] = p5 + L5, o4[D5 + 444 >> 2] = d5 + P5, o4[D5 + 448 >> 2] = R4 + b4, o4[D5 + 452 >> 2] = J5 + v5, o4[D5 + 456 >> 2] = f5 + e4, o4[D5 + 460 >> 2] = a5 + k5, o4[D5 + 464 >> 2] = S4 + M5, o4[D5 + 468 >> 2] = h5 + w5, o4[D5 + 472 >> 2] = Q5 + i2, o4[D5 + 476 >> 2] = g6 + B5), H4(y5, D5 + 320 | 0, n5), H4(O3, t5, U5), H4(X3, U5, n5), i2 = I6 - 1 | 0, (0 | I6) > 0; ) ;
                      break A;
                    }
                    if (i2 = i2 - 2 | 0, I6) continue;
                  }
                  break;
                }
                r4 = D5 + 2272 | 0, QI(I6 = E5 + 288 | 0, y5), gA2 = -1, BA2 = mA(I6, A7), e4 = ((0 | A7) == (0 | I6) ? gA2 : BA2) | OA(A7, I6, 32);
              }
              return r4 = E5 + 592 | 0, e4;
            }
            function H4(A7, I6, g6) {
              var C6, B5, Q5, i2, E5, D5, c5, h5, w5, y5, f5, S4, a5, k5, M5, r5, t5, U5, J5, K5, e4, Y5, N5, G5, H5, s5, p5, L5, d5, P5, R4, b4, v5, u4, z3, O3, q3, W3, x3, V3, j3, m3, l3, _3, X3, T3, Z3, $3, AA2, IA2, gA2, CA2, BA2, QA2 = 0, iA2 = 0, EA2 = 0, DA2 = 0, oA2 = 0, cA2 = 0, hA2 = 0, wA2 = 0, FA2 = 0, yA2 = 0, fA2 = 0, SA2 = 0, aA2 = 0, kA2 = 0, MA2 = 0, rA2 = 0, nA2 = 0, tA2 = 0, UA2 = 0, JA2 = 0, KA2 = 0, eA2 = 0, YA2 = 0, NA2 = 0, GA2 = 0;
              QA2 = AI(C6 = o4[g6 + 4 >> 2], y5 = C6 >> 31, nA2 = (r5 = o4[I6 + 20 >> 2]) << 1, R4 = nA2 >> 31), EA2 = n4, iA2 = (aA2 = AI(MA2 = o4[g6 >> 2], Q5 = MA2 >> 31, B5 = o4[I6 + 24 >> 2], i2 = B5 >> 31)) + QA2 | 0, QA2 = n4 + EA2 | 0, QA2 = iA2 >>> 0 < aA2 >>> 0 ? QA2 + 1 | 0 : QA2, FA2 = AI(E5 = o4[g6 + 8 >> 2], a5 = E5 >> 31, aA2 = o4[I6 + 16 >> 2], D5 = aA2 >> 31), EA2 = n4 + QA2 | 0, EA2 = (iA2 = FA2 + iA2 | 0) >>> 0 < FA2 >>> 0 ? EA2 + 1 | 0 : EA2, QA2 = (FA2 = AI(f5 = o4[g6 + 12 >> 2], t5 = f5 >> 31, G5 = (U5 = o4[I6 + 12 >> 2]) << 1, b4 = G5 >> 31)) + iA2 | 0, iA2 = n4 + EA2 | 0, iA2 = QA2 >>> 0 < FA2 >>> 0 ? iA2 + 1 | 0 : iA2, EA2 = (kA2 = AI(k5 = o4[g6 + 16 >> 2], H5 = k5 >> 31, FA2 = o4[I6 + 8 >> 2], c5 = FA2 >> 31)) + QA2 | 0, QA2 = n4 + iA2 | 0, QA2 = EA2 >>> 0 < kA2 >>> 0 ? QA2 + 1 | 0 : QA2, iA2 = EA2, EA2 = AI(J5 = o4[g6 + 20 >> 2], v5 = J5 >> 31, s5 = (K5 = o4[I6 + 4 >> 2]) << 1, u4 = s5 >> 31), QA2 = n4 + QA2 | 0, QA2 = (iA2 = iA2 + EA2 | 0) >>> 0 < EA2 >>> 0 ? QA2 + 1 | 0 : QA2, T3 = hA2 = o4[g6 + 24 >> 2], EA2 = (yA2 = AI(hA2, _3 = hA2 >> 31, kA2 = o4[I6 >> 2], h5 = kA2 >> 31)) + iA2 | 0, iA2 = n4 + QA2 | 0, iA2 = EA2 >>> 0 < yA2 >>> 0 ? iA2 + 1 | 0 : iA2, z3 = o4[g6 + 28 >> 2], QA2 = (yA2 = AI(SA2 = F4(z3, 19), e4 = SA2 >> 31, p5 = (Y5 = o4[I6 + 36 >> 2]) << 1, O3 = p5 >> 31)) + EA2 | 0, EA2 = n4 + iA2 | 0, EA2 = QA2 >>> 0 < yA2 >>> 0 ? EA2 + 1 | 0 : EA2, KA2 = o4[g6 + 32 >> 2], iA2 = (wA2 = AI(DA2 = F4(KA2, 19), M5 = DA2 >> 31, yA2 = o4[I6 + 32 >> 2], w5 = yA2 >> 31)) + QA2 | 0, QA2 = n4 + EA2 | 0, QA2 = iA2 >>> 0 < wA2 >>> 0 ? QA2 + 1 | 0 : QA2, Z3 = o4[g6 + 36 >> 2], g6 = AI(wA2 = F4(Z3, 19), S4 = wA2 >> 31, L5 = (N5 = o4[I6 + 28 >> 2]) << 1, q3 = L5 >> 31), QA2 = n4 + QA2 | 0, oA2 = I6 = g6 + iA2 | 0, g6 = I6 >>> 0 < g6 >>> 0 ? QA2 + 1 | 0 : QA2, I6 = AI(aA2, D5, C6, y5), QA2 = n4, iA2 = AI(MA2, Q5, r5, W3 = r5 >> 31), EA2 = n4 + QA2 | 0, EA2 = (I6 = iA2 + I6 | 0) >>> 0 < iA2 >>> 0 ? EA2 + 1 | 0 : EA2, QA2 = AI(E5, a5, U5, x3 = U5 >> 31), iA2 = n4 + EA2 | 0, iA2 = (I6 = QA2 + I6 | 0) >>> 0 < QA2 >>> 0 ? iA2 + 1 | 0 : iA2, EA2 = AI(FA2, c5, f5, t5), QA2 = n4 + iA2 | 0, QA2 = (I6 = EA2 + I6 | 0) >>> 0 < EA2 >>> 0 ? QA2 + 1 | 0 : QA2, iA2 = AI(k5, H5, K5, V3 = K5 >> 31), QA2 = n4 + QA2 | 0, QA2 = (I6 = iA2 + I6 | 0) >>> 0 < iA2 >>> 0 ? QA2 + 1 | 0 : QA2, iA2 = AI(kA2, h5, J5, v5), QA2 = n4 + QA2 | 0, QA2 = (I6 = iA2 + I6 | 0) >>> 0 < iA2 >>> 0 ? QA2 + 1 | 0 : QA2, iA2 = AI(hA2 = F4(hA2, 19), d5 = hA2 >> 31, Y5, j3 = Y5 >> 31), EA2 = n4 + QA2 | 0, EA2 = (I6 = iA2 + I6 | 0) >>> 0 < iA2 >>> 0 ? EA2 + 1 | 0 : EA2, QA2 = AI(yA2, w5, SA2, e4), iA2 = n4 + EA2 | 0, iA2 = (I6 = QA2 + I6 | 0) >>> 0 < QA2 >>> 0 ? iA2 + 1 | 0 : iA2, EA2 = AI(DA2, M5, N5, m3 = N5 >> 31), QA2 = n4 + iA2 | 0, QA2 = (I6 = EA2 + I6 | 0) >>> 0 < EA2 >>> 0 ? QA2 + 1 | 0 : QA2, iA2 = AI(wA2, S4, B5, i2), QA2 = n4 + QA2 | 0, YA2 = I6 = iA2 + I6 | 0, tA2 = I6 >>> 0 < iA2 >>> 0 ? QA2 + 1 | 0 : QA2, I6 = AI(C6, y5, G5, b4), QA2 = n4, iA2 = AI(MA2, Q5, aA2, D5), QA2 = n4 + QA2 | 0, QA2 = (I6 = iA2 + I6 | 0) >>> 0 < iA2 >>> 0 ? QA2 + 1 | 0 : QA2, iA2 = AI(FA2, c5, E5, a5), EA2 = n4 + QA2 | 0, EA2 = (I6 = iA2 + I6 | 0) >>> 0 < iA2 >>> 0 ? EA2 + 1 | 0 : EA2, QA2 = AI(f5, t5, s5, u4), iA2 = n4 + EA2 | 0, iA2 = (I6 = QA2 + I6 | 0) >>> 0 < QA2 >>> 0 ? iA2 + 1 | 0 : iA2, EA2 = AI(kA2, h5, k5, H5), QA2 = n4 + iA2 | 0, QA2 = (I6 = EA2 + I6 | 0) >>> 0 < EA2 >>> 0 ? QA2 + 1 | 0 : QA2, iA2 = AI(P5 = F4(J5, 19), l3 = P5 >> 31, p5, O3), QA2 = n4 + QA2 | 0, QA2 = (I6 = iA2 + I6 | 0) >>> 0 < iA2 >>> 0 ? QA2 + 1 | 0 : QA2, iA2 = AI(yA2, w5, hA2, d5), QA2 = n4 + QA2 | 0, QA2 = (I6 = iA2 + I6 | 0) >>> 0 < iA2 >>> 0 ? QA2 + 1 | 0 : QA2, iA2 = AI(SA2, e4, L5, q3), EA2 = n4 + QA2 | 0, EA2 = (I6 = iA2 + I6 | 0) >>> 0 < iA2 >>> 0 ? EA2 + 1 | 0 : EA2, QA2 = AI(DA2, M5, B5, i2), iA2 = n4 + EA2 | 0, iA2 = (I6 = QA2 + I6 | 0) >>> 0 < QA2 >>> 0 ? iA2 + 1 | 0 : iA2, EA2 = AI(wA2, S4, nA2, R4), QA2 = n4 + iA2 | 0, $3 = I6 = EA2 + I6 | 0, AA2 = QA2 = I6 >>> 0 < EA2 >>> 0 ? QA2 + 1 | 0 : QA2, IA2 = I6 = I6 + 33554432 | 0, gA2 = QA2 = I6 >>> 0 < 33554432 ? QA2 + 1 | 0 : QA2, EA2 = (67108863 & QA2) << 6 | I6 >>> 26, QA2 = (QA2 >> 26) + tA2 | 0, YA2 = I6 = EA2 + YA2 | 0, QA2 = I6 >>> 0 < EA2 >>> 0 ? QA2 + 1 | 0 : QA2, CA2 = I6 = I6 + 16777216 | 0, QA2 = g6 + (iA2 = (EA2 = I6 >>> 0 < 16777216 ? QA2 + 1 | 0 : QA2) >> 25) | 0, QA2 = (I6 = (EA2 = (33554431 & EA2) << 7 | I6 >>> 25) + oA2 | 0) >>> 0 < EA2 >>> 0 ? QA2 + 1 | 0 : QA2, UA2 = g6 = (iA2 = I6) + 33554432 | 0, I6 = QA2 = g6 >>> 0 < 33554432 ? QA2 + 1 | 0 : QA2, o4[A7 + 24 >> 2] = iA2 - (-67108864 & g6), g6 = AI(C6, y5, s5, u4), QA2 = n4, iA2 = AI(MA2, Q5, FA2, c5), EA2 = n4 + QA2 | 0, EA2 = (g6 = iA2 + g6 | 0) >>> 0 < iA2 >>> 0 ? EA2 + 1 | 0 : EA2, iA2 = (QA2 = g6) + (g6 = AI(kA2, h5, E5, a5)) | 0, QA2 = n4 + EA2 | 0, QA2 = g6 >>> 0 > iA2 >>> 0 ? QA2 + 1 | 0 : QA2, EA2 = AI(g6 = F4(f5, 19), JA2 = g6 >> 31, p5, O3), QA2 = n4 + QA2 | 0, QA2 = (iA2 = EA2 + iA2 | 0) >>> 0 < EA2 >>> 0 ? QA2 + 1 | 0 : QA2, EA2 = (oA2 = AI(yA2, w5, tA2 = F4(k5, 19), X3 = tA2 >> 31)) + iA2 | 0, iA2 = n4 + QA2 | 0, iA2 = EA2 >>> 0 < oA2 >>> 0 ? iA2 + 1 | 0 : iA2, oA2 = AI(L5, q3, P5, l3), QA2 = n4 + iA2 | 0, QA2 = (EA2 = oA2 + EA2 | 0) >>> 0 < oA2 >>> 0 ? QA2 + 1 | 0 : QA2, iA2 = (oA2 = AI(B5, i2, hA2, d5)) + EA2 | 0, EA2 = n4 + QA2 | 0, EA2 = iA2 >>> 0 < oA2 >>> 0 ? EA2 + 1 | 0 : EA2, oA2 = AI(SA2, e4, nA2, R4), QA2 = n4 + EA2 | 0, QA2 = (iA2 = oA2 + iA2 | 0) >>> 0 < oA2 >>> 0 ? QA2 + 1 | 0 : QA2, EA2 = AI(DA2, M5, aA2, D5), QA2 = n4 + QA2 | 0, QA2 = (iA2 = EA2 + iA2 | 0) >>> 0 < EA2 >>> 0 ? QA2 + 1 | 0 : QA2, EA2 = (oA2 = AI(wA2, S4, G5, b4)) + iA2 | 0, iA2 = n4 + QA2 | 0, fA2 = EA2, NA2 = EA2 >>> 0 < oA2 >>> 0 ? iA2 + 1 | 0 : iA2, QA2 = AI(kA2, h5, C6, y5), iA2 = n4, EA2 = (oA2 = AI(MA2, Q5, K5, V3)) + QA2 | 0, QA2 = n4 + iA2 | 0, QA2 = EA2 >>> 0 < oA2 >>> 0 ? QA2 + 1 | 0 : QA2, oA2 = iA2 = F4(E5, 19), iA2 = (cA2 = AI(iA2, eA2 = iA2 >> 31, Y5, j3)) + EA2 | 0, EA2 = n4 + QA2 | 0, EA2 = iA2 >>> 0 < cA2 >>> 0 ? EA2 + 1 | 0 : EA2, cA2 = AI(yA2, w5, g6, JA2), QA2 = n4 + EA2 | 0, QA2 = (iA2 = cA2 + iA2 | 0) >>> 0 < cA2 >>> 0 ? QA2 + 1 | 0 : QA2, EA2 = AI(tA2, X3, N5, m3), QA2 = n4 + QA2 | 0, QA2 = (iA2 = EA2 + iA2 | 0) >>> 0 < EA2 >>> 0 ? QA2 + 1 | 0 : QA2, EA2 = (cA2 = AI(B5, i2, P5, l3)) + iA2 | 0, iA2 = n4 + QA2 | 0, iA2 = EA2 >>> 0 < cA2 >>> 0 ? iA2 + 1 | 0 : iA2, cA2 = AI(hA2, d5, r5, W3), QA2 = n4 + iA2 | 0, QA2 = (EA2 = cA2 + EA2 | 0) >>> 0 < cA2 >>> 0 ? QA2 + 1 | 0 : QA2, iA2 = (cA2 = AI(aA2, D5, SA2, e4)) + EA2 | 0, EA2 = n4 + QA2 | 0, EA2 = iA2 >>> 0 < cA2 >>> 0 ? EA2 + 1 | 0 : EA2, cA2 = AI(DA2, M5, U5, x3), QA2 = n4 + EA2 | 0, QA2 = (iA2 = cA2 + iA2 | 0) >>> 0 < cA2 >>> 0 ? QA2 + 1 | 0 : QA2, EA2 = AI(wA2, S4, FA2, c5), QA2 = n4 + QA2 | 0, GA2 = iA2 = EA2 + iA2 | 0, cA2 = iA2 >>> 0 < EA2 >>> 0 ? QA2 + 1 | 0 : QA2, QA2 = AI(QA2 = F4(C6, 19), QA2 >> 31, p5, O3), iA2 = n4, EA2 = AI(MA2, Q5, kA2, h5), iA2 = n4 + iA2 | 0, iA2 = (QA2 = EA2 + QA2 | 0) >>> 0 < EA2 >>> 0 ? iA2 + 1 | 0 : iA2, EA2 = (oA2 = AI(yA2, w5, oA2, eA2)) + QA2 | 0, QA2 = n4 + iA2 | 0, g6 = (iA2 = AI(g6, JA2, L5, q3)) + EA2 | 0, EA2 = n4 + (EA2 >>> 0 < oA2 >>> 0 ? QA2 + 1 | 0 : QA2) | 0, EA2 = g6 >>> 0 < iA2 >>> 0 ? EA2 + 1 | 0 : EA2, iA2 = AI(B5, i2, tA2, X3), QA2 = n4 + EA2 | 0, QA2 = (g6 = iA2 + g6 | 0) >>> 0 < iA2 >>> 0 ? QA2 + 1 | 0 : QA2, iA2 = AI(nA2, R4, P5, l3), QA2 = n4 + QA2 | 0, QA2 = (g6 = iA2 + g6 | 0) >>> 0 < iA2 >>> 0 ? QA2 + 1 | 0 : QA2, EA2 = AI(aA2, D5, hA2, d5), iA2 = n4 + QA2 | 0, iA2 = (g6 = EA2 + g6 | 0) >>> 0 < EA2 >>> 0 ? iA2 + 1 | 0 : iA2, EA2 = AI(SA2, e4, G5, b4), QA2 = n4 + iA2 | 0, QA2 = (g6 = EA2 + g6 | 0) >>> 0 < EA2 >>> 0 ? QA2 + 1 | 0 : QA2, iA2 = AI(DA2, M5, FA2, c5), EA2 = n4 + QA2 | 0, EA2 = (g6 = iA2 + g6 | 0) >>> 0 < iA2 >>> 0 ? EA2 + 1 | 0 : EA2, iA2 = AI(wA2, S4, s5, u4), QA2 = n4 + EA2 | 0, oA2 = g6 = iA2 + g6 | 0, JA2 = QA2 = g6 >>> 0 < iA2 >>> 0 ? QA2 + 1 | 0 : QA2, eA2 = g6 = g6 + 33554432 | 0, BA2 = QA2 = g6 >>> 0 < 33554432 ? QA2 + 1 | 0 : QA2, iA2 = (EA2 = QA2 >> 26) + cA2 | 0, cA2 = g6 = (QA2 = (67108863 & QA2) << 6 | g6 >>> 26) + GA2 | 0, QA2 = g6 >>> 0 < QA2 >>> 0 ? iA2 + 1 | 0 : iA2, GA2 = g6 = g6 + 16777216 | 0, iA2 = (33554431 & (QA2 = g6 >>> 0 < 16777216 ? QA2 + 1 | 0 : QA2)) << 7 | g6 >>> 25, QA2 = (QA2 >> 25) + NA2 | 0, QA2 = (g6 = iA2 + fA2 | 0) >>> 0 < iA2 >>> 0 ? QA2 + 1 | 0 : QA2, NA2 = iA2 = (EA2 = g6) + 33554432 | 0, g6 = QA2 = iA2 >>> 0 < 33554432 ? QA2 + 1 | 0 : QA2, o4[A7 + 8 >> 2] = EA2 - (-67108864 & iA2), QA2 = AI(B5, i2, C6, y5), EA2 = n4, iA2 = (fA2 = AI(MA2, Q5, N5, m3)) + QA2 | 0, QA2 = n4 + EA2 | 0, QA2 = iA2 >>> 0 < fA2 >>> 0 ? QA2 + 1 | 0 : QA2, EA2 = AI(E5, a5, r5, W3), QA2 = n4 + QA2 | 0, QA2 = (iA2 = EA2 + iA2 | 0) >>> 0 < EA2 >>> 0 ? QA2 + 1 | 0 : QA2, EA2 = AI(aA2, D5, f5, t5), QA2 = n4 + QA2 | 0, QA2 = (iA2 = EA2 + iA2 | 0) >>> 0 < EA2 >>> 0 ? QA2 + 1 | 0 : QA2, fA2 = AI(k5, H5, U5, x3), EA2 = n4 + QA2 | 0, EA2 = (iA2 = fA2 + iA2 | 0) >>> 0 < fA2 >>> 0 ? EA2 + 1 | 0 : EA2, QA2 = (fA2 = AI(FA2, c5, J5, v5)) + iA2 | 0, iA2 = n4 + EA2 | 0, iA2 = QA2 >>> 0 < fA2 >>> 0 ? iA2 + 1 | 0 : iA2, EA2 = (fA2 = AI(K5, V3, T3, _3)) + QA2 | 0, QA2 = n4 + iA2 | 0, QA2 = EA2 >>> 0 < fA2 >>> 0 ? QA2 + 1 | 0 : QA2, iA2 = EA2, EA2 = AI(kA2, h5, z3, fA2 = z3 >> 31), QA2 = n4 + QA2 | 0, QA2 = (iA2 = iA2 + EA2 | 0) >>> 0 < EA2 >>> 0 ? QA2 + 1 | 0 : QA2, EA2 = AI(DA2, M5, Y5, j3), QA2 = n4 + QA2 | 0, QA2 = (iA2 = EA2 + iA2 | 0) >>> 0 < EA2 >>> 0 ? QA2 + 1 | 0 : QA2, rA2 = AI(wA2, S4, yA2, w5), EA2 = n4 + QA2 | 0, QA2 = I6 >> 26, I6 = (UA2 = (67108863 & I6) << 6 | UA2 >>> 26) + (iA2 = rA2 + iA2 | 0) | 0, iA2 = QA2 + (iA2 >>> 0 < rA2 >>> 0 ? EA2 + 1 | 0 : EA2) | 0, QA2 = (EA2 = I6) >>> 0 < UA2 >>> 0 ? iA2 + 1 | 0 : iA2, UA2 = iA2 = EA2 + 16777216 | 0, I6 = QA2 = iA2 >>> 0 < 16777216 ? QA2 + 1 | 0 : QA2, o4[A7 + 28 >> 2] = EA2 - (-33554432 & iA2), QA2 = AI(FA2, c5, C6, y5), iA2 = n4, rA2 = AI(MA2, Q5, U5, x3), EA2 = n4 + iA2 | 0, EA2 = (QA2 = rA2 + QA2 | 0) >>> 0 < rA2 >>> 0 ? EA2 + 1 | 0 : EA2, rA2 = AI(E5, a5, K5, V3), iA2 = n4 + EA2 | 0, iA2 = (QA2 = rA2 + QA2 | 0) >>> 0 < rA2 >>> 0 ? iA2 + 1 | 0 : iA2, EA2 = (rA2 = AI(kA2, h5, f5, t5)) + QA2 | 0, QA2 = n4 + iA2 | 0, QA2 = EA2 >>> 0 < rA2 >>> 0 ? QA2 + 1 | 0 : QA2, iA2 = EA2, EA2 = AI(tA2, X3, Y5, j3), QA2 = n4 + QA2 | 0, QA2 = (iA2 = iA2 + EA2 | 0) >>> 0 < EA2 >>> 0 ? QA2 + 1 | 0 : QA2, EA2 = AI(yA2, w5, P5, l3), QA2 = n4 + QA2 | 0, QA2 = (iA2 = EA2 + iA2 | 0) >>> 0 < EA2 >>> 0 ? QA2 + 1 | 0 : QA2, iA2 = (hA2 = AI(hA2, d5, N5, m3)) + iA2 | 0, EA2 = n4 + QA2 | 0, QA2 = (SA2 = AI(B5, i2, SA2, e4)) + iA2 | 0, iA2 = n4 + (iA2 >>> 0 < hA2 >>> 0 ? EA2 + 1 | 0 : EA2) | 0, EA2 = (DA2 = AI(DA2, M5, r5, W3)) + QA2 | 0, QA2 = n4 + (QA2 >>> 0 < SA2 >>> 0 ? iA2 + 1 | 0 : iA2) | 0, QA2 = EA2 >>> 0 < DA2 >>> 0 ? QA2 + 1 | 0 : QA2, iA2 = EA2, EA2 = AI(wA2, S4, aA2, D5), QA2 = n4 + QA2 | 0, DA2 = iA2 = iA2 + EA2 | 0, QA2 = (QA2 = iA2 >>> 0 < EA2 >>> 0 ? QA2 + 1 | 0 : QA2) + (iA2 = g6 >> 26) | 0, DA2 = g6 = DA2 + (EA2 = (67108863 & g6) << 6 | NA2 >>> 26) | 0, QA2 = g6 >>> 0 < EA2 >>> 0 ? QA2 + 1 | 0 : QA2, SA2 = iA2 = g6 + 16777216 | 0, g6 = EA2 = iA2 >>> 0 < 16777216 ? QA2 + 1 | 0 : QA2, o4[A7 + 12 >> 2] = DA2 - (-33554432 & iA2), QA2 = AI(C6, y5, L5, q3), EA2 = n4, iA2 = (DA2 = AI(MA2, Q5, yA2, w5)) + QA2 | 0, QA2 = n4 + EA2 | 0, QA2 = iA2 >>> 0 < DA2 >>> 0 ? QA2 + 1 | 0 : QA2, EA2 = AI(B5, i2, E5, a5), QA2 = n4 + QA2 | 0, QA2 = (iA2 = EA2 + iA2 | 0) >>> 0 < EA2 >>> 0 ? QA2 + 1 | 0 : QA2, DA2 = AI(f5, t5, nA2, R4), EA2 = n4 + QA2 | 0, EA2 = (iA2 = DA2 + iA2 | 0) >>> 0 < DA2 >>> 0 ? EA2 + 1 | 0 : EA2, QA2 = (DA2 = AI(aA2, D5, k5, H5)) + iA2 | 0, iA2 = n4 + EA2 | 0, iA2 = QA2 >>> 0 < DA2 >>> 0 ? iA2 + 1 | 0 : iA2, EA2 = (DA2 = AI(G5, b4, J5, v5)) + QA2 | 0, QA2 = n4 + iA2 | 0, QA2 = EA2 >>> 0 < DA2 >>> 0 ? QA2 + 1 | 0 : QA2, iA2 = EA2, EA2 = AI(FA2, c5, T3, _3), QA2 = n4 + QA2 | 0, QA2 = (iA2 = iA2 + EA2 | 0) >>> 0 < EA2 >>> 0 ? QA2 + 1 | 0 : QA2, EA2 = AI(z3, fA2, s5, u4), QA2 = n4 + QA2 | 0, QA2 = (iA2 = EA2 + iA2 | 0) >>> 0 < EA2 >>> 0 ? QA2 + 1 | 0 : QA2, iA2 = (nA2 = AI(kA2, h5, DA2 = KA2, hA2 = DA2 >> 31)) + iA2 | 0, EA2 = n4 + QA2 | 0, QA2 = (wA2 = AI(wA2, S4, p5, O3)) + iA2 | 0, iA2 = n4 + (iA2 >>> 0 < nA2 >>> 0 ? EA2 + 1 | 0 : EA2) | 0, iA2 = QA2 >>> 0 < wA2 >>> 0 ? iA2 + 1 | 0 : iA2, KA2 = QA2, QA2 = (QA2 = I6 >> 25) + iA2 | 0, QA2 = (I6 = KA2 + (EA2 = (33554431 & I6) << 7 | UA2 >>> 25) | 0) >>> 0 < EA2 >>> 0 ? QA2 + 1 | 0 : QA2, wA2 = iA2 = (EA2 = I6) + 33554432 | 0, I6 = QA2 = iA2 >>> 0 < 33554432 ? QA2 + 1 | 0 : QA2, o4[A7 + 32 >> 2] = EA2 - (-67108864 & iA2), iA2 = g6 >> 25, g6 = (SA2 = (33554431 & g6) << 7 | SA2 >>> 25) + ($3 - (QA2 = -67108864 & IA2) | 0) | 0, QA2 = iA2 + (AA2 - ((QA2 >>> 0 > $3 >>> 0) + gA2 | 0) | 0) | 0, QA2 = g6 >>> 0 < SA2 >>> 0 ? QA2 + 1 | 0 : QA2, QA2 = ((67108863 & (QA2 = (g6 = (iA2 = g6) + 33554432 | 0) >>> 0 < 33554432 ? QA2 + 1 | 0 : QA2)) << 6 | g6 >>> 26) + (EA2 = YA2 - (-33554432 & CA2) | 0) | 0, o4[A7 + 20 >> 2] = QA2, o4[A7 + 16 >> 2] = iA2 - (-67108864 & g6), g6 = AI(yA2, w5, C6, y5), QA2 = n4, iA2 = AI(MA2, Q5, Y5, j3), QA2 = n4 + QA2 | 0, QA2 = (g6 = iA2 + g6 | 0) >>> 0 < iA2 >>> 0 ? QA2 + 1 | 0 : QA2, EA2 = AI(E5, a5, N5, m3), iA2 = n4 + QA2 | 0, iA2 = (g6 = EA2 + g6 | 0) >>> 0 < EA2 >>> 0 ? iA2 + 1 | 0 : iA2, QA2 = AI(B5, i2, f5, t5), EA2 = n4 + iA2 | 0, EA2 = (g6 = QA2 + g6 | 0) >>> 0 < QA2 >>> 0 ? EA2 + 1 | 0 : EA2, iA2 = AI(k5, H5, r5, W3), QA2 = n4 + EA2 | 0, QA2 = (g6 = iA2 + g6 | 0) >>> 0 < iA2 >>> 0 ? QA2 + 1 | 0 : QA2, iA2 = AI(aA2, D5, J5, v5), QA2 = n4 + QA2 | 0, QA2 = (g6 = iA2 + g6 | 0) >>> 0 < iA2 >>> 0 ? QA2 + 1 | 0 : QA2, iA2 = AI(U5, x3, T3, _3), QA2 = n4 + QA2 | 0, QA2 = (g6 = iA2 + g6 | 0) >>> 0 < iA2 >>> 0 ? QA2 + 1 | 0 : QA2, EA2 = AI(FA2, c5, z3, fA2), iA2 = n4 + QA2 | 0, iA2 = (g6 = EA2 + g6 | 0) >>> 0 < EA2 >>> 0 ? iA2 + 1 | 0 : iA2, QA2 = AI(DA2, hA2, K5, V3), EA2 = n4 + iA2 | 0, EA2 = (g6 = QA2 + g6 | 0) >>> 0 < QA2 >>> 0 ? EA2 + 1 | 0 : EA2, iA2 = AI(kA2, h5, Z3, Z3 >> 31), QA2 = n4 + EA2 | 0, QA2 = (QA2 = (g6 = iA2 + g6 | 0) >>> 0 < iA2 >>> 0 ? QA2 + 1 | 0 : QA2) + (iA2 = I6 >> 26) | 0, QA2 = (I6 = (EA2 = g6) + (g6 = (67108863 & I6) << 6 | wA2 >>> 26) | 0) >>> 0 < g6 >>> 0 ? QA2 + 1 | 0 : QA2, QA2 = (I6 = (g6 = I6) + 16777216 | 0) >>> 0 < 16777216 ? QA2 + 1 | 0 : QA2, o4[A7 + 36 >> 2] = g6 - (-33554432 & I6), EA2 = cA2 - (-33554432 & GA2) | 0, iA2 = oA2 - (g6 = -67108864 & eA2) | 0, MA2 = JA2 - ((g6 >>> 0 > oA2 >>> 0) + BA2 | 0) | 0, I6 = (g6 = AI((33554431 & (g6 = QA2)) << 7 | I6 >>> 25, QA2 >>= 25, 19, 0)) + iA2 | 0, iA2 = n4 + MA2 | 0, QA2 = I6 >>> 0 < g6 >>> 0 ? iA2 + 1 | 0 : iA2, QA2 = ((67108863 & (QA2 = (I6 = (g6 = I6) + 33554432 | 0) >>> 0 < 33554432 ? QA2 + 1 | 0 : QA2)) << 6 | I6 >>> 26) + EA2 | 0, o4[A7 + 4 >> 2] = QA2, o4[A7 >> 2] = g6 - (-67108864 & I6);
            }
            function s4(A7, I6) {
              var g6, C6, B5, Q5, i2, E5, D5, c5, h5, w5, y5, f5, S4, a5, k5, M5, t5, U5, J5, K5, e4, Y5, N5, G5 = 0, H5 = 0, s5 = 0, p5 = 0, L5 = 0, P5 = 0, R4 = 0, b4 = 0, v5 = 0, u4 = 0, z3 = 0, O3 = 0, q3 = 0, W3 = 0, x3 = 0, V3 = 0, j3 = 0, m3 = 0, l3 = 0, _3 = 0, X3 = 0, T3 = 0, Z3 = 0, $3 = 0, AA2 = 0, IA2 = 0, gA2 = 0, CA2 = 0, BA2 = 0, QA2 = 0, iA2 = 0, EA2 = 0, DA2 = 0, oA2 = 0, cA2 = 0, hA2 = 0;
              r4 = g6 = r4 - 48 | 0, d4(A7, I6), d4(A7 + 80 | 0, I6 + 40 | 0), G5 = AI(W3 = (Z3 = o4[I6 + 92 >> 2]) << 1, i2 = W3 >> 31, b4 = (p5 = o4[I6 + 84 >> 2]) << 1, C6 = b4 >> 31), s5 = n4, CA2 = j3 = o4[I6 + 88 >> 2], H5 = (z3 = AI(j3, l3 = j3 >> 31, j3, l3)) + G5 | 0, G5 = n4 + s5 | 0, G5 = H5 >>> 0 < z3 >>> 0 ? G5 + 1 | 0 : G5, s5 = AI(L5 = o4[I6 + 96 >> 2], E5 = L5 >> 31, z3 = (v5 = o4[I6 + 80 >> 2]) << 1, B5 = z3 >> 31), G5 = n4 + G5 | 0, G5 = (H5 = s5 + H5 | 0) >>> 0 < s5 >>> 0 ? G5 + 1 | 0 : G5, gA2 = o4[I6 + 108 >> 2], s5 = AI(O3 = F4(gA2, 38), y5 = O3 >> 31, gA2, a5 = gA2 >> 31), G5 = n4 + G5 | 0, G5 = (H5 = s5 + H5 | 0) >>> 0 < s5 >>> 0 ? G5 + 1 | 0 : G5, s5 = H5, $3 = o4[I6 + 112 >> 2], u4 = AI(P5 = F4($3, 19), D5 = P5 >> 31, H5 = (_3 = o4[I6 + 104 >> 2]) << 1, H5 >> 31), H5 = n4 + G5 | 0, H5 = (s5 = s5 + u4 | 0) >>> 0 < u4 >>> 0 ? H5 + 1 | 0 : H5, iA2 = o4[I6 + 116 >> 2], G5 = AI(u4 = F4(iA2, 38), Q5 = u4 >> 31, m3 = (X3 = o4[I6 + 100 >> 2]) << 1, h5 = m3 >> 31), H5 = n4 + H5 | 0, EA2 = G5 = (G5 >>> 0 > (s5 = G5 + s5 | 0) >>> 0 ? H5 + 1 : H5) << 1 | s5 >>> 31, DA2 = s5 = 33554432 + (k5 = s5 << 1) | 0, oA2 = G5 = s5 >>> 0 < 33554432 ? G5 + 1 | 0 : G5, R4 = (67108863 & G5) << 6 | s5 >>> 26, T3 = G5 >> 26, G5 = AI(b4, C6, L5, E5), s5 = n4, H5 = (AA2 = AI(j3 <<= 1, w5 = j3 >> 31, Z3, M5 = Z3 >> 31)) + G5 | 0, G5 = n4 + s5 | 0, G5 = H5 >>> 0 < AA2 >>> 0 ? G5 + 1 | 0 : G5, s5 = (AA2 = AI(X3, f5 = X3 >> 31, z3, B5)) + H5 | 0, H5 = n4 + G5 | 0, H5 = s5 >>> 0 < AA2 >>> 0 ? H5 + 1 | 0 : H5, BA2 = AI(P5, D5, AA2 = gA2 << 1, t5 = AA2 >> 31), G5 = n4 + H5 | 0, G5 = (s5 = BA2 + s5 | 0) >>> 0 < BA2 >>> 0 ? G5 + 1 | 0 : G5, H5 = AI(u4, Q5, _3, c5 = _3 >> 31), G5 = n4 + G5 | 0, H5 = (H5 = (H5 >>> 0 > (s5 = H5 + s5 | 0) >>> 0 ? G5 + 1 : G5) << 1 | s5 >>> 31) + T3 | 0, BA2 = s5 = (G5 = s5 << 1) + R4 | 0, G5 = H5 = G5 >>> 0 > s5 >>> 0 ? H5 + 1 | 0 : H5, cA2 = s5 = s5 + 16777216 | 0, R4 = (33554431 & (G5 = s5 >>> 0 < 16777216 ? G5 + 1 | 0 : G5)) << 7 | s5 >>> 25, T3 = G5 >> 25, G5 = AI(W3, i2, Z3, M5), s5 = n4, H5 = (q3 = AI(L5, E5, j3, w5)) + G5 | 0, G5 = n4 + s5 | 0, G5 = H5 >>> 0 < q3 >>> 0 ? G5 + 1 | 0 : G5, s5 = AI(b4, C6, m3, h5), G5 = n4 + G5 | 0, G5 = (H5 = s5 + H5 | 0) >>> 0 < s5 >>> 0 ? G5 + 1 | 0 : G5, s5 = (q3 = AI(z3, B5, _3, c5)) + H5 | 0, H5 = n4 + G5 | 0, H5 = s5 >>> 0 < q3 >>> 0 ? H5 + 1 | 0 : H5, q3 = AI(P5, D5, $3, S4 = $3 >> 31), G5 = n4 + H5 | 0, G5 = (s5 = q3 + s5 | 0) >>> 0 < q3 >>> 0 ? G5 + 1 | 0 : G5, q3 = AI(u4, Q5, AA2, t5), H5 = n4 + G5 | 0, H5 = ((s5 = q3 + s5 | 0) >>> 0 < q3 >>> 0 ? H5 + 1 : H5) << 1 | s5 >>> 31, s5 = (G5 = R4) + (R4 = s5 << 1) | 0, G5 = H5 + T3 | 0, G5 = s5 >>> 0 < R4 >>> 0 ? G5 + 1 | 0 : G5, T3 = s5, q3 = H5 = s5 + 33554432 | 0, s5 = G5 = H5 >>> 0 < 33554432 ? G5 + 1 | 0 : G5, o4[A7 + 144 >> 2] = T3 - (-67108864 & H5), T3 = AI(G5 = F4(X3, 38), G5 >> 31, X3, f5), R4 = n4, v5 = AI(G5 = v5, H5 = G5 >> 31, G5, H5), H5 = n4 + R4 | 0, H5 = (G5 = v5 + T3 | 0) >>> 0 < v5 >>> 0 ? H5 + 1 | 0 : H5, R4 = (IA2 = AI(v5 = F4(_3, 19), U5 = v5 >> 31, T3 = L5 << 1, J5 = T3 >> 31)) + G5 | 0, G5 = n4 + H5 | 0, G5 = R4 >>> 0 < IA2 >>> 0 ? G5 + 1 | 0 : G5, H5 = R4, R4 = AI(W3, i2, O3, y5), G5 = n4 + G5 | 0, G5 = (H5 = H5 + R4 | 0) >>> 0 < R4 >>> 0 ? G5 + 1 | 0 : G5, R4 = (IA2 = AI(P5, D5, j3, w5)) + H5 | 0, H5 = n4 + G5 | 0, H5 = R4 >>> 0 < IA2 >>> 0 ? H5 + 1 | 0 : H5, IA2 = AI(b4, C6, u4, Q5), G5 = n4 + H5 | 0, IA2 = G5 = ((R4 = IA2 + R4 | 0) >>> 0 < IA2 >>> 0 ? G5 + 1 : G5) << 1 | R4 >>> 31, Y5 = H5 = (R4 = 33554432 + (K5 = R4 << 1) | 0) >>> 0 < 33554432 ? G5 + 1 | 0 : G5, QA2 = (67108863 & H5) << 6 | R4 >>> 26, hA2 = H5 >> 26, G5 = AI(v5, U5, m3, h5), x3 = n4, V3 = p5, H5 = (p5 = AI(z3, B5, p5, e4 = p5 >> 31)) + G5 | 0, G5 = n4 + x3 | 0, G5 = H5 >>> 0 < p5 >>> 0 ? G5 + 1 | 0 : G5, p5 = (x3 = AI(L5, E5, O3, y5)) + H5 | 0, H5 = n4 + G5 | 0, H5 = p5 >>> 0 < x3 >>> 0 ? H5 + 1 | 0 : H5, x3 = AI(P5, D5, W3, i2), G5 = n4 + H5 | 0, G5 = (p5 = x3 + p5 | 0) >>> 0 < x3 >>> 0 ? G5 + 1 | 0 : G5, x3 = AI(u4, Q5, CA2, l3), H5 = n4 + G5 | 0, H5 = ((p5 = x3 + p5 | 0) >>> 0 < x3 >>> 0 ? H5 + 1 : H5) << 1 | p5 >>> 31, p5 = (G5 = QA2) + (QA2 = p5 << 1) | 0, G5 = H5 + hA2 | 0, G5 = p5 >>> 0 < QA2 >>> 0 ? G5 + 1 | 0 : G5, hA2 = p5, QA2 = p5 = p5 + 16777216 | 0, N5 = (33554431 & (G5 = p5 >>> 0 < 16777216 ? G5 + 1 | 0 : G5)) << 7 | p5 >>> 25, x3 = G5 >> 25, G5 = AI(z3, B5, CA2, l3), p5 = n4, H5 = (V3 = AI(b4, C6, V3, e4)) + G5 | 0, G5 = n4 + p5 | 0, p5 = (v5 = AI(v5, U5, _3, c5)) + H5 | 0, H5 = n4 + (H5 >>> 0 < V3 >>> 0 ? G5 + 1 | 0 : G5) | 0, H5 = p5 >>> 0 < v5 >>> 0 ? H5 + 1 | 0 : H5, v5 = AI(m3, h5, O3, y5), G5 = n4 + H5 | 0, G5 = (p5 = v5 + p5 | 0) >>> 0 < v5 >>> 0 ? G5 + 1 | 0 : G5, H5 = p5, p5 = AI(P5, D5, T3, J5), G5 = n4 + G5 | 0, G5 = (H5 = H5 + p5 | 0) >>> 0 < p5 >>> 0 ? G5 + 1 | 0 : G5, p5 = (v5 = AI(u4, Q5, W3, i2)) + H5 | 0, H5 = n4 + G5 | 0, G5 = (G5 = (p5 >>> 0 < v5 >>> 0 ? H5 + 1 : H5) << 1 | p5 >>> 31) + x3 | 0, V3 = p5 = (H5 = p5 << 1) + N5 | 0, G5 = H5 >>> 0 > p5 >>> 0 ? G5 + 1 | 0 : G5, p5 = (v5 = p5 + 33554432 | 0) >>> 0 < 33554432 ? G5 + 1 | 0 : G5, o4[A7 + 128 >> 2] = V3 - (-67108864 & v5), G5 = AI(j3, w5, X3, f5), H5 = n4, V3 = AI(L5, E5, W3, i2), H5 = n4 + H5 | 0, H5 = (G5 = V3 + G5 | 0) >>> 0 < V3 >>> 0 ? H5 + 1 | 0 : H5, V3 = (x3 = AI(b4, C6, _3, c5)) + G5 | 0, G5 = n4 + H5 | 0, G5 = V3 >>> 0 < x3 >>> 0 ? G5 + 1 | 0 : G5, x3 = AI(z3, B5, gA2, a5), H5 = n4 + G5 | 0, H5 = (V3 = x3 + V3 | 0) >>> 0 < x3 >>> 0 ? H5 + 1 | 0 : H5, x3 = AI(u4, Q5, $3, S4), G5 = n4 + H5 | 0, G5 = (H5 = s5 >> 26) + (((V3 = x3 + V3 | 0) >>> 0 < x3 >>> 0 ? G5 + 1 : G5) << 1 | V3 >>> 31) | 0, G5 = (s5 = (q3 = (67108863 & s5) << 6 | q3 >>> 26) + (V3 << 1) | 0) >>> 0 < q3 >>> 0 ? G5 + 1 | 0 : G5, q3 = s5, H5 = G5, V3 = G5 = s5 + 16777216 | 0, s5 = H5 = G5 >>> 0 < 16777216 ? H5 + 1 | 0 : H5, o4[A7 + 148 >> 2] = q3 - (-33554432 & G5), G5 = AI(z3, B5, Z3, M5), Z3 = n4, H5 = (l3 = AI(b4, C6, CA2, l3)) + G5 | 0, G5 = n4 + Z3 | 0, G5 = H5 >>> 0 < l3 >>> 0 ? G5 + 1 | 0 : G5, O3 = AI(_3, c5, O3, y5), G5 = n4 + G5 | 0, G5 = (H5 = O3 + H5 | 0) >>> 0 < O3 >>> 0 ? G5 + 1 | 0 : G5, P5 = (O3 = AI(P5, D5, m3, h5)) + H5 | 0, H5 = n4 + G5 | 0, H5 = P5 >>> 0 < O3 >>> 0 ? H5 + 1 | 0 : H5, G5 = P5, P5 = AI(u4, Q5, L5, E5), H5 = n4 + H5 | 0, H5 = ((G5 = G5 + P5 | 0) >>> 0 < P5 >>> 0 ? H5 + 1 : H5) << 1, P5 = G5, G5 = (G5 = H5 | G5 >>> 31) + (H5 = p5 >> 26) | 0, G5 = (p5 = (q3 = P5 << 1) + (P5 = (67108863 & p5) << 6 | v5 >>> 26) | 0) >>> 0 < P5 >>> 0 ? G5 + 1 | 0 : G5, P5 = p5, O3 = H5 = p5 + 16777216 | 0, p5 = G5 = H5 >>> 0 < 16777216 ? G5 + 1 | 0 : G5, o4[A7 + 132 >> 2] = P5 - (-33554432 & H5), G5 = AI(_3, c5, j3, w5), P5 = n4, H5 = (L5 = AI(L5, E5, L5, E5)) + G5 | 0, G5 = n4 + P5 | 0, G5 = H5 >>> 0 < L5 >>> 0 ? G5 + 1 | 0 : G5, L5 = AI(W3, i2, m3, h5), G5 = n4 + G5 | 0, G5 = (H5 = L5 + H5 | 0) >>> 0 < L5 >>> 0 ? G5 + 1 | 0 : G5, L5 = AI(b4, C6, AA2, t5), G5 = n4 + G5 | 0, G5 = (H5 = L5 + H5 | 0) >>> 0 < L5 >>> 0 ? G5 + 1 | 0 : G5, L5 = (P5 = AI(z3, B5, $3, S4)) + H5 | 0, H5 = n4 + G5 | 0, H5 = L5 >>> 0 < P5 >>> 0 ? H5 + 1 | 0 : H5, G5 = L5, L5 = AI(L5 = u4, Q5, u4 = iA2, m3 = u4 >> 31), H5 = n4 + H5 | 0, H5 = ((G5 = G5 + L5 | 0) >>> 0 < L5 >>> 0 ? H5 + 1 : H5) << 1, L5 = G5, G5 = (G5 = H5 | G5 >>> 31) + (H5 = s5 >> 25) | 0, G5 = (s5 = (P5 = L5 << 1) + (L5 = (33554431 & s5) << 7 | V3 >>> 25) | 0) >>> 0 < L5 >>> 0 ? G5 + 1 | 0 : G5, L5 = s5, P5 = H5 = s5 + 33554432 | 0, s5 = G5 = H5 >>> 0 < 33554432 ? G5 + 1 | 0 : G5, o4[A7 + 152 >> 2] = L5 - (-67108864 & H5), H5 = k5 - (G5 = -67108864 & DA2) | 0, L5 = EA2 - ((G5 >>> 0 > k5 >>> 0) + oA2 | 0) | 0, G5 = p5 >> 25, p5 = (O3 = (33554431 & p5) << 7 | O3 >>> 25) + H5 | 0, H5 = G5 + L5 | 0, L5 = p5, G5 = H5 = p5 >>> 0 < O3 >>> 0 ? H5 + 1 | 0 : H5, G5 = ((67108863 & (G5 = (p5 = p5 + 33554432 | 0) >>> 0 < 33554432 ? G5 + 1 | 0 : G5)) << 6 | p5 >>> 26) + (l3 = BA2 - (-33554432 & cA2) | 0) | 0, o4[A7 + 140 >> 2] = G5, o4[A7 + 136 >> 2] = L5 - (-67108864 & p5), G5 = AI(W3, i2, _3, c5), H5 = n4, p5 = AI(X3, f5, T3, J5), H5 = n4 + H5 | 0, H5 = (G5 = p5 + G5 | 0) >>> 0 < p5 >>> 0 ? H5 + 1 | 0 : H5, p5 = (W3 = AI(j3, w5, gA2, a5)) + G5 | 0, G5 = n4 + H5 | 0, G5 = p5 >>> 0 < W3 >>> 0 ? G5 + 1 | 0 : G5, b4 = AI(b4, C6, $3, S4), H5 = n4 + G5 | 0, H5 = (p5 = b4 + p5 | 0) >>> 0 < b4 >>> 0 ? H5 + 1 | 0 : H5, b4 = AI(z3, B5, u4, m3), G5 = n4 + H5 | 0, G5 = (G5 = ((p5 = b4 + p5 | 0) >>> 0 < b4 >>> 0 ? G5 + 1 : G5) << 1 | p5 >>> 31) + (H5 = s5 >> 26) | 0, H5 = (s5 = (L5 = p5 << 1) + (p5 = (67108863 & s5) << 6 | P5 >>> 26) | 0) >>> 0 < p5 >>> 0 ? G5 + 1 | 0 : G5, H5 = (G5 = s5 + 16777216 | 0) >>> 0 < 16777216 ? H5 + 1 | 0 : H5, o4[A7 + 156 >> 2] = s5 - (-33554432 & G5), p5 = hA2 - (-33554432 & QA2) | 0, b4 = K5 - (s5 = -67108864 & R4) | 0, z3 = IA2 - ((s5 >>> 0 > K5 >>> 0) + Y5 | 0) | 0, s5 = AI((33554431 & H5) << 7 | G5 >>> 25, H5 >> 25, 19, 0), H5 = n4 + z3 | 0, H5 = (G5 = s5 + b4 | 0) >>> 0 < s5 >>> 0 ? H5 + 1 | 0 : H5, s5 = G5, H5 = ((67108863 & (H5 = (G5 = G5 + 33554432 | 0) >>> 0 < 33554432 ? H5 + 1 | 0 : H5)) << 6 | G5 >>> 26) + p5 | 0, o4[A7 + 124 >> 2] = H5, o4[A7 + 120 >> 2] = s5 - (-67108864 & G5), G5 = o4[I6 + 40 >> 2], H5 = o4[I6 + 44 >> 2], s5 = o4[I6 + 4 >> 2], p5 = o4[I6 + 48 >> 2], b4 = o4[I6 + 8 >> 2], z3 = o4[I6 + 52 >> 2], u4 = o4[I6 + 12 >> 2], W3 = o4[I6 + 56 >> 2], L5 = o4[I6 + 16 >> 2], P5 = o4[I6 + 60 >> 2], _3 = o4[I6 + 20 >> 2], m3 = o4[I6 - -64 >> 2], j3 = o4[I6 + 24 >> 2], O3 = o4[I6 + 68 >> 2], l3 = o4[I6 + 28 >> 2], X3 = o4[I6 + 72 >> 2], $3 = o4[I6 + 32 >> 2], CA2 = o4[I6 >> 2], o4[A7 + 76 >> 2] = o4[I6 + 76 >> 2] + o4[I6 + 36 >> 2], o4[A7 + 72 >> 2] = X3 + $3, o4[A7 + 68 >> 2] = O3 + l3, o4[(gA2 = A7 - -64 | 0) >> 2] = j3 + m3, o4[A7 + 60 >> 2] = P5 + _3, o4[A7 + 56 >> 2] = L5 + W3, o4[A7 + 52 >> 2] = u4 + z3, o4[A7 + 48 >> 2] = p5 + b4, o4[A7 + 44 >> 2] = H5 + s5, o4[(I6 = A7 + 40 | 0) >> 2] = G5 + CA2, d4(g6, I6), G5 = o4[A7 + 80 >> 2], H5 = o4[A7 + 4 >> 2], s5 = o4[A7 + 84 >> 2], p5 = o4[A7 + 8 >> 2], b4 = o4[A7 + 88 >> 2], z3 = o4[A7 + 12 >> 2], u4 = o4[A7 + 92 >> 2], W3 = o4[A7 + 16 >> 2], L5 = o4[A7 + 96 >> 2], P5 = o4[A7 + 20 >> 2], _3 = o4[A7 + 100 >> 2], m3 = o4[A7 + 24 >> 2], j3 = o4[A7 + 104 >> 2], O3 = o4[A7 + 28 >> 2], l3 = o4[A7 + 108 >> 2], X3 = o4[A7 + 32 >> 2], $3 = o4[A7 + 112 >> 2], CA2 = o4[A7 >> 2], v5 = (Z3 = o4[A7 + 116 >> 2]) - (AA2 = o4[A7 + 36 >> 2]) | 0, o4[A7 + 116 >> 2] = v5, T3 = $3 - X3 | 0, o4[A7 + 112 >> 2] = T3, R4 = l3 - O3 | 0, o4[A7 + 108 >> 2] = R4, iA2 = j3 - m3 | 0, o4[A7 + 104 >> 2] = iA2, EA2 = _3 - P5 | 0, o4[A7 + 100 >> 2] = EA2, DA2 = L5 - W3 | 0, o4[A7 + 96 >> 2] = DA2, oA2 = u4 - z3 | 0, o4[A7 + 92 >> 2] = oA2, BA2 = b4 - p5 | 0, o4[A7 + 88 >> 2] = BA2, cA2 = s5 - H5 | 0, o4[A7 + 84 >> 2] = cA2, q3 = G5 - CA2 | 0, o4[A7 + 80 >> 2] = q3, Z3 = Z3 + AA2 | 0, o4[A7 + 76 >> 2] = Z3, X3 = X3 + $3 | 0, o4[A7 + 72 >> 2] = X3, O3 = O3 + l3 | 0, o4[A7 + 68 >> 2] = O3, m3 = j3 + m3 | 0, o4[gA2 >> 2] = m3, P5 = P5 + _3 | 0, o4[A7 + 60 >> 2] = P5, W3 = L5 + W3 | 0, o4[A7 + 56 >> 2] = W3, z3 = u4 + z3 | 0, o4[A7 + 52 >> 2] = z3, p5 = p5 + b4 | 0, o4[A7 + 48 >> 2] = p5, H5 = H5 + s5 | 0, o4[A7 + 44 >> 2] = H5, s5 = I6, I6 = G5 + CA2 | 0, o4[s5 >> 2] = I6, G5 = o4[g6 >> 2], s5 = o4[g6 + 4 >> 2], b4 = o4[g6 + 8 >> 2], u4 = o4[g6 + 12 >> 2], L5 = o4[g6 + 16 >> 2], _3 = o4[g6 + 20 >> 2], j3 = o4[g6 + 24 >> 2], l3 = o4[g6 + 28 >> 2], $3 = o4[g6 + 32 >> 2], o4[A7 + 36 >> 2] = o4[g6 + 36 >> 2] - Z3, o4[A7 + 32 >> 2] = $3 - X3, o4[A7 + 28 >> 2] = l3 - O3, o4[A7 + 24 >> 2] = j3 - m3, o4[A7 + 20 >> 2] = _3 - P5, o4[A7 + 16 >> 2] = L5 - W3, o4[A7 + 12 >> 2] = u4 - z3, o4[A7 + 8 >> 2] = b4 - p5, o4[A7 + 4 >> 2] = s5 - H5, o4[A7 >> 2] = G5 - I6, I6 = o4[A7 + 120 >> 2], G5 = o4[A7 + 124 >> 2], H5 = o4[A7 + 128 >> 2], s5 = o4[A7 + 132 >> 2], p5 = o4[A7 + 136 >> 2], b4 = o4[A7 + 140 >> 2], z3 = o4[A7 + 144 >> 2], u4 = o4[A7 + 148 >> 2], W3 = o4[A7 + 152 >> 2], o4[A7 + 156 >> 2] = o4[A7 + 156 >> 2] - v5, o4[A7 + 152 >> 2] = W3 - T3, o4[A7 + 148 >> 2] = u4 - R4, o4[A7 + 144 >> 2] = z3 - iA2, o4[A7 + 140 >> 2] = b4 - EA2, o4[A7 + 136 >> 2] = p5 - DA2, o4[A7 + 132 >> 2] = s5 - oA2, o4[A7 + 128 >> 2] = H5 - BA2, o4[A7 + 124 >> 2] = G5 - cA2, o4[A7 + 120 >> 2] = I6 - q3, r4 = g6 + 48 | 0;
            }
            function p4(A7, I6, g6, C6) {
              var B5 = 0, Q5 = 0, i2 = 0, E5 = 0, D5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, r5 = 0, n5 = 0, t5 = 0, U5 = 0, J5 = 0, K5 = 0, e4 = 0, Y5 = 0, N5 = 0, G5 = 0, H5 = 0;
              for (G5 = g6, H5 = aI(16711935 & (B5 = c4[0 | I6] | c4[I6 + 1 | 0] << 8 | c4[I6 + 2 | 0] << 16 | c4[I6 + 3 | 0] << 24), 8) | 16711935 & aI(B5, 24), o4[G5 >> 2] = H5, G5 = g6, H5 = aI(16711935 & (B5 = c4[I6 + 4 | 0] | c4[I6 + 5 | 0] << 8 | c4[I6 + 6 | 0] << 16 | c4[I6 + 7 | 0] << 24), 8) | 16711935 & aI(B5, 24), o4[G5 + 4 >> 2] = H5, G5 = g6, H5 = aI(16711935 & (B5 = c4[I6 + 8 | 0] | c4[I6 + 9 | 0] << 8 | c4[I6 + 10 | 0] << 16 | c4[I6 + 11 | 0] << 24), 8) | 16711935 & aI(B5, 24), o4[G5 + 8 >> 2] = H5, G5 = g6, H5 = aI(16711935 & (B5 = c4[I6 + 12 | 0] | c4[I6 + 13 | 0] << 8 | c4[I6 + 14 | 0] << 16 | c4[I6 + 15 | 0] << 24), 8) | 16711935 & aI(B5, 24), o4[G5 + 12 >> 2] = H5, G5 = g6, H5 = aI(16711935 & (B5 = c4[I6 + 16 | 0] | c4[I6 + 17 | 0] << 8 | c4[I6 + 18 | 0] << 16 | c4[I6 + 19 | 0] << 24), 8) | 16711935 & aI(B5, 24), o4[G5 + 16 >> 2] = H5, G5 = g6, H5 = aI(16711935 & (B5 = c4[I6 + 20 | 0] | c4[I6 + 21 | 0] << 8 | c4[I6 + 22 | 0] << 16 | c4[I6 + 23 | 0] << 24), 8) | 16711935 & aI(B5, 24), o4[G5 + 20 >> 2] = H5, G5 = g6, H5 = aI(16711935 & (B5 = c4[I6 + 24 | 0] | c4[I6 + 25 | 0] << 8 | c4[I6 + 26 | 0] << 16 | c4[I6 + 27 | 0] << 24), 8) | 16711935 & aI(B5, 24), o4[G5 + 24 >> 2] = H5, G5 = g6, H5 = aI(16711935 & (B5 = c4[I6 + 28 | 0] | c4[I6 + 29 | 0] << 8 | c4[I6 + 30 | 0] << 16 | c4[I6 + 31 | 0] << 24), 8) | 16711935 & aI(B5, 24), o4[G5 + 28 >> 2] = H5, G5 = g6, H5 = aI(16711935 & (B5 = c4[I6 + 32 | 0] | c4[I6 + 33 | 0] << 8 | c4[I6 + 34 | 0] << 16 | c4[I6 + 35 | 0] << 24), 8) | 16711935 & aI(B5, 24), o4[G5 + 32 >> 2] = H5, G5 = g6, H5 = aI(16711935 & (B5 = c4[I6 + 36 | 0] | c4[I6 + 37 | 0] << 8 | c4[I6 + 38 | 0] << 16 | c4[I6 + 39 | 0] << 24), 8) | 16711935 & aI(B5, 24), o4[G5 + 36 >> 2] = H5, G5 = g6, H5 = aI(16711935 & (B5 = c4[I6 + 40 | 0] | c4[I6 + 41 | 0] << 8 | c4[I6 + 42 | 0] << 16 | c4[I6 + 43 | 0] << 24), 8) | 16711935 & aI(B5, 24), o4[G5 + 40 >> 2] = H5, G5 = g6, H5 = aI(16711935 & (B5 = c4[I6 + 44 | 0] | c4[I6 + 45 | 0] << 8 | c4[I6 + 46 | 0] << 16 | c4[I6 + 47 | 0] << 24), 8) | 16711935 & aI(B5, 24), o4[G5 + 44 >> 2] = H5, G5 = g6, H5 = aI(16711935 & (B5 = c4[I6 + 48 | 0] | c4[I6 + 49 | 0] << 8 | c4[I6 + 50 | 0] << 16 | c4[I6 + 51 | 0] << 24), 8) | 16711935 & aI(B5, 24), o4[G5 + 48 >> 2] = H5, G5 = g6, H5 = aI(16711935 & (B5 = c4[I6 + 52 | 0] | c4[I6 + 53 | 0] << 8 | c4[I6 + 54 | 0] << 16 | c4[I6 + 55 | 0] << 24), 8) | 16711935 & aI(B5, 24), o4[G5 + 52 >> 2] = H5, G5 = g6, H5 = aI(16711935 & (B5 = c4[I6 + 56 | 0] | c4[I6 + 57 | 0] << 8 | c4[I6 + 58 | 0] << 16 | c4[I6 + 59 | 0] << 24), 8) | 16711935 & aI(B5, 24), o4[G5 + 56 >> 2] = H5, G5 = g6, H5 = aI(16711935 & (I6 = c4[I6 + 60 | 0] | c4[I6 + 61 | 0] << 8 | c4[I6 + 62 | 0] << 16 | c4[I6 + 63 | 0] << 24), 8) | 16711935 & aI(I6, 24), o4[G5 + 60 >> 2] = H5, I6 = o4[A7 + 28 >> 2], o4[C6 + 24 >> 2] = o4[A7 + 24 >> 2], o4[C6 + 28 >> 2] = I6, I6 = o4[A7 + 20 >> 2], o4[C6 + 16 >> 2] = o4[A7 + 16 >> 2], o4[C6 + 20 >> 2] = I6, I6 = o4[A7 + 12 >> 2], o4[C6 + 8 >> 2] = o4[A7 + 8 >> 2], o4[C6 + 12 >> 2] = I6, I6 = o4[A7 + 4 >> 2], o4[C6 >> 2] = o4[A7 >> 2], o4[C6 + 4 >> 2] = I6; E5 = o4[C6 + 28 >> 2], I6 = (B5 = r5 << 2) + g6 | 0, D5 = o4[C6 + 16 >> 2], i2 = o4[I6 >> 2] + (kI(D5, 26) ^ kI(D5, 21) ^ kI(D5, 7)) | 0, w5 = (E5 = ((Q5 = o4[B5 + 39408 >> 2] + i2 | 0) + (D5 & ((i2 = o4[C6 + 24 >> 2]) ^ (f5 = o4[C6 + 20 >> 2])) ^ i2) | 0) + E5 | 0) + o4[C6 + 12 >> 2] | 0, o4[C6 + 12 >> 2] = w5, E5 = (F5 = E5 + (kI(Q5 = o4[C6 >> 2], 30) ^ kI(Q5, 19) ^ kI(Q5, 10)) | 0) + (Q5 & ((y5 = o4[C6 + 8 >> 2]) | (h5 = o4[C6 + 4 >> 2])) | h5 & y5) | 0, o4[C6 + 28 >> 2] = E5, y5 = (F5 = y5) + (i2 = (o4[(k5 = (y5 = 4 | B5) + g6 | 0) >> 2] + ((i2 + (f5 ^ w5 & (D5 ^ f5)) | 0) + (kI(w5, 26) ^ kI(w5, 21) ^ kI(w5, 7)) | 0) | 0) + o4[y5 + 39408 >> 2] | 0) | 0, o4[C6 + 8 >> 2] = y5, i2 = (i2 + (E5 & (Q5 | h5) | Q5 & h5) | 0) + (kI(E5, 30) ^ kI(E5, 19) ^ kI(E5, 10)) | 0, o4[C6 + 24 >> 2] = i2, f5 = (F5 = h5) + (h5 = (((f5 + o4[(h5 = 8 | B5) + g6 >> 2] | 0) + o4[h5 + 39408 >> 2] | 0) + (D5 ^ y5 & (D5 ^ w5)) | 0) + (kI(y5, 26) ^ kI(y5, 21) ^ kI(y5, 7)) | 0) | 0, o4[C6 + 4 >> 2] = f5, h5 = h5 + ((i2 & (Q5 | E5) | Q5 & E5) + (kI(i2, 30) ^ kI(i2, 19) ^ kI(i2, 10)) | 0) | 0, o4[C6 + 20 >> 2] = h5, D5 = (F5 = Q5) + (Q5 = (((D5 + o4[(Q5 = 12 | B5) + g6 >> 2] | 0) + o4[Q5 + 39408 >> 2] | 0) + (w5 ^ f5 & (y5 ^ w5)) | 0) + (kI(f5, 26) ^ kI(f5, 21) ^ kI(f5, 7)) | 0) | 0, o4[C6 >> 2] = D5, Q5 = Q5 + ((h5 & (i2 | E5) | i2 & E5) + (kI(h5, 30) ^ kI(h5, 19) ^ kI(h5, 10)) | 0) | 0, o4[C6 + 16 >> 2] = Q5, w5 = (F5 = ((((F5 = w5) + o4[(w5 = 16 | B5) + g6 >> 2] | 0) + o4[w5 + 39408 >> 2] | 0) + (y5 ^ D5 & (y5 ^ f5)) | 0) + (kI(D5, 26) ^ kI(D5, 21) ^ kI(D5, 7)) | 0) + ((Q5 & (i2 | h5) | i2 & h5) + (kI(Q5, 30) ^ kI(Q5, 19) ^ kI(Q5, 10)) | 0) | 0, o4[C6 + 12 >> 2] = w5, F5 = E5 + F5 | 0, o4[C6 + 28 >> 2] = F5, E5 = (y5 = (((y5 + o4[(E5 = 20 | B5) + g6 >> 2] | 0) + o4[E5 + 39408 >> 2] | 0) + (f5 ^ F5 & (D5 ^ f5)) | 0) + (kI(F5, 26) ^ kI(F5, 21) ^ kI(F5, 7)) | 0) + ((w5 & (Q5 | h5) | Q5 & h5) + (kI(w5, 30) ^ kI(w5, 19) ^ kI(w5, 10)) | 0) | 0, o4[C6 + 8 >> 2] = E5, y5 = i2 + y5 | 0, o4[C6 + 24 >> 2] = y5, i2 = (f5 = (((f5 + o4[(i2 = 24 | B5) + g6 >> 2] | 0) + o4[i2 + 39408 >> 2] | 0) + (D5 ^ y5 & (D5 ^ F5)) | 0) + (kI(y5, 26) ^ kI(y5, 21) ^ kI(y5, 7)) | 0) + ((E5 & (Q5 | w5) | Q5 & w5) + (kI(E5, 30) ^ kI(E5, 19) ^ kI(E5, 10)) | 0) | 0, o4[C6 + 4 >> 2] = i2, f5 = h5 + f5 | 0, o4[C6 + 20 >> 2] = f5, h5 = (D5 = (((D5 + o4[(h5 = 28 | B5) + g6 >> 2] | 0) + o4[h5 + 39408 >> 2] | 0) + (F5 ^ f5 & (y5 ^ F5)) | 0) + (kI(f5, 26) ^ kI(f5, 21) ^ kI(f5, 7)) | 0) + ((i2 & (E5 | w5) | E5 & w5) + (kI(i2, 30) ^ kI(i2, 19) ^ kI(i2, 10)) | 0) | 0, o4[C6 >> 2] = h5, D5 = Q5 + D5 | 0, o4[C6 + 16 >> 2] = D5, Q5 = (F5 = (((F5 + o4[(Q5 = 32 | B5) + g6 >> 2] | 0) + o4[Q5 + 39408 >> 2] | 0) + (y5 ^ D5 & (y5 ^ f5)) | 0) + (kI(D5, 26) ^ kI(D5, 21) ^ kI(D5, 7)) | 0) + ((h5 & (i2 | E5) | i2 & E5) + (kI(h5, 30) ^ kI(h5, 19) ^ kI(h5, 10)) | 0) | 0, o4[C6 + 28 >> 2] = Q5, F5 = w5 + F5 | 0, o4[C6 + 12 >> 2] = F5, w5 = (y5 = (((y5 + o4[(M5 = (w5 = 36 | B5) + g6 | 0) >> 2] | 0) + o4[w5 + 39408 >> 2] | 0) + (f5 ^ F5 & (D5 ^ f5)) | 0) + (kI(F5, 26) ^ kI(F5, 21) ^ kI(F5, 7)) | 0) + ((Q5 & (i2 | h5) | i2 & h5) + (kI(Q5, 30) ^ kI(Q5, 19) ^ kI(Q5, 10)) | 0) | 0, o4[C6 + 24 >> 2] = w5, y5 = E5 + y5 | 0, o4[C6 + 8 >> 2] = y5, E5 = (f5 = (((f5 + o4[(U5 = (E5 = 40 | B5) + g6 | 0) >> 2] | 0) + o4[E5 + 39408 >> 2] | 0) + (D5 ^ y5 & (D5 ^ F5)) | 0) + (kI(y5, 26) ^ kI(y5, 21) ^ kI(y5, 7)) | 0) + ((w5 & (Q5 | h5) | Q5 & h5) + (kI(w5, 30) ^ kI(w5, 19) ^ kI(w5, 10)) | 0) | 0, o4[C6 + 20 >> 2] = E5, f5 = i2 + f5 | 0, o4[C6 + 4 >> 2] = f5, J5 = (i2 = 44 | B5) + g6 | 0, i2 = (D5 = ((D5 + (o4[i2 + 39408 >> 2] + o4[J5 >> 2] | 0) | 0) + (F5 ^ f5 & (y5 ^ F5)) | 0) + (kI(f5, 26) ^ kI(f5, 21) ^ kI(f5, 7)) | 0) + ((E5 & (Q5 | w5) | Q5 & w5) + (kI(E5, 30) ^ kI(E5, 19) ^ kI(E5, 10)) | 0) | 0, o4[C6 + 16 >> 2] = i2, h5 = D5 + h5 | 0, o4[C6 >> 2] = h5, K5 = (D5 = 48 | B5) + g6 | 0, D5 = (F5 = ((F5 + (o4[D5 + 39408 >> 2] + o4[K5 >> 2] | 0) | 0) + (y5 ^ h5 & (y5 ^ f5)) | 0) + (kI(h5, 26) ^ kI(h5, 21) ^ kI(h5, 7)) | 0) + ((i2 & (E5 | w5) | E5 & w5) + (kI(i2, 30) ^ kI(i2, 19) ^ kI(i2, 10)) | 0) | 0, o4[C6 + 12 >> 2] = D5, Q5 = Q5 + F5 | 0, o4[C6 + 28 >> 2] = Q5, e4 = (F5 = 52 | B5) + g6 | 0, y5 = (F5 = (((o4[F5 + 39408 >> 2] + o4[e4 >> 2] | 0) + y5 | 0) + (f5 ^ Q5 & (h5 ^ f5)) | 0) + (kI(Q5, 26) ^ kI(Q5, 21) ^ kI(Q5, 7)) | 0) + ((D5 & (i2 | E5) | i2 & E5) + (kI(D5, 30) ^ kI(D5, 19) ^ kI(D5, 10)) | 0) | 0, o4[C6 + 8 >> 2] = y5, w5 = w5 + F5 | 0, o4[C6 + 24 >> 2] = w5, F5 = (S4 = 56 | B5) + g6 | 0, f5 = (S4 = (((o4[S4 + 39408 >> 2] + o4[F5 >> 2] | 0) + f5 | 0) + (h5 ^ w5 & (Q5 ^ h5)) | 0) + (kI(w5, 26) ^ kI(w5, 21) ^ kI(w5, 7)) | 0) + ((y5 & (i2 | D5) | i2 & D5) + (kI(y5, 30) ^ kI(y5, 19) ^ kI(y5, 10)) | 0) | 0, o4[C6 + 4 >> 2] = f5, E5 = E5 + S4 | 0, o4[C6 + 20 >> 2] = E5, Y5 = (B5 |= 60) + g6 | 0, E5 = (B5 = ((h5 + (o4[B5 + 39408 >> 2] + o4[Y5 >> 2] | 0) | 0) + (Q5 ^ E5 & (Q5 ^ w5)) | 0) + (kI(E5, 26) ^ kI(E5, 21) ^ kI(E5, 7)) | 0) + ((f5 & (D5 | y5) | D5 & y5) + (kI(f5, 30) ^ kI(f5, 19) ^ kI(f5, 10)) | 0) | 0, o4[C6 >> 2] = E5, o4[C6 + 16 >> 2] = B5 + i2, 48 != (0 | r5); ) r5 = r5 + 16 | 0, N5 = o4[M5 >> 2], M5 = o4[F5 >> 2], B5 = (Q5 = o4[I6 >> 2] + (N5 + (kI(M5, 15) ^ kI(M5, 13) ^ M5 >>> 10) | 0) | 0) + (kI(E5 = o4[k5 >> 2], 25) ^ kI(E5, 14) ^ E5 >>> 3) | 0, o4[(r5 << 2) + g6 >> 2] = B5, Q5 = (Q5 = (i2 = o4[I6 + 8 >> 2]) + ((h5 = o4[I6 + 44 >> 2]) + (kI(B5, 15) ^ kI(B5, 13) ^ B5 >>> 10) | 0) | 0) + (kI(D5 = o4[I6 + 12 >> 2], 25) ^ kI(D5, 14) ^ D5 >>> 3) | 0, o4[I6 + 72 >> 2] = Q5, i2 = ((w5 = (k5 = o4[I6 + 40 >> 2]) + E5 | 0) + (kI(E5 = o4[I6 + 60 >> 2], 15) ^ kI(E5, 13) ^ E5 >>> 10) | 0) + (kI(i2, 25) ^ kI(i2, 14) ^ i2 >>> 3) | 0, o4[I6 + 68 >> 2] = i2, f5 = (F5 = (w5 = o4[I6 + 16 >> 2]) + ((y5 = o4[I6 + 52 >> 2]) + (kI(Q5, 15) ^ kI(Q5, 13) ^ Q5 >>> 10) | 0) | 0) + (kI(S4 = o4[I6 + 20 >> 2], 25) ^ kI(S4, 14) ^ S4 >>> 3) | 0, o4[I6 + 80 >> 2] = f5, w5 = (D5 + ((n5 = o4[I6 + 48 >> 2]) + (kI(i2, 15) ^ kI(i2, 13) ^ i2 >>> 10) | 0) | 0) + (kI(w5, 25) ^ kI(w5, 14) ^ w5 >>> 3) | 0, o4[I6 + 76 >> 2] = w5, F5 = (F5 = (D5 = o4[I6 + 24 >> 2]) + (E5 + (kI(f5, 15) ^ kI(f5, 13) ^ f5 >>> 10) | 0) | 0) + (kI(a5 = o4[I6 + 28 >> 2], 25) ^ kI(a5, 14) ^ a5 >>> 3) | 0, o4[I6 + 88 >> 2] = F5, D5 = (S4 + ((t5 = o4[I6 + 56 >> 2]) + (kI(w5, 15) ^ kI(w5, 13) ^ w5 >>> 10) | 0) | 0) + (kI(D5, 25) ^ kI(D5, 14) ^ D5 >>> 3) | 0, o4[I6 + 84 >> 2] = D5, S4 = (S4 = (B5 + a5 | 0) + (kI(D5, 15) ^ kI(D5, 13) ^ D5 >>> 10) | 0) + (kI(a5 = o4[I6 + 32 >> 2], 25) ^ kI(a5, 14) ^ a5 >>> 3) | 0, o4[I6 + 92 >> 2] = S4, i2 = (a5 = (i2 + a5 | 0) + (kI(F5, 15) ^ kI(F5, 13) ^ F5 >>> 10) | 0) + (kI(i2 = o4[I6 + 36 >> 2], 25) ^ kI(i2, 14) ^ i2 >>> 3) | 0, o4[I6 + 96 >> 2] = i2, Q5 = (Q5 + ((kI(k5, 25) ^ kI(k5, 14) ^ k5 >>> 3) + N5 | 0) | 0) + (kI(S4, 15) ^ kI(S4, 13) ^ S4 >>> 10) | 0, o4[I6 + 100 >> 2] = Q5, h5 = (o4[U5 >> 2] + (w5 + (kI(h5, 25) ^ kI(h5, 14) ^ h5 >>> 3) | 0) | 0) + (kI(i2, 15) ^ kI(i2, 13) ^ i2 >>> 10) | 0, o4[I6 + 104 >> 2] = h5, Q5 = (o4[J5 >> 2] + (f5 + (kI(n5, 25) ^ kI(n5, 14) ^ n5 >>> 3) | 0) | 0) + (kI(Q5, 15) ^ kI(Q5, 13) ^ Q5 >>> 10) | 0, o4[I6 + 108 >> 2] = Q5, h5 = (o4[K5 >> 2] + (D5 + (kI(y5, 25) ^ kI(y5, 14) ^ y5 >>> 3) | 0) | 0) + (kI(h5, 15) ^ kI(h5, 13) ^ h5 >>> 10) | 0, o4[I6 + 112 >> 2] = h5, Q5 = (o4[e4 >> 2] + (F5 + (kI(t5, 25) ^ kI(t5, 14) ^ t5 >>> 3) | 0) | 0) + (kI(Q5, 15) ^ kI(Q5, 13) ^ Q5 >>> 10) | 0, o4[I6 + 116 >> 2] = Q5, G5 = I6, H5 = (S4 + (M5 + (kI(E5, 25) ^ kI(E5, 14) ^ E5 >>> 3) | 0) | 0) + (kI(h5, 15) ^ kI(h5, 13) ^ h5 >>> 10) | 0, o4[G5 + 120 >> 2] = H5, G5 = I6, H5 = (o4[Y5 >> 2] + (i2 + (kI(B5, 25) ^ kI(B5, 14) ^ B5 >>> 3) | 0) | 0) + (kI(Q5, 15) ^ kI(Q5, 13) ^ Q5 >>> 10) | 0, o4[G5 + 124 >> 2] = H5;
              o4[A7 >> 2] = E5 + o4[A7 >> 2], o4[A7 + 4 >> 2] = o4[A7 + 4 >> 2] + o4[C6 + 4 >> 2], o4[A7 + 8 >> 2] = o4[A7 + 8 >> 2] + o4[C6 + 8 >> 2], o4[A7 + 12 >> 2] = o4[A7 + 12 >> 2] + o4[C6 + 12 >> 2], o4[A7 + 16 >> 2] = o4[A7 + 16 >> 2] + o4[C6 + 16 >> 2], o4[A7 + 20 >> 2] = o4[A7 + 20 >> 2] + o4[C6 + 20 >> 2], o4[A7 + 24 >> 2] = o4[A7 + 24 >> 2] + o4[C6 + 24 >> 2], o4[A7 + 28 >> 2] = o4[A7 + 28 >> 2] + o4[C6 + 28 >> 2];
            }
            function L4(A7, I6) {
              var g6, C6, B5, Q5, i2, E5, D5, h5, w5, F5, y5, f5, S4, a5, k5, M5, n5 = 0, t5 = 0, U5 = 0;
              r4 = g6 = r4 - 544 | 0, C6 = c4[A7 + 60 | 0] | c4[A7 + 61 | 0] << 8 | c4[A7 + 62 | 0] << 16 | c4[A7 + 63 | 0] << 24, B5 = c4[A7 + 56 | 0] | c4[A7 + 57 | 0] << 8 | c4[A7 + 58 | 0] << 16 | c4[A7 + 59 | 0] << 24, Q5 = c4[A7 + 52 | 0] | c4[A7 + 53 | 0] << 8 | c4[A7 + 54 | 0] << 16 | c4[A7 + 55 | 0] << 24, i2 = c4[A7 + 48 | 0] | c4[A7 + 49 | 0] << 8 | c4[A7 + 50 | 0] << 16 | c4[A7 + 51 | 0] << 24, E5 = c4[A7 + 32 | 0] | c4[A7 + 33 | 0] << 8 | c4[A7 + 34 | 0] << 16 | c4[A7 + 35 | 0] << 24, D5 = c4[A7 + 36 | 0] | c4[A7 + 37 | 0] << 8 | c4[A7 + 38 | 0] << 16 | c4[A7 + 39 | 0] << 24, h5 = c4[A7 + 40 | 0] | c4[A7 + 41 | 0] << 8 | c4[A7 + 42 | 0] << 16 | c4[A7 + 43 | 0] << 24, w5 = c4[A7 + 44 | 0] | c4[A7 + 45 | 0] << 8 | c4[A7 + 46 | 0] << 16 | c4[A7 + 47 | 0] << 24, n5 = c4[A7 + 28 | 0] | c4[A7 + 29 | 0] << 8 | c4[A7 + 30 | 0] << 16 | c4[A7 + 31 | 0] << 24, F5 = c4[A7 + 24 | 0] | c4[A7 + 25 | 0] << 8 | c4[A7 + 26 | 0] << 16 | c4[A7 + 27 | 0] << 24, y5 = c4[A7 + 20 | 0] | c4[A7 + 21 | 0] << 8 | c4[A7 + 22 | 0] << 16 | c4[A7 + 23 | 0] << 24, f5 = c4[A7 + 16 | 0] | c4[A7 + 17 | 0] << 8 | c4[A7 + 18 | 0] << 16 | c4[A7 + 19 | 0] << 24, S4 = c4[A7 + 4 | 0] | c4[A7 + 5 | 0] << 8 | c4[A7 + 6 | 0] << 16 | c4[A7 + 7 | 0] << 24, a5 = c4[A7 + 8 | 0] | c4[A7 + 9 | 0] << 8 | c4[A7 + 10 | 0] << 16 | c4[A7 + 11 | 0] << 24, k5 = c4[A7 + 12 | 0] | c4[A7 + 13 | 0] << 8 | c4[A7 + 14 | 0] << 16 | c4[A7 + 15 | 0] << 24, M5 = c4[0 | A7] | c4[A7 + 1 | 0] << 8 | c4[A7 + 2 | 0] << 16 | c4[A7 + 3 | 0] << 24, A7 = o4[I6 + 124 >> 2], o4[g6 + 536 >> 2] = o4[I6 + 120 >> 2], o4[g6 + 540 >> 2] = A7, A7 = o4[I6 + 116 >> 2], o4[g6 + 528 >> 2] = o4[I6 + 112 >> 2], o4[g6 + 532 >> 2] = A7, A7 = o4[I6 + 100 >> 2], o4[g6 + 496 >> 2] = o4[I6 + 96 >> 2], o4[g6 + 500 >> 2] = A7, A7 = o4[I6 + 108 >> 2], o4[g6 + 504 >> 2] = o4[I6 + 104 >> 2], o4[g6 + 508 >> 2] = A7, A7 = o4[I6 + 116 >> 2], o4[g6 + 480 >> 2] = o4[I6 + 112 >> 2], o4[g6 + 484 >> 2] = A7, A7 = o4[I6 + 124 >> 2], o4[g6 + 488 >> 2] = o4[I6 + 120 >> 2], o4[g6 + 492 >> 2] = A7, GA(A7 = g6 + 512 | 0, g6 + 496 | 0, g6 + 480 | 0), U5 = o4[g6 + 524 >> 2], o4[I6 + 120 >> 2] = o4[g6 + 520 >> 2], o4[I6 + 124 >> 2] = U5, U5 = o4[g6 + 516 >> 2], o4[I6 + 112 >> 2] = o4[g6 + 512 >> 2], o4[I6 + 116 >> 2] = U5, U5 = o4[I6 + 84 >> 2], o4[g6 + 464 >> 2] = o4[I6 + 80 >> 2], o4[g6 + 468 >> 2] = U5, U5 = o4[I6 + 92 >> 2], o4[g6 + 472 >> 2] = o4[I6 + 88 >> 2], o4[g6 + 476 >> 2] = U5, U5 = o4[I6 + 100 >> 2], o4[g6 + 448 >> 2] = o4[I6 + 96 >> 2], o4[g6 + 452 >> 2] = U5, U5 = o4[I6 + 108 >> 2], o4[g6 + 456 >> 2] = o4[I6 + 104 >> 2], o4[g6 + 460 >> 2] = U5, GA(A7, g6 + 464 | 0, g6 + 448 | 0), U5 = o4[g6 + 524 >> 2], o4[I6 + 104 >> 2] = o4[g6 + 520 >> 2], o4[I6 + 108 >> 2] = U5, U5 = o4[g6 + 516 >> 2], o4[I6 + 96 >> 2] = o4[g6 + 512 >> 2], o4[I6 + 100 >> 2] = U5, t5 = o4[4 + (U5 = I6 - -64 | 0) >> 2], o4[g6 + 432 >> 2] = o4[U5 >> 2], o4[g6 + 436 >> 2] = t5, t5 = o4[I6 + 76 >> 2], o4[g6 + 440 >> 2] = o4[I6 + 72 >> 2], o4[g6 + 444 >> 2] = t5, t5 = o4[I6 + 84 >> 2], o4[g6 + 416 >> 2] = o4[I6 + 80 >> 2], o4[g6 + 420 >> 2] = t5, t5 = o4[I6 + 92 >> 2], o4[g6 + 424 >> 2] = o4[I6 + 88 >> 2], o4[g6 + 428 >> 2] = t5, GA(A7, g6 + 432 | 0, g6 + 416 | 0), t5 = o4[g6 + 524 >> 2], o4[I6 + 88 >> 2] = o4[g6 + 520 >> 2], o4[I6 + 92 >> 2] = t5, t5 = o4[g6 + 516 >> 2], o4[I6 + 80 >> 2] = o4[g6 + 512 >> 2], o4[I6 + 84 >> 2] = t5, t5 = o4[I6 + 52 >> 2], o4[g6 + 400 >> 2] = o4[I6 + 48 >> 2], o4[g6 + 404 >> 2] = t5, t5 = o4[I6 + 60 >> 2], o4[g6 + 408 >> 2] = o4[I6 + 56 >> 2], o4[g6 + 412 >> 2] = t5, t5 = o4[U5 + 4 >> 2], o4[g6 + 384 >> 2] = o4[U5 >> 2], o4[g6 + 388 >> 2] = t5, t5 = o4[I6 + 76 >> 2], o4[g6 + 392 >> 2] = o4[I6 + 72 >> 2], o4[g6 + 396 >> 2] = t5, GA(A7, g6 + 400 | 0, g6 + 384 | 0), t5 = o4[g6 + 524 >> 2], o4[I6 + 72 >> 2] = o4[g6 + 520 >> 2], o4[I6 + 76 >> 2] = t5, t5 = o4[g6 + 516 >> 2], o4[U5 >> 2] = o4[g6 + 512 >> 2], o4[U5 + 4 >> 2] = t5, t5 = o4[I6 + 36 >> 2], o4[g6 + 368 >> 2] = o4[I6 + 32 >> 2], o4[g6 + 372 >> 2] = t5, t5 = o4[I6 + 44 >> 2], o4[g6 + 376 >> 2] = o4[I6 + 40 >> 2], o4[g6 + 380 >> 2] = t5, t5 = o4[I6 + 52 >> 2], o4[g6 + 352 >> 2] = o4[I6 + 48 >> 2], o4[g6 + 356 >> 2] = t5, t5 = o4[I6 + 60 >> 2], o4[g6 + 360 >> 2] = o4[I6 + 56 >> 2], o4[g6 + 364 >> 2] = t5, GA(A7, g6 + 368 | 0, g6 + 352 | 0), t5 = o4[g6 + 524 >> 2], o4[I6 + 56 >> 2] = o4[g6 + 520 >> 2], o4[I6 + 60 >> 2] = t5, t5 = o4[g6 + 516 >> 2], o4[I6 + 48 >> 2] = o4[g6 + 512 >> 2], o4[I6 + 52 >> 2] = t5, t5 = o4[I6 + 20 >> 2], o4[g6 + 336 >> 2] = o4[I6 + 16 >> 2], o4[g6 + 340 >> 2] = t5, t5 = o4[I6 + 28 >> 2], o4[g6 + 344 >> 2] = o4[I6 + 24 >> 2], o4[g6 + 348 >> 2] = t5, t5 = o4[I6 + 36 >> 2], o4[g6 + 320 >> 2] = o4[I6 + 32 >> 2], o4[g6 + 324 >> 2] = t5, t5 = o4[I6 + 44 >> 2], o4[g6 + 328 >> 2] = o4[I6 + 40 >> 2], o4[g6 + 332 >> 2] = t5, GA(A7, g6 + 336 | 0, g6 + 320 | 0), t5 = o4[g6 + 524 >> 2], o4[I6 + 40 >> 2] = o4[g6 + 520 >> 2], o4[I6 + 44 >> 2] = t5, t5 = o4[g6 + 516 >> 2], o4[I6 + 32 >> 2] = o4[g6 + 512 >> 2], o4[I6 + 36 >> 2] = t5, t5 = o4[I6 + 4 >> 2], o4[g6 + 304 >> 2] = o4[I6 >> 2], o4[g6 + 308 >> 2] = t5, t5 = o4[I6 + 12 >> 2], o4[g6 + 312 >> 2] = o4[I6 + 8 >> 2], o4[g6 + 316 >> 2] = t5, t5 = o4[I6 + 20 >> 2], o4[g6 + 288 >> 2] = o4[I6 + 16 >> 2], o4[g6 + 292 >> 2] = t5, t5 = o4[I6 + 28 >> 2], o4[g6 + 296 >> 2] = o4[I6 + 24 >> 2], o4[g6 + 300 >> 2] = t5, GA(A7, g6 + 304 | 0, g6 + 288 | 0), t5 = o4[g6 + 524 >> 2], o4[I6 + 24 >> 2] = o4[g6 + 520 >> 2], o4[I6 + 28 >> 2] = t5, t5 = o4[g6 + 516 >> 2], o4[I6 + 16 >> 2] = o4[g6 + 512 >> 2], o4[I6 + 20 >> 2] = t5, t5 = o4[g6 + 532 >> 2], o4[g6 + 272 >> 2] = o4[g6 + 528 >> 2], o4[g6 + 276 >> 2] = t5, t5 = o4[g6 + 540 >> 2], o4[g6 + 280 >> 2] = o4[g6 + 536 >> 2], o4[g6 + 284 >> 2] = t5, t5 = o4[I6 + 4 >> 2], o4[g6 + 256 >> 2] = o4[I6 >> 2], o4[g6 + 260 >> 2] = t5, t5 = o4[I6 + 12 >> 2], o4[g6 + 264 >> 2] = o4[I6 + 8 >> 2], o4[g6 + 268 >> 2] = t5, GA(A7, g6 + 272 | 0, g6 + 256 | 0), t5 = o4[g6 + 524 >> 2], o4[I6 + 8 >> 2] = o4[g6 + 520 >> 2], o4[I6 + 12 >> 2] = t5, t5 = o4[g6 + 516 >> 2], o4[I6 >> 2] = o4[g6 + 512 >> 2], o4[I6 + 4 >> 2] = t5, o4[I6 + 12 >> 2] = o4[I6 + 12 >> 2] ^ k5, o4[I6 + 8 >> 2] = o4[I6 + 8 >> 2] ^ a5, o4[I6 + 4 >> 2] = o4[I6 + 4 >> 2] ^ S4, o4[I6 >> 2] = o4[I6 >> 2] ^ M5, o4[U5 >> 2] = o4[U5 >> 2] ^ f5, o4[I6 + 68 >> 2] = o4[I6 + 68 >> 2] ^ y5, o4[I6 + 72 >> 2] = o4[I6 + 72 >> 2] ^ F5, o4[I6 + 76 >> 2] = o4[I6 + 76 >> 2] ^ n5, n5 = o4[I6 + 124 >> 2], o4[g6 + 536 >> 2] = o4[I6 + 120 >> 2], o4[g6 + 540 >> 2] = n5, n5 = o4[I6 + 116 >> 2], o4[g6 + 528 >> 2] = o4[I6 + 112 >> 2], o4[g6 + 532 >> 2] = n5, n5 = o4[I6 + 100 >> 2], o4[g6 + 240 >> 2] = o4[I6 + 96 >> 2], o4[g6 + 244 >> 2] = n5, n5 = o4[I6 + 108 >> 2], o4[g6 + 248 >> 2] = o4[I6 + 104 >> 2], o4[g6 + 252 >> 2] = n5, n5 = o4[I6 + 116 >> 2], o4[g6 + 224 >> 2] = o4[I6 + 112 >> 2], o4[g6 + 228 >> 2] = n5, n5 = o4[I6 + 124 >> 2], o4[g6 + 232 >> 2] = o4[I6 + 120 >> 2], o4[g6 + 236 >> 2] = n5, GA(A7, g6 + 240 | 0, g6 + 224 | 0), n5 = o4[g6 + 524 >> 2], o4[I6 + 120 >> 2] = o4[g6 + 520 >> 2], o4[I6 + 124 >> 2] = n5, n5 = o4[g6 + 516 >> 2], o4[I6 + 112 >> 2] = o4[g6 + 512 >> 2], o4[I6 + 116 >> 2] = n5, n5 = o4[I6 + 84 >> 2], o4[g6 + 208 >> 2] = o4[I6 + 80 >> 2], o4[g6 + 212 >> 2] = n5, n5 = o4[I6 + 92 >> 2], o4[g6 + 216 >> 2] = o4[I6 + 88 >> 2], o4[g6 + 220 >> 2] = n5, n5 = o4[I6 + 100 >> 2], o4[g6 + 192 >> 2] = o4[I6 + 96 >> 2], o4[g6 + 196 >> 2] = n5, n5 = o4[I6 + 108 >> 2], o4[g6 + 200 >> 2] = o4[I6 + 104 >> 2], o4[g6 + 204 >> 2] = n5, GA(A7, g6 + 208 | 0, g6 + 192 | 0), n5 = o4[g6 + 524 >> 2], o4[I6 + 104 >> 2] = o4[g6 + 520 >> 2], o4[I6 + 108 >> 2] = n5, n5 = o4[g6 + 516 >> 2], o4[I6 + 96 >> 2] = o4[g6 + 512 >> 2], o4[I6 + 100 >> 2] = n5, n5 = o4[U5 + 4 >> 2], o4[g6 + 176 >> 2] = o4[U5 >> 2], o4[g6 + 180 >> 2] = n5, n5 = o4[I6 + 76 >> 2], o4[g6 + 184 >> 2] = o4[I6 + 72 >> 2], o4[g6 + 188 >> 2] = n5, n5 = o4[I6 + 84 >> 2], o4[g6 + 160 >> 2] = o4[I6 + 80 >> 2], o4[g6 + 164 >> 2] = n5, n5 = o4[I6 + 92 >> 2], o4[g6 + 168 >> 2] = o4[I6 + 88 >> 2], o4[g6 + 172 >> 2] = n5, GA(A7, g6 + 176 | 0, g6 + 160 | 0), n5 = o4[g6 + 524 >> 2], o4[I6 + 88 >> 2] = o4[g6 + 520 >> 2], o4[I6 + 92 >> 2] = n5, n5 = o4[g6 + 516 >> 2], o4[I6 + 80 >> 2] = o4[g6 + 512 >> 2], o4[I6 + 84 >> 2] = n5, n5 = o4[I6 + 52 >> 2], o4[g6 + 144 >> 2] = o4[I6 + 48 >> 2], o4[g6 + 148 >> 2] = n5, n5 = o4[I6 + 60 >> 2], o4[g6 + 152 >> 2] = o4[I6 + 56 >> 2], o4[g6 + 156 >> 2] = n5, n5 = o4[U5 + 4 >> 2], o4[g6 + 128 >> 2] = o4[U5 >> 2], o4[g6 + 132 >> 2] = n5, n5 = o4[I6 + 76 >> 2], o4[g6 + 136 >> 2] = o4[I6 + 72 >> 2], o4[g6 + 140 >> 2] = n5, GA(A7, g6 + 144 | 0, g6 + 128 | 0), n5 = o4[g6 + 524 >> 2], o4[I6 + 72 >> 2] = o4[g6 + 520 >> 2], o4[I6 + 76 >> 2] = n5, n5 = o4[g6 + 516 >> 2], o4[U5 >> 2] = o4[g6 + 512 >> 2], o4[U5 + 4 >> 2] = n5, n5 = o4[I6 + 36 >> 2], o4[g6 + 112 >> 2] = o4[I6 + 32 >> 2], o4[g6 + 116 >> 2] = n5, n5 = o4[I6 + 44 >> 2], o4[g6 + 120 >> 2] = o4[I6 + 40 >> 2], o4[g6 + 124 >> 2] = n5, n5 = o4[I6 + 52 >> 2], o4[g6 + 96 >> 2] = o4[I6 + 48 >> 2], o4[g6 + 100 >> 2] = n5, n5 = o4[I6 + 60 >> 2], o4[g6 + 104 >> 2] = o4[I6 + 56 >> 2], o4[g6 + 108 >> 2] = n5, GA(A7, g6 + 112 | 0, g6 + 96 | 0), n5 = o4[g6 + 524 >> 2], o4[I6 + 56 >> 2] = o4[g6 + 520 >> 2], o4[I6 + 60 >> 2] = n5, n5 = o4[g6 + 516 >> 2], o4[I6 + 48 >> 2] = o4[g6 + 512 >> 2], o4[I6 + 52 >> 2] = n5, n5 = o4[I6 + 20 >> 2], o4[g6 + 80 >> 2] = o4[I6 + 16 >> 2], o4[g6 + 84 >> 2] = n5, n5 = o4[I6 + 28 >> 2], o4[g6 + 88 >> 2] = o4[I6 + 24 >> 2], o4[g6 + 92 >> 2] = n5, n5 = o4[I6 + 36 >> 2], o4[g6 + 64 >> 2] = o4[I6 + 32 >> 2], o4[g6 + 68 >> 2] = n5, n5 = o4[I6 + 44 >> 2], o4[g6 + 72 >> 2] = o4[I6 + 40 >> 2], o4[g6 + 76 >> 2] = n5, GA(A7, g6 + 80 | 0, g6 - -64 | 0), n5 = o4[g6 + 524 >> 2], o4[I6 + 40 >> 2] = o4[g6 + 520 >> 2], o4[I6 + 44 >> 2] = n5, n5 = o4[g6 + 516 >> 2], o4[I6 + 32 >> 2] = o4[g6 + 512 >> 2], o4[I6 + 36 >> 2] = n5, n5 = o4[I6 + 4 >> 2], o4[g6 + 48 >> 2] = o4[I6 >> 2], o4[g6 + 52 >> 2] = n5, n5 = o4[I6 + 12 >> 2], o4[g6 + 56 >> 2] = o4[I6 + 8 >> 2], o4[g6 + 60 >> 2] = n5, n5 = o4[I6 + 20 >> 2], o4[g6 + 32 >> 2] = o4[I6 + 16 >> 2], o4[g6 + 36 >> 2] = n5, n5 = o4[I6 + 28 >> 2], o4[g6 + 40 >> 2] = o4[I6 + 24 >> 2], o4[g6 + 44 >> 2] = n5, GA(A7, g6 + 48 | 0, g6 + 32 | 0), n5 = o4[g6 + 524 >> 2], o4[I6 + 24 >> 2] = o4[g6 + 520 >> 2], o4[I6 + 28 >> 2] = n5, n5 = o4[g6 + 516 >> 2], o4[I6 + 16 >> 2] = o4[g6 + 512 >> 2], o4[I6 + 20 >> 2] = n5, n5 = o4[g6 + 532 >> 2], o4[g6 + 16 >> 2] = o4[g6 + 528 >> 2], o4[g6 + 20 >> 2] = n5, n5 = o4[g6 + 540 >> 2], o4[g6 + 24 >> 2] = o4[g6 + 536 >> 2], o4[g6 + 28 >> 2] = n5, n5 = o4[I6 + 4 >> 2], o4[g6 >> 2] = o4[I6 >> 2], o4[g6 + 4 >> 2] = n5, n5 = o4[I6 + 12 >> 2], o4[g6 + 8 >> 2] = o4[I6 + 8 >> 2], o4[g6 + 12 >> 2] = n5, GA(A7, g6 + 16 | 0, g6), A7 = o4[g6 + 524 >> 2], o4[I6 + 8 >> 2] = o4[g6 + 520 >> 2], o4[I6 + 12 >> 2] = A7, A7 = o4[g6 + 516 >> 2], o4[I6 >> 2] = o4[g6 + 512 >> 2], o4[I6 + 4 >> 2] = A7, o4[I6 + 12 >> 2] = o4[I6 + 12 >> 2] ^ w5, o4[I6 + 8 >> 2] = o4[I6 + 8 >> 2] ^ h5, o4[I6 + 4 >> 2] = o4[I6 + 4 >> 2] ^ D5, o4[I6 >> 2] = o4[I6 >> 2] ^ E5, o4[U5 >> 2] = o4[U5 >> 2] ^ i2, o4[I6 + 68 >> 2] = o4[I6 + 68 >> 2] ^ Q5, o4[I6 + 72 >> 2] = o4[I6 + 72 >> 2] ^ B5, o4[I6 + 76 >> 2] = o4[I6 + 76 >> 2] ^ C6, r4 = g6 + 544 | 0;
            }
            function d4(A7, I6) {
              var g6, C6, B5, Q5, i2, E5, D5, c5, h5, w5, y5, f5, S4, a5, k5, M5, r5, t5, U5, J5, K5, e4, Y5, N5, G5, H5, s5, p5, L5, d5, P5, R4, b4 = 0, v5 = 0, u4 = 0, z3 = 0, O3 = 0, q3 = 0, W3 = 0, x3 = 0, V3 = 0, j3 = 0, m3 = 0, l3 = 0, _3 = 0, X3 = 0, T3 = 0, Z3 = 0, $3 = 0, AA2 = 0, IA2 = 0, gA2 = 0, CA2 = 0, BA2 = 0;
              b4 = AI(C6 = (M5 = o4[I6 + 12 >> 2]) << 1, E5 = C6 >> 31, M5, K5 = M5 >> 31), u4 = n4, v5 = (V3 = AI(O3 = o4[I6 + 16 >> 2], D5 = O3 >> 31, c5 = (z3 = o4[I6 + 8 >> 2]) << 1, f5 = c5 >> 31)) + b4 | 0, b4 = n4 + u4 | 0, b4 = v5 >>> 0 < V3 >>> 0 ? b4 + 1 | 0 : b4, u4 = (j3 = AI(_3 = (h5 = o4[I6 + 20 >> 2]) << 1, S4 = _3 >> 31, V3 = (q3 = o4[I6 + 4 >> 2]) << 1, B5 = V3 >> 31)) + v5 | 0, v5 = n4 + b4 | 0, v5 = u4 >>> 0 < j3 >>> 0 ? v5 + 1 | 0 : v5, W3 = AI(g6 = o4[I6 + 24 >> 2], w5 = g6 >> 31, j3 = (Z3 = o4[I6 >> 2]) << 1, Q5 = j3 >> 31), b4 = n4 + v5 | 0, b4 = (u4 = W3 + u4 | 0) >>> 0 < W3 >>> 0 ? b4 + 1 | 0 : b4, v5 = u4, a5 = o4[I6 + 32 >> 2], u4 = AI(m3 = F4(a5, 19), y5 = m3 >> 31, a5, t5 = a5 >> 31), b4 = n4 + b4 | 0, b4 = (v5 = v5 + u4 | 0) >>> 0 < u4 >>> 0 ? b4 + 1 | 0 : b4, H5 = o4[I6 + 36 >> 2], u4 = AI(W3 = F4(H5, 38), i2 = W3 >> 31, U5 = (k5 = o4[I6 + 28 >> 2]) << 1, e4 = U5 >> 31), I6 = n4 + b4 | 0, T3 = v5 = u4 + v5 | 0, u4 = v5 >>> 0 < u4 >>> 0 ? I6 + 1 | 0 : I6, I6 = AI(V3, B5, O3, D5), b4 = n4, v5 = AI(c5, f5, M5, K5), b4 = n4 + b4 | 0, b4 = (I6 = v5 + I6 | 0) >>> 0 < v5 >>> 0 ? b4 + 1 | 0 : b4, x3 = AI(h5, J5 = h5 >> 31, j3, Q5), v5 = n4 + b4 | 0, v5 = (I6 = x3 + I6 | 0) >>> 0 < x3 >>> 0 ? v5 + 1 | 0 : v5, x3 = AI(m3, y5, U5, e4), b4 = n4 + v5 | 0, b4 = (I6 = x3 + I6 | 0) >>> 0 < x3 >>> 0 ? b4 + 1 | 0 : b4, v5 = AI(W3, i2, g6, w5), b4 = n4 + b4 | 0, CA2 = I6 = v5 + I6 | 0, l3 = I6 >>> 0 < v5 >>> 0 ? b4 + 1 | 0 : b4, b4 = AI(V3, B5, C6, E5), v5 = n4, Y5 = I6 = z3, z3 = AI(I6, X3 = I6 >> 31, I6, X3), I6 = n4 + v5 | 0, I6 = (b4 = z3 + b4 | 0) >>> 0 < z3 >>> 0 ? I6 + 1 | 0 : I6, v5 = (z3 = AI(j3, Q5, O3, D5)) + b4 | 0, b4 = n4 + I6 | 0, b4 = v5 >>> 0 < z3 >>> 0 ? b4 + 1 | 0 : b4, I6 = (z3 = AI(x3 = F4(k5, 38), r5 = x3 >> 31, k5, N5 = k5 >> 31)) + v5 | 0, v5 = n4 + b4 | 0, v5 = I6 >>> 0 < z3 >>> 0 ? v5 + 1 | 0 : v5, I6 = (b4 = I6) + (z3 = AI(m3, y5, I6 = g6 << 1, I6 >> 31)) | 0, b4 = n4 + v5 | 0, b4 = I6 >>> 0 < z3 >>> 0 ? b4 + 1 | 0 : b4, v5 = I6, I6 = AI(W3, i2, _3, S4), b4 = n4 + b4 | 0, s5 = v5 = v5 + I6 | 0, p5 = b4 = I6 >>> 0 > v5 >>> 0 ? b4 + 1 | 0 : b4, I6 = b4, L5 = v5 = v5 + 33554432 | 0, d5 = I6 = v5 >>> 0 < 33554432 ? I6 + 1 | 0 : I6, b4 = (b4 = I6 >> 26) + l3 | 0, CA2 = I6 = (v5 = (67108863 & I6) << 6 | v5 >>> 26) + CA2 | 0, b4 = I6 >>> 0 < v5 >>> 0 ? b4 + 1 | 0 : b4, P5 = I6 = I6 + 16777216 | 0, b4 = (b4 = (v5 = I6 >>> 0 < 16777216 ? b4 + 1 | 0 : b4) >> 25) + u4 | 0, I6 = (I6 = (33554431 & v5) << 7 | I6 >>> 25) >>> 0 > (v5 = I6 + T3 | 0) >>> 0 ? b4 + 1 | 0 : b4, T3 = b4 = v5 + 33554432 | 0, z3 = I6 = b4 >>> 0 < 33554432 ? I6 + 1 | 0 : I6, o4[A7 + 24 >> 2] = v5 - (-67108864 & b4), I6 = AI(j3, Q5, Y5, X3), b4 = n4, u4 = AI(V3, B5, q3, $3 = q3 >> 31), v5 = n4 + b4 | 0, v5 = (I6 = u4 + I6 | 0) >>> 0 < u4 >>> 0 ? v5 + 1 | 0 : v5, l3 = AI(u4 = F4(g6, 19), gA2 = u4 >> 31, g6, w5), b4 = n4 + v5 | 0, b4 = (I6 = l3 + I6 | 0) >>> 0 < l3 >>> 0 ? b4 + 1 | 0 : b4, v5 = (l3 = AI(_3, S4, x3, r5)) + I6 | 0, I6 = n4 + b4 | 0, I6 = v5 >>> 0 < l3 >>> 0 ? I6 + 1 | 0 : I6, AA2 = AI(m3, y5, l3 = O3 << 1, G5 = l3 >> 31), b4 = n4 + I6 | 0, b4 = (v5 = AA2 + v5 | 0) >>> 0 < AA2 >>> 0 ? b4 + 1 | 0 : b4, I6 = v5, v5 = AI(W3, i2, C6, E5), b4 = n4 + b4 | 0, IA2 = I6 = I6 + v5 | 0, AA2 = I6 >>> 0 < v5 >>> 0 ? b4 + 1 | 0 : b4, I6 = AI(_3, S4, u4, gA2), b4 = n4, q3 = AI(j3, Q5, q3, $3), v5 = n4 + b4 | 0, v5 = (I6 = q3 + I6 | 0) >>> 0 < q3 >>> 0 ? v5 + 1 | 0 : v5, q3 = AI(O3, D5, x3, r5), b4 = n4 + v5 | 0, b4 = (I6 = q3 + I6 | 0) >>> 0 < q3 >>> 0 ? b4 + 1 | 0 : b4, v5 = (q3 = AI(m3, y5, C6, E5)) + I6 | 0, I6 = n4 + b4 | 0, I6 = v5 >>> 0 < q3 >>> 0 ? I6 + 1 | 0 : I6, q3 = AI(W3, i2, Y5, X3), b4 = n4 + I6 | 0, BA2 = v5 = q3 + v5 | 0, $3 = v5 >>> 0 < q3 >>> 0 ? b4 + 1 | 0 : b4, v5 = AI(I6 = F4(h5, 38), I6 >> 31, h5, J5), q3 = n4, I6 = Z3, Z3 = v5, v5 = AI(I6, b4 = I6 >> 31, I6, b4), b4 = n4 + q3 | 0, b4 = (I6 = Z3 + v5 | 0) >>> 0 < v5 >>> 0 ? b4 + 1 | 0 : b4, u4 = AI(u4, gA2, l3, G5), v5 = n4 + b4 | 0, v5 = (I6 = u4 + I6 | 0) >>> 0 < u4 >>> 0 ? v5 + 1 | 0 : v5, u4 = AI(C6, E5, x3, r5), b4 = n4 + v5 | 0, b4 = (I6 = u4 + I6 | 0) >>> 0 < u4 >>> 0 ? b4 + 1 | 0 : b4, v5 = (u4 = AI(m3, y5, c5, f5)) + I6 | 0, I6 = n4 + b4 | 0, I6 = v5 >>> 0 < u4 >>> 0 ? I6 + 1 | 0 : I6, u4 = AI(V3, B5, W3, i2), b4 = n4 + I6 | 0, q3 = v5 = u4 + v5 | 0, Z3 = b4 = v5 >>> 0 < u4 >>> 0 ? b4 + 1 | 0 : b4, gA2 = v5 = v5 + 33554432 | 0, R4 = b4 = v5 >>> 0 < 33554432 ? b4 + 1 | 0 : b4, I6 = b4 >> 26, b4 = (67108863 & b4) << 6 | v5 >>> 26, v5 = I6 + $3 | 0, $3 = u4 = b4 + BA2 | 0, b4 = b4 >>> 0 > u4 >>> 0 ? v5 + 1 | 0 : v5, BA2 = v5 = u4 + 16777216 | 0, u4 = (33554431 & (b4 = v5 >>> 0 < 16777216 ? b4 + 1 | 0 : b4)) << 7 | v5 >>> 25, b4 = (b4 >> 25) + AA2 | 0, b4 = (v5 = u4 + IA2 | 0) >>> 0 < u4 >>> 0 ? b4 + 1 | 0 : b4, AA2 = I6 = v5 + 33554432 | 0, u4 = b4 = I6 >>> 0 < 33554432 ? b4 + 1 | 0 : b4, o4[A7 + 8 >> 2] = v5 - (-67108864 & I6), I6 = AI(c5, f5, h5, J5), b4 = n4, v5 = AI(O3, D5, C6, E5), b4 = n4 + b4 | 0, b4 = (I6 = v5 + I6 | 0) >>> 0 < v5 >>> 0 ? b4 + 1 | 0 : b4, v5 = AI(V3, B5, g6, w5), b4 = n4 + b4 | 0, b4 = (I6 = v5 + I6 | 0) >>> 0 < v5 >>> 0 ? b4 + 1 | 0 : b4, v5 = AI(j3, Q5, k5, N5), b4 = n4 + b4 | 0, b4 = (I6 = v5 + I6 | 0) >>> 0 < v5 >>> 0 ? b4 + 1 | 0 : b4, IA2 = (v5 = AI(W3, i2, a5, t5)) + I6 | 0, I6 = n4 + b4 | 0, v5 = (b4 = z3 >> 26) + (v5 = v5 >>> 0 > IA2 >>> 0 ? I6 + 1 | 0 : I6) | 0, T3 = I6 = (z3 = (67108863 & z3) << 6 | T3 >>> 26) + IA2 | 0, b4 = I6 >>> 0 < z3 >>> 0 ? v5 + 1 | 0 : v5, IA2 = I6 = I6 + 16777216 | 0, z3 = b4 = I6 >>> 0 < 16777216 ? b4 + 1 | 0 : b4, o4[A7 + 28 >> 2] = T3 - (-33554432 & I6), I6 = AI(j3, Q5, M5, K5), v5 = n4, b4 = (X3 = AI(V3, B5, Y5, X3)) + I6 | 0, I6 = n4 + v5 | 0, I6 = b4 >>> 0 < X3 >>> 0 ? I6 + 1 | 0 : I6, b4 = (x3 = AI(g6, w5, x3, r5)) + b4 | 0, v5 = n4 + I6 | 0, I6 = (m3 = AI(m3, y5, _3, S4)) + b4 | 0, b4 = n4 + (b4 >>> 0 < x3 >>> 0 ? v5 + 1 | 0 : v5) | 0, b4 = I6 >>> 0 < m3 >>> 0 ? b4 + 1 | 0 : b4, v5 = AI(W3, i2, O3, D5), b4 = n4 + b4 | 0, b4 = (b4 = (I6 = v5 + I6 | 0) >>> 0 < v5 >>> 0 ? b4 + 1 | 0 : b4) + (v5 = u4 >> 26) | 0, I6 = (v5 = u4 = (T3 = I6) + (I6 = (67108863 & u4) << 6 | AA2 >>> 26) | 0) >>> 0 < I6 >>> 0 ? b4 + 1 | 0 : b4, m3 = b4 = v5 + 16777216 | 0, u4 = I6 = b4 >>> 0 < 16777216 ? I6 + 1 | 0 : I6, o4[A7 + 12 >> 2] = v5 - (-33554432 & b4), I6 = AI(g6, w5, c5, f5), b4 = n4, v5 = AI(O3, D5, O3, D5), b4 = n4 + b4 | 0, b4 = (I6 = v5 + I6 | 0) >>> 0 < v5 >>> 0 ? b4 + 1 | 0 : b4, v5 = AI(C6, E5, _3, S4), b4 = n4 + b4 | 0, b4 = (I6 = v5 + I6 | 0) >>> 0 < v5 >>> 0 ? b4 + 1 | 0 : b4, v5 = (O3 = AI(V3, B5, U5, e4)) + I6 | 0, I6 = n4 + b4 | 0, I6 = v5 >>> 0 < O3 >>> 0 ? I6 + 1 | 0 : I6, b4 = (O3 = AI(j3, Q5, a5, t5)) + v5 | 0, v5 = n4 + I6 | 0, v5 = b4 >>> 0 < O3 >>> 0 ? v5 + 1 | 0 : v5, I6 = (O3 = AI(I6 = W3, i2, W3 = H5, _3 = W3 >> 31)) + b4 | 0, b4 = n4 + v5 | 0, b4 = I6 >>> 0 < O3 >>> 0 ? b4 + 1 | 0 : b4, v5 = I6, b4 = (I6 = z3 >> 25) + b4 | 0, b4 = (v5 = v5 + (z3 = (33554431 & z3) << 7 | IA2 >>> 25) | 0) >>> 0 < z3 >>> 0 ? b4 + 1 | 0 : b4, O3 = I6 = v5 + 33554432 | 0, z3 = b4 = I6 >>> 0 < 33554432 ? b4 + 1 | 0 : b4, o4[A7 + 32 >> 2] = v5 - (-67108864 & I6), b4 = u4 >> 25, v5 = (u4 = (33554431 & u4) << 7 | m3 >>> 25) + (s5 - (I6 = -67108864 & L5) | 0) | 0, I6 = b4 + (p5 - ((I6 >>> 0 > s5 >>> 0) + d5 | 0) | 0) | 0, I6 = v5 >>> 0 < u4 >>> 0 ? I6 + 1 | 0 : I6, u4 = v5, I6 = ((67108863 & (b4 = (v5 = v5 + 33554432 | 0) >>> 0 < 33554432 ? I6 + 1 | 0 : I6)) << 6 | v5 >>> 26) + (x3 = CA2 - (-33554432 & P5) | 0) | 0, o4[A7 + 20 >> 2] = I6, o4[A7 + 16 >> 2] = u4 - (-67108864 & v5), I6 = AI(C6, E5, g6, w5), v5 = n4, b4 = (u4 = AI(h5, J5, l3, G5)) + I6 | 0, I6 = n4 + v5 | 0, I6 = b4 >>> 0 < u4 >>> 0 ? I6 + 1 | 0 : I6, v5 = (u4 = AI(c5, f5, k5, N5)) + b4 | 0, b4 = n4 + I6 | 0, b4 = v5 >>> 0 < u4 >>> 0 ? b4 + 1 | 0 : b4, I6 = (u4 = AI(V3, B5, a5, t5)) + v5 | 0, v5 = n4 + b4 | 0, v5 = I6 >>> 0 < u4 >>> 0 ? v5 + 1 | 0 : v5, u4 = (b4 = I6) + (I6 = AI(j3, Q5, W3, _3)) | 0, b4 = n4 + v5 | 0, b4 = (I6 = I6 >>> 0 > u4 >>> 0 ? b4 + 1 | 0 : b4) + (b4 = z3 >> 26) | 0, I6 = (v5 = (z3 = (67108863 & z3) << 6 | O3 >>> 26) + u4 | 0) >>> 0 < z3 >>> 0 ? b4 + 1 | 0 : b4, I6 = (b4 = v5 + 16777216 | 0) >>> 0 < 16777216 ? I6 + 1 | 0 : I6, o4[A7 + 36 >> 2] = v5 - (-33554432 & b4), z3 = $3 - (-33554432 & BA2) | 0, u4 = q3 - (v5 = -67108864 & gA2) | 0, V3 = Z3 - ((v5 >>> 0 > q3 >>> 0) + R4 | 0) | 0, I6 = AI((33554431 & I6) << 7 | b4 >>> 25, I6 >> 25, 19, 0), b4 = n4 + V3 | 0, I6 = I6 >>> 0 > (v5 = I6 + u4 | 0) >>> 0 ? b4 + 1 | 0 : b4, I6 = ((67108863 & (I6 = (b4 = v5 + 33554432 | 0) >>> 0 < 33554432 ? I6 + 1 | 0 : I6)) << 6 | b4 >>> 26) + z3 | 0, o4[A7 + 4 >> 2] = I6, o4[A7 >> 2] = v5 - (-67108864 & b4);
            }
            function P4(A7, I6, g6, B5, i2) {
              var E5, D5 = 0, c5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, n5 = 0, t5 = 0, U5 = 0, J5 = 0, K5 = 0, e4 = 0, Y5 = 0, N5 = 0, G5 = 0;
              for (r4 = E5 = r4 - 288 | 0, h5 = o4[i2 + 44 >> 2] ^ B5 >>> 29, w5 = o4[i2 + 40 >> 2] ^ B5 << 3, F5 = o4[i2 + 36 >> 2] ^ g6 >>> 29, B5 = o4[i2 + 32 >> 2] ^ g6 << 3, D5 = i2 - -64 | 0; g6 = o4[i2 + 124 >> 2], o4[E5 + 280 >> 2] = o4[i2 + 120 >> 2], o4[E5 + 284 >> 2] = g6, g6 = o4[i2 + 116 >> 2], o4[E5 + 272 >> 2] = o4[i2 + 112 >> 2], o4[E5 + 276 >> 2] = g6, g6 = o4[i2 + 100 >> 2], o4[E5 + 240 >> 2] = o4[i2 + 96 >> 2], o4[E5 + 244 >> 2] = g6, g6 = o4[i2 + 108 >> 2], o4[E5 + 248 >> 2] = o4[i2 + 104 >> 2], o4[E5 + 252 >> 2] = g6, g6 = o4[i2 + 116 >> 2], o4[E5 + 224 >> 2] = o4[i2 + 112 >> 2], o4[E5 + 228 >> 2] = g6, g6 = o4[i2 + 124 >> 2], o4[E5 + 232 >> 2] = o4[i2 + 120 >> 2], o4[E5 + 236 >> 2] = g6, GA(c5 = E5 + 256 | 0, E5 + 240 | 0, E5 + 224 | 0), g6 = o4[E5 + 268 >> 2], o4[i2 + 120 >> 2] = o4[E5 + 264 >> 2], o4[i2 + 124 >> 2] = g6, g6 = o4[E5 + 260 >> 2], o4[i2 + 112 >> 2] = o4[E5 + 256 >> 2], o4[i2 + 116 >> 2] = g6, g6 = o4[i2 + 84 >> 2], o4[E5 + 208 >> 2] = o4[i2 + 80 >> 2], o4[E5 + 212 >> 2] = g6, g6 = o4[i2 + 92 >> 2], o4[E5 + 216 >> 2] = o4[i2 + 88 >> 2], o4[E5 + 220 >> 2] = g6, g6 = o4[i2 + 100 >> 2], o4[E5 + 192 >> 2] = o4[i2 + 96 >> 2], o4[E5 + 196 >> 2] = g6, g6 = o4[i2 + 108 >> 2], o4[E5 + 200 >> 2] = o4[i2 + 104 >> 2], o4[E5 + 204 >> 2] = g6, GA(c5, E5 + 208 | 0, E5 + 192 | 0), g6 = o4[E5 + 268 >> 2], o4[i2 + 104 >> 2] = o4[E5 + 264 >> 2], o4[i2 + 108 >> 2] = g6, g6 = o4[E5 + 260 >> 2], o4[i2 + 96 >> 2] = o4[E5 + 256 >> 2], o4[i2 + 100 >> 2] = g6, g6 = o4[D5 + 4 >> 2], o4[E5 + 176 >> 2] = o4[D5 >> 2], o4[E5 + 180 >> 2] = g6, g6 = o4[D5 + 12 >> 2], o4[E5 + 184 >> 2] = o4[D5 + 8 >> 2], o4[E5 + 188 >> 2] = g6, g6 = o4[i2 + 84 >> 2], o4[E5 + 160 >> 2] = o4[i2 + 80 >> 2], o4[E5 + 164 >> 2] = g6, g6 = o4[i2 + 92 >> 2], o4[E5 + 168 >> 2] = o4[i2 + 88 >> 2], o4[E5 + 172 >> 2] = g6, GA(c5, E5 + 176 | 0, E5 + 160 | 0), g6 = o4[E5 + 268 >> 2], o4[i2 + 88 >> 2] = o4[E5 + 264 >> 2], o4[i2 + 92 >> 2] = g6, g6 = o4[E5 + 260 >> 2], o4[i2 + 80 >> 2] = o4[E5 + 256 >> 2], o4[i2 + 84 >> 2] = g6, g6 = o4[i2 + 52 >> 2], o4[E5 + 144 >> 2] = o4[i2 + 48 >> 2], o4[E5 + 148 >> 2] = g6, g6 = o4[i2 + 60 >> 2], o4[E5 + 152 >> 2] = o4[i2 + 56 >> 2], o4[E5 + 156 >> 2] = g6, g6 = o4[D5 + 4 >> 2], o4[E5 + 128 >> 2] = o4[D5 >> 2], o4[E5 + 132 >> 2] = g6, g6 = o4[D5 + 12 >> 2], o4[E5 + 136 >> 2] = o4[D5 + 8 >> 2], o4[E5 + 140 >> 2] = g6, GA(c5, E5 + 144 | 0, E5 + 128 | 0), g6 = o4[E5 + 268 >> 2], o4[D5 + 8 >> 2] = o4[E5 + 264 >> 2], o4[D5 + 12 >> 2] = g6, g6 = o4[E5 + 260 >> 2], o4[D5 >> 2] = o4[E5 + 256 >> 2], o4[D5 + 4 >> 2] = g6, g6 = o4[i2 + 36 >> 2], o4[E5 + 112 >> 2] = o4[i2 + 32 >> 2], o4[E5 + 116 >> 2] = g6, g6 = o4[i2 + 44 >> 2], o4[E5 + 120 >> 2] = o4[i2 + 40 >> 2], o4[E5 + 124 >> 2] = g6, g6 = o4[i2 + 52 >> 2], o4[E5 + 96 >> 2] = o4[i2 + 48 >> 2], o4[E5 + 100 >> 2] = g6, g6 = o4[i2 + 60 >> 2], o4[E5 + 104 >> 2] = o4[i2 + 56 >> 2], o4[E5 + 108 >> 2] = g6, GA(c5, E5 + 112 | 0, E5 + 96 | 0), g6 = o4[E5 + 268 >> 2], o4[i2 + 56 >> 2] = o4[E5 + 264 >> 2], o4[i2 + 60 >> 2] = g6, g6 = o4[E5 + 260 >> 2], o4[i2 + 48 >> 2] = o4[E5 + 256 >> 2], o4[i2 + 52 >> 2] = g6, g6 = o4[i2 + 20 >> 2], o4[E5 + 80 >> 2] = o4[i2 + 16 >> 2], o4[E5 + 84 >> 2] = g6, g6 = o4[i2 + 28 >> 2], o4[E5 + 88 >> 2] = o4[i2 + 24 >> 2], o4[E5 + 92 >> 2] = g6, g6 = o4[i2 + 36 >> 2], o4[E5 + 64 >> 2] = o4[i2 + 32 >> 2], o4[E5 + 68 >> 2] = g6, g6 = o4[i2 + 44 >> 2], o4[E5 + 72 >> 2] = o4[i2 + 40 >> 2], o4[E5 + 76 >> 2] = g6, GA(c5, E5 + 80 | 0, E5 - -64 | 0), g6 = o4[E5 + 268 >> 2], o4[i2 + 40 >> 2] = o4[E5 + 264 >> 2], o4[i2 + 44 >> 2] = g6, g6 = o4[E5 + 260 >> 2], o4[i2 + 32 >> 2] = o4[E5 + 256 >> 2], o4[i2 + 36 >> 2] = g6, g6 = o4[i2 + 4 >> 2], o4[E5 + 48 >> 2] = o4[i2 >> 2], o4[E5 + 52 >> 2] = g6, g6 = o4[i2 + 12 >> 2], o4[E5 + 56 >> 2] = o4[i2 + 8 >> 2], o4[E5 + 60 >> 2] = g6, g6 = o4[i2 + 20 >> 2], o4[E5 + 32 >> 2] = o4[i2 + 16 >> 2], o4[E5 + 36 >> 2] = g6, g6 = o4[i2 + 28 >> 2], o4[E5 + 40 >> 2] = o4[i2 + 24 >> 2], o4[E5 + 44 >> 2] = g6, GA(c5, E5 + 48 | 0, E5 + 32 | 0), g6 = o4[E5 + 268 >> 2], o4[i2 + 24 >> 2] = o4[E5 + 264 >> 2], o4[i2 + 28 >> 2] = g6, g6 = o4[E5 + 260 >> 2], o4[i2 + 16 >> 2] = o4[E5 + 256 >> 2], o4[i2 + 20 >> 2] = g6, g6 = o4[E5 + 276 >> 2], o4[E5 + 16 >> 2] = o4[E5 + 272 >> 2], o4[E5 + 20 >> 2] = g6, g6 = o4[E5 + 284 >> 2], o4[E5 + 24 >> 2] = o4[E5 + 280 >> 2], o4[E5 + 28 >> 2] = g6, g6 = o4[i2 + 4 >> 2], o4[E5 >> 2] = o4[i2 >> 2], o4[E5 + 4 >> 2] = g6, g6 = o4[i2 + 12 >> 2], o4[E5 + 8 >> 2] = o4[i2 + 8 >> 2], o4[E5 + 12 >> 2] = g6, GA(c5, E5 + 16 | 0, E5), g6 = o4[E5 + 268 >> 2], o4[i2 + 8 >> 2] = o4[E5 + 264 >> 2], o4[i2 + 12 >> 2] = g6, g6 = o4[E5 + 260 >> 2], o4[i2 >> 2] = o4[E5 + 256 >> 2], o4[i2 + 4 >> 2] = g6, S4 = h5 ^ o4[i2 + 12 >> 2], o4[i2 + 12 >> 2] = S4, a5 = w5 ^ o4[i2 + 8 >> 2], o4[i2 + 8 >> 2] = a5, k5 = F5 ^ o4[i2 + 4 >> 2], o4[i2 + 4 >> 2] = k5, M5 = B5 ^ o4[i2 >> 2], o4[i2 >> 2] = M5, U5 = B5 ^ o4[D5 >> 2], o4[D5 >> 2] = U5, J5 = F5 ^ o4[i2 + 68 >> 2], o4[i2 + 68 >> 2] = J5, K5 = w5 ^ o4[i2 + 72 >> 2], o4[i2 + 72 >> 2] = K5, e4 = h5 ^ o4[i2 + 76 >> 2], o4[i2 + 76 >> 2] = e4, 7 != (0 | (y5 = y5 + 1 | 0)); ) ;
              A: {
                I: {
                  g: {
                    if (g6 = I6 - 16 | 0) {
                      if (16 == (0 | g6)) break g;
                      break I;
                    }
                    Y5 = o4[i2 + 16 >> 2], N5 = o4[i2 + 48 >> 2], G5 = o4[i2 + 32 >> 2], n5 = o4[i2 + 96 >> 2], t5 = o4[i2 + 80 >> 2], f5 = o4[i2 + 20 >> 2], D5 = o4[i2 + 52 >> 2], c5 = o4[i2 + 36 >> 2], h5 = o4[i2 + 100 >> 2], w5 = o4[i2 + 84 >> 2], F5 = o4[i2 + 24 >> 2], y5 = o4[i2 + 56 >> 2], B5 = o4[i2 + 40 >> 2], g6 = o4[i2 + 104 >> 2], I6 = o4[i2 + 88 >> 2], i2 = S4 ^ o4[i2 + 28 >> 2] ^ o4[i2 + 60 >> 2] ^ o4[i2 + 44 >> 2] ^ o4[i2 + 92 >> 2] ^ o4[i2 + 108 >> 2] ^ e4, C5[A7 + 12 | 0] = i2, C5[A7 + 13 | 0] = i2 >>> 8, C5[A7 + 14 | 0] = i2 >>> 16, C5[A7 + 15 | 0] = i2 >>> 24, I6 = a5 ^ I6 ^ g6 ^ B5 ^ y5 ^ F5 ^ K5, C5[A7 + 8 | 0] = I6, C5[A7 + 9 | 0] = I6 >>> 8, C5[A7 + 10 | 0] = I6 >>> 16, C5[A7 + 11 | 0] = I6 >>> 24, I6 = k5 ^ J5 ^ f5 ^ D5 ^ h5 ^ w5 ^ c5, C5[A7 + 4 | 0] = I6, C5[A7 + 5 | 0] = I6 >>> 8, C5[A7 + 6 | 0] = I6 >>> 16, C5[A7 + 7 | 0] = I6 >>> 24, I6 = M5 ^ U5 ^ Y5 ^ N5 ^ G5 ^ n5 ^ t5, C5[0 | A7] = I6, C5[A7 + 1 | 0] = I6 >>> 8, C5[A7 + 2 | 0] = I6 >>> 16, C5[A7 + 3 | 0] = I6 >>> 24;
                    break A;
                  }
                  D5 = o4[i2 + 16 >> 2], c5 = o4[i2 + 48 >> 2], h5 = o4[i2 + 32 >> 2], w5 = o4[i2 + 20 >> 2], F5 = o4[i2 + 52 >> 2], y5 = o4[i2 + 36 >> 2], B5 = o4[i2 + 24 >> 2], g6 = o4[i2 + 56 >> 2], I6 = o4[i2 + 40 >> 2], f5 = S4 ^ o4[i2 + 28 >> 2] ^ o4[i2 + 60 >> 2] ^ o4[i2 + 44 >> 2], C5[A7 + 12 | 0] = f5, C5[A7 + 13 | 0] = f5 >>> 8, C5[A7 + 14 | 0] = f5 >>> 16, C5[A7 + 15 | 0] = f5 >>> 24, I6 = a5 ^ B5 ^ I6 ^ g6, C5[A7 + 8 | 0] = I6, C5[A7 + 9 | 0] = I6 >>> 8, C5[A7 + 10 | 0] = I6 >>> 16, C5[A7 + 11 | 0] = I6 >>> 24, I6 = k5 ^ w5 ^ F5 ^ y5, C5[A7 + 4 | 0] = I6, C5[A7 + 5 | 0] = I6 >>> 8, C5[A7 + 6 | 0] = I6 >>> 16, C5[A7 + 7 | 0] = I6 >>> 24, I6 = M5 ^ D5 ^ c5 ^ h5, C5[0 | A7] = I6, C5[A7 + 1 | 0] = I6 >>> 8, C5[A7 + 2 | 0] = I6 >>> 16, C5[A7 + 3 | 0] = I6 >>> 24, n5 = o4[i2 + 80 >> 2], t5 = o4[i2 - -64 >> 2], f5 = o4[i2 + 112 >> 2], D5 = o4[i2 + 96 >> 2], c5 = o4[i2 + 84 >> 2], h5 = o4[i2 + 68 >> 2], w5 = o4[i2 + 116 >> 2], F5 = o4[i2 + 100 >> 2], y5 = o4[i2 + 88 >> 2], B5 = o4[i2 + 72 >> 2], g6 = o4[i2 + 120 >> 2], I6 = o4[i2 + 104 >> 2], i2 = o4[i2 + 92 >> 2] ^ o4[i2 + 76 >> 2] ^ o4[i2 + 124 >> 2] ^ o4[i2 + 108 >> 2], C5[A7 + 28 | 0] = i2, C5[A7 + 29 | 0] = i2 >>> 8, C5[A7 + 30 | 0] = i2 >>> 16, C5[A7 + 31 | 0] = i2 >>> 24, I6 = y5 ^ B5 ^ I6 ^ g6, C5[A7 + 24 | 0] = I6, C5[A7 + 25 | 0] = I6 >>> 8, C5[A7 + 26 | 0] = I6 >>> 16, C5[A7 + 27 | 0] = I6 >>> 24, I6 = c5 ^ h5 ^ w5 ^ F5, C5[A7 + 20 | 0] = I6, C5[A7 + 21 | 0] = I6 >>> 8, C5[A7 + 22 | 0] = I6 >>> 16, C5[A7 + 23 | 0] = I6 >>> 24, I6 = n5 ^ t5 ^ D5 ^ f5, C5[A7 + 16 | 0] = I6, C5[A7 + 17 | 0] = I6 >>> 8, C5[A7 + 18 | 0] = I6 >>> 16, C5[A7 + 19 | 0] = I6 >>> 24;
                  break A;
                }
                I6 && Q4(A7, 0, I6);
              }
              r4 = E5 + 288 | 0;
            }
            function R3(A7, I6) {
              var g6, C6, B5, Q5, i2, E5, D5, h5, w5, F5, y5 = 0, f5 = 0, S4 = 0;
              r4 = g6 = r4 - 416 | 0, C6 = c4[A7 + 16 | 0] | c4[A7 + 17 | 0] << 8 | c4[A7 + 18 | 0] << 16 | c4[A7 + 19 | 0] << 24, B5 = c4[A7 + 20 | 0] | c4[A7 + 21 | 0] << 8 | c4[A7 + 22 | 0] << 16 | c4[A7 + 23 | 0] << 24, Q5 = c4[A7 + 24 | 0] | c4[A7 + 25 | 0] << 8 | c4[A7 + 26 | 0] << 16 | c4[A7 + 27 | 0] << 24, i2 = c4[A7 + 28 | 0] | c4[A7 + 29 | 0] << 8 | c4[A7 + 30 | 0] << 16 | c4[A7 + 31 | 0] << 24, S4 = c4[A7 + 4 | 0] | c4[A7 + 5 | 0] << 8 | c4[A7 + 6 | 0] << 16 | c4[A7 + 7 | 0] << 24, E5 = c4[A7 + 8 | 0] | c4[A7 + 9 | 0] << 8 | c4[A7 + 10 | 0] << 16 | c4[A7 + 11 | 0] << 24, D5 = c4[A7 + 12 | 0] | c4[A7 + 13 | 0] << 8 | c4[A7 + 14 | 0] << 16 | c4[A7 + 15 | 0] << 24, h5 = c4[0 | A7] | c4[A7 + 1 | 0] << 8 | c4[A7 + 2 | 0] << 16 | c4[A7 + 3 | 0] << 24, A7 = o4[I6 + 92 >> 2], o4[g6 + 408 >> 2] = o4[I6 + 88 >> 2], o4[g6 + 412 >> 2] = A7, A7 = o4[I6 + 84 >> 2], o4[g6 + 400 >> 2] = o4[I6 + 80 >> 2], o4[g6 + 404 >> 2] = A7, y5 = o4[4 + (A7 = f5 = I6 - -64 | 0) >> 2], o4[g6 + 368 >> 2] = o4[A7 >> 2], o4[g6 + 372 >> 2] = y5, A7 = o4[I6 + 76 >> 2], o4[g6 + 376 >> 2] = o4[I6 + 72 >> 2], o4[g6 + 380 >> 2] = A7, A7 = o4[I6 + 84 >> 2], o4[g6 + 352 >> 2] = o4[I6 + 80 >> 2], o4[g6 + 356 >> 2] = A7, A7 = o4[I6 + 92 >> 2], o4[g6 + 360 >> 2] = o4[I6 + 88 >> 2], o4[g6 + 364 >> 2] = A7, GA(A7 = g6 + 384 | 0, g6 + 368 | 0, g6 + 352 | 0), y5 = o4[g6 + 396 >> 2], o4[I6 + 88 >> 2] = o4[g6 + 392 >> 2], o4[I6 + 92 >> 2] = y5, y5 = o4[g6 + 388 >> 2], o4[I6 + 80 >> 2] = o4[g6 + 384 >> 2], o4[I6 + 84 >> 2] = y5, y5 = o4[I6 + 52 >> 2], o4[g6 + 336 >> 2] = o4[I6 + 48 >> 2], o4[g6 + 340 >> 2] = y5, y5 = o4[I6 + 60 >> 2], o4[g6 + 344 >> 2] = o4[I6 + 56 >> 2], o4[g6 + 348 >> 2] = y5, y5 = o4[f5 + 4 >> 2], o4[g6 + 320 >> 2] = o4[f5 >> 2], o4[g6 + 324 >> 2] = y5, y5 = o4[I6 + 76 >> 2], o4[g6 + 328 >> 2] = o4[I6 + 72 >> 2], o4[g6 + 332 >> 2] = y5, GA(A7, g6 + 336 | 0, g6 + 320 | 0), y5 = o4[g6 + 396 >> 2], o4[I6 + 72 >> 2] = o4[g6 + 392 >> 2], o4[I6 + 76 >> 2] = y5, y5 = o4[g6 + 388 >> 2], o4[f5 >> 2] = o4[g6 + 384 >> 2], o4[f5 + 4 >> 2] = y5, y5 = o4[I6 + 36 >> 2], o4[g6 + 304 >> 2] = o4[I6 + 32 >> 2], o4[g6 + 308 >> 2] = y5, y5 = o4[I6 + 44 >> 2], o4[g6 + 312 >> 2] = o4[I6 + 40 >> 2], o4[g6 + 316 >> 2] = y5, y5 = o4[I6 + 52 >> 2], o4[g6 + 288 >> 2] = o4[I6 + 48 >> 2], o4[g6 + 292 >> 2] = y5, y5 = o4[I6 + 60 >> 2], o4[g6 + 296 >> 2] = o4[I6 + 56 >> 2], o4[g6 + 300 >> 2] = y5, GA(A7, g6 + 304 | 0, g6 + 288 | 0), y5 = o4[g6 + 396 >> 2], o4[I6 + 56 >> 2] = o4[g6 + 392 >> 2], o4[I6 + 60 >> 2] = y5, y5 = o4[g6 + 388 >> 2], o4[I6 + 48 >> 2] = o4[g6 + 384 >> 2], o4[I6 + 52 >> 2] = y5, y5 = o4[I6 + 20 >> 2], o4[g6 + 272 >> 2] = o4[I6 + 16 >> 2], o4[g6 + 276 >> 2] = y5, y5 = o4[I6 + 28 >> 2], o4[g6 + 280 >> 2] = o4[I6 + 24 >> 2], o4[g6 + 284 >> 2] = y5, y5 = o4[I6 + 36 >> 2], o4[g6 + 256 >> 2] = o4[I6 + 32 >> 2], o4[g6 + 260 >> 2] = y5, y5 = o4[I6 + 44 >> 2], o4[g6 + 264 >> 2] = o4[I6 + 40 >> 2], o4[g6 + 268 >> 2] = y5, GA(A7, g6 + 272 | 0, g6 + 256 | 0), y5 = o4[g6 + 396 >> 2], o4[I6 + 40 >> 2] = o4[g6 + 392 >> 2], o4[I6 + 44 >> 2] = y5, y5 = o4[g6 + 388 >> 2], o4[I6 + 32 >> 2] = o4[g6 + 384 >> 2], o4[I6 + 36 >> 2] = y5, y5 = o4[I6 + 4 >> 2], o4[g6 + 240 >> 2] = o4[I6 >> 2], o4[g6 + 244 >> 2] = y5, y5 = o4[I6 + 12 >> 2], o4[g6 + 248 >> 2] = o4[I6 + 8 >> 2], o4[g6 + 252 >> 2] = y5, y5 = o4[I6 + 20 >> 2], o4[g6 + 224 >> 2] = o4[I6 + 16 >> 2], o4[g6 + 228 >> 2] = y5, y5 = o4[I6 + 28 >> 2], o4[g6 + 232 >> 2] = o4[I6 + 24 >> 2], o4[g6 + 236 >> 2] = y5, GA(A7, g6 + 240 | 0, g6 + 224 | 0), y5 = o4[g6 + 396 >> 2], o4[I6 + 24 >> 2] = o4[g6 + 392 >> 2], o4[I6 + 28 >> 2] = y5, y5 = o4[g6 + 388 >> 2], o4[I6 + 16 >> 2] = o4[g6 + 384 >> 2], o4[I6 + 20 >> 2] = y5, y5 = o4[g6 + 404 >> 2], o4[g6 + 208 >> 2] = o4[g6 + 400 >> 2], o4[g6 + 212 >> 2] = y5, y5 = o4[g6 + 412 >> 2], o4[g6 + 216 >> 2] = o4[g6 + 408 >> 2], o4[g6 + 220 >> 2] = y5, y5 = o4[I6 + 4 >> 2], o4[g6 + 192 >> 2] = o4[I6 >> 2], o4[g6 + 196 >> 2] = y5, y5 = o4[I6 + 12 >> 2], o4[g6 + 200 >> 2] = o4[I6 + 8 >> 2], o4[g6 + 204 >> 2] = y5, GA(A7, g6 + 208 | 0, g6 + 192 | 0), y5 = o4[g6 + 384 >> 2], w5 = o4[g6 + 388 >> 2], F5 = o4[g6 + 392 >> 2], o4[I6 + 12 >> 2] = o4[g6 + 396 >> 2] ^ D5, o4[I6 + 8 >> 2] = E5 ^ F5, o4[I6 + 4 >> 2] = S4 ^ w5, o4[I6 >> 2] = y5 ^ h5, S4 = o4[I6 + 92 >> 2], o4[g6 + 408 >> 2] = o4[I6 + 88 >> 2], o4[g6 + 412 >> 2] = S4, S4 = o4[I6 + 84 >> 2], o4[g6 + 400 >> 2] = o4[I6 + 80 >> 2], o4[g6 + 404 >> 2] = S4, S4 = o4[f5 + 4 >> 2], o4[g6 + 176 >> 2] = o4[f5 >> 2], o4[g6 + 180 >> 2] = S4, S4 = o4[I6 + 76 >> 2], o4[g6 + 184 >> 2] = o4[I6 + 72 >> 2], o4[g6 + 188 >> 2] = S4, S4 = o4[I6 + 84 >> 2], o4[g6 + 160 >> 2] = o4[I6 + 80 >> 2], o4[g6 + 164 >> 2] = S4, S4 = o4[I6 + 92 >> 2], o4[g6 + 168 >> 2] = o4[I6 + 88 >> 2], o4[g6 + 172 >> 2] = S4, GA(A7, g6 + 176 | 0, g6 + 160 | 0), S4 = o4[g6 + 396 >> 2], o4[I6 + 88 >> 2] = o4[g6 + 392 >> 2], o4[I6 + 92 >> 2] = S4, S4 = o4[g6 + 388 >> 2], o4[I6 + 80 >> 2] = o4[g6 + 384 >> 2], o4[I6 + 84 >> 2] = S4, S4 = o4[I6 + 52 >> 2], o4[g6 + 144 >> 2] = o4[I6 + 48 >> 2], o4[g6 + 148 >> 2] = S4, S4 = o4[I6 + 60 >> 2], o4[g6 + 152 >> 2] = o4[I6 + 56 >> 2], o4[g6 + 156 >> 2] = S4, S4 = o4[f5 + 4 >> 2], o4[g6 + 128 >> 2] = o4[f5 >> 2], o4[g6 + 132 >> 2] = S4, S4 = o4[I6 + 76 >> 2], o4[g6 + 136 >> 2] = o4[I6 + 72 >> 2], o4[g6 + 140 >> 2] = S4, GA(A7, g6 + 144 | 0, g6 + 128 | 0), S4 = o4[g6 + 396 >> 2], o4[I6 + 72 >> 2] = o4[g6 + 392 >> 2], o4[I6 + 76 >> 2] = S4, S4 = o4[g6 + 388 >> 2], o4[f5 >> 2] = o4[g6 + 384 >> 2], o4[f5 + 4 >> 2] = S4, f5 = o4[I6 + 36 >> 2], o4[g6 + 112 >> 2] = o4[I6 + 32 >> 2], o4[g6 + 116 >> 2] = f5, f5 = o4[I6 + 44 >> 2], o4[g6 + 120 >> 2] = o4[I6 + 40 >> 2], o4[g6 + 124 >> 2] = f5, f5 = o4[I6 + 52 >> 2], o4[g6 + 96 >> 2] = o4[I6 + 48 >> 2], o4[g6 + 100 >> 2] = f5, f5 = o4[I6 + 60 >> 2], o4[g6 + 104 >> 2] = o4[I6 + 56 >> 2], o4[g6 + 108 >> 2] = f5, GA(A7, g6 + 112 | 0, g6 + 96 | 0), f5 = o4[g6 + 396 >> 2], o4[I6 + 56 >> 2] = o4[g6 + 392 >> 2], o4[I6 + 60 >> 2] = f5, f5 = o4[g6 + 388 >> 2], o4[I6 + 48 >> 2] = o4[g6 + 384 >> 2], o4[I6 + 52 >> 2] = f5, f5 = o4[I6 + 20 >> 2], o4[g6 + 80 >> 2] = o4[I6 + 16 >> 2], o4[g6 + 84 >> 2] = f5, f5 = o4[I6 + 28 >> 2], o4[g6 + 88 >> 2] = o4[I6 + 24 >> 2], o4[g6 + 92 >> 2] = f5, f5 = o4[I6 + 36 >> 2], o4[g6 + 64 >> 2] = o4[I6 + 32 >> 2], o4[g6 + 68 >> 2] = f5, f5 = o4[I6 + 44 >> 2], o4[g6 + 72 >> 2] = o4[I6 + 40 >> 2], o4[g6 + 76 >> 2] = f5, GA(A7, g6 + 80 | 0, g6 - -64 | 0), f5 = o4[g6 + 396 >> 2], o4[I6 + 40 >> 2] = o4[g6 + 392 >> 2], o4[I6 + 44 >> 2] = f5, f5 = o4[g6 + 388 >> 2], o4[I6 + 32 >> 2] = o4[g6 + 384 >> 2], o4[I6 + 36 >> 2] = f5, f5 = o4[I6 + 4 >> 2], o4[g6 + 48 >> 2] = o4[I6 >> 2], o4[g6 + 52 >> 2] = f5, f5 = o4[I6 + 12 >> 2], o4[g6 + 56 >> 2] = o4[I6 + 8 >> 2], o4[g6 + 60 >> 2] = f5, f5 = o4[I6 + 20 >> 2], o4[g6 + 32 >> 2] = o4[I6 + 16 >> 2], o4[g6 + 36 >> 2] = f5, f5 = o4[I6 + 28 >> 2], o4[g6 + 40 >> 2] = o4[I6 + 24 >> 2], o4[g6 + 44 >> 2] = f5, GA(A7, g6 + 48 | 0, g6 + 32 | 0), f5 = o4[g6 + 396 >> 2], o4[I6 + 24 >> 2] = o4[g6 + 392 >> 2], o4[I6 + 28 >> 2] = f5, f5 = o4[g6 + 388 >> 2], o4[I6 + 16 >> 2] = o4[g6 + 384 >> 2], o4[I6 + 20 >> 2] = f5, f5 = o4[g6 + 404 >> 2], o4[g6 + 16 >> 2] = o4[g6 + 400 >> 2], o4[g6 + 20 >> 2] = f5, f5 = o4[g6 + 412 >> 2], o4[g6 + 24 >> 2] = o4[g6 + 408 >> 2], o4[g6 + 28 >> 2] = f5, f5 = o4[I6 + 4 >> 2], o4[g6 >> 2] = o4[I6 >> 2], o4[g6 + 4 >> 2] = f5, f5 = o4[I6 + 12 >> 2], o4[g6 + 8 >> 2] = o4[I6 + 8 >> 2], o4[g6 + 12 >> 2] = f5, GA(A7, g6 + 16 | 0, g6), A7 = o4[g6 + 384 >> 2], f5 = o4[g6 + 388 >> 2], S4 = o4[g6 + 392 >> 2], o4[I6 + 12 >> 2] = o4[g6 + 396 >> 2] ^ i2, o4[I6 + 8 >> 2] = S4 ^ Q5, o4[I6 + 4 >> 2] = f5 ^ B5, o4[I6 >> 2] = A7 ^ C6, r4 = g6 + 416 | 0;
            }
            function b3(A7, I6, g6) {
              var B5, Q5, i2, E5, D5, h5, w5, F5, y5, f5, S4, a5, k5, M5, n5, t5, U5, J5, K5, e4, Y5, N5, G5, H5 = 0, s5 = 0, p5 = 0, L5 = 0, d5 = 0, P5 = 0, R4 = 0, b4 = 0;
              r4 = B5 = r4 - 288 | 0, w5 = o4[g6 + 16 >> 2], F5 = o4[g6 + 48 >> 2], y5 = o4[g6 + 20 >> 2], f5 = c4[I6 + 4 | 0] | c4[I6 + 5 | 0] << 8 | c4[I6 + 6 | 0] << 16 | c4[I6 + 7 | 0] << 24, S4 = o4[g6 + 52 >> 2], a5 = o4[g6 + 24 >> 2], k5 = c4[I6 + 8 | 0] | c4[I6 + 9 | 0] << 8 | c4[I6 + 10 | 0] << 16 | c4[I6 + 11 | 0] << 24, M5 = o4[g6 + 56 >> 2], d5 = o4[g6 + 28 >> 2], n5 = c4[I6 + 12 | 0] | c4[I6 + 13 | 0] << 8 | c4[I6 + 14 | 0] << 16 | c4[I6 + 15 | 0] << 24, t5 = o4[g6 + 60 >> 2], s5 = o4[g6 + 32 >> 2], P5 = o4[g6 + 80 >> 2], U5 = c4[I6 + 16 | 0] | c4[I6 + 17 | 0] << 8 | c4[I6 + 18 | 0] << 16 | c4[I6 + 19 | 0] << 24, J5 = o4[g6 + 112 >> 2], H5 = o4[g6 + 96 >> 2], p5 = o4[g6 + 36 >> 2], R4 = o4[g6 + 84 >> 2], K5 = c4[I6 + 20 | 0] | c4[I6 + 21 | 0] << 8 | c4[I6 + 22 | 0] << 16 | c4[I6 + 23 | 0] << 24, e4 = o4[g6 + 116 >> 2], i2 = o4[g6 + 100 >> 2], L5 = o4[g6 + 40 >> 2], b4 = o4[g6 + 88 >> 2], Y5 = c4[I6 + 24 | 0] | c4[I6 + 25 | 0] << 8 | c4[I6 + 26 | 0] << 16 | c4[I6 + 27 | 0] << 24, N5 = o4[g6 + 120 >> 2], E5 = o4[g6 + 104 >> 2], G5 = c4[0 | I6] | c4[I6 + 1 | 0] << 8 | c4[I6 + 2 | 0] << 16 | c4[I6 + 3 | 0] << 24, Q5 = (D5 = o4[g6 + 44 >> 2]) ^ (h5 = o4[g6 + 108 >> 2]) & o4[g6 + 124 >> 2] ^ o4[g6 + 92 >> 2] ^ (c4[I6 + 28 | 0] | c4[I6 + 29 | 0] << 8 | c4[I6 + 30 | 0] << 16 | c4[I6 + 31 | 0] << 24), C5[A7 + 28 | 0] = Q5, C5[A7 + 29 | 0] = Q5 >>> 8, C5[A7 + 30 | 0] = Q5 >>> 16, C5[A7 + 31 | 0] = Q5 >>> 24, b4 = L5 ^ E5 & N5 ^ b4 ^ Y5, C5[A7 + 24 | 0] = b4, C5[A7 + 25 | 0] = b4 >>> 8, C5[A7 + 26 | 0] = b4 >>> 16, C5[A7 + 27 | 0] = b4 >>> 24, R4 = p5 ^ i2 & e4 ^ R4 ^ K5, C5[A7 + 20 | 0] = R4, C5[A7 + 21 | 0] = R4 >>> 8, C5[A7 + 22 | 0] = R4 >>> 16, C5[A7 + 23 | 0] = R4 >>> 24, P5 = s5 ^ H5 & J5 ^ P5 ^ U5, C5[A7 + 16 | 0] = P5, C5[A7 + 17 | 0] = P5 >>> 8, C5[A7 + 18 | 0] = P5 >>> 16, C5[A7 + 19 | 0] = P5 >>> 24, d5 = t5 & D5 ^ d5 ^ n5 ^ h5, C5[A7 + 12 | 0] = d5, C5[A7 + 13 | 0] = d5 >>> 8, C5[A7 + 14 | 0] = d5 >>> 16, C5[A7 + 15 | 0] = d5 >>> 24, L5 = L5 & M5 ^ a5 ^ k5 ^ E5, C5[A7 + 8 | 0] = L5, C5[A7 + 9 | 0] = L5 >>> 8, C5[A7 + 10 | 0] = L5 >>> 16, C5[A7 + 11 | 0] = L5 >>> 24, p5 = p5 & S4 ^ y5 ^ f5 ^ i2, C5[A7 + 4 | 0] = p5, C5[A7 + 5 | 0] = p5 >>> 8, C5[A7 + 6 | 0] = p5 >>> 16, C5[A7 + 7 | 0] = p5 >>> 24, s5 = H5 ^ s5 & F5 ^ w5 ^ G5, C5[0 | A7] = s5, C5[A7 + 1 | 0] = s5 >>> 8, C5[A7 + 2 | 0] = s5 >>> 16, C5[A7 + 3 | 0] = s5 >>> 24, A7 = o4[g6 + 124 >> 2], o4[B5 + 280 >> 2] = o4[g6 + 120 >> 2], o4[B5 + 284 >> 2] = A7, A7 = o4[g6 + 116 >> 2], o4[B5 + 272 >> 2] = o4[g6 + 112 >> 2], o4[B5 + 276 >> 2] = A7, A7 = o4[g6 + 100 >> 2], o4[B5 + 240 >> 2] = o4[g6 + 96 >> 2], o4[B5 + 244 >> 2] = A7, A7 = o4[g6 + 108 >> 2], o4[B5 + 248 >> 2] = o4[g6 + 104 >> 2], o4[B5 + 252 >> 2] = A7, A7 = o4[g6 + 116 >> 2], o4[B5 + 224 >> 2] = o4[g6 + 112 >> 2], o4[B5 + 228 >> 2] = A7, A7 = o4[g6 + 124 >> 2], o4[B5 + 232 >> 2] = o4[g6 + 120 >> 2], o4[B5 + 236 >> 2] = A7, GA(A7 = B5 + 256 | 0, B5 + 240 | 0, B5 + 224 | 0), I6 = o4[B5 + 268 >> 2], o4[g6 + 120 >> 2] = o4[B5 + 264 >> 2], o4[g6 + 124 >> 2] = I6, I6 = o4[B5 + 260 >> 2], o4[g6 + 112 >> 2] = o4[B5 + 256 >> 2], o4[g6 + 116 >> 2] = I6, I6 = o4[g6 + 84 >> 2], o4[B5 + 208 >> 2] = o4[g6 + 80 >> 2], o4[B5 + 212 >> 2] = I6, I6 = o4[g6 + 92 >> 2], o4[B5 + 216 >> 2] = o4[g6 + 88 >> 2], o4[B5 + 220 >> 2] = I6, I6 = o4[g6 + 100 >> 2], o4[B5 + 192 >> 2] = o4[g6 + 96 >> 2], o4[B5 + 196 >> 2] = I6, I6 = o4[g6 + 108 >> 2], o4[B5 + 200 >> 2] = o4[g6 + 104 >> 2], o4[B5 + 204 >> 2] = I6, GA(A7, B5 + 208 | 0, B5 + 192 | 0), I6 = o4[B5 + 268 >> 2], o4[g6 + 104 >> 2] = o4[B5 + 264 >> 2], o4[g6 + 108 >> 2] = I6, I6 = o4[B5 + 260 >> 2], o4[g6 + 96 >> 2] = o4[B5 + 256 >> 2], o4[g6 + 100 >> 2] = I6, H5 = o4[4 + (I6 = g6 - -64 | 0) >> 2], o4[B5 + 176 >> 2] = o4[I6 >> 2], o4[B5 + 180 >> 2] = H5, H5 = o4[g6 + 76 >> 2], o4[B5 + 184 >> 2] = o4[g6 + 72 >> 2], o4[B5 + 188 >> 2] = H5, H5 = o4[g6 + 84 >> 2], o4[B5 + 160 >> 2] = o4[g6 + 80 >> 2], o4[B5 + 164 >> 2] = H5, H5 = o4[g6 + 92 >> 2], o4[B5 + 168 >> 2] = o4[g6 + 88 >> 2], o4[B5 + 172 >> 2] = H5, GA(A7, B5 + 176 | 0, B5 + 160 | 0), H5 = o4[B5 + 268 >> 2], o4[g6 + 88 >> 2] = o4[B5 + 264 >> 2], o4[g6 + 92 >> 2] = H5, H5 = o4[B5 + 260 >> 2], o4[g6 + 80 >> 2] = o4[B5 + 256 >> 2], o4[g6 + 84 >> 2] = H5, H5 = o4[g6 + 52 >> 2], o4[B5 + 144 >> 2] = o4[g6 + 48 >> 2], o4[B5 + 148 >> 2] = H5, H5 = o4[g6 + 60 >> 2], o4[B5 + 152 >> 2] = o4[g6 + 56 >> 2], o4[B5 + 156 >> 2] = H5, H5 = o4[I6 + 4 >> 2], o4[B5 + 128 >> 2] = o4[I6 >> 2], o4[B5 + 132 >> 2] = H5, H5 = o4[g6 + 76 >> 2], o4[B5 + 136 >> 2] = o4[g6 + 72 >> 2], o4[B5 + 140 >> 2] = H5, GA(A7, B5 + 144 | 0, B5 + 128 | 0), H5 = o4[B5 + 268 >> 2], o4[g6 + 72 >> 2] = o4[B5 + 264 >> 2], o4[g6 + 76 >> 2] = H5, H5 = o4[B5 + 260 >> 2], o4[I6 >> 2] = o4[B5 + 256 >> 2], o4[I6 + 4 >> 2] = H5, H5 = o4[g6 + 36 >> 2], o4[B5 + 112 >> 2] = o4[g6 + 32 >> 2], o4[B5 + 116 >> 2] = H5, H5 = o4[g6 + 44 >> 2], o4[B5 + 120 >> 2] = o4[g6 + 40 >> 2], o4[B5 + 124 >> 2] = H5, H5 = o4[g6 + 52 >> 2], o4[B5 + 96 >> 2] = o4[g6 + 48 >> 2], o4[B5 + 100 >> 2] = H5, H5 = o4[g6 + 60 >> 2], o4[B5 + 104 >> 2] = o4[g6 + 56 >> 2], o4[B5 + 108 >> 2] = H5, GA(A7, B5 + 112 | 0, B5 + 96 | 0), H5 = o4[B5 + 268 >> 2], o4[g6 + 56 >> 2] = o4[B5 + 264 >> 2], o4[g6 + 60 >> 2] = H5, H5 = o4[B5 + 260 >> 2], o4[g6 + 48 >> 2] = o4[B5 + 256 >> 2], o4[g6 + 52 >> 2] = H5, H5 = o4[g6 + 20 >> 2], o4[B5 + 80 >> 2] = o4[g6 + 16 >> 2], o4[B5 + 84 >> 2] = H5, H5 = o4[g6 + 28 >> 2], o4[B5 + 88 >> 2] = o4[g6 + 24 >> 2], o4[B5 + 92 >> 2] = H5, H5 = o4[g6 + 36 >> 2], o4[B5 + 64 >> 2] = o4[g6 + 32 >> 2], o4[B5 + 68 >> 2] = H5, H5 = o4[g6 + 44 >> 2], o4[B5 + 72 >> 2] = o4[g6 + 40 >> 2], o4[B5 + 76 >> 2] = H5, GA(A7, B5 + 80 | 0, B5 - -64 | 0), H5 = o4[B5 + 268 >> 2], o4[g6 + 40 >> 2] = o4[B5 + 264 >> 2], o4[g6 + 44 >> 2] = H5, H5 = o4[B5 + 260 >> 2], o4[g6 + 32 >> 2] = o4[B5 + 256 >> 2], o4[g6 + 36 >> 2] = H5, H5 = o4[g6 + 4 >> 2], o4[B5 + 48 >> 2] = o4[g6 >> 2], o4[B5 + 52 >> 2] = H5, H5 = o4[g6 + 12 >> 2], o4[B5 + 56 >> 2] = o4[g6 + 8 >> 2], o4[B5 + 60 >> 2] = H5, H5 = o4[g6 + 20 >> 2], o4[B5 + 32 >> 2] = o4[g6 + 16 >> 2], o4[B5 + 36 >> 2] = H5, H5 = o4[g6 + 28 >> 2], o4[B5 + 40 >> 2] = o4[g6 + 24 >> 2], o4[B5 + 44 >> 2] = H5, GA(A7, B5 + 48 | 0, B5 + 32 | 0), H5 = o4[B5 + 268 >> 2], o4[g6 + 24 >> 2] = o4[B5 + 264 >> 2], o4[g6 + 28 >> 2] = H5, H5 = o4[B5 + 260 >> 2], o4[g6 + 16 >> 2] = o4[B5 + 256 >> 2], o4[g6 + 20 >> 2] = H5, H5 = o4[B5 + 276 >> 2], o4[B5 + 16 >> 2] = o4[B5 + 272 >> 2], o4[B5 + 20 >> 2] = H5, H5 = o4[B5 + 284 >> 2], o4[B5 + 24 >> 2] = o4[B5 + 280 >> 2], o4[B5 + 28 >> 2] = H5, H5 = o4[g6 + 4 >> 2], o4[B5 >> 2] = o4[g6 >> 2], o4[B5 + 4 >> 2] = H5, H5 = o4[g6 + 12 >> 2], o4[B5 + 8 >> 2] = o4[g6 + 8 >> 2], o4[B5 + 12 >> 2] = H5, GA(A7, B5 + 16 | 0, B5), A7 = o4[B5 + 268 >> 2], o4[g6 + 8 >> 2] = o4[B5 + 264 >> 2], o4[g6 + 12 >> 2] = A7, A7 = o4[B5 + 260 >> 2], o4[g6 >> 2] = o4[B5 + 256 >> 2], o4[g6 + 4 >> 2] = A7, o4[g6 + 12 >> 2] = d5 ^ o4[g6 + 12 >> 2], o4[g6 + 8 >> 2] = L5 ^ o4[g6 + 8 >> 2], o4[g6 + 4 >> 2] = p5 ^ o4[g6 + 4 >> 2], o4[g6 >> 2] = s5 ^ o4[g6 >> 2], o4[I6 >> 2] = P5 ^ o4[I6 >> 2], o4[g6 + 68 >> 2] = R4 ^ o4[g6 + 68 >> 2], o4[g6 + 72 >> 2] = b4 ^ o4[g6 + 72 >> 2], o4[g6 + 76 >> 2] = Q5 ^ o4[g6 + 76 >> 2], r4 = B5 + 288 | 0;
            }
            function v3(A7, I6, g6) {
              var B5, Q5, i2, E5, D5, h5, w5, F5, y5, f5, S4, a5, k5, M5, n5, t5, U5, J5, K5, e4, Y5, N5, G5, H5, s5, p5, L5, d5, P5, R4, b4 = 0;
              r4 = B5 = r4 - 288 | 0, U5 = o4[g6 + 16 >> 2], J5 = o4[g6 + 48 >> 2], Q5 = c4[I6 + 4 | 0] | c4[I6 + 5 | 0] << 8 | c4[I6 + 6 | 0] << 16 | c4[I6 + 7 | 0] << 24, K5 = o4[g6 + 20 >> 2], e4 = o4[g6 + 52 >> 2], i2 = c4[I6 + 8 | 0] | c4[I6 + 9 | 0] << 8 | c4[I6 + 10 | 0] << 16 | c4[I6 + 11 | 0] << 24, Y5 = o4[g6 + 24 >> 2], N5 = o4[g6 + 56 >> 2], E5 = c4[I6 + 12 | 0] | c4[I6 + 13 | 0] << 8 | c4[I6 + 14 | 0] << 16 | c4[I6 + 15 | 0] << 24, G5 = o4[g6 + 28 >> 2], H5 = o4[g6 + 60 >> 2], b4 = o4[g6 + 32 >> 2], D5 = c4[I6 + 16 | 0] | c4[I6 + 17 | 0] << 8 | c4[I6 + 18 | 0] << 16 | c4[I6 + 19 | 0] << 24, s5 = o4[g6 + 80 >> 2], p5 = o4[g6 + 112 >> 2], h5 = o4[g6 + 96 >> 2], w5 = o4[g6 + 36 >> 2], F5 = c4[I6 + 20 | 0] | c4[I6 + 21 | 0] << 8 | c4[I6 + 22 | 0] << 16 | c4[I6 + 23 | 0] << 24, L5 = o4[g6 + 84 >> 2], d5 = o4[g6 + 116 >> 2], y5 = o4[g6 + 100 >> 2], f5 = o4[g6 + 40 >> 2], S4 = c4[I6 + 24 | 0] | c4[I6 + 25 | 0] << 8 | c4[I6 + 26 | 0] << 16 | c4[I6 + 27 | 0] << 24, P5 = o4[g6 + 88 >> 2], R4 = o4[g6 + 120 >> 2], a5 = o4[g6 + 104 >> 2], k5 = c4[0 | I6] | c4[I6 + 1 | 0] << 8 | c4[I6 + 2 | 0] << 16 | c4[I6 + 3 | 0] << 24, M5 = o4[g6 + 44 >> 2], n5 = c4[I6 + 28 | 0] | c4[I6 + 29 | 0] << 8 | c4[I6 + 30 | 0] << 16 | c4[I6 + 31 | 0] << 24, t5 = o4[g6 + 108 >> 2], I6 = M5 ^ n5 ^ o4[g6 + 92 >> 2] ^ t5 & o4[g6 + 124 >> 2], C5[A7 + 28 | 0] = I6, C5[A7 + 29 | 0] = I6 >>> 8, C5[A7 + 30 | 0] = I6 >>> 16, C5[A7 + 31 | 0] = I6 >>> 24, I6 = a5 & R4 ^ P5 ^ S4 ^ f5, C5[A7 + 24 | 0] = I6, C5[A7 + 25 | 0] = I6 >>> 8, C5[A7 + 26 | 0] = I6 >>> 16, C5[A7 + 27 | 0] = I6 >>> 24, I6 = y5 & d5 ^ L5 ^ F5 ^ w5, C5[A7 + 20 | 0] = I6, C5[A7 + 21 | 0] = I6 >>> 8, C5[A7 + 22 | 0] = I6 >>> 16, C5[A7 + 23 | 0] = I6 >>> 24, I6 = b4 ^ h5 & p5 ^ s5 ^ D5, C5[A7 + 16 | 0] = I6, C5[A7 + 17 | 0] = I6 >>> 8, C5[A7 + 18 | 0] = I6 >>> 16, C5[A7 + 19 | 0] = I6 >>> 24, I6 = H5 & M5 ^ G5 ^ E5 ^ t5, C5[A7 + 12 | 0] = I6, C5[A7 + 13 | 0] = I6 >>> 8, C5[A7 + 14 | 0] = I6 >>> 16, C5[A7 + 15 | 0] = I6 >>> 24, I6 = f5 & N5 ^ Y5 ^ i2 ^ a5, C5[A7 + 8 | 0] = I6, C5[A7 + 9 | 0] = I6 >>> 8, C5[A7 + 10 | 0] = I6 >>> 16, C5[A7 + 11 | 0] = I6 >>> 24, I6 = w5 & e4 ^ K5 ^ Q5 ^ y5, C5[A7 + 4 | 0] = I6, C5[A7 + 5 | 0] = I6 >>> 8, C5[A7 + 6 | 0] = I6 >>> 16, C5[A7 + 7 | 0] = I6 >>> 24, I6 = b4 & J5 ^ U5 ^ k5 ^ h5, C5[0 | A7] = I6, C5[A7 + 1 | 0] = I6 >>> 8, C5[A7 + 2 | 0] = I6 >>> 16, C5[A7 + 3 | 0] = I6 >>> 24, A7 = o4[g6 + 124 >> 2], o4[B5 + 280 >> 2] = o4[g6 + 120 >> 2], o4[B5 + 284 >> 2] = A7, A7 = o4[g6 + 116 >> 2], o4[B5 + 272 >> 2] = o4[g6 + 112 >> 2], o4[B5 + 276 >> 2] = A7, A7 = o4[g6 + 100 >> 2], o4[B5 + 240 >> 2] = o4[g6 + 96 >> 2], o4[B5 + 244 >> 2] = A7, A7 = o4[g6 + 108 >> 2], o4[B5 + 248 >> 2] = o4[g6 + 104 >> 2], o4[B5 + 252 >> 2] = A7, A7 = o4[g6 + 116 >> 2], o4[B5 + 224 >> 2] = o4[g6 + 112 >> 2], o4[B5 + 228 >> 2] = A7, A7 = o4[g6 + 124 >> 2], o4[B5 + 232 >> 2] = o4[g6 + 120 >> 2], o4[B5 + 236 >> 2] = A7, GA(A7 = B5 + 256 | 0, B5 + 240 | 0, B5 + 224 | 0), I6 = o4[B5 + 268 >> 2], o4[g6 + 120 >> 2] = o4[B5 + 264 >> 2], o4[g6 + 124 >> 2] = I6, I6 = o4[B5 + 260 >> 2], o4[g6 + 112 >> 2] = o4[B5 + 256 >> 2], o4[g6 + 116 >> 2] = I6, I6 = o4[g6 + 84 >> 2], o4[B5 + 208 >> 2] = o4[g6 + 80 >> 2], o4[B5 + 212 >> 2] = I6, I6 = o4[g6 + 92 >> 2], o4[B5 + 216 >> 2] = o4[g6 + 88 >> 2], o4[B5 + 220 >> 2] = I6, I6 = o4[g6 + 100 >> 2], o4[B5 + 192 >> 2] = o4[g6 + 96 >> 2], o4[B5 + 196 >> 2] = I6, I6 = o4[g6 + 108 >> 2], o4[B5 + 200 >> 2] = o4[g6 + 104 >> 2], o4[B5 + 204 >> 2] = I6, GA(A7, B5 + 208 | 0, B5 + 192 | 0), I6 = o4[B5 + 268 >> 2], o4[g6 + 104 >> 2] = o4[B5 + 264 >> 2], o4[g6 + 108 >> 2] = I6, I6 = o4[B5 + 260 >> 2], o4[g6 + 96 >> 2] = o4[B5 + 256 >> 2], o4[g6 + 100 >> 2] = I6, b4 = o4[4 + (I6 = g6 - -64 | 0) >> 2], o4[B5 + 176 >> 2] = o4[I6 >> 2], o4[B5 + 180 >> 2] = b4, b4 = o4[g6 + 76 >> 2], o4[B5 + 184 >> 2] = o4[g6 + 72 >> 2], o4[B5 + 188 >> 2] = b4, b4 = o4[g6 + 84 >> 2], o4[B5 + 160 >> 2] = o4[g6 + 80 >> 2], o4[B5 + 164 >> 2] = b4, b4 = o4[g6 + 92 >> 2], o4[B5 + 168 >> 2] = o4[g6 + 88 >> 2], o4[B5 + 172 >> 2] = b4, GA(A7, B5 + 176 | 0, B5 + 160 | 0), b4 = o4[B5 + 268 >> 2], o4[g6 + 88 >> 2] = o4[B5 + 264 >> 2], o4[g6 + 92 >> 2] = b4, b4 = o4[B5 + 260 >> 2], o4[g6 + 80 >> 2] = o4[B5 + 256 >> 2], o4[g6 + 84 >> 2] = b4, b4 = o4[g6 + 52 >> 2], o4[B5 + 144 >> 2] = o4[g6 + 48 >> 2], o4[B5 + 148 >> 2] = b4, b4 = o4[g6 + 60 >> 2], o4[B5 + 152 >> 2] = o4[g6 + 56 >> 2], o4[B5 + 156 >> 2] = b4, b4 = o4[I6 + 4 >> 2], o4[B5 + 128 >> 2] = o4[I6 >> 2], o4[B5 + 132 >> 2] = b4, b4 = o4[g6 + 76 >> 2], o4[B5 + 136 >> 2] = o4[g6 + 72 >> 2], o4[B5 + 140 >> 2] = b4, GA(A7, B5 + 144 | 0, B5 + 128 | 0), b4 = o4[B5 + 268 >> 2], o4[g6 + 72 >> 2] = o4[B5 + 264 >> 2], o4[g6 + 76 >> 2] = b4, b4 = o4[B5 + 260 >> 2], o4[I6 >> 2] = o4[B5 + 256 >> 2], o4[I6 + 4 >> 2] = b4, b4 = o4[g6 + 36 >> 2], o4[B5 + 112 >> 2] = o4[g6 + 32 >> 2], o4[B5 + 116 >> 2] = b4, b4 = o4[g6 + 44 >> 2], o4[B5 + 120 >> 2] = o4[g6 + 40 >> 2], o4[B5 + 124 >> 2] = b4, b4 = o4[g6 + 52 >> 2], o4[B5 + 96 >> 2] = o4[g6 + 48 >> 2], o4[B5 + 100 >> 2] = b4, b4 = o4[g6 + 60 >> 2], o4[B5 + 104 >> 2] = o4[g6 + 56 >> 2], o4[B5 + 108 >> 2] = b4, GA(A7, B5 + 112 | 0, B5 + 96 | 0), b4 = o4[B5 + 268 >> 2], o4[g6 + 56 >> 2] = o4[B5 + 264 >> 2], o4[g6 + 60 >> 2] = b4, b4 = o4[B5 + 260 >> 2], o4[g6 + 48 >> 2] = o4[B5 + 256 >> 2], o4[g6 + 52 >> 2] = b4, b4 = o4[g6 + 20 >> 2], o4[B5 + 80 >> 2] = o4[g6 + 16 >> 2], o4[B5 + 84 >> 2] = b4, b4 = o4[g6 + 28 >> 2], o4[B5 + 88 >> 2] = o4[g6 + 24 >> 2], o4[B5 + 92 >> 2] = b4, b4 = o4[g6 + 36 >> 2], o4[B5 + 64 >> 2] = o4[g6 + 32 >> 2], o4[B5 + 68 >> 2] = b4, b4 = o4[g6 + 44 >> 2], o4[B5 + 72 >> 2] = o4[g6 + 40 >> 2], o4[B5 + 76 >> 2] = b4, GA(A7, B5 + 80 | 0, B5 - -64 | 0), b4 = o4[B5 + 268 >> 2], o4[g6 + 40 >> 2] = o4[B5 + 264 >> 2], o4[g6 + 44 >> 2] = b4, b4 = o4[B5 + 260 >> 2], o4[g6 + 32 >> 2] = o4[B5 + 256 >> 2], o4[g6 + 36 >> 2] = b4, b4 = o4[g6 + 4 >> 2], o4[B5 + 48 >> 2] = o4[g6 >> 2], o4[B5 + 52 >> 2] = b4, b4 = o4[g6 + 12 >> 2], o4[B5 + 56 >> 2] = o4[g6 + 8 >> 2], o4[B5 + 60 >> 2] = b4, b4 = o4[g6 + 20 >> 2], o4[B5 + 32 >> 2] = o4[g6 + 16 >> 2], o4[B5 + 36 >> 2] = b4, b4 = o4[g6 + 28 >> 2], o4[B5 + 40 >> 2] = o4[g6 + 24 >> 2], o4[B5 + 44 >> 2] = b4, GA(A7, B5 + 48 | 0, B5 + 32 | 0), b4 = o4[B5 + 268 >> 2], o4[g6 + 24 >> 2] = o4[B5 + 264 >> 2], o4[g6 + 28 >> 2] = b4, b4 = o4[B5 + 260 >> 2], o4[g6 + 16 >> 2] = o4[B5 + 256 >> 2], o4[g6 + 20 >> 2] = b4, b4 = o4[B5 + 276 >> 2], o4[B5 + 16 >> 2] = o4[B5 + 272 >> 2], o4[B5 + 20 >> 2] = b4, b4 = o4[B5 + 284 >> 2], o4[B5 + 24 >> 2] = o4[B5 + 280 >> 2], o4[B5 + 28 >> 2] = b4, b4 = o4[g6 + 4 >> 2], o4[B5 >> 2] = o4[g6 >> 2], o4[B5 + 4 >> 2] = b4, b4 = o4[g6 + 12 >> 2], o4[B5 + 8 >> 2] = o4[g6 + 8 >> 2], o4[B5 + 12 >> 2] = b4, GA(A7, B5 + 16 | 0, B5), A7 = o4[B5 + 268 >> 2], o4[g6 + 8 >> 2] = o4[B5 + 264 >> 2], o4[g6 + 12 >> 2] = A7, A7 = o4[B5 + 260 >> 2], o4[g6 >> 2] = o4[B5 + 256 >> 2], o4[g6 + 4 >> 2] = A7, o4[g6 + 12 >> 2] = o4[g6 + 12 >> 2] ^ E5, o4[g6 + 8 >> 2] = o4[g6 + 8 >> 2] ^ i2, o4[g6 + 4 >> 2] = o4[g6 + 4 >> 2] ^ Q5, o4[g6 >> 2] = o4[g6 >> 2] ^ k5, o4[I6 >> 2] = o4[I6 >> 2] ^ D5, o4[g6 + 68 >> 2] = o4[g6 + 68 >> 2] ^ F5, o4[g6 + 72 >> 2] = o4[g6 + 72 >> 2] ^ S4, o4[g6 + 76 >> 2] = n5 ^ o4[g6 + 76 >> 2], r4 = B5 + 288 | 0;
            }
            function u3(A7, I6, g6) {
              var C6, B5, Q5, i2, E5, D5, h5, w5, F5, y5 = 0, f5 = 0;
              for (r4 = C6 = r4 - 288 | 0, D5 = c4[I6 + 4 | 0] | c4[I6 + 5 | 0] << 8 | c4[I6 + 6 | 0] << 16 | c4[I6 + 7 | 0] << 24, h5 = c4[I6 + 8 | 0] | c4[I6 + 9 | 0] << 8 | c4[I6 + 10 | 0] << 16 | c4[I6 + 11 | 0] << 24, w5 = c4[I6 + 12 | 0] | c4[I6 + 13 | 0] << 8 | c4[I6 + 14 | 0] << 16 | c4[I6 + 15 | 0] << 24, B5 = c4[A7 + 4 | 0] | c4[A7 + 5 | 0] << 8 | c4[A7 + 6 | 0] << 16 | c4[A7 + 7 | 0] << 24, Q5 = c4[A7 + 8 | 0] | c4[A7 + 9 | 0] << 8 | c4[A7 + 10 | 0] << 16 | c4[A7 + 11 | 0] << 24, i2 = c4[A7 + 12 | 0] | c4[A7 + 13 | 0] << 8 | c4[A7 + 14 | 0] << 16 | c4[A7 + 15 | 0] << 24, F5 = c4[0 | I6] | c4[I6 + 1 | 0] << 8 | c4[I6 + 2 | 0] << 16 | c4[I6 + 3 | 0] << 24, A7 = 33620224 ^ (E5 = c4[0 | A7] | c4[A7 + 1 | 0] << 8 | c4[A7 + 2 | 0] << 16 | c4[A7 + 3 | 0] << 24), o4[g6 + 112 >> 2] = A7, o4[g6 + 96 >> 2] = 1427652059 ^ E5, o4[g6 + 80 >> 2] = A7, I6 = E5 ^ F5, o4[(A7 = g6 - -64 | 0) >> 2] = I6, o4[g6 + 56 >> 2] = 1110511904, o4[g6 + 60 >> 2] = -584534669, o4[g6 + 48 >> 2] = 1427652059, o4[g6 + 52 >> 2] = -248528275, o4[g6 + 40 >> 2] = 1496785429, o4[g6 + 44 >> 2] = 1652156816, o4[g6 + 32 >> 2] = 33620224, o4[g6 + 36 >> 2] = 218629379, o4[g6 + 24 >> 2] = 1110511904, o4[g6 + 28 >> 2] = -584534669, o4[g6 + 16 >> 2] = 1427652059, o4[g6 + 20 >> 2] = -248528275, o4[g6 >> 2] = I6, I6 = 1652156816 ^ i2, o4[g6 + 124 >> 2] = I6, f5 = 1496785429 ^ Q5, o4[g6 + 120 >> 2] = f5, y5 = 218629379 ^ B5, o4[g6 + 116 >> 2] = y5, o4[g6 + 108 >> 2] = -584534669 ^ i2, o4[g6 + 104 >> 2] = 1110511904 ^ Q5, o4[g6 + 100 >> 2] = -248528275 ^ B5, o4[g6 + 92 >> 2] = I6, o4[g6 + 88 >> 2] = f5, o4[g6 + 84 >> 2] = y5, I6 = i2 ^ w5, o4[g6 + 76 >> 2] = I6, f5 = Q5 ^ h5, o4[g6 + 72 >> 2] = f5, y5 = B5 ^ D5, o4[g6 + 68 >> 2] = y5, o4[g6 + 12 >> 2] = I6, o4[g6 + 8 >> 2] = f5, o4[g6 + 4 >> 2] = y5, f5 = 0; I6 = o4[g6 + 124 >> 2], o4[C6 + 280 >> 2] = o4[g6 + 120 >> 2], o4[C6 + 284 >> 2] = I6, I6 = o4[g6 + 116 >> 2], o4[C6 + 272 >> 2] = o4[g6 + 112 >> 2], o4[C6 + 276 >> 2] = I6, I6 = o4[g6 + 100 >> 2], o4[C6 + 240 >> 2] = o4[g6 + 96 >> 2], o4[C6 + 244 >> 2] = I6, I6 = o4[g6 + 108 >> 2], o4[C6 + 248 >> 2] = o4[g6 + 104 >> 2], o4[C6 + 252 >> 2] = I6, I6 = o4[g6 + 116 >> 2], o4[C6 + 224 >> 2] = o4[g6 + 112 >> 2], o4[C6 + 228 >> 2] = I6, I6 = o4[g6 + 124 >> 2], o4[C6 + 232 >> 2] = o4[g6 + 120 >> 2], o4[C6 + 236 >> 2] = I6, GA(I6 = C6 + 256 | 0, C6 + 240 | 0, C6 + 224 | 0), y5 = o4[C6 + 268 >> 2], o4[g6 + 120 >> 2] = o4[C6 + 264 >> 2], o4[g6 + 124 >> 2] = y5, y5 = o4[C6 + 260 >> 2], o4[g6 + 112 >> 2] = o4[C6 + 256 >> 2], o4[g6 + 116 >> 2] = y5, y5 = o4[g6 + 84 >> 2], o4[C6 + 208 >> 2] = o4[g6 + 80 >> 2], o4[C6 + 212 >> 2] = y5, y5 = o4[g6 + 92 >> 2], o4[C6 + 216 >> 2] = o4[g6 + 88 >> 2], o4[C6 + 220 >> 2] = y5, y5 = o4[g6 + 100 >> 2], o4[C6 + 192 >> 2] = o4[g6 + 96 >> 2], o4[C6 + 196 >> 2] = y5, y5 = o4[g6 + 108 >> 2], o4[C6 + 200 >> 2] = o4[g6 + 104 >> 2], o4[C6 + 204 >> 2] = y5, GA(I6, C6 + 208 | 0, C6 + 192 | 0), y5 = o4[C6 + 268 >> 2], o4[g6 + 104 >> 2] = o4[C6 + 264 >> 2], o4[g6 + 108 >> 2] = y5, y5 = o4[C6 + 260 >> 2], o4[g6 + 96 >> 2] = o4[C6 + 256 >> 2], o4[g6 + 100 >> 2] = y5, y5 = o4[A7 + 4 >> 2], o4[C6 + 176 >> 2] = o4[A7 >> 2], o4[C6 + 180 >> 2] = y5, y5 = o4[A7 + 12 >> 2], o4[C6 + 184 >> 2] = o4[A7 + 8 >> 2], o4[C6 + 188 >> 2] = y5, y5 = o4[g6 + 84 >> 2], o4[C6 + 160 >> 2] = o4[g6 + 80 >> 2], o4[C6 + 164 >> 2] = y5, y5 = o4[g6 + 92 >> 2], o4[C6 + 168 >> 2] = o4[g6 + 88 >> 2], o4[C6 + 172 >> 2] = y5, GA(I6, C6 + 176 | 0, C6 + 160 | 0), y5 = o4[C6 + 268 >> 2], o4[g6 + 88 >> 2] = o4[C6 + 264 >> 2], o4[g6 + 92 >> 2] = y5, y5 = o4[C6 + 260 >> 2], o4[g6 + 80 >> 2] = o4[C6 + 256 >> 2], o4[g6 + 84 >> 2] = y5, y5 = o4[g6 + 52 >> 2], o4[C6 + 144 >> 2] = o4[g6 + 48 >> 2], o4[C6 + 148 >> 2] = y5, y5 = o4[g6 + 60 >> 2], o4[C6 + 152 >> 2] = o4[g6 + 56 >> 2], o4[C6 + 156 >> 2] = y5, y5 = o4[A7 + 4 >> 2], o4[C6 + 128 >> 2] = o4[A7 >> 2], o4[C6 + 132 >> 2] = y5, y5 = o4[A7 + 12 >> 2], o4[C6 + 136 >> 2] = o4[A7 + 8 >> 2], o4[C6 + 140 >> 2] = y5, GA(I6, C6 + 144 | 0, C6 + 128 | 0), y5 = o4[C6 + 268 >> 2], o4[A7 + 8 >> 2] = o4[C6 + 264 >> 2], o4[A7 + 12 >> 2] = y5, y5 = o4[C6 + 260 >> 2], o4[A7 >> 2] = o4[C6 + 256 >> 2], o4[A7 + 4 >> 2] = y5, y5 = o4[g6 + 36 >> 2], o4[C6 + 112 >> 2] = o4[g6 + 32 >> 2], o4[C6 + 116 >> 2] = y5, y5 = o4[g6 + 44 >> 2], o4[C6 + 120 >> 2] = o4[g6 + 40 >> 2], o4[C6 + 124 >> 2] = y5, y5 = o4[g6 + 52 >> 2], o4[C6 + 96 >> 2] = o4[g6 + 48 >> 2], o4[C6 + 100 >> 2] = y5, y5 = o4[g6 + 60 >> 2], o4[C6 + 104 >> 2] = o4[g6 + 56 >> 2], o4[C6 + 108 >> 2] = y5, GA(I6, C6 + 112 | 0, C6 + 96 | 0), y5 = o4[C6 + 268 >> 2], o4[g6 + 56 >> 2] = o4[C6 + 264 >> 2], o4[g6 + 60 >> 2] = y5, y5 = o4[C6 + 260 >> 2], o4[g6 + 48 >> 2] = o4[C6 + 256 >> 2], o4[g6 + 52 >> 2] = y5, y5 = o4[g6 + 20 >> 2], o4[C6 + 80 >> 2] = o4[g6 + 16 >> 2], o4[C6 + 84 >> 2] = y5, y5 = o4[g6 + 28 >> 2], o4[C6 + 88 >> 2] = o4[g6 + 24 >> 2], o4[C6 + 92 >> 2] = y5, y5 = o4[g6 + 36 >> 2], o4[C6 + 64 >> 2] = o4[g6 + 32 >> 2], o4[C6 + 68 >> 2] = y5, y5 = o4[g6 + 44 >> 2], o4[C6 + 72 >> 2] = o4[g6 + 40 >> 2], o4[C6 + 76 >> 2] = y5, GA(I6, C6 + 80 | 0, C6 - -64 | 0), y5 = o4[C6 + 268 >> 2], o4[g6 + 40 >> 2] = o4[C6 + 264 >> 2], o4[g6 + 44 >> 2] = y5, y5 = o4[C6 + 260 >> 2], o4[g6 + 32 >> 2] = o4[C6 + 256 >> 2], o4[g6 + 36 >> 2] = y5, y5 = o4[g6 + 4 >> 2], o4[C6 + 48 >> 2] = o4[g6 >> 2], o4[C6 + 52 >> 2] = y5, y5 = o4[g6 + 12 >> 2], o4[C6 + 56 >> 2] = o4[g6 + 8 >> 2], o4[C6 + 60 >> 2] = y5, y5 = o4[g6 + 20 >> 2], o4[C6 + 32 >> 2] = o4[g6 + 16 >> 2], o4[C6 + 36 >> 2] = y5, y5 = o4[g6 + 28 >> 2], o4[C6 + 40 >> 2] = o4[g6 + 24 >> 2], o4[C6 + 44 >> 2] = y5, GA(I6, C6 + 48 | 0, C6 + 32 | 0), y5 = o4[C6 + 268 >> 2], o4[g6 + 24 >> 2] = o4[C6 + 264 >> 2], o4[g6 + 28 >> 2] = y5, y5 = o4[C6 + 260 >> 2], o4[g6 + 16 >> 2] = o4[C6 + 256 >> 2], o4[g6 + 20 >> 2] = y5, y5 = o4[C6 + 276 >> 2], o4[C6 + 16 >> 2] = o4[C6 + 272 >> 2], o4[C6 + 20 >> 2] = y5, y5 = o4[C6 + 284 >> 2], o4[C6 + 24 >> 2] = o4[C6 + 280 >> 2], o4[C6 + 28 >> 2] = y5, y5 = o4[g6 + 4 >> 2], o4[C6 >> 2] = o4[g6 >> 2], o4[C6 + 4 >> 2] = y5, y5 = o4[g6 + 12 >> 2], o4[C6 + 8 >> 2] = o4[g6 + 8 >> 2], o4[C6 + 12 >> 2] = y5, GA(I6, C6 + 16 | 0, C6), I6 = o4[C6 + 268 >> 2], o4[g6 + 8 >> 2] = o4[C6 + 264 >> 2], o4[g6 + 12 >> 2] = I6, I6 = o4[C6 + 260 >> 2], o4[g6 >> 2] = o4[C6 + 256 >> 2], o4[g6 + 4 >> 2] = I6, o4[g6 + 12 >> 2] = o4[g6 + 12 >> 2] ^ w5, o4[g6 + 8 >> 2] = o4[g6 + 8 >> 2] ^ h5, o4[g6 + 4 >> 2] = o4[g6 + 4 >> 2] ^ D5, o4[g6 >> 2] = o4[g6 >> 2] ^ F5, o4[A7 >> 2] = E5 ^ o4[A7 >> 2], o4[g6 + 68 >> 2] = o4[g6 + 68 >> 2] ^ B5, o4[g6 + 72 >> 2] = o4[g6 + 72 >> 2] ^ Q5, o4[g6 + 76 >> 2] = o4[g6 + 76 >> 2] ^ i2, 10 != (0 | (f5 = f5 + 1 | 0)); ) ;
              r4 = C6 + 288 | 0;
            }
            function z2(A7, I6, g6, B5, Q5) {
              var i2, E5, D5, h5, w5, F5, y5, f5, S4, a5, k5, M5, n5, t5, U5, J5 = 0, K5 = 0, e4 = 0, Y5 = 0, N5 = 0, G5 = 0, H5 = 0, s5 = 0, p5 = 0, L5 = 0, d5 = 0, P5 = 0, R4 = 0, b4 = 0, v5 = 0, u4 = 0, z3 = 0, O3 = 0, q3 = 0, W3 = 0, x3 = 0, V3 = 0, j3 = 0, m3 = 0, l3 = 0, _3 = 0, X3 = 0, T3 = 0, Z3 = 0, $3 = 0, AA2 = 0, IA2 = 0, gA2 = 0, CA2 = 0;
              for (i2 = r4 + -64 | 0, E5 = o4[A7 + 60 >> 2], D5 = o4[A7 + 56 >> 2], W3 = o4[A7 + 52 >> 2], q3 = o4[A7 + 48 >> 2], h5 = o4[A7 + 44 >> 2], w5 = o4[A7 + 40 >> 2], F5 = o4[A7 + 36 >> 2], y5 = o4[A7 + 32 >> 2], f5 = o4[A7 + 28 >> 2], S4 = o4[A7 + 24 >> 2], a5 = o4[A7 + 20 >> 2], k5 = o4[A7 + 16 >> 2], M5 = o4[A7 + 12 >> 2], n5 = o4[A7 + 8 >> 2], t5 = o4[A7 + 4 >> 2], U5 = o4[A7 >> 2]; ; ) {
                if (!Q5 & B5 >>> 0 > 63 | Q5) J5 = g6;
                else {
                  for (o4[i2 + 56 >> 2] = 0, o4[i2 + 60 >> 2] = 0, o4[i2 + 48 >> 2] = 0, o4[i2 + 52 >> 2] = 0, o4[i2 + 40 >> 2] = 0, o4[i2 + 44 >> 2] = 0, o4[i2 + 32 >> 2] = 0, o4[i2 + 36 >> 2] = 0, o4[i2 + 24 >> 2] = 0, o4[i2 + 28 >> 2] = 0, o4[i2 + 16 >> 2] = 0, o4[i2 + 20 >> 2] = 0, o4[i2 + 8 >> 2] = 0, o4[i2 + 12 >> 2] = 0, o4[i2 >> 2] = 0, o4[i2 + 4 >> 2] = 0, e4 = 0; C5[e4 + i2 | 0] = c4[I6 + e4 | 0], !Q5 & B5 >>> 0 > (e4 = e4 + 1 | 0) >>> 0 | Q5; ) ;
                  I6 = J5 = i2, l3 = g6;
                }
                for (x3 = 20, K5 = U5, L5 = t5, d5 = n5, b4 = M5, e4 = k5, g6 = a5, N5 = S4, G5 = f5, H5 = y5, u4 = F5, P5 = w5, Y5 = E5, z3 = D5, v5 = W3, R4 = q3, s5 = h5; p5 = e4, K5 = kI((e4 = K5 + e4 | 0) ^ R4, 16), p5 = R4 = kI(p5 ^ (H5 = K5 + H5 | 0), 12), R4 = kI((O3 = e4 + R4 | 0) ^ K5, 8), e4 = kI(p5 ^ (H5 = R4 + H5 | 0), 7), Y5 = kI((K5 = G5 + b4 | 0) ^ Y5, 16), G5 = kI((s5 = Y5 + s5 | 0) ^ G5, 12), b4 = kI((d5 = N5 + d5 | 0) ^ z3, 16), N5 = kI((P5 = b4 + P5 | 0) ^ N5, 12), z3 = (V3 = K5 + G5 | 0) + e4 | 0, j3 = kI((d5 = N5 + d5 | 0) ^ b4, 8), K5 = kI(z3 ^ j3, 16), b4 = kI((L5 = g6 + L5 | 0) ^ v5, 16), g6 = kI((u4 = b4 + u4 | 0) ^ g6, 12), p5 = e4, v5 = kI((L5 = g6 + L5 | 0) ^ b4, 8), p5 = kI(p5 ^ (e4 = (m3 = v5 + u4 | 0) + K5 | 0), 12), z3 = kI(K5 ^ (b4 = p5 + z3 | 0), 8), e4 = kI((u4 = z3 + e4 | 0) ^ p5, 7), p5 = H5, H5 = d5, K5 = kI(Y5 ^ V3, 8), d5 = kI((Y5 = K5 + s5 | 0) ^ G5, 7), v5 = kI((H5 = H5 + d5 | 0) ^ v5, 16), s5 = kI((G5 = p5 + v5 | 0) ^ d5, 12), v5 = kI(v5 ^ (d5 = s5 + H5 | 0), 8), G5 = kI((H5 = G5 + v5 | 0) ^ s5, 7), s5 = Y5, Y5 = L5, L5 = kI((P5 = P5 + j3 | 0) ^ N5, 7), N5 = s5 + (R4 = kI((Y5 = Y5 + L5 | 0) ^ R4, 16)) | 0, s5 = Y5, Y5 = kI(N5 ^ L5, 12), R4 = kI(R4 ^ (L5 = s5 + Y5 | 0), 8), N5 = kI((s5 = N5 + R4 | 0) ^ Y5, 7), p5 = P5, Y5 = K5, K5 = kI(g6 ^ m3, 7), Y5 = kI(Y5 ^ (P5 = K5 + O3 | 0), 16), O3 = kI((g6 = p5 + Y5 | 0) ^ K5, 12), Y5 = kI(Y5 ^ (K5 = O3 + P5 | 0), 8), g6 = kI((P5 = g6 + Y5 | 0) ^ O3, 7), x3 = x3 - 2 | 0; ) ;
                if (x3 = c4[I6 + 4 | 0] | c4[I6 + 5 | 0] << 8 | c4[I6 + 6 | 0] << 16 | c4[I6 + 7 | 0] << 24, O3 = c4[I6 + 8 | 0] | c4[I6 + 9 | 0] << 8 | c4[I6 + 10 | 0] << 16 | c4[I6 + 11 | 0] << 24, V3 = c4[I6 + 12 | 0] | c4[I6 + 13 | 0] << 8 | c4[I6 + 14 | 0] << 16 | c4[I6 + 15 | 0] << 24, j3 = c4[I6 + 16 | 0] | c4[I6 + 17 | 0] << 8 | c4[I6 + 18 | 0] << 16 | c4[I6 + 19 | 0] << 24, m3 = c4[I6 + 20 | 0] | c4[I6 + 21 | 0] << 8 | c4[I6 + 22 | 0] << 16 | c4[I6 + 23 | 0] << 24, p5 = c4[I6 + 24 | 0] | c4[I6 + 25 | 0] << 8 | c4[I6 + 26 | 0] << 16 | c4[I6 + 27 | 0] << 24, _3 = c4[I6 + 28 | 0] | c4[I6 + 29 | 0] << 8 | c4[I6 + 30 | 0] << 16 | c4[I6 + 31 | 0] << 24, X3 = c4[I6 + 32 | 0] | c4[I6 + 33 | 0] << 8 | c4[I6 + 34 | 0] << 16 | c4[I6 + 35 | 0] << 24, T3 = c4[I6 + 36 | 0] | c4[I6 + 37 | 0] << 8 | c4[I6 + 38 | 0] << 16 | c4[I6 + 39 | 0] << 24, Z3 = c4[I6 + 40 | 0] | c4[I6 + 41 | 0] << 8 | c4[I6 + 42 | 0] << 16 | c4[I6 + 43 | 0] << 24, $3 = c4[I6 + 44 | 0] | c4[I6 + 45 | 0] << 8 | c4[I6 + 46 | 0] << 16 | c4[I6 + 47 | 0] << 24, AA2 = c4[I6 + 48 | 0] | c4[I6 + 49 | 0] << 8 | c4[I6 + 50 | 0] << 16 | c4[I6 + 51 | 0] << 24, IA2 = c4[I6 + 52 | 0] | c4[I6 + 53 | 0] << 8 | c4[I6 + 54 | 0] << 16 | c4[I6 + 55 | 0] << 24, gA2 = c4[I6 + 56 | 0] | c4[I6 + 57 | 0] << 8 | c4[I6 + 58 | 0] << 16 | c4[I6 + 59 | 0] << 24, CA2 = c4[I6 + 60 | 0] | c4[I6 + 61 | 0] << 8 | c4[I6 + 62 | 0] << 16 | c4[I6 + 63 | 0] << 24, K5 = K5 + U5 ^ (c4[0 | I6] | c4[I6 + 1 | 0] << 8 | c4[I6 + 2 | 0] << 16 | c4[I6 + 3 | 0] << 24), C5[0 | J5] = K5, C5[J5 + 1 | 0] = K5 >>> 8, C5[J5 + 2 | 0] = K5 >>> 16, C5[J5 + 3 | 0] = K5 >>> 24, K5 = Y5 + E5 ^ CA2, C5[J5 + 60 | 0] = K5, C5[J5 + 61 | 0] = K5 >>> 8, C5[J5 + 62 | 0] = K5 >>> 16, C5[J5 + 63 | 0] = K5 >>> 24, K5 = z3 + D5 ^ gA2, C5[J5 + 56 | 0] = K5, C5[J5 + 57 | 0] = K5 >>> 8, C5[J5 + 58 | 0] = K5 >>> 16, C5[J5 + 59 | 0] = K5 >>> 24, K5 = v5 + W3 ^ IA2, C5[J5 + 52 | 0] = K5, C5[J5 + 53 | 0] = K5 >>> 8, C5[J5 + 54 | 0] = K5 >>> 16, C5[J5 + 55 | 0] = K5 >>> 24, K5 = R4 + q3 ^ AA2, C5[J5 + 48 | 0] = K5, C5[J5 + 49 | 0] = K5 >>> 8, C5[J5 + 50 | 0] = K5 >>> 16, C5[J5 + 51 | 0] = K5 >>> 24, K5 = s5 + h5 ^ $3, C5[J5 + 44 | 0] = K5, C5[J5 + 45 | 0] = K5 >>> 8, C5[J5 + 46 | 0] = K5 >>> 16, C5[J5 + 47 | 0] = K5 >>> 24, K5 = P5 + w5 ^ Z3, C5[J5 + 40 | 0] = K5, C5[J5 + 41 | 0] = K5 >>> 8, C5[J5 + 42 | 0] = K5 >>> 16, C5[J5 + 43 | 0] = K5 >>> 24, K5 = u4 + F5 ^ T3, C5[J5 + 36 | 0] = K5, C5[J5 + 37 | 0] = K5 >>> 8, C5[J5 + 38 | 0] = K5 >>> 16, C5[J5 + 39 | 0] = K5 >>> 24, K5 = H5 + y5 ^ X3, C5[J5 + 32 | 0] = K5, C5[J5 + 33 | 0] = K5 >>> 8, C5[J5 + 34 | 0] = K5 >>> 16, C5[J5 + 35 | 0] = K5 >>> 24, G5 = G5 + f5 ^ _3, C5[J5 + 28 | 0] = G5, C5[J5 + 29 | 0] = G5 >>> 8, C5[J5 + 30 | 0] = G5 >>> 16, C5[J5 + 31 | 0] = G5 >>> 24, N5 = p5 ^ N5 + S4, C5[J5 + 24 | 0] = N5, C5[J5 + 25 | 0] = N5 >>> 8, C5[J5 + 26 | 0] = N5 >>> 16, C5[J5 + 27 | 0] = N5 >>> 24, g6 = m3 ^ g6 + a5, C5[J5 + 20 | 0] = g6, C5[J5 + 21 | 0] = g6 >>> 8, C5[J5 + 22 | 0] = g6 >>> 16, C5[J5 + 23 | 0] = g6 >>> 24, g6 = j3 ^ e4 + k5, C5[J5 + 16 | 0] = g6, C5[J5 + 17 | 0] = g6 >>> 8, C5[J5 + 18 | 0] = g6 >>> 16, C5[J5 + 19 | 0] = g6 >>> 24, g6 = V3 ^ b4 + M5, C5[J5 + 12 | 0] = g6, C5[J5 + 13 | 0] = g6 >>> 8, C5[J5 + 14 | 0] = g6 >>> 16, C5[J5 + 15 | 0] = g6 >>> 24, g6 = O3 ^ d5 + n5, C5[J5 + 8 | 0] = g6, C5[J5 + 9 | 0] = g6 >>> 8, C5[J5 + 10 | 0] = g6 >>> 16, C5[J5 + 11 | 0] = g6 >>> 24, g6 = x3 ^ L5 + t5, C5[J5 + 4 | 0] = g6, C5[J5 + 5 | 0] = g6 >>> 8, C5[J5 + 6 | 0] = g6 >>> 16, C5[J5 + 7 | 0] = g6 >>> 24, W3 = !(q3 = q3 + 1 | 0) + W3 | 0, !Q5 & B5 >>> 0 <= 64) {
                  if (!Q5 & B5 >>> 0 <= 63) for (e4 = 0; C5[e4 + l3 | 0] = c4[J5 + e4 | 0], B5 >>> 0 > (e4 = e4 + 1 | 0) >>> 0; ) ;
                  o4[A7 + 52 >> 2] = W3, o4[A7 + 48 >> 2] = q3;
                  break;
                }
                I6 = I6 - -64 | 0, g6 = J5 - -64 | 0, Q5 = Q5 - 1 | 0, Q5 = (B5 = B5 + -64 | 0) >>> 0 < 4294967232 ? Q5 + 1 | 0 : Q5;
              }
            }
            function O2(A7, I6, g6, B5, i2) {
              var E5, D5 = 0, c5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, n5 = 0, t5 = 0, U5 = 0, J5 = 0, K5 = 0;
              for (r4 = E5 = r4 - 224 | 0, y5 = o4[i2 + 60 >> 2] ^ B5 >>> 29, f5 = o4[i2 + 56 >> 2] ^ B5 << 3, c5 = o4[i2 + 52 >> 2] ^ g6 >>> 29, w5 = o4[i2 + 48 >> 2] ^ g6 << 3, D5 = i2 - -64 | 0; g6 = o4[i2 + 92 >> 2], o4[E5 + 216 >> 2] = o4[i2 + 88 >> 2], o4[E5 + 220 >> 2] = g6, g6 = o4[i2 + 84 >> 2], o4[E5 + 208 >> 2] = o4[i2 + 80 >> 2], o4[E5 + 212 >> 2] = g6, g6 = o4[D5 + 4 >> 2], o4[E5 + 176 >> 2] = o4[D5 >> 2], o4[E5 + 180 >> 2] = g6, g6 = o4[D5 + 12 >> 2], o4[E5 + 184 >> 2] = o4[D5 + 8 >> 2], o4[E5 + 188 >> 2] = g6, g6 = o4[i2 + 84 >> 2], o4[E5 + 160 >> 2] = o4[i2 + 80 >> 2], o4[E5 + 164 >> 2] = g6, g6 = o4[i2 + 92 >> 2], o4[E5 + 168 >> 2] = o4[i2 + 88 >> 2], o4[E5 + 172 >> 2] = g6, GA(B5 = E5 + 192 | 0, E5 + 176 | 0, E5 + 160 | 0), g6 = o4[E5 + 204 >> 2], o4[i2 + 88 >> 2] = o4[E5 + 200 >> 2], o4[i2 + 92 >> 2] = g6, g6 = o4[E5 + 196 >> 2], o4[i2 + 80 >> 2] = o4[E5 + 192 >> 2], o4[i2 + 84 >> 2] = g6, g6 = o4[i2 + 52 >> 2], o4[E5 + 144 >> 2] = o4[i2 + 48 >> 2], o4[E5 + 148 >> 2] = g6, g6 = o4[i2 + 60 >> 2], o4[E5 + 152 >> 2] = o4[i2 + 56 >> 2], o4[E5 + 156 >> 2] = g6, g6 = o4[D5 + 4 >> 2], o4[E5 + 128 >> 2] = o4[D5 >> 2], o4[E5 + 132 >> 2] = g6, g6 = o4[D5 + 12 >> 2], o4[E5 + 136 >> 2] = o4[D5 + 8 >> 2], o4[E5 + 140 >> 2] = g6, GA(B5, E5 + 144 | 0, E5 + 128 | 0), g6 = o4[E5 + 204 >> 2], o4[D5 + 8 >> 2] = o4[E5 + 200 >> 2], o4[D5 + 12 >> 2] = g6, g6 = o4[E5 + 196 >> 2], o4[D5 >> 2] = o4[E5 + 192 >> 2], o4[D5 + 4 >> 2] = g6, g6 = o4[i2 + 36 >> 2], o4[E5 + 112 >> 2] = o4[i2 + 32 >> 2], o4[E5 + 116 >> 2] = g6, g6 = o4[i2 + 44 >> 2], o4[E5 + 120 >> 2] = o4[i2 + 40 >> 2], o4[E5 + 124 >> 2] = g6, g6 = o4[i2 + 52 >> 2], o4[E5 + 96 >> 2] = o4[i2 + 48 >> 2], o4[E5 + 100 >> 2] = g6, g6 = o4[i2 + 60 >> 2], o4[E5 + 104 >> 2] = o4[i2 + 56 >> 2], o4[E5 + 108 >> 2] = g6, GA(B5, E5 + 112 | 0, E5 + 96 | 0), g6 = o4[E5 + 204 >> 2], o4[i2 + 56 >> 2] = o4[E5 + 200 >> 2], o4[i2 + 60 >> 2] = g6, g6 = o4[E5 + 196 >> 2], o4[i2 + 48 >> 2] = o4[E5 + 192 >> 2], o4[i2 + 52 >> 2] = g6, g6 = o4[i2 + 20 >> 2], o4[E5 + 80 >> 2] = o4[i2 + 16 >> 2], o4[E5 + 84 >> 2] = g6, g6 = o4[i2 + 28 >> 2], o4[E5 + 88 >> 2] = o4[i2 + 24 >> 2], o4[E5 + 92 >> 2] = g6, g6 = o4[i2 + 36 >> 2], o4[E5 + 64 >> 2] = o4[i2 + 32 >> 2], o4[E5 + 68 >> 2] = g6, g6 = o4[i2 + 44 >> 2], o4[E5 + 72 >> 2] = o4[i2 + 40 >> 2], o4[E5 + 76 >> 2] = g6, GA(B5, E5 + 80 | 0, E5 - -64 | 0), g6 = o4[E5 + 204 >> 2], o4[i2 + 40 >> 2] = o4[E5 + 200 >> 2], o4[i2 + 44 >> 2] = g6, g6 = o4[E5 + 196 >> 2], o4[i2 + 32 >> 2] = o4[E5 + 192 >> 2], o4[i2 + 36 >> 2] = g6, g6 = o4[i2 + 4 >> 2], o4[E5 + 48 >> 2] = o4[i2 >> 2], o4[E5 + 52 >> 2] = g6, g6 = o4[i2 + 12 >> 2], o4[E5 + 56 >> 2] = o4[i2 + 8 >> 2], o4[E5 + 60 >> 2] = g6, g6 = o4[i2 + 20 >> 2], o4[E5 + 32 >> 2] = o4[i2 + 16 >> 2], o4[E5 + 36 >> 2] = g6, g6 = o4[i2 + 28 >> 2], o4[E5 + 40 >> 2] = o4[i2 + 24 >> 2], o4[E5 + 44 >> 2] = g6, GA(B5, E5 + 48 | 0, E5 + 32 | 0), g6 = o4[E5 + 204 >> 2], o4[i2 + 24 >> 2] = o4[E5 + 200 >> 2], o4[i2 + 28 >> 2] = g6, g6 = o4[E5 + 196 >> 2], o4[i2 + 16 >> 2] = o4[E5 + 192 >> 2], o4[i2 + 20 >> 2] = g6, g6 = o4[E5 + 212 >> 2], o4[E5 + 16 >> 2] = o4[E5 + 208 >> 2], o4[E5 + 20 >> 2] = g6, g6 = o4[E5 + 220 >> 2], o4[E5 + 24 >> 2] = o4[E5 + 216 >> 2], o4[E5 + 28 >> 2] = g6, g6 = o4[i2 + 4 >> 2], o4[E5 >> 2] = o4[i2 >> 2], o4[E5 + 4 >> 2] = g6, g6 = o4[i2 + 12 >> 2], o4[E5 + 8 >> 2] = o4[i2 + 8 >> 2], o4[E5 + 12 >> 2] = g6, GA(B5, E5 + 16 | 0, E5), F5 = o4[E5 + 192 >> 2], B5 = o4[E5 + 196 >> 2], g6 = o4[E5 + 200 >> 2], S4 = y5 ^ o4[E5 + 204 >> 2], o4[i2 + 12 >> 2] = S4, a5 = g6 ^ f5, o4[i2 + 8 >> 2] = a5, k5 = B5 ^ c5, o4[i2 + 4 >> 2] = k5, M5 = w5 ^ F5, o4[i2 >> 2] = M5, 7 != (0 | (h5 = h5 + 1 | 0)); ) ;
              A: {
                I: {
                  g: {
                    if (g6 = I6 - 16 | 0) {
                      if (16 == (0 | g6)) break g;
                      break I;
                    }
                    n5 = o4[i2 + 16 >> 2], t5 = o4[i2 + 48 >> 2], U5 = o4[i2 + 32 >> 2], J5 = o4[i2 + 80 >> 2], K5 = o4[i2 - -64 >> 2], D5 = o4[i2 + 20 >> 2], y5 = o4[i2 + 52 >> 2], f5 = o4[i2 + 36 >> 2], c5 = o4[i2 + 84 >> 2], w5 = o4[i2 + 68 >> 2], F5 = o4[i2 + 24 >> 2], h5 = o4[i2 + 56 >> 2], B5 = o4[i2 + 40 >> 2], g6 = o4[i2 + 88 >> 2], I6 = o4[i2 + 72 >> 2], i2 = S4 ^ o4[i2 + 28 >> 2] ^ o4[i2 + 60 >> 2] ^ o4[i2 + 44 >> 2] ^ o4[i2 + 92 >> 2] ^ o4[i2 + 76 >> 2], C5[A7 + 12 | 0] = i2, C5[A7 + 13 | 0] = i2 >>> 8, C5[A7 + 14 | 0] = i2 >>> 16, C5[A7 + 15 | 0] = i2 >>> 24, I6 = a5 ^ I6 ^ g6 ^ B5 ^ h5 ^ F5, C5[A7 + 8 | 0] = I6, C5[A7 + 9 | 0] = I6 >>> 8, C5[A7 + 10 | 0] = I6 >>> 16, C5[A7 + 11 | 0] = I6 >>> 24, I6 = k5 ^ D5 ^ y5 ^ c5 ^ w5 ^ f5, C5[A7 + 4 | 0] = I6, C5[A7 + 5 | 0] = I6 >>> 8, C5[A7 + 6 | 0] = I6 >>> 16, C5[A7 + 7 | 0] = I6 >>> 24, I6 = M5 ^ n5 ^ t5 ^ U5 ^ J5 ^ K5, C5[0 | A7] = I6, C5[A7 + 1 | 0] = I6 >>> 8, C5[A7 + 2 | 0] = I6 >>> 16, C5[A7 + 3 | 0] = I6 >>> 24;
                    break A;
                  }
                  w5 = o4[i2 + 32 >> 2], F5 = o4[i2 + 16 >> 2], h5 = o4[i2 + 36 >> 2], B5 = o4[i2 + 20 >> 2], g6 = o4[i2 + 40 >> 2], I6 = o4[i2 + 24 >> 2], c5 = S4 ^ o4[i2 + 44 >> 2] ^ o4[i2 + 28 >> 2], C5[A7 + 12 | 0] = c5, C5[A7 + 13 | 0] = c5 >>> 8, C5[A7 + 14 | 0] = c5 >>> 16, C5[A7 + 15 | 0] = c5 >>> 24, I6 = a5 ^ I6 ^ g6, C5[A7 + 8 | 0] = I6, C5[A7 + 9 | 0] = I6 >>> 8, C5[A7 + 10 | 0] = I6 >>> 16, C5[A7 + 11 | 0] = I6 >>> 24, I6 = k5 ^ B5 ^ h5, C5[A7 + 4 | 0] = I6, C5[A7 + 5 | 0] = I6 >>> 8, C5[A7 + 6 | 0] = I6 >>> 16, C5[A7 + 7 | 0] = I6 >>> 24, I6 = M5 ^ w5 ^ F5, C5[0 | A7] = I6, C5[A7 + 1 | 0] = I6 >>> 8, C5[A7 + 2 | 0] = I6 >>> 16, C5[A7 + 3 | 0] = I6 >>> 24, y5 = o4[i2 + 48 >> 2], f5 = o4[i2 + 80 >> 2], c5 = o4[i2 - -64 >> 2], w5 = o4[i2 + 52 >> 2], F5 = o4[i2 + 84 >> 2], h5 = o4[i2 + 68 >> 2], B5 = o4[i2 + 56 >> 2], g6 = o4[i2 + 88 >> 2], I6 = o4[i2 + 72 >> 2], i2 = o4[i2 + 60 >> 2] ^ o4[i2 + 92 >> 2] ^ o4[i2 + 76 >> 2], C5[A7 + 28 | 0] = i2, C5[A7 + 29 | 0] = i2 >>> 8, C5[A7 + 30 | 0] = i2 >>> 16, C5[A7 + 31 | 0] = i2 >>> 24, I6 = B5 ^ I6 ^ g6, C5[A7 + 24 | 0] = I6, C5[A7 + 25 | 0] = I6 >>> 8, C5[A7 + 26 | 0] = I6 >>> 16, C5[A7 + 27 | 0] = I6 >>> 24, I6 = w5 ^ F5 ^ h5, C5[A7 + 20 | 0] = I6, C5[A7 + 21 | 0] = I6 >>> 8, C5[A7 + 22 | 0] = I6 >>> 16, C5[A7 + 23 | 0] = I6 >>> 24, I6 = y5 ^ c5 ^ f5, C5[A7 + 16 | 0] = I6, C5[A7 + 17 | 0] = I6 >>> 8, C5[A7 + 18 | 0] = I6 >>> 16, C5[A7 + 19 | 0] = I6 >>> 24;
                  break A;
                }
                I6 && Q4(A7, 0, I6);
              }
              r4 = E5 + 224 | 0;
            }
            function q2(A7, I6, g6) {
              var C6, B5, Q5, i2, E5, D5 = 0, h5 = 0;
              r4 = C6 = r4 - 336 | 0, D5 = c4[I6 + 4 | 0] | c4[I6 + 5 | 0] << 8 | c4[I6 + 6 | 0] << 16 | c4[I6 + 7 | 0] << 24, h5 = c4[I6 + 8 | 0] | c4[I6 + 9 | 0] << 8 | c4[I6 + 10 | 0] << 16 | c4[I6 + 11 | 0] << 24, B5 = c4[I6 + 12 | 0] | c4[I6 + 13 | 0] << 8 | c4[I6 + 14 | 0] << 16 | c4[I6 + 15 | 0] << 24, Q5 = o4[g6 + 4 >> 2], i2 = o4[g6 + 8 >> 2], E5 = o4[g6 + 12 >> 2], o4[A7 >> 2] = o4[g6 >> 2] ^ (c4[0 | I6] | c4[I6 + 1 | 0] << 8 | c4[I6 + 2 | 0] << 16 | c4[I6 + 3 | 0] << 24), o4[A7 + 12 >> 2] = B5 ^ E5, o4[A7 + 8 >> 2] = h5 ^ i2, o4[A7 + 4 >> 2] = D5 ^ Q5, I6 = o4[A7 + 4 >> 2], o4[C6 + 304 >> 2] = o4[A7 >> 2], o4[C6 + 308 >> 2] = I6, I6 = o4[A7 + 12 >> 2], o4[C6 + 312 >> 2] = o4[A7 + 8 >> 2], o4[C6 + 316 >> 2] = I6, I6 = o4[g6 + 20 >> 2], o4[C6 + 288 >> 2] = o4[g6 + 16 >> 2], o4[C6 + 292 >> 2] = I6, I6 = o4[g6 + 28 >> 2], o4[C6 + 296 >> 2] = o4[g6 + 24 >> 2], o4[C6 + 300 >> 2] = I6, GA(I6 = C6 + 320 | 0, C6 + 304 | 0, C6 + 288 | 0), D5 = o4[C6 + 332 >> 2], o4[A7 + 8 >> 2] = o4[C6 + 328 >> 2], o4[A7 + 12 >> 2] = D5, D5 = o4[C6 + 324 >> 2], o4[A7 >> 2] = o4[C6 + 320 >> 2], o4[A7 + 4 >> 2] = D5, D5 = o4[A7 + 4 >> 2], o4[C6 + 272 >> 2] = o4[A7 >> 2], o4[C6 + 276 >> 2] = D5, D5 = o4[A7 + 12 >> 2], o4[C6 + 280 >> 2] = o4[A7 + 8 >> 2], o4[C6 + 284 >> 2] = D5, D5 = o4[g6 + 36 >> 2], o4[C6 + 256 >> 2] = o4[g6 + 32 >> 2], o4[C6 + 260 >> 2] = D5, D5 = o4[g6 + 44 >> 2], o4[C6 + 264 >> 2] = o4[g6 + 40 >> 2], o4[C6 + 268 >> 2] = D5, GA(I6, C6 + 272 | 0, C6 + 256 | 0), D5 = o4[C6 + 332 >> 2], o4[A7 + 8 >> 2] = o4[C6 + 328 >> 2], o4[A7 + 12 >> 2] = D5, D5 = o4[C6 + 324 >> 2], o4[A7 >> 2] = o4[C6 + 320 >> 2], o4[A7 + 4 >> 2] = D5, D5 = o4[A7 + 4 >> 2], o4[C6 + 240 >> 2] = o4[A7 >> 2], o4[C6 + 244 >> 2] = D5, D5 = o4[A7 + 12 >> 2], o4[C6 + 248 >> 2] = o4[A7 + 8 >> 2], o4[C6 + 252 >> 2] = D5, D5 = o4[g6 + 52 >> 2], o4[C6 + 224 >> 2] = o4[g6 + 48 >> 2], o4[C6 + 228 >> 2] = D5, D5 = o4[g6 + 60 >> 2], o4[C6 + 232 >> 2] = o4[g6 + 56 >> 2], o4[C6 + 236 >> 2] = D5, GA(I6, C6 + 240 | 0, C6 + 224 | 0), D5 = o4[C6 + 332 >> 2], o4[A7 + 8 >> 2] = o4[C6 + 328 >> 2], o4[A7 + 12 >> 2] = D5, D5 = o4[C6 + 324 >> 2], o4[A7 >> 2] = o4[C6 + 320 >> 2], o4[A7 + 4 >> 2] = D5, D5 = o4[A7 + 4 >> 2], o4[C6 + 208 >> 2] = o4[A7 >> 2], o4[C6 + 212 >> 2] = D5, D5 = o4[A7 + 12 >> 2], o4[C6 + 216 >> 2] = o4[A7 + 8 >> 2], o4[C6 + 220 >> 2] = D5, h5 = o4[4 + (D5 = g6 - -64 | 0) >> 2], o4[C6 + 192 >> 2] = o4[D5 >> 2], o4[C6 + 196 >> 2] = h5, D5 = o4[g6 + 76 >> 2], o4[C6 + 200 >> 2] = o4[g6 + 72 >> 2], o4[C6 + 204 >> 2] = D5, GA(I6, C6 + 208 | 0, C6 + 192 | 0), D5 = o4[C6 + 332 >> 2], o4[A7 + 8 >> 2] = o4[C6 + 328 >> 2], o4[A7 + 12 >> 2] = D5, D5 = o4[C6 + 324 >> 2], o4[A7 >> 2] = o4[C6 + 320 >> 2], o4[A7 + 4 >> 2] = D5, D5 = o4[A7 + 4 >> 2], o4[C6 + 176 >> 2] = o4[A7 >> 2], o4[C6 + 180 >> 2] = D5, D5 = o4[A7 + 12 >> 2], o4[C6 + 184 >> 2] = o4[A7 + 8 >> 2], o4[C6 + 188 >> 2] = D5, D5 = o4[g6 + 84 >> 2], o4[C6 + 160 >> 2] = o4[g6 + 80 >> 2], o4[C6 + 164 >> 2] = D5, D5 = o4[g6 + 92 >> 2], o4[C6 + 168 >> 2] = o4[g6 + 88 >> 2], o4[C6 + 172 >> 2] = D5, GA(I6, C6 + 176 | 0, C6 + 160 | 0), D5 = o4[C6 + 332 >> 2], o4[A7 + 8 >> 2] = o4[C6 + 328 >> 2], o4[A7 + 12 >> 2] = D5, D5 = o4[C6 + 324 >> 2], o4[A7 >> 2] = o4[C6 + 320 >> 2], o4[A7 + 4 >> 2] = D5, D5 = o4[A7 + 4 >> 2], o4[C6 + 144 >> 2] = o4[A7 >> 2], o4[C6 + 148 >> 2] = D5, D5 = o4[A7 + 12 >> 2], o4[C6 + 152 >> 2] = o4[A7 + 8 >> 2], o4[C6 + 156 >> 2] = D5, D5 = o4[g6 + 100 >> 2], o4[C6 + 128 >> 2] = o4[g6 + 96 >> 2], o4[C6 + 132 >> 2] = D5, D5 = o4[g6 + 108 >> 2], o4[C6 + 136 >> 2] = o4[g6 + 104 >> 2], o4[C6 + 140 >> 2] = D5, GA(I6, C6 + 144 | 0, C6 + 128 | 0), D5 = o4[C6 + 332 >> 2], o4[A7 + 8 >> 2] = o4[C6 + 328 >> 2], o4[A7 + 12 >> 2] = D5, D5 = o4[C6 + 324 >> 2], o4[A7 >> 2] = o4[C6 + 320 >> 2], o4[A7 + 4 >> 2] = D5, D5 = o4[A7 + 4 >> 2], o4[C6 + 112 >> 2] = o4[A7 >> 2], o4[C6 + 116 >> 2] = D5, D5 = o4[A7 + 12 >> 2], o4[C6 + 120 >> 2] = o4[A7 + 8 >> 2], o4[C6 + 124 >> 2] = D5, D5 = o4[g6 + 116 >> 2], o4[C6 + 96 >> 2] = o4[g6 + 112 >> 2], o4[C6 + 100 >> 2] = D5, D5 = o4[g6 + 124 >> 2], o4[C6 + 104 >> 2] = o4[g6 + 120 >> 2], o4[C6 + 108 >> 2] = D5, GA(I6, C6 + 112 | 0, C6 + 96 | 0), D5 = o4[C6 + 332 >> 2], o4[A7 + 8 >> 2] = o4[C6 + 328 >> 2], o4[A7 + 12 >> 2] = D5, D5 = o4[C6 + 324 >> 2], o4[A7 >> 2] = o4[C6 + 320 >> 2], o4[A7 + 4 >> 2] = D5, D5 = o4[A7 + 4 >> 2], o4[C6 + 80 >> 2] = o4[A7 >> 2], o4[C6 + 84 >> 2] = D5, D5 = o4[A7 + 12 >> 2], o4[C6 + 88 >> 2] = o4[A7 + 8 >> 2], o4[C6 + 92 >> 2] = D5, D5 = o4[g6 + 132 >> 2], o4[C6 + 64 >> 2] = o4[g6 + 128 >> 2], o4[C6 + 68 >> 2] = D5, D5 = o4[g6 + 140 >> 2], o4[C6 + 72 >> 2] = o4[g6 + 136 >> 2], o4[C6 + 76 >> 2] = D5, GA(I6, C6 + 80 | 0, C6 - -64 | 0), D5 = o4[C6 + 332 >> 2], o4[A7 + 8 >> 2] = o4[C6 + 328 >> 2], o4[A7 + 12 >> 2] = D5, D5 = o4[C6 + 324 >> 2], o4[A7 >> 2] = o4[C6 + 320 >> 2], o4[A7 + 4 >> 2] = D5, D5 = o4[A7 + 4 >> 2], o4[C6 + 48 >> 2] = o4[A7 >> 2], o4[C6 + 52 >> 2] = D5, D5 = o4[A7 + 12 >> 2], o4[C6 + 56 >> 2] = o4[A7 + 8 >> 2], o4[C6 + 60 >> 2] = D5, D5 = o4[g6 + 148 >> 2], o4[C6 + 32 >> 2] = o4[g6 + 144 >> 2], o4[C6 + 36 >> 2] = D5, D5 = o4[g6 + 156 >> 2], o4[C6 + 40 >> 2] = o4[g6 + 152 >> 2], o4[C6 + 44 >> 2] = D5, GA(I6, C6 + 48 | 0, C6 + 32 | 0), D5 = o4[C6 + 332 >> 2], o4[A7 + 8 >> 2] = o4[C6 + 328 >> 2], o4[A7 + 12 >> 2] = D5, D5 = o4[C6 + 324 >> 2], o4[A7 >> 2] = o4[C6 + 320 >> 2], o4[A7 + 4 >> 2] = D5, D5 = o4[A7 + 4 >> 2], o4[C6 + 16 >> 2] = o4[A7 >> 2], o4[C6 + 20 >> 2] = D5, D5 = o4[A7 + 12 >> 2], o4[C6 + 24 >> 2] = o4[A7 + 8 >> 2], o4[C6 + 28 >> 2] = D5, D5 = o4[g6 + 164 >> 2], o4[C6 >> 2] = o4[g6 + 160 >> 2], o4[C6 + 4 >> 2] = D5, D5 = o4[g6 + 172 >> 2], o4[C6 + 8 >> 2] = o4[g6 + 168 >> 2], o4[C6 + 12 >> 2] = D5, sA(I6, C6 + 16 | 0, C6), I6 = o4[C6 + 332 >> 2], o4[A7 + 8 >> 2] = o4[C6 + 328 >> 2], o4[A7 + 12 >> 2] = I6, I6 = o4[C6 + 324 >> 2], o4[A7 >> 2] = o4[C6 + 320 >> 2], o4[A7 + 4 >> 2] = I6, r4 = C6 + 336 | 0;
            }
            function W2(A7, I6) {
              var g6, B5 = 0, i2 = 0, D5 = 0, c5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0;
              r4 = g6 = r4 - 704 | 0, B5 = (h5 = A7 + 80 | 0) + (D5 = o4[A7 + 72 >> 2] >>> 3 & 127) | 0, D5 >>> 0 >= 112 ? ((D5 = 128 - D5 | 0) && E4(B5, 39232, D5), e3(A7, h5, g6, g6 + 640 | 0), Q4(h5, 0, 112)) : (D5 = 112 - D5 | 0) && E4(B5, 39232, D5), i2 = o4[(D5 = A7 - -64 | 0) >> 2], B5 = o4[D5 + 4 >> 2], F5 = i2 << 24 | (65280 & i2) << 8, D5 = (c5 = 16711680 & i2) >>> 8 | 0, y5 = c5 << 24, c5 = (w5 = -16777216 & i2) >>> 24 | 0, o4[A7 + 192 >> 2] = y5 | w5 << 8 | -16777216 & ((255 & B5) << 24 | i2 >>> 8) | 16711680 & ((16777215 & B5) << 8 | i2 >>> 24) | B5 >>> 8 & 65280 | B5 >>> 24, B5 = D5 | c5 | F5, o4[A7 + 196 >> 2] = B5, F5 = (i2 = o4[A7 + 72 >> 2]) << 24 | (65280 & i2) << 8, D5 = (c5 = 16711680 & i2) >>> 8 | 0, B5 = o4[A7 + 76 >> 2], y5 = c5 << 24, c5 = (w5 = -16777216 & i2) >>> 24 | 0, o4[A7 + 200 >> 2] = y5 | w5 << 8 | -16777216 & ((255 & B5) << 24 | i2 >>> 8) | 16711680 & ((16777215 & B5) << 8 | i2 >>> 24) | B5 >>> 8 & 65280 | B5 >>> 24, B5 = D5 | c5 | F5, o4[A7 + 204 >> 2] = B5, e3(A7, h5, g6, g6 + 640 | 0), w5 = (i2 = o4[A7 >> 2]) << 24 | (65280 & i2) << 8, D5 = (c5 = 16711680 & i2) >>> 8 | 0, F5 = c5 << 24, c5 = (h5 = -16777216 & i2) >>> 24 | 0, B5 = F5 | h5 << 8 | -16777216 & ((255 & (B5 = o4[A7 + 4 >> 2])) << 24 | i2 >>> 8) | 16711680 & ((16777215 & B5) << 8 | i2 >>> 24) | B5 >>> 8 & 65280 | B5 >>> 24, C5[0 | I6] = B5, C5[I6 + 1 | 0] = B5 >>> 8, C5[I6 + 2 | 0] = B5 >>> 16, C5[I6 + 3 | 0] = B5 >>> 24, D5 = 0 | (B5 = D5 | c5 | w5), C5[I6 + 4 | 0] = D5, C5[I6 + 5 | 0] = D5 >>> 8, C5[I6 + 6 | 0] = D5 >>> 16, C5[I6 + 7 | 0] = D5 >>> 24, w5 = (i2 = o4[A7 + 8 >> 2]) << 24 | (65280 & i2) << 8, D5 = (c5 = 16711680 & i2) >>> 8 | 0, F5 = c5 << 24, c5 = (h5 = -16777216 & i2) >>> 24 | 0, B5 = F5 | h5 << 8 | -16777216 & ((255 & (B5 = o4[A7 + 12 >> 2])) << 24 | i2 >>> 8) | 16711680 & ((16777215 & B5) << 8 | i2 >>> 24) | B5 >>> 8 & 65280 | B5 >>> 24, C5[I6 + 8 | 0] = B5, C5[I6 + 9 | 0] = B5 >>> 8, C5[I6 + 10 | 0] = B5 >>> 16, C5[I6 + 11 | 0] = B5 >>> 24, D5 = 0 | (B5 = D5 | c5 | w5), C5[I6 + 12 | 0] = D5, C5[I6 + 13 | 0] = D5 >>> 8, C5[I6 + 14 | 0] = D5 >>> 16, C5[I6 + 15 | 0] = D5 >>> 24, w5 = (i2 = o4[A7 + 16 >> 2]) << 24 | (65280 & i2) << 8, D5 = (c5 = 16711680 & i2) >>> 8 | 0, F5 = c5 << 24, c5 = (h5 = -16777216 & i2) >>> 24 | 0, B5 = F5 | h5 << 8 | -16777216 & ((255 & (B5 = o4[A7 + 20 >> 2])) << 24 | i2 >>> 8) | 16711680 & ((16777215 & B5) << 8 | i2 >>> 24) | B5 >>> 8 & 65280 | B5 >>> 24, C5[I6 + 16 | 0] = B5, C5[I6 + 17 | 0] = B5 >>> 8, C5[I6 + 18 | 0] = B5 >>> 16, C5[I6 + 19 | 0] = B5 >>> 24, D5 = 0 | (B5 = D5 | c5 | w5), C5[I6 + 20 | 0] = D5, C5[I6 + 21 | 0] = D5 >>> 8, C5[I6 + 22 | 0] = D5 >>> 16, C5[I6 + 23 | 0] = D5 >>> 24, w5 = (i2 = o4[A7 + 24 >> 2]) << 24 | (65280 & i2) << 8, D5 = (c5 = 16711680 & i2) >>> 8 | 0, F5 = c5 << 24, c5 = (h5 = -16777216 & i2) >>> 24 | 0, B5 = F5 | h5 << 8 | -16777216 & ((255 & (B5 = o4[A7 + 28 >> 2])) << 24 | i2 >>> 8) | 16711680 & ((16777215 & B5) << 8 | i2 >>> 24) | B5 >>> 8 & 65280 | B5 >>> 24, C5[I6 + 24 | 0] = B5, C5[I6 + 25 | 0] = B5 >>> 8, C5[I6 + 26 | 0] = B5 >>> 16, C5[I6 + 27 | 0] = B5 >>> 24, D5 = 0 | (B5 = D5 | c5 | w5), C5[I6 + 28 | 0] = D5, C5[I6 + 29 | 0] = D5 >>> 8, C5[I6 + 30 | 0] = D5 >>> 16, C5[I6 + 31 | 0] = D5 >>> 24, w5 = (i2 = o4[A7 + 32 >> 2]) << 24 | (65280 & i2) << 8, D5 = (c5 = 16711680 & i2) >>> 8 | 0, F5 = c5 << 24, c5 = (h5 = -16777216 & i2) >>> 24 | 0, B5 = F5 | h5 << 8 | -16777216 & ((255 & (B5 = o4[A7 + 36 >> 2])) << 24 | i2 >>> 8) | 16711680 & ((16777215 & B5) << 8 | i2 >>> 24) | B5 >>> 8 & 65280 | B5 >>> 24, C5[I6 + 32 | 0] = B5, C5[I6 + 33 | 0] = B5 >>> 8, C5[I6 + 34 | 0] = B5 >>> 16, C5[I6 + 35 | 0] = B5 >>> 24, D5 = 0 | (B5 = D5 | c5 | w5), C5[I6 + 36 | 0] = D5, C5[I6 + 37 | 0] = D5 >>> 8, C5[I6 + 38 | 0] = D5 >>> 16, C5[I6 + 39 | 0] = D5 >>> 24, w5 = (i2 = o4[A7 + 40 >> 2]) << 24 | (65280 & i2) << 8, D5 = (c5 = 16711680 & i2) >>> 8 | 0, F5 = c5 << 24, c5 = (h5 = -16777216 & i2) >>> 24 | 0, B5 = F5 | h5 << 8 | -16777216 & ((255 & (B5 = o4[A7 + 44 >> 2])) << 24 | i2 >>> 8) | 16711680 & ((16777215 & B5) << 8 | i2 >>> 24) | B5 >>> 8 & 65280 | B5 >>> 24, C5[I6 + 40 | 0] = B5, C5[I6 + 41 | 0] = B5 >>> 8, C5[I6 + 42 | 0] = B5 >>> 16, C5[I6 + 43 | 0] = B5 >>> 24, D5 = 0 | (B5 = D5 | c5 | w5), C5[I6 + 44 | 0] = D5, C5[I6 + 45 | 0] = D5 >>> 8, C5[I6 + 46 | 0] = D5 >>> 16, C5[I6 + 47 | 0] = D5 >>> 24, w5 = (i2 = o4[A7 + 48 >> 2]) << 24 | (65280 & i2) << 8, D5 = (c5 = 16711680 & i2) >>> 8 | 0, F5 = c5 << 24, c5 = (h5 = -16777216 & i2) >>> 24 | 0, B5 = F5 | h5 << 8 | -16777216 & ((255 & (B5 = o4[A7 + 52 >> 2])) << 24 | i2 >>> 8) | 16711680 & ((16777215 & B5) << 8 | i2 >>> 24) | B5 >>> 8 & 65280 | B5 >>> 24, C5[I6 + 48 | 0] = B5, C5[I6 + 49 | 0] = B5 >>> 8, C5[I6 + 50 | 0] = B5 >>> 16, C5[I6 + 51 | 0] = B5 >>> 24, D5 = 0 | (B5 = D5 | c5 | w5), C5[I6 + 52 | 0] = D5, C5[I6 + 53 | 0] = D5 >>> 8, C5[I6 + 54 | 0] = D5 >>> 16, C5[I6 + 55 | 0] = D5 >>> 24, w5 = (i2 = o4[A7 + 56 >> 2]) << 24 | (65280 & i2) << 8, D5 = (c5 = 16711680 & i2) >>> 8 | 0, B5 = I6, F5 = c5 << 24, c5 = (h5 = -16777216 & i2) >>> 24 | 0, I6 = F5 | h5 << 8 | -16777216 & ((255 & (I6 = o4[A7 + 60 >> 2])) << 24 | i2 >>> 8) | 16711680 & ((16777215 & I6) << 8 | i2 >>> 24) | I6 >>> 8 & 65280 | I6 >>> 24, C5[B5 + 56 | 0] = I6, C5[B5 + 57 | 0] = I6 >>> 8, C5[B5 + 58 | 0] = I6 >>> 16, C5[B5 + 59 | 0] = I6 >>> 24, I6 = D5 | c5 | w5, I6 |= 0, C5[B5 + 60 | 0] = I6, C5[B5 + 61 | 0] = I6 >>> 8, C5[B5 + 62 | 0] = I6 >>> 16, C5[B5 + 63 | 0] = I6 >>> 24, xI(g6, 704), xI(A7, 208), r4 = g6 + 704 | 0;
            }
            function x2(A7, I6) {
              var g6, C6, B5, Q5, i2, E5, D5, h5, w5, F5 = 0, y5 = 0;
              r4 = g6 = r4 - 288 | 0, C6 = c4[A7 + 28 | 0] | c4[A7 + 29 | 0] << 8 | c4[A7 + 30 | 0] << 16 | c4[A7 + 31 | 0] << 24, B5 = c4[A7 + 24 | 0] | c4[A7 + 25 | 0] << 8 | c4[A7 + 26 | 0] << 16 | c4[A7 + 27 | 0] << 24, Q5 = c4[A7 + 20 | 0] | c4[A7 + 21 | 0] << 8 | c4[A7 + 22 | 0] << 16 | c4[A7 + 23 | 0] << 24, i2 = c4[A7 + 16 | 0] | c4[A7 + 17 | 0] << 8 | c4[A7 + 18 | 0] << 16 | c4[A7 + 19 | 0] << 24, E5 = c4[A7 + 4 | 0] | c4[A7 + 5 | 0] << 8 | c4[A7 + 6 | 0] << 16 | c4[A7 + 7 | 0] << 24, D5 = c4[A7 + 8 | 0] | c4[A7 + 9 | 0] << 8 | c4[A7 + 10 | 0] << 16 | c4[A7 + 11 | 0] << 24, h5 = c4[A7 + 12 | 0] | c4[A7 + 13 | 0] << 8 | c4[A7 + 14 | 0] << 16 | c4[A7 + 15 | 0] << 24, w5 = c4[0 | A7] | c4[A7 + 1 | 0] << 8 | c4[A7 + 2 | 0] << 16 | c4[A7 + 3 | 0] << 24, A7 = o4[I6 + 124 >> 2], o4[g6 + 280 >> 2] = o4[I6 + 120 >> 2], o4[g6 + 284 >> 2] = A7, A7 = o4[I6 + 116 >> 2], o4[g6 + 272 >> 2] = o4[I6 + 112 >> 2], o4[g6 + 276 >> 2] = A7, A7 = o4[I6 + 100 >> 2], o4[g6 + 240 >> 2] = o4[I6 + 96 >> 2], o4[g6 + 244 >> 2] = A7, A7 = o4[I6 + 108 >> 2], o4[g6 + 248 >> 2] = o4[I6 + 104 >> 2], o4[g6 + 252 >> 2] = A7, A7 = o4[I6 + 116 >> 2], o4[g6 + 224 >> 2] = o4[I6 + 112 >> 2], o4[g6 + 228 >> 2] = A7, A7 = o4[I6 + 124 >> 2], o4[g6 + 232 >> 2] = o4[I6 + 120 >> 2], o4[g6 + 236 >> 2] = A7, GA(A7 = g6 + 256 | 0, g6 + 240 | 0, g6 + 224 | 0), y5 = o4[g6 + 268 >> 2], o4[I6 + 120 >> 2] = o4[g6 + 264 >> 2], o4[I6 + 124 >> 2] = y5, y5 = o4[g6 + 260 >> 2], o4[I6 + 112 >> 2] = o4[g6 + 256 >> 2], o4[I6 + 116 >> 2] = y5, y5 = o4[I6 + 84 >> 2], o4[g6 + 208 >> 2] = o4[I6 + 80 >> 2], o4[g6 + 212 >> 2] = y5, y5 = o4[I6 + 92 >> 2], o4[g6 + 216 >> 2] = o4[I6 + 88 >> 2], o4[g6 + 220 >> 2] = y5, y5 = o4[I6 + 100 >> 2], o4[g6 + 192 >> 2] = o4[I6 + 96 >> 2], o4[g6 + 196 >> 2] = y5, y5 = o4[I6 + 108 >> 2], o4[g6 + 200 >> 2] = o4[I6 + 104 >> 2], o4[g6 + 204 >> 2] = y5, GA(A7, g6 + 208 | 0, g6 + 192 | 0), y5 = o4[g6 + 268 >> 2], o4[I6 + 104 >> 2] = o4[g6 + 264 >> 2], o4[I6 + 108 >> 2] = y5, y5 = o4[g6 + 260 >> 2], o4[I6 + 96 >> 2] = o4[g6 + 256 >> 2], o4[I6 + 100 >> 2] = y5, F5 = o4[4 + (y5 = I6 - -64 | 0) >> 2], o4[g6 + 176 >> 2] = o4[y5 >> 2], o4[g6 + 180 >> 2] = F5, F5 = o4[I6 + 76 >> 2], o4[g6 + 184 >> 2] = o4[I6 + 72 >> 2], o4[g6 + 188 >> 2] = F5, F5 = o4[I6 + 84 >> 2], o4[g6 + 160 >> 2] = o4[I6 + 80 >> 2], o4[g6 + 164 >> 2] = F5, F5 = o4[I6 + 92 >> 2], o4[g6 + 168 >> 2] = o4[I6 + 88 >> 2], o4[g6 + 172 >> 2] = F5, GA(A7, g6 + 176 | 0, g6 + 160 | 0), F5 = o4[g6 + 268 >> 2], o4[I6 + 88 >> 2] = o4[g6 + 264 >> 2], o4[I6 + 92 >> 2] = F5, F5 = o4[g6 + 260 >> 2], o4[I6 + 80 >> 2] = o4[g6 + 256 >> 2], o4[I6 + 84 >> 2] = F5, F5 = o4[I6 + 52 >> 2], o4[g6 + 144 >> 2] = o4[I6 + 48 >> 2], o4[g6 + 148 >> 2] = F5, F5 = o4[I6 + 60 >> 2], o4[g6 + 152 >> 2] = o4[I6 + 56 >> 2], o4[g6 + 156 >> 2] = F5, F5 = o4[y5 + 4 >> 2], o4[g6 + 128 >> 2] = o4[y5 >> 2], o4[g6 + 132 >> 2] = F5, F5 = o4[I6 + 76 >> 2], o4[g6 + 136 >> 2] = o4[I6 + 72 >> 2], o4[g6 + 140 >> 2] = F5, GA(A7, g6 + 144 | 0, g6 + 128 | 0), F5 = o4[g6 + 268 >> 2], o4[I6 + 72 >> 2] = o4[g6 + 264 >> 2], o4[I6 + 76 >> 2] = F5, F5 = o4[g6 + 260 >> 2], o4[y5 >> 2] = o4[g6 + 256 >> 2], o4[y5 + 4 >> 2] = F5, F5 = o4[I6 + 36 >> 2], o4[g6 + 112 >> 2] = o4[I6 + 32 >> 2], o4[g6 + 116 >> 2] = F5, F5 = o4[I6 + 44 >> 2], o4[g6 + 120 >> 2] = o4[I6 + 40 >> 2], o4[g6 + 124 >> 2] = F5, F5 = o4[I6 + 52 >> 2], o4[g6 + 96 >> 2] = o4[I6 + 48 >> 2], o4[g6 + 100 >> 2] = F5, F5 = o4[I6 + 60 >> 2], o4[g6 + 104 >> 2] = o4[I6 + 56 >> 2], o4[g6 + 108 >> 2] = F5, GA(A7, g6 + 112 | 0, g6 + 96 | 0), F5 = o4[g6 + 268 >> 2], o4[I6 + 56 >> 2] = o4[g6 + 264 >> 2], o4[I6 + 60 >> 2] = F5, F5 = o4[g6 + 260 >> 2], o4[I6 + 48 >> 2] = o4[g6 + 256 >> 2], o4[I6 + 52 >> 2] = F5, F5 = o4[I6 + 20 >> 2], o4[g6 + 80 >> 2] = o4[I6 + 16 >> 2], o4[g6 + 84 >> 2] = F5, F5 = o4[I6 + 28 >> 2], o4[g6 + 88 >> 2] = o4[I6 + 24 >> 2], o4[g6 + 92 >> 2] = F5, F5 = o4[I6 + 36 >> 2], o4[g6 + 64 >> 2] = o4[I6 + 32 >> 2], o4[g6 + 68 >> 2] = F5, F5 = o4[I6 + 44 >> 2], o4[g6 + 72 >> 2] = o4[I6 + 40 >> 2], o4[g6 + 76 >> 2] = F5, GA(A7, g6 + 80 | 0, g6 - -64 | 0), F5 = o4[g6 + 268 >> 2], o4[I6 + 40 >> 2] = o4[g6 + 264 >> 2], o4[I6 + 44 >> 2] = F5, F5 = o4[g6 + 260 >> 2], o4[I6 + 32 >> 2] = o4[g6 + 256 >> 2], o4[I6 + 36 >> 2] = F5, F5 = o4[I6 + 4 >> 2], o4[g6 + 48 >> 2] = o4[I6 >> 2], o4[g6 + 52 >> 2] = F5, F5 = o4[I6 + 12 >> 2], o4[g6 + 56 >> 2] = o4[I6 + 8 >> 2], o4[g6 + 60 >> 2] = F5, F5 = o4[I6 + 20 >> 2], o4[g6 + 32 >> 2] = o4[I6 + 16 >> 2], o4[g6 + 36 >> 2] = F5, F5 = o4[I6 + 28 >> 2], o4[g6 + 40 >> 2] = o4[I6 + 24 >> 2], o4[g6 + 44 >> 2] = F5, GA(A7, g6 + 48 | 0, g6 + 32 | 0), F5 = o4[g6 + 268 >> 2], o4[I6 + 24 >> 2] = o4[g6 + 264 >> 2], o4[I6 + 28 >> 2] = F5, F5 = o4[g6 + 260 >> 2], o4[I6 + 16 >> 2] = o4[g6 + 256 >> 2], o4[I6 + 20 >> 2] = F5, F5 = o4[g6 + 276 >> 2], o4[g6 + 16 >> 2] = o4[g6 + 272 >> 2], o4[g6 + 20 >> 2] = F5, F5 = o4[g6 + 284 >> 2], o4[g6 + 24 >> 2] = o4[g6 + 280 >> 2], o4[g6 + 28 >> 2] = F5, F5 = o4[I6 + 4 >> 2], o4[g6 >> 2] = o4[I6 >> 2], o4[g6 + 4 >> 2] = F5, F5 = o4[I6 + 12 >> 2], o4[g6 + 8 >> 2] = o4[I6 + 8 >> 2], o4[g6 + 12 >> 2] = F5, GA(A7, g6 + 16 | 0, g6), A7 = o4[g6 + 268 >> 2], o4[I6 + 8 >> 2] = o4[g6 + 264 >> 2], o4[I6 + 12 >> 2] = A7, A7 = o4[g6 + 260 >> 2], o4[I6 >> 2] = o4[g6 + 256 >> 2], o4[I6 + 4 >> 2] = A7, o4[I6 + 12 >> 2] = o4[I6 + 12 >> 2] ^ h5, o4[I6 + 8 >> 2] = o4[I6 + 8 >> 2] ^ D5, o4[I6 + 4 >> 2] = o4[I6 + 4 >> 2] ^ E5, o4[I6 >> 2] = o4[I6 >> 2] ^ w5, o4[y5 >> 2] = o4[y5 >> 2] ^ i2, o4[I6 + 68 >> 2] = o4[I6 + 68 >> 2] ^ Q5, o4[I6 + 72 >> 2] = o4[I6 + 72 >> 2] ^ B5, o4[I6 + 76 >> 2] = o4[I6 + 76 >> 2] ^ C6, r4 = g6 + 288 | 0;
            }
            function V2(A7, I6) {
              var g6, B5, i2, E5, D5, h5 = 0, w5 = 0, F5 = 0, y5 = 0, f5 = 0;
              for (r4 = g6 = r4 - 480 | 0, h5 = c4[0 | I6], C5[g6 + 289 | 0] = h5 >>> 4, C5[g6 + 288 | 0] = 15 & h5, h5 = c4[I6 + 1 | 0], C5[g6 + 291 | 0] = h5 >>> 4, C5[g6 + 290 | 0] = 15 & h5, h5 = c4[I6 + 2 | 0], C5[g6 + 293 | 0] = h5 >>> 4, C5[g6 + 292 | 0] = 15 & h5, h5 = c4[I6 + 3 | 0], C5[g6 + 295 | 0] = h5 >>> 4, C5[g6 + 294 | 0] = 15 & h5, h5 = c4[I6 + 4 | 0], C5[g6 + 297 | 0] = h5 >>> 4, C5[g6 + 296 | 0] = 15 & h5, h5 = c4[I6 + 5 | 0], C5[g6 + 299 | 0] = h5 >>> 4, C5[g6 + 298 | 0] = 15 & h5, h5 = c4[I6 + 6 | 0], C5[g6 + 301 | 0] = h5 >>> 4, C5[g6 + 300 | 0] = 15 & h5, h5 = c4[I6 + 7 | 0], C5[g6 + 303 | 0] = h5 >>> 4, C5[g6 + 302 | 0] = 15 & h5, h5 = c4[I6 + 8 | 0], C5[g6 + 305 | 0] = h5 >>> 4, C5[g6 + 304 | 0] = 15 & h5, h5 = c4[I6 + 9 | 0], C5[g6 + 307 | 0] = h5 >>> 4, C5[g6 + 306 | 0] = 15 & h5, h5 = c4[I6 + 10 | 0], C5[g6 + 309 | 0] = h5 >>> 4, C5[g6 + 308 | 0] = 15 & h5, h5 = c4[I6 + 11 | 0], C5[g6 + 311 | 0] = h5 >>> 4, C5[g6 + 310 | 0] = 15 & h5, h5 = c4[I6 + 12 | 0], C5[g6 + 313 | 0] = h5 >>> 4, C5[g6 + 312 | 0] = 15 & h5, h5 = c4[I6 + 13 | 0], C5[g6 + 315 | 0] = h5 >>> 4, C5[g6 + 314 | 0] = 15 & h5, h5 = c4[I6 + 14 | 0], C5[g6 + 317 | 0] = h5 >>> 4, C5[g6 + 316 | 0] = 15 & h5, h5 = c4[I6 + 15 | 0], C5[g6 + 319 | 0] = h5 >>> 4, C5[g6 + 318 | 0] = 15 & h5, h5 = c4[I6 + 16 | 0], C5[g6 + 321 | 0] = h5 >>> 4, C5[g6 + 320 | 0] = 15 & h5, h5 = c4[I6 + 17 | 0], C5[g6 + 323 | 0] = h5 >>> 4, C5[g6 + 322 | 0] = 15 & h5, h5 = c4[I6 + 18 | 0], C5[g6 + 325 | 0] = h5 >>> 4, C5[g6 + 324 | 0] = 15 & h5, h5 = c4[I6 + 19 | 0], C5[g6 + 327 | 0] = h5 >>> 4, C5[g6 + 326 | 0] = 15 & h5, h5 = c4[I6 + 20 | 0], C5[g6 + 329 | 0] = h5 >>> 4, C5[g6 + 328 | 0] = 15 & h5, h5 = c4[I6 + 21 | 0], C5[g6 + 331 | 0] = h5 >>> 4, C5[g6 + 330 | 0] = 15 & h5, h5 = c4[I6 + 22 | 0], C5[g6 + 333 | 0] = h5 >>> 4, C5[g6 + 332 | 0] = 15 & h5, h5 = c4[I6 + 23 | 0], C5[g6 + 335 | 0] = h5 >>> 4, C5[g6 + 334 | 0] = 15 & h5, h5 = c4[I6 + 24 | 0], C5[g6 + 337 | 0] = h5 >>> 4, C5[g6 + 336 | 0] = 15 & h5, h5 = c4[I6 + 25 | 0], C5[g6 + 339 | 0] = h5 >>> 4, C5[g6 + 338 | 0] = 15 & h5, h5 = c4[I6 + 26 | 0], C5[g6 + 341 | 0] = h5 >>> 4, C5[g6 + 340 | 0] = 15 & h5, h5 = c4[I6 + 27 | 0], C5[g6 + 343 | 0] = h5 >>> 4, C5[g6 + 342 | 0] = 15 & h5, h5 = c4[I6 + 28 | 0], C5[g6 + 345 | 0] = h5 >>> 4, C5[g6 + 344 | 0] = 15 & h5, h5 = c4[I6 + 29 | 0], C5[g6 + 347 | 0] = h5 >>> 4, C5[g6 + 346 | 0] = 15 & h5, h5 = c4[I6 + 30 | 0], C5[g6 + 349 | 0] = h5 >>> 4, C5[g6 + 348 | 0] = 15 & h5, I6 = c4[I6 + 31 | 0], C5[g6 + 351 | 0] = I6 >>> 4, C5[g6 + 350 | 0] = 15 & I6, I6 = 0; h5 = 8 + (I6 = c4[0 | (w5 = (g6 + 288 | 0) + F5 | 0)] + I6 | 0) | 0, C5[0 | w5] = I6 - (240 & h5), h5 = 8 + (I6 = c4[w5 + 1 | 0] + (h5 << 24 >> 24 >> 4) | 0) | 0, C5[w5 + 1 | 0] = I6 - (240 & h5), h5 = 8 + (I6 = c4[w5 + 2 | 0] + (h5 << 24 >> 24 >> 4) | 0) | 0, C5[w5 + 2 | 0] = I6 - (240 & h5), I6 = h5 << 24 >> 24 >> 4, 63 != (0 | (F5 = F5 + 3 | 0)); ) ;
              for (C5[g6 + 351 | 0] = c4[g6 + 351 | 0] + I6, o4[A7 + 32 >> 2] = 0, o4[A7 + 36 >> 2] = 0, o4[A7 + 24 >> 2] = 0, o4[A7 + 28 >> 2] = 0, o4[A7 + 16 >> 2] = 0, o4[A7 + 20 >> 2] = 0, o4[A7 + 8 >> 2] = 0, o4[A7 + 12 >> 2] = 0, o4[A7 >> 2] = 0, o4[A7 + 4 >> 2] = 0, o4[A7 + 44 >> 2] = 0, o4[A7 + 48 >> 2] = 0, o4[(F5 = A7 + 40 | 0) >> 2] = 1, o4[A7 + 52 >> 2] = 0, o4[A7 + 56 >> 2] = 0, o4[A7 + 60 >> 2] = 0, o4[A7 + 64 >> 2] = 0, o4[A7 + 68 >> 2] = 0, o4[A7 + 72 >> 2] = 0, o4[A7 + 76 >> 2] = 0, o4[A7 + 80 >> 2] = 1, Q4(A7 + 84 | 0, 0, 76), D5 = A7 + 120 | 0, h5 = A7 + 80 | 0, B5 = g6 + 208 | 0, E5 = g6 + 168 | 0, i2 = g6 + 248 | 0, I6 = 1; fA(w5 = g6 + 8 | 0, I6 >>> 1 | 0, C5[(g6 + 288 | 0) + I6 | 0]), AA(y5 = g6 + 128 | 0, A7, w5), H4(A7, y5, i2), H4(F5, E5, B5), H4(h5, B5, i2), H4(D5, y5, E5), w5 = I6 >>> 0 < 62, I6 = I6 + 2 | 0, w5; ) ;
              for (I6 = o4[A7 + 36 >> 2], o4[g6 + 392 >> 2] = o4[A7 + 32 >> 2], o4[g6 + 396 >> 2] = I6, I6 = o4[A7 + 28 >> 2], o4[g6 + 384 >> 2] = o4[A7 + 24 >> 2], o4[g6 + 388 >> 2] = I6, I6 = o4[A7 + 20 >> 2], o4[g6 + 376 >> 2] = o4[A7 + 16 >> 2], o4[g6 + 380 >> 2] = I6, I6 = o4[A7 + 12 >> 2], o4[g6 + 368 >> 2] = o4[A7 + 8 >> 2], o4[g6 + 372 >> 2] = I6, I6 = o4[A7 + 4 >> 2], o4[g6 + 360 >> 2] = o4[A7 >> 2], o4[g6 + 364 >> 2] = I6, I6 = o4[F5 + 4 >> 2], o4[g6 + 400 >> 2] = o4[F5 >> 2], o4[g6 + 404 >> 2] = I6, I6 = o4[F5 + 12 >> 2], o4[g6 + 408 >> 2] = o4[F5 + 8 >> 2], o4[g6 + 412 >> 2] = I6, I6 = o4[F5 + 20 >> 2], o4[g6 + 416 >> 2] = o4[F5 + 16 >> 2], o4[g6 + 420 >> 2] = I6, I6 = o4[F5 + 28 >> 2], o4[g6 + 424 >> 2] = o4[F5 + 24 >> 2], o4[g6 + 428 >> 2] = I6, I6 = o4[F5 + 36 >> 2], o4[g6 + 432 >> 2] = o4[F5 + 32 >> 2], o4[g6 + 436 >> 2] = I6, I6 = o4[h5 + 4 >> 2], o4[g6 + 440 >> 2] = o4[h5 >> 2], o4[g6 + 444 >> 2] = I6, I6 = o4[h5 + 12 >> 2], o4[g6 + 448 >> 2] = o4[h5 + 8 >> 2], o4[g6 + 452 >> 2] = I6, I6 = o4[h5 + 20 >> 2], o4[g6 + 456 >> 2] = o4[h5 + 16 >> 2], o4[g6 + 460 >> 2] = I6, I6 = o4[h5 + 28 >> 2], o4[g6 + 464 >> 2] = o4[h5 + 24 >> 2], o4[g6 + 468 >> 2] = I6, I6 = o4[h5 + 36 >> 2], o4[g6 + 472 >> 2] = o4[h5 + 32 >> 2], o4[g6 + 476 >> 2] = I6, s4(y5, f5 = g6 + 360 | 0), H4(f5, y5, i2), H4(w5 = g6 + 400 | 0, E5, B5), H4(I6 = g6 + 440 | 0, B5, i2), s4(y5, f5), H4(f5, y5, i2), H4(w5, E5, B5), H4(I6, B5, i2), s4(y5, f5), H4(f5, y5, i2), H4(w5, E5, B5), H4(I6, B5, i2), s4(y5, f5), H4(A7, y5, i2), H4(F5, E5, B5), H4(h5, B5, i2), H4(D5, y5, E5), I6 = 0; fA(w5 = g6 + 8 | 0, I6 >>> 1 | 0, C5[(g6 + 288 | 0) + I6 | 0]), AA(f5 = g6 + 128 | 0, A7, w5), H4(A7, f5, i2), H4(F5, E5, B5), H4(h5, B5, i2), H4(D5, f5, E5), w5 = I6 >>> 0 < 62, I6 = I6 + 2 | 0, w5; ) ;
              r4 = g6 + 480 | 0;
            }
            function j2(A7, I6, g6) {
              var B5, D5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0, f5 = 0;
              r4 = B5 = r4 + -64 | 0;
              A: {
                if ((g6 - 65 & 255) >>> 0 > 191) {
                  if (w5 = -1, !(c4[A7 + 80 | 0] | c4[A7 + 81 | 0] << 8 | c4[A7 + 82 | 0] << 16 | c4[A7 + 83 | 0] << 24 | c4[A7 + 84 | 0] | c4[A7 + 85 | 0] << 8 | c4[A7 + 86 | 0] << 16 | c4[A7 + 87 | 0] << 24)) {
                    if ((F5 = c4[A7 + 352 | 0] | c4[A7 + 353 | 0] << 8 | c4[A7 + 354 | 0] << 16 | c4[A7 + 355 | 0] << 24) >>> 0 >= 129) {
                      if (h5 = c4[0 | (D5 = A7 - -64 | 0)] | c4[D5 + 1 | 0] << 8 | c4[D5 + 2 | 0] << 16 | c4[D5 + 3 | 0] << 24, y5 = w5 = c4[D5 + 4 | 0] | c4[D5 + 5 | 0] << 8 | c4[D5 + 6 | 0] << 16 | c4[D5 + 7 | 0] << 24, w5 = (F5 = h5 + 128 | 0) >>> 0 < 128 ? w5 + 1 | 0 : w5, C5[0 | D5] = F5, C5[D5 + 1 | 0] = F5 >>> 8, C5[D5 + 2 | 0] = F5 >>> 16, C5[D5 + 3 | 0] = F5 >>> 24, C5[D5 + 4 | 0] = w5, C5[D5 + 5 | 0] = w5 >>> 8, C5[D5 + 6 | 0] = w5 >>> 16, C5[D5 + 7 | 0] = w5 >>> 24, w5 = c4[A7 + 76 | 0] | c4[A7 + 77 | 0] << 8 | c4[A7 + 78 | 0] << 16 | c4[A7 + 79 | 0] << 24, w5 = (D5 = -1 == (0 | y5) & h5 >>> 0 > 4294967167) >>> 0 > (h5 = D5 + (c4[A7 + 72 | 0] | c4[A7 + 73 | 0] << 8 | c4[A7 + 74 | 0] << 16 | c4[A7 + 75 | 0] << 24) | 0) >>> 0 ? w5 + 1 | 0 : w5, C5[A7 + 72 | 0] = h5, C5[A7 + 73 | 0] = h5 >>> 8, C5[A7 + 74 | 0] = h5 >>> 16, C5[A7 + 75 | 0] = h5 >>> 24, C5[A7 + 76 | 0] = w5, C5[A7 + 77 | 0] = w5 >>> 8, C5[A7 + 78 | 0] = w5 >>> 16, C5[A7 + 79 | 0] = w5 >>> 24, U4(A7, w5 = A7 + 96 | 0), D5 = (c4[A7 + 352 | 0] | c4[A7 + 353 | 0] << 8 | c4[A7 + 354 | 0] << 16 | c4[A7 + 355 | 0] << 24) - 128 | 0, C5[A7 + 352 | 0] = D5, C5[A7 + 353 | 0] = D5 >>> 8, C5[A7 + 354 | 0] = D5 >>> 16, C5[A7 + 355 | 0] = D5 >>> 24, D5 >>> 0 >= 129) break A;
                      D5 && E4(w5, A7 + 224 | 0, D5), F5 = c4[A7 + 352 | 0] | c4[A7 + 353 | 0] << 8 | c4[A7 + 354 | 0] << 16 | c4[A7 + 355 | 0] << 24;
                    }
                    w5 = c4[0 | (D5 = A7 - -64 | 0)] | c4[D5 + 1 | 0] << 8 | c4[D5 + 2 | 0] << 16 | c4[D5 + 3 | 0] << 24, h5 = f5 = c4[D5 + 4 | 0] | c4[D5 + 5 | 0] << 8 | c4[D5 + 6 | 0] << 16 | c4[D5 + 7 | 0] << 24, h5 = (y5 = w5 + F5 | 0) >>> 0 < F5 >>> 0 ? h5 + 1 | 0 : h5, C5[0 | D5] = y5, C5[D5 + 1 | 0] = y5 >>> 8, C5[D5 + 2 | 0] = y5 >>> 16, C5[D5 + 3 | 0] = y5 >>> 24, C5[D5 + 4 | 0] = h5, C5[D5 + 5 | 0] = h5 >>> 8, C5[D5 + 6 | 0] = h5 >>> 16, C5[D5 + 7 | 0] = h5 >>> 24, D5 = (0 | h5) == (0 | f5) & w5 >>> 0 > y5 >>> 0 | h5 >>> 0 < f5 >>> 0, w5 = c4[A7 + 76 | 0] | c4[A7 + 77 | 0] << 8 | c4[A7 + 78 | 0] << 16 | c4[A7 + 79 | 0] << 24, w5 = (h5 = D5 + (c4[A7 + 72 | 0] | c4[A7 + 73 | 0] << 8 | c4[A7 + 74 | 0] << 16 | c4[A7 + 75 | 0] << 24) | 0) >>> 0 < D5 >>> 0 ? w5 + 1 | 0 : w5, C5[A7 + 72 | 0] = h5, C5[A7 + 73 | 0] = h5 >>> 8, C5[A7 + 74 | 0] = h5 >>> 16, C5[A7 + 75 | 0] = h5 >>> 24, C5[A7 + 76 | 0] = w5, C5[A7 + 77 | 0] = w5 >>> 8, C5[A7 + 78 | 0] = w5 >>> 16, C5[A7 + 79 | 0] = w5 >>> 24, c4[A7 + 356 | 0] && (C5[A7 + 88 | 0] = 255, C5[A7 + 89 | 0] = 255, C5[A7 + 90 | 0] = 255, C5[A7 + 91 | 0] = 255, C5[A7 + 92 | 0] = 255, C5[A7 + 93 | 0] = 255, C5[A7 + 94 | 0] = 255, C5[A7 + 95 | 0] = 255), C5[A7 + 80 | 0] = 255, C5[A7 + 81 | 0] = 255, C5[A7 + 82 | 0] = 255, C5[A7 + 83 | 0] = 255, C5[A7 + 84 | 0] = 255, C5[A7 + 85 | 0] = 255, C5[A7 + 86 | 0] = 255, C5[A7 + 87 | 0] = 255, D5 = A7 + 96 | 0, w5 = 0, (h5 = 256 - F5 | 0) && Q4(D5 + F5 | 0, 0, h5), U4(A7, D5), h5 = c4[A7 + 4 | 0] | c4[A7 + 5 | 0] << 8 | c4[A7 + 6 | 0] << 16 | c4[A7 + 7 | 0] << 24, o4[B5 >> 2] = c4[0 | A7] | c4[A7 + 1 | 0] << 8 | c4[A7 + 2 | 0] << 16 | c4[A7 + 3 | 0] << 24, o4[B5 + 4 >> 2] = h5, h5 = c4[A7 + 12 | 0] | c4[A7 + 13 | 0] << 8 | c4[A7 + 14 | 0] << 16 | c4[A7 + 15 | 0] << 24, o4[B5 + 8 >> 2] = c4[A7 + 8 | 0] | c4[A7 + 9 | 0] << 8 | c4[A7 + 10 | 0] << 16 | c4[A7 + 11 | 0] << 24, o4[B5 + 12 >> 2] = h5, h5 = c4[A7 + 20 | 0] | c4[A7 + 21 | 0] << 8 | c4[A7 + 22 | 0] << 16 | c4[A7 + 23 | 0] << 24, o4[B5 + 16 >> 2] = c4[A7 + 16 | 0] | c4[A7 + 17 | 0] << 8 | c4[A7 + 18 | 0] << 16 | c4[A7 + 19 | 0] << 24, o4[B5 + 20 >> 2] = h5, h5 = c4[A7 + 28 | 0] | c4[A7 + 29 | 0] << 8 | c4[A7 + 30 | 0] << 16 | c4[A7 + 31 | 0] << 24, o4[B5 + 24 >> 2] = c4[A7 + 24 | 0] | c4[A7 + 25 | 0] << 8 | c4[A7 + 26 | 0] << 16 | c4[A7 + 27 | 0] << 24, o4[B5 + 28 >> 2] = h5, h5 = c4[A7 + 36 | 0] | c4[A7 + 37 | 0] << 8 | c4[A7 + 38 | 0] << 16 | c4[A7 + 39 | 0] << 24, o4[B5 + 32 >> 2] = c4[A7 + 32 | 0] | c4[A7 + 33 | 0] << 8 | c4[A7 + 34 | 0] << 16 | c4[A7 + 35 | 0] << 24, o4[B5 + 36 >> 2] = h5, h5 = c4[A7 + 44 | 0] | c4[A7 + 45 | 0] << 8 | c4[A7 + 46 | 0] << 16 | c4[A7 + 47 | 0] << 24, o4[B5 + 40 >> 2] = c4[A7 + 40 | 0] | c4[A7 + 41 | 0] << 8 | c4[A7 + 42 | 0] << 16 | c4[A7 + 43 | 0] << 24, o4[B5 + 44 >> 2] = h5, h5 = c4[A7 + 52 | 0] | c4[A7 + 53 | 0] << 8 | c4[A7 + 54 | 0] << 16 | c4[A7 + 55 | 0] << 24, o4[B5 + 48 >> 2] = c4[A7 + 48 | 0] | c4[A7 + 49 | 0] << 8 | c4[A7 + 50 | 0] << 16 | c4[A7 + 51 | 0] << 24, o4[B5 + 52 >> 2] = h5, h5 = c4[A7 + 60 | 0] | c4[A7 + 61 | 0] << 8 | c4[A7 + 62 | 0] << 16 | c4[A7 + 63 | 0] << 24, o4[B5 + 56 >> 2] = c4[A7 + 56 | 0] | c4[A7 + 57 | 0] << 8 | c4[A7 + 58 | 0] << 16 | c4[A7 + 59 | 0] << 24, o4[B5 + 60 >> 2] = h5, g6 && E4(I6, B5, g6), xI(A7, 64), xI(D5, 256);
                  }
                  return r4 = B5 - -64 | 0, w5;
                }
                KI(), i();
              }
              S3(1271, 1133, 306, 1077), i();
            }
            function m2(A7, I6) {
              var g6, B5, Q5, i2, E5, D5, h5, w5, F5, y5, f5, S4, a5, k5, M5, n5, t5 = 0, U5 = 0, J5 = 0, K5 = 0, e4 = 0, Y5 = 0, N5 = 0;
              for (r4 = g6 = r4 - 320 | 0, gA(B5 = A7 + 40 | 0, I6), o4[A7 + 84 >> 2] = 0, o4[A7 + 88 >> 2] = 0, o4[A7 + 80 >> 2] = 1, o4[A7 + 92 >> 2] = 0, o4[A7 + 96 >> 2] = 0, o4[A7 + 100 >> 2] = 0, o4[A7 + 104 >> 2] = 0, o4[A7 + 108 >> 2] = 0, o4[A7 + 112 >> 2] = 0, o4[A7 + 116 >> 2] = 0, d4(Y5 = g6 + 240 | 0, B5), H4(K5 = g6 + 192 | 0, Y5, 1328), N5 = -1, Q5 = o4[g6 + 240 >> 2] - 1 | 0, o4[g6 + 240 >> 2] = Q5, o4[g6 + 192 >> 2] = o4[g6 + 192 >> 2] + 1, i2 = o4[g6 + 244 >> 2], E5 = o4[g6 + 248 >> 2], D5 = o4[g6 + 252 >> 2], h5 = o4[g6 + 256 >> 2], w5 = o4[g6 + 260 >> 2], F5 = o4[g6 + 264 >> 2], y5 = o4[g6 + 268 >> 2], f5 = o4[g6 + 272 >> 2], S4 = o4[g6 + 276 >> 2], d4(e4 = g6 + 144 | 0, K5), H4(e4, e4, K5), d4(A7, e4), H4(A7, A7, K5), H4(A7, A7, Y5), r4 = U5 = r4 - 144 | 0, d4(J5 = U5 + 96 | 0, A7), d4(t5 = U5 + 48 | 0, J5), d4(t5, t5), H4(t5, A7, t5), H4(J5, J5, t5), d4(J5, J5), H4(J5, t5, J5), d4(t5, J5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), H4(J5, t5, J5), d4(t5, J5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), H4(t5, t5, J5), d4(U5, t5), d4(U5, U5), d4(U5, U5), d4(U5, U5), d4(U5, U5), d4(U5, U5), d4(U5, U5), d4(U5, U5), d4(U5, U5), d4(U5, U5), d4(U5, U5), d4(U5, U5), d4(U5, U5), d4(U5, U5), d4(U5, U5), d4(U5, U5), d4(U5, U5), d4(U5, U5), d4(U5, U5), d4(U5, U5), H4(t5, U5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), H4(J5, t5, J5), d4(t5, J5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), H4(t5, t5, J5), d4(U5, t5), t5 = 1; d4(U5, U5), 100 != (0 | (t5 = t5 + 1 | 0)); ) ;
              H4(t5 = U5 + 48 | 0, U5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), d4(t5, t5), H4(J5 = U5 + 96 | 0, t5, J5), d4(J5, J5), d4(J5, J5), H4(A7, J5, A7), r4 = U5 + 144 | 0, H4(A7, A7, e4), H4(A7, A7, Y5), d4(t5 = g6 + 96 | 0, A7), H4(t5, t5, K5), t5 = o4[g6 + 132 >> 2], o4[g6 + 84 >> 2] = t5 - S4, U5 = o4[g6 + 128 >> 2], o4[g6 + 80 >> 2] = U5 - f5, J5 = o4[g6 + 124 >> 2], o4[g6 + 76 >> 2] = J5 - y5, K5 = o4[g6 + 120 >> 2], o4[g6 + 72 >> 2] = K5 - F5, e4 = o4[g6 + 116 >> 2], o4[g6 + 68 >> 2] = e4 - w5, Y5 = o4[g6 + 112 >> 2], o4[g6 + 64 >> 2] = Y5 - h5, a5 = o4[g6 + 108 >> 2], o4[g6 + 60 >> 2] = a5 - D5, k5 = o4[g6 + 104 >> 2], o4[g6 + 56 >> 2] = k5 - E5, M5 = o4[g6 + 100 >> 2], o4[g6 + 52 >> 2] = M5 - i2, n5 = o4[g6 + 96 >> 2], o4[g6 + 48 >> 2] = n5 - Q5, nA(g6, g6 + 48 | 0);
              A: {
                if (!vA(g6, 32)) {
                  if (o4[g6 + 36 >> 2] = t5 + S4, o4[g6 + 32 >> 2] = U5 + f5, o4[g6 + 28 >> 2] = J5 + y5, o4[g6 + 24 >> 2] = K5 + F5, o4[g6 + 20 >> 2] = e4 + w5, o4[g6 + 16 >> 2] = Y5 + h5, o4[g6 + 12 >> 2] = D5 + a5, o4[g6 + 8 >> 2] = E5 + k5, o4[g6 + 4 >> 2] = i2 + M5, o4[g6 >> 2] = Q5 + n5, nA(t5 = g6 + 288 | 0, g6), !vA(t5, 32)) break A;
                  H4(A7, A7, 1376);
                }
                nA(g6 + 288 | 0, A7), (1 & C5[g6 + 288 | 0]) == (c4[I6 + 31 | 0] >>> 7 | 0) && (o4[A7 >> 2] = 0 - o4[A7 >> 2], o4[A7 + 36 >> 2] = 0 - o4[A7 + 36 >> 2], o4[A7 + 32 >> 2] = 0 - o4[A7 + 32 >> 2], o4[A7 + 28 >> 2] = 0 - o4[A7 + 28 >> 2], o4[A7 + 24 >> 2] = 0 - o4[A7 + 24 >> 2], o4[A7 + 20 >> 2] = 0 - o4[A7 + 20 >> 2], o4[A7 + 16 >> 2] = 0 - o4[A7 + 16 >> 2], o4[A7 + 12 >> 2] = 0 - o4[A7 + 12 >> 2], o4[A7 + 8 >> 2] = 0 - o4[A7 + 8 >> 2], o4[A7 + 4 >> 2] = 0 - o4[A7 + 4 >> 2]), H4(A7 + 120 | 0, A7, B5), N5 = 0;
              }
              return r4 = g6 + 320 | 0, N5;
            }
            function l2(A7, I6, g6) {
              var B5, Q5, i2, E5, D5, h5, w5, F5, y5, f5, S4, a5, k5, M5, n5, t5, U5, J5, K5, e4, Y5 = 0;
              r4 = B5 = r4 - 224 | 0, h5 = o4[g6 + 16 >> 2], w5 = o4[(Y5 = g6 - -64 | 0) >> 2], F5 = o4[g6 + 80 >> 2], y5 = o4[g6 + 32 >> 2], f5 = o4[g6 + 48 >> 2], Q5 = c4[I6 + 4 | 0] | c4[I6 + 5 | 0] << 8 | c4[I6 + 6 | 0] << 16 | c4[I6 + 7 | 0] << 24, S4 = o4[g6 + 20 >> 2], a5 = o4[g6 + 68 >> 2], k5 = o4[g6 + 84 >> 2], M5 = o4[g6 + 36 >> 2], n5 = o4[g6 + 52 >> 2], i2 = c4[I6 + 8 | 0] | c4[I6 + 9 | 0] << 8 | c4[I6 + 10 | 0] << 16 | c4[I6 + 11 | 0] << 24, t5 = o4[g6 + 24 >> 2], U5 = o4[g6 + 72 >> 2], J5 = o4[g6 + 88 >> 2], K5 = o4[g6 + 40 >> 2], e4 = o4[g6 + 56 >> 2], E5 = c4[0 | I6] | c4[I6 + 1 | 0] << 8 | c4[I6 + 2 | 0] << 16 | c4[I6 + 3 | 0] << 24, I6 = (D5 = c4[I6 + 12 | 0] | c4[I6 + 13 | 0] << 8 | c4[I6 + 14 | 0] << 16 | c4[I6 + 15 | 0] << 24) ^ o4[g6 + 44 >> 2] & o4[g6 + 60 >> 2] ^ o4[g6 + 28 >> 2] ^ o4[g6 + 92 >> 2] ^ o4[g6 + 76 >> 2], C5[A7 + 12 | 0] = I6, C5[A7 + 13 | 0] = I6 >>> 8, C5[A7 + 14 | 0] = I6 >>> 16, C5[A7 + 15 | 0] = I6 >>> 24, I6 = K5 & e4 ^ U5 ^ J5 ^ t5 ^ i2, C5[A7 + 8 | 0] = I6, C5[A7 + 9 | 0] = I6 >>> 8, C5[A7 + 10 | 0] = I6 >>> 16, C5[A7 + 11 | 0] = I6 >>> 24, I6 = M5 & n5 ^ a5 ^ k5 ^ S4 ^ Q5, C5[A7 + 4 | 0] = I6, C5[A7 + 5 | 0] = I6 >>> 8, C5[A7 + 6 | 0] = I6 >>> 16, C5[A7 + 7 | 0] = I6 >>> 24, I6 = y5 & f5 ^ h5 ^ w5 ^ F5 ^ E5, C5[0 | A7] = I6, C5[A7 + 1 | 0] = I6 >>> 8, C5[A7 + 2 | 0] = I6 >>> 16, C5[A7 + 3 | 0] = I6 >>> 24, A7 = o4[g6 + 92 >> 2], o4[B5 + 216 >> 2] = o4[g6 + 88 >> 2], o4[B5 + 220 >> 2] = A7, A7 = o4[g6 + 84 >> 2], o4[B5 + 208 >> 2] = o4[g6 + 80 >> 2], o4[B5 + 212 >> 2] = A7, A7 = o4[Y5 + 4 >> 2], o4[B5 + 176 >> 2] = o4[Y5 >> 2], o4[B5 + 180 >> 2] = A7, A7 = o4[g6 + 76 >> 2], o4[B5 + 184 >> 2] = o4[g6 + 72 >> 2], o4[B5 + 188 >> 2] = A7, A7 = o4[g6 + 84 >> 2], o4[B5 + 160 >> 2] = o4[g6 + 80 >> 2], o4[B5 + 164 >> 2] = A7, A7 = o4[g6 + 92 >> 2], o4[B5 + 168 >> 2] = o4[g6 + 88 >> 2], o4[B5 + 172 >> 2] = A7, GA(A7 = B5 + 192 | 0, B5 + 176 | 0, B5 + 160 | 0), I6 = o4[B5 + 204 >> 2], o4[g6 + 88 >> 2] = o4[B5 + 200 >> 2], o4[g6 + 92 >> 2] = I6, I6 = o4[B5 + 196 >> 2], o4[g6 + 80 >> 2] = o4[B5 + 192 >> 2], o4[g6 + 84 >> 2] = I6, I6 = o4[g6 + 52 >> 2], o4[B5 + 144 >> 2] = o4[g6 + 48 >> 2], o4[B5 + 148 >> 2] = I6, I6 = o4[g6 + 60 >> 2], o4[B5 + 152 >> 2] = o4[g6 + 56 >> 2], o4[B5 + 156 >> 2] = I6, I6 = o4[Y5 + 4 >> 2], o4[B5 + 128 >> 2] = o4[Y5 >> 2], o4[B5 + 132 >> 2] = I6, I6 = o4[g6 + 76 >> 2], o4[B5 + 136 >> 2] = o4[g6 + 72 >> 2], o4[B5 + 140 >> 2] = I6, GA(A7, B5 + 144 | 0, B5 + 128 | 0), I6 = o4[B5 + 204 >> 2], o4[g6 + 72 >> 2] = o4[B5 + 200 >> 2], o4[g6 + 76 >> 2] = I6, I6 = o4[B5 + 196 >> 2], o4[Y5 >> 2] = o4[B5 + 192 >> 2], o4[Y5 + 4 >> 2] = I6, I6 = o4[g6 + 36 >> 2], o4[B5 + 112 >> 2] = o4[g6 + 32 >> 2], o4[B5 + 116 >> 2] = I6, I6 = o4[g6 + 44 >> 2], o4[B5 + 120 >> 2] = o4[g6 + 40 >> 2], o4[B5 + 124 >> 2] = I6, I6 = o4[g6 + 52 >> 2], o4[B5 + 96 >> 2] = o4[g6 + 48 >> 2], o4[B5 + 100 >> 2] = I6, I6 = o4[g6 + 60 >> 2], o4[B5 + 104 >> 2] = o4[g6 + 56 >> 2], o4[B5 + 108 >> 2] = I6, GA(A7, B5 + 112 | 0, B5 + 96 | 0), I6 = o4[B5 + 204 >> 2], o4[g6 + 56 >> 2] = o4[B5 + 200 >> 2], o4[g6 + 60 >> 2] = I6, I6 = o4[B5 + 196 >> 2], o4[g6 + 48 >> 2] = o4[B5 + 192 >> 2], o4[g6 + 52 >> 2] = I6, I6 = o4[g6 + 20 >> 2], o4[B5 + 80 >> 2] = o4[g6 + 16 >> 2], o4[B5 + 84 >> 2] = I6, I6 = o4[g6 + 28 >> 2], o4[B5 + 88 >> 2] = o4[g6 + 24 >> 2], o4[B5 + 92 >> 2] = I6, I6 = o4[g6 + 36 >> 2], o4[B5 + 64 >> 2] = o4[g6 + 32 >> 2], o4[B5 + 68 >> 2] = I6, I6 = o4[g6 + 44 >> 2], o4[B5 + 72 >> 2] = o4[g6 + 40 >> 2], o4[B5 + 76 >> 2] = I6, GA(A7, B5 + 80 | 0, B5 - -64 | 0), I6 = o4[B5 + 204 >> 2], o4[g6 + 40 >> 2] = o4[B5 + 200 >> 2], o4[g6 + 44 >> 2] = I6, I6 = o4[B5 + 196 >> 2], o4[g6 + 32 >> 2] = o4[B5 + 192 >> 2], o4[g6 + 36 >> 2] = I6, I6 = o4[g6 + 4 >> 2], o4[B5 + 48 >> 2] = o4[g6 >> 2], o4[B5 + 52 >> 2] = I6, I6 = o4[g6 + 12 >> 2], o4[B5 + 56 >> 2] = o4[g6 + 8 >> 2], o4[B5 + 60 >> 2] = I6, I6 = o4[g6 + 20 >> 2], o4[B5 + 32 >> 2] = o4[g6 + 16 >> 2], o4[B5 + 36 >> 2] = I6, I6 = o4[g6 + 28 >> 2], o4[B5 + 40 >> 2] = o4[g6 + 24 >> 2], o4[B5 + 44 >> 2] = I6, GA(A7, B5 + 48 | 0, B5 + 32 | 0), I6 = o4[B5 + 204 >> 2], o4[g6 + 24 >> 2] = o4[B5 + 200 >> 2], o4[g6 + 28 >> 2] = I6, I6 = o4[B5 + 196 >> 2], o4[g6 + 16 >> 2] = o4[B5 + 192 >> 2], o4[g6 + 20 >> 2] = I6, I6 = o4[B5 + 212 >> 2], o4[B5 + 16 >> 2] = o4[B5 + 208 >> 2], o4[B5 + 20 >> 2] = I6, I6 = o4[B5 + 220 >> 2], o4[B5 + 24 >> 2] = o4[B5 + 216 >> 2], o4[B5 + 28 >> 2] = I6, I6 = o4[g6 + 4 >> 2], o4[B5 >> 2] = o4[g6 >> 2], o4[B5 + 4 >> 2] = I6, I6 = o4[g6 + 12 >> 2], o4[B5 + 8 >> 2] = o4[g6 + 8 >> 2], o4[B5 + 12 >> 2] = I6, GA(A7, B5 + 16 | 0, B5), A7 = o4[B5 + 192 >> 2], I6 = o4[B5 + 196 >> 2], Y5 = o4[B5 + 200 >> 2], o4[g6 + 12 >> 2] = D5 ^ o4[B5 + 204 >> 2], o4[g6 + 8 >> 2] = Y5 ^ i2, o4[g6 + 4 >> 2] = I6 ^ Q5, o4[g6 >> 2] = A7 ^ E5, r4 = B5 + 224 | 0;
            }
            function _2(A7, I6, g6) {
              var B5, Q5, i2, E5, D5, h5, w5, F5, y5, f5, S4, a5, k5, M5, n5, t5 = 0, U5 = 0, J5 = 0, K5 = 0, e4 = 0;
              r4 = B5 = r4 - 224 | 0, J5 = o4[g6 + 16 >> 2], U5 = o4[(t5 = g6 - -64 | 0) >> 2], Q5 = o4[g6 + 80 >> 2], i2 = o4[g6 + 32 >> 2], E5 = o4[g6 + 48 >> 2], K5 = o4[g6 + 20 >> 2], D5 = o4[g6 + 68 >> 2], h5 = o4[g6 + 84 >> 2], w5 = c4[I6 + 4 | 0] | c4[I6 + 5 | 0] << 8 | c4[I6 + 6 | 0] << 16 | c4[I6 + 7 | 0] << 24, F5 = o4[g6 + 36 >> 2], y5 = o4[g6 + 52 >> 2], e4 = o4[g6 + 24 >> 2], f5 = o4[g6 + 72 >> 2], S4 = o4[g6 + 88 >> 2], a5 = c4[I6 + 8 | 0] | c4[I6 + 9 | 0] << 8 | c4[I6 + 10 | 0] << 16 | c4[I6 + 11 | 0] << 24, k5 = o4[g6 + 40 >> 2], M5 = o4[g6 + 56 >> 2], n5 = c4[0 | I6] | c4[I6 + 1 | 0] << 8 | c4[I6 + 2 | 0] << 16 | c4[I6 + 3 | 0] << 24, I6 = o4[g6 + 44 >> 2] & o4[g6 + 60 >> 2] ^ o4[g6 + 28 >> 2] ^ o4[g6 + 76 >> 2] ^ o4[g6 + 92 >> 2] ^ (c4[I6 + 12 | 0] | c4[I6 + 13 | 0] << 8 | c4[I6 + 14 | 0] << 16 | c4[I6 + 15 | 0] << 24), C5[A7 + 12 | 0] = I6, C5[A7 + 13 | 0] = I6 >>> 8, C5[A7 + 14 | 0] = I6 >>> 16, C5[A7 + 15 | 0] = I6 >>> 24, e4 = k5 & M5 ^ e4 ^ S4 ^ a5 ^ f5, C5[A7 + 8 | 0] = e4, C5[A7 + 9 | 0] = e4 >>> 8, C5[A7 + 10 | 0] = e4 >>> 16, C5[A7 + 11 | 0] = e4 >>> 24, K5 = F5 & y5 ^ K5 ^ h5 ^ w5 ^ D5, C5[A7 + 4 | 0] = K5, C5[A7 + 5 | 0] = K5 >>> 8, C5[A7 + 6 | 0] = K5 >>> 16, C5[A7 + 7 | 0] = K5 >>> 24, J5 = i2 & E5 ^ J5 ^ U5 ^ Q5 ^ n5, C5[0 | A7] = J5, C5[A7 + 1 | 0] = J5 >>> 8, C5[A7 + 2 | 0] = J5 >>> 16, C5[A7 + 3 | 0] = J5 >>> 24, A7 = o4[g6 + 92 >> 2], o4[B5 + 216 >> 2] = o4[g6 + 88 >> 2], o4[B5 + 220 >> 2] = A7, A7 = o4[g6 + 84 >> 2], o4[B5 + 208 >> 2] = o4[g6 + 80 >> 2], o4[B5 + 212 >> 2] = A7, A7 = o4[t5 + 4 >> 2], o4[B5 + 176 >> 2] = o4[t5 >> 2], o4[B5 + 180 >> 2] = A7, A7 = o4[g6 + 76 >> 2], o4[B5 + 184 >> 2] = o4[g6 + 72 >> 2], o4[B5 + 188 >> 2] = A7, A7 = o4[g6 + 84 >> 2], o4[B5 + 160 >> 2] = o4[g6 + 80 >> 2], o4[B5 + 164 >> 2] = A7, A7 = o4[g6 + 92 >> 2], o4[B5 + 168 >> 2] = o4[g6 + 88 >> 2], o4[B5 + 172 >> 2] = A7, GA(A7 = B5 + 192 | 0, B5 + 176 | 0, B5 + 160 | 0), U5 = o4[B5 + 204 >> 2], o4[g6 + 88 >> 2] = o4[B5 + 200 >> 2], o4[g6 + 92 >> 2] = U5, U5 = o4[B5 + 196 >> 2], o4[g6 + 80 >> 2] = o4[B5 + 192 >> 2], o4[g6 + 84 >> 2] = U5, U5 = o4[g6 + 52 >> 2], o4[B5 + 144 >> 2] = o4[g6 + 48 >> 2], o4[B5 + 148 >> 2] = U5, U5 = o4[g6 + 60 >> 2], o4[B5 + 152 >> 2] = o4[g6 + 56 >> 2], o4[B5 + 156 >> 2] = U5, U5 = o4[t5 + 4 >> 2], o4[B5 + 128 >> 2] = o4[t5 >> 2], o4[B5 + 132 >> 2] = U5, U5 = o4[g6 + 76 >> 2], o4[B5 + 136 >> 2] = o4[g6 + 72 >> 2], o4[B5 + 140 >> 2] = U5, GA(A7, B5 + 144 | 0, B5 + 128 | 0), U5 = o4[B5 + 204 >> 2], o4[g6 + 72 >> 2] = o4[B5 + 200 >> 2], o4[g6 + 76 >> 2] = U5, U5 = o4[B5 + 196 >> 2], o4[t5 >> 2] = o4[B5 + 192 >> 2], o4[t5 + 4 >> 2] = U5, t5 = o4[g6 + 36 >> 2], o4[B5 + 112 >> 2] = o4[g6 + 32 >> 2], o4[B5 + 116 >> 2] = t5, t5 = o4[g6 + 44 >> 2], o4[B5 + 120 >> 2] = o4[g6 + 40 >> 2], o4[B5 + 124 >> 2] = t5, t5 = o4[g6 + 52 >> 2], o4[B5 + 96 >> 2] = o4[g6 + 48 >> 2], o4[B5 + 100 >> 2] = t5, t5 = o4[g6 + 60 >> 2], o4[B5 + 104 >> 2] = o4[g6 + 56 >> 2], o4[B5 + 108 >> 2] = t5, GA(A7, B5 + 112 | 0, B5 + 96 | 0), t5 = o4[B5 + 204 >> 2], o4[g6 + 56 >> 2] = o4[B5 + 200 >> 2], o4[g6 + 60 >> 2] = t5, t5 = o4[B5 + 196 >> 2], o4[g6 + 48 >> 2] = o4[B5 + 192 >> 2], o4[g6 + 52 >> 2] = t5, t5 = o4[g6 + 20 >> 2], o4[B5 + 80 >> 2] = o4[g6 + 16 >> 2], o4[B5 + 84 >> 2] = t5, t5 = o4[g6 + 28 >> 2], o4[B5 + 88 >> 2] = o4[g6 + 24 >> 2], o4[B5 + 92 >> 2] = t5, t5 = o4[g6 + 36 >> 2], o4[B5 + 64 >> 2] = o4[g6 + 32 >> 2], o4[B5 + 68 >> 2] = t5, t5 = o4[g6 + 44 >> 2], o4[B5 + 72 >> 2] = o4[g6 + 40 >> 2], o4[B5 + 76 >> 2] = t5, GA(A7, B5 + 80 | 0, B5 - -64 | 0), t5 = o4[B5 + 204 >> 2], o4[g6 + 40 >> 2] = o4[B5 + 200 >> 2], o4[g6 + 44 >> 2] = t5, t5 = o4[B5 + 196 >> 2], o4[g6 + 32 >> 2] = o4[B5 + 192 >> 2], o4[g6 + 36 >> 2] = t5, t5 = o4[g6 + 4 >> 2], o4[B5 + 48 >> 2] = o4[g6 >> 2], o4[B5 + 52 >> 2] = t5, t5 = o4[g6 + 12 >> 2], o4[B5 + 56 >> 2] = o4[g6 + 8 >> 2], o4[B5 + 60 >> 2] = t5, t5 = o4[g6 + 20 >> 2], o4[B5 + 32 >> 2] = o4[g6 + 16 >> 2], o4[B5 + 36 >> 2] = t5, t5 = o4[g6 + 28 >> 2], o4[B5 + 40 >> 2] = o4[g6 + 24 >> 2], o4[B5 + 44 >> 2] = t5, GA(A7, B5 + 48 | 0, B5 + 32 | 0), t5 = o4[B5 + 204 >> 2], o4[g6 + 24 >> 2] = o4[B5 + 200 >> 2], o4[g6 + 28 >> 2] = t5, t5 = o4[B5 + 196 >> 2], o4[g6 + 16 >> 2] = o4[B5 + 192 >> 2], o4[g6 + 20 >> 2] = t5, t5 = o4[B5 + 212 >> 2], o4[B5 + 16 >> 2] = o4[B5 + 208 >> 2], o4[B5 + 20 >> 2] = t5, t5 = o4[B5 + 220 >> 2], o4[B5 + 24 >> 2] = o4[B5 + 216 >> 2], o4[B5 + 28 >> 2] = t5, t5 = o4[g6 + 4 >> 2], o4[B5 >> 2] = o4[g6 >> 2], o4[B5 + 4 >> 2] = t5, t5 = o4[g6 + 12 >> 2], o4[B5 + 8 >> 2] = o4[g6 + 8 >> 2], o4[B5 + 12 >> 2] = t5, GA(A7, B5 + 16 | 0, B5), A7 = o4[B5 + 192 >> 2], t5 = o4[B5 + 196 >> 2], U5 = o4[B5 + 200 >> 2], o4[g6 + 12 >> 2] = I6 ^ o4[B5 + 204 >> 2], o4[g6 + 8 >> 2] = U5 ^ e4, o4[g6 + 4 >> 2] = t5 ^ K5, o4[g6 >> 2] = A7 ^ J5, r4 = B5 + 224 | 0;
            }
            function X2(A7, I6, g6) {
              var B5, Q5, i2, E5, D5, o5, h5, w5, F5, y5, f5, S4, a5 = 0, k5 = 0, M5 = 0, r5 = 0, n5 = 0, t5 = 0, U5 = 0, J5 = 0, K5 = 0, e4 = 0, Y5 = 0, N5 = 0, G5 = 0, H5 = 0, s5 = 0, p5 = 0, L5 = 0, d5 = 0, P5 = 0, R4 = 0;
              for (n5 = 1634760805, k5 = B5 = c4[0 | g6] | c4[g6 + 1 | 0] << 8 | c4[g6 + 2 | 0] << 16 | c4[g6 + 3 | 0] << 24, t5 = Q5 = c4[g6 + 4 | 0] | c4[g6 + 5 | 0] << 8 | c4[g6 + 6 | 0] << 16 | c4[g6 + 7 | 0] << 24, U5 = i2 = c4[g6 + 8 | 0] | c4[g6 + 9 | 0] << 8 | c4[g6 + 10 | 0] << 16 | c4[g6 + 11 | 0] << 24, J5 = E5 = c4[g6 + 12 | 0] | c4[g6 + 13 | 0] << 8 | c4[g6 + 14 | 0] << 16 | c4[g6 + 15 | 0] << 24, N5 = 857760878, K5 = D5 = c4[0 | I6] | c4[I6 + 1 | 0] << 8 | c4[I6 + 2 | 0] << 16 | c4[I6 + 3 | 0] << 24, M5 = o5 = c4[I6 + 4 | 0] | c4[I6 + 5 | 0] << 8 | c4[I6 + 6 | 0] << 16 | c4[I6 + 7 | 0] << 24, Y5 = h5 = c4[I6 + 8 | 0] | c4[I6 + 9 | 0] << 8 | c4[I6 + 10 | 0] << 16 | c4[I6 + 11 | 0] << 24, H5 = w5 = c4[I6 + 12 | 0] | c4[I6 + 13 | 0] << 8 | c4[I6 + 14 | 0] << 16 | c4[I6 + 15 | 0] << 24, I6 = 2036477234, r5 = F5 = c4[g6 + 16 | 0] | c4[g6 + 17 | 0] << 8 | c4[g6 + 18 | 0] << 16 | c4[g6 + 19 | 0] << 24, a5 = 1797285236, s5 = y5 = c4[g6 + 28 | 0] | c4[g6 + 29 | 0] << 8 | c4[g6 + 30 | 0] << 16 | c4[g6 + 31 | 0] << 24, G5 = f5 = c4[g6 + 24 | 0] | c4[g6 + 25 | 0] << 8 | c4[g6 + 26 | 0] << 16 | c4[g6 + 27 | 0] << 24, g6 = S4 = c4[g6 + 20 | 0] | c4[g6 + 21 | 0] << 8 | c4[g6 + 22 | 0] << 16 | c4[g6 + 23 | 0] << 24; e4 = kI(k5 + N5 | 0, 7) ^ H5, p5 = kI(e4 + N5 | 0, 9) ^ G5, J5 = kI(g6 + n5 | 0, 7) ^ J5, L5 = kI(J5 + n5 | 0, 9) ^ Y5, P5 = kI(L5 + J5 | 0, 13) ^ g6, U5 = kI(a5 + r5 | 0, 7) ^ U5, d5 = kI(U5 + a5 | 0, 9) ^ M5, Y5 = kI(U5 + d5 | 0, 13) ^ r5, r5 = kI(d5 + Y5 | 0, 18) ^ a5, M5 = kI(I6 + K5 | 0, 7) ^ s5, g6 = P5 ^ kI(r5 + M5 | 0, 7), G5 = p5 ^ kI(g6 + r5 | 0, 9), s5 = kI(g6 + G5 | 0, 13) ^ M5, a5 = kI(G5 + s5 | 0, 18) ^ r5, t5 = kI(I6 + M5 | 0, 9) ^ t5, K5 = kI(t5 + M5 | 0, 13) ^ K5, I6 = kI(K5 + t5 | 0, 18) ^ I6, r5 = kI(I6 + e4 | 0, 7) ^ Y5, Y5 = kI(r5 + I6 | 0, 9) ^ L5, H5 = kI(r5 + Y5 | 0, 13) ^ e4, I6 = kI(Y5 + H5 | 0, 18) ^ I6, e4 = kI(e4 + p5 | 0, 13) ^ k5, k5 = kI(e4 + p5 | 0, 18) ^ N5, K5 = kI(k5 + J5 | 0, 7) ^ K5, M5 = kI(K5 + k5 | 0, 9) ^ d5, J5 = kI(M5 + K5 | 0, 13) ^ J5, N5 = kI(M5 + J5 | 0, 18) ^ k5, n5 = kI(L5 + P5 | 0, 18) ^ n5, k5 = kI(n5 + U5 | 0, 7) ^ e4, t5 = kI(k5 + n5 | 0, 9) ^ t5, U5 = kI(k5 + t5 | 0, 13) ^ U5, n5 = kI(t5 + U5 | 0, 18) ^ n5, e4 = R4 >>> 0 < 18, R4 = R4 + 2 | 0, e4; ) ;
              a5 = a5 + 1797285236 | 0, C5[A7 + 60 | 0] = a5, C5[A7 + 61 | 0] = a5 >>> 8, C5[A7 + 62 | 0] = a5 >>> 16, C5[A7 + 63 | 0] = a5 >>> 24, a5 = s5 + y5 | 0, C5[A7 + 56 | 0] = a5, C5[A7 + 57 | 0] = a5 >>> 8, C5[A7 + 58 | 0] = a5 >>> 16, C5[A7 + 59 | 0] = a5 >>> 24, a5 = G5 + f5 | 0, C5[A7 + 52 | 0] = a5, C5[A7 + 53 | 0] = a5 >>> 8, C5[A7 + 54 | 0] = a5 >>> 16, C5[A7 + 55 | 0] = a5 >>> 24, g6 = g6 + S4 | 0, C5[A7 + 48 | 0] = g6, C5[A7 + 49 | 0] = g6 >>> 8, C5[A7 + 50 | 0] = g6 >>> 16, C5[A7 + 51 | 0] = g6 >>> 24, g6 = r5 + F5 | 0, C5[A7 + 44 | 0] = g6, C5[A7 + 45 | 0] = g6 >>> 8, C5[A7 + 46 | 0] = g6 >>> 16, C5[A7 + 47 | 0] = g6 >>> 24, I6 = I6 + 2036477234 | 0, C5[A7 + 40 | 0] = I6, C5[A7 + 41 | 0] = I6 >>> 8, C5[A7 + 42 | 0] = I6 >>> 16, C5[A7 + 43 | 0] = I6 >>> 24, I6 = H5 + w5 | 0, C5[A7 + 36 | 0] = I6, C5[A7 + 37 | 0] = I6 >>> 8, C5[A7 + 38 | 0] = I6 >>> 16, C5[A7 + 39 | 0] = I6 >>> 24, I6 = Y5 + h5 | 0, C5[A7 + 32 | 0] = I6, C5[A7 + 33 | 0] = I6 >>> 8, C5[A7 + 34 | 0] = I6 >>> 16, C5[A7 + 35 | 0] = I6 >>> 24, I6 = M5 + o5 | 0, C5[A7 + 28 | 0] = I6, C5[A7 + 29 | 0] = I6 >>> 8, C5[A7 + 30 | 0] = I6 >>> 16, C5[A7 + 31 | 0] = I6 >>> 24, I6 = K5 + D5 | 0, C5[A7 + 24 | 0] = I6, C5[A7 + 25 | 0] = I6 >>> 8, C5[A7 + 26 | 0] = I6 >>> 16, C5[A7 + 27 | 0] = I6 >>> 24, I6 = N5 + 857760878 | 0, C5[A7 + 20 | 0] = I6, C5[A7 + 21 | 0] = I6 >>> 8, C5[A7 + 22 | 0] = I6 >>> 16, C5[A7 + 23 | 0] = I6 >>> 24, I6 = J5 + E5 | 0, C5[A7 + 16 | 0] = I6, C5[A7 + 17 | 0] = I6 >>> 8, C5[A7 + 18 | 0] = I6 >>> 16, C5[A7 + 19 | 0] = I6 >>> 24, I6 = U5 + i2 | 0, C5[A7 + 12 | 0] = I6, C5[A7 + 13 | 0] = I6 >>> 8, C5[A7 + 14 | 0] = I6 >>> 16, C5[A7 + 15 | 0] = I6 >>> 24, I6 = t5 + Q5 | 0, C5[A7 + 8 | 0] = I6, C5[A7 + 9 | 0] = I6 >>> 8, C5[A7 + 10 | 0] = I6 >>> 16, C5[A7 + 11 | 0] = I6 >>> 24, I6 = k5 + B5 | 0, C5[A7 + 4 | 0] = I6, C5[A7 + 5 | 0] = I6 >>> 8, C5[A7 + 6 | 0] = I6 >>> 16, C5[A7 + 7 | 0] = I6 >>> 24, I6 = n5 + 1634760805 | 0, C5[0 | A7] = I6, C5[A7 + 1 | 0] = I6 >>> 8, C5[A7 + 2 | 0] = I6 >>> 16, C5[A7 + 3 | 0] = I6 >>> 24;
            }
            function T2(A7, I6, g6, C6) {
              var B5, Q5, i2, E5, D5, h5, w5, y5, f5, S4, a5 = 0, k5 = 0, M5 = 0, r5 = 0, t5 = 0, U5 = 0, J5 = 0, K5 = 0, e4 = 0, Y5 = 0, N5 = 0, G5 = 0, H5 = 0, s5 = 0, p5 = 0;
              for (f5 = c4[A7 + 80 | 0] ? 0 : 16777216, N5 = o4[A7 + 36 >> 2], e4 = o4[A7 + 32 >> 2], Y5 = o4[A7 + 28 >> 2], J5 = o4[A7 + 24 >> 2], K5 = o4[A7 + 20 >> 2], B5 = o4[A7 + 4 >> 2], S4 = F4(B5, 5), i2 = o4[A7 + 8 >> 2], w5 = F4(i2, 5), D5 = o4[A7 + 12 >> 2], h5 = F4(D5, 5), y5 = o4[A7 + 16 >> 2], E5 = F4(y5, 5), Q5 = o4[A7 >> 2]; a5 = AI(M5 = ((c4[I6 + 3 | 0] | c4[I6 + 4 | 0] << 8 | c4[I6 + 5 | 0] << 16 | c4[I6 + 6 | 0] << 24) >>> 2 & 67108863) + J5 | 0, 0, D5, 0), t5 = n4, K5 = (r5 = AI(J5 = (67108863 & (c4[0 | I6] | c4[I6 + 1 | 0] << 8 | c4[I6 + 2 | 0] << 16 | c4[I6 + 3 | 0] << 24)) + K5 | 0, 0, y5, 0)) + a5 | 0, a5 = n4 + t5 | 0, a5 = r5 >>> 0 > K5 >>> 0 ? a5 + 1 | 0 : a5, t5 = AI(Y5 = ((c4[I6 + 6 | 0] | c4[I6 + 7 | 0] << 8 | c4[I6 + 8 | 0] << 16 | c4[I6 + 9 | 0] << 24) >>> 4 & 67108863) + Y5 | 0, 0, i2, 0), a5 = n4 + a5 | 0, a5 = t5 >>> 0 > (K5 = t5 + K5 | 0) >>> 0 ? a5 + 1 | 0 : a5, t5 = AI(e4 = ((c4[I6 + 9 | 0] | c4[I6 + 10 | 0] << 8 | c4[I6 + 11 | 0] << 16 | c4[I6 + 12 | 0] << 24) >>> 6 | 0) + e4 | 0, 0, B5, 0), a5 = n4 + a5 | 0, a5 = t5 >>> 0 > (K5 = t5 + K5 | 0) >>> 0 ? a5 + 1 | 0 : a5, t5 = AI(N5 = N5 + f5 + ((c4[I6 + 12 | 0] | c4[I6 + 13 | 0] << 8 | c4[I6 + 14 | 0] << 16 | c4[I6 + 15 | 0] << 24) >>> 8) | 0, 0, Q5, 0), a5 = n4 + a5 | 0, H5 = K5 = t5 + K5 | 0, K5 = t5 >>> 0 > K5 >>> 0 ? a5 + 1 | 0 : a5, a5 = AI(M5, 0, i2, 0), t5 = n4, r5 = AI(J5, 0, D5, 0), k5 = n4 + t5 | 0, k5 = (a5 = r5 + a5 | 0) >>> 0 < r5 >>> 0 ? k5 + 1 | 0 : k5, t5 = (r5 = AI(Y5, 0, B5, 0)) + a5 | 0, a5 = n4 + k5 | 0, a5 = r5 >>> 0 > t5 >>> 0 ? a5 + 1 | 0 : a5, r5 = AI(e4, 0, Q5, 0), a5 = n4 + a5 | 0, a5 = r5 >>> 0 > (t5 = r5 + t5 | 0) >>> 0 ? a5 + 1 | 0 : a5, r5 = AI(N5, 0, E5, 0), a5 = n4 + a5 | 0, s5 = t5 = r5 + t5 | 0, t5 = r5 >>> 0 > t5 >>> 0 ? a5 + 1 | 0 : a5, a5 = AI(M5, 0, B5, 0), U5 = n4, r5 = (k5 = AI(J5, 0, i2, 0)) + a5 | 0, a5 = n4 + U5 | 0, a5 = k5 >>> 0 > r5 >>> 0 ? a5 + 1 | 0 : a5, U5 = AI(Y5, 0, Q5, 0), k5 = n4 + a5 | 0, k5 = (r5 = U5 + r5 | 0) >>> 0 < U5 >>> 0 ? k5 + 1 | 0 : k5, U5 = AI(e4, 0, E5, 0), a5 = n4 + k5 | 0, a5 = (r5 = U5 + r5 | 0) >>> 0 < U5 >>> 0 ? a5 + 1 | 0 : a5, U5 = AI(N5, 0, h5, 0), a5 = n4 + a5 | 0, p5 = r5 = U5 + r5 | 0, r5 = r5 >>> 0 < U5 >>> 0 ? a5 + 1 | 0 : a5, a5 = AI(M5, 0, Q5, 0), k5 = n4, U5 = (G5 = AI(J5, 0, B5, 0)) + a5 | 0, a5 = n4 + k5 | 0, a5 = U5 >>> 0 < G5 >>> 0 ? a5 + 1 | 0 : a5, k5 = AI(Y5, 0, E5, 0), a5 = n4 + a5 | 0, a5 = k5 >>> 0 > (U5 = k5 + U5 | 0) >>> 0 ? a5 + 1 | 0 : a5, G5 = AI(e4, 0, h5, 0), k5 = n4 + a5 | 0, k5 = (U5 = G5 + U5 | 0) >>> 0 < G5 >>> 0 ? k5 + 1 | 0 : k5, G5 = AI(N5, 0, w5, 0), a5 = n4 + k5 | 0, a5 = (U5 = G5 + U5 | 0) >>> 0 < G5 >>> 0 ? a5 + 1 | 0 : a5, G5 = U5, U5 = a5, a5 = AI(M5, 0, E5, 0), k5 = n4, M5 = (J5 = AI(J5, 0, Q5, 0)) + a5 | 0, a5 = n4 + k5 | 0, a5 = M5 >>> 0 < J5 >>> 0 ? a5 + 1 | 0 : a5, J5 = AI(Y5, 0, h5, 0), a5 = n4 + a5 | 0, a5 = (M5 = J5 + M5 | 0) >>> 0 < J5 >>> 0 ? a5 + 1 | 0 : a5, J5 = AI(e4, 0, w5, 0), a5 = n4 + a5 | 0, a5 = (M5 = J5 + M5 | 0) >>> 0 < J5 >>> 0 ? a5 + 1 | 0 : a5, J5 = AI(N5, 0, S4, 0), k5 = n4 + a5 | 0, k5 = (M5 = J5 + M5 | 0) >>> 0 < J5 >>> 0 ? k5 + 1 | 0 : k5, J5 = M5, a5 = U5, a5 = (M5 = (Y5 = (67108863 & k5) << 6 | M5 >>> 26) + G5 | 0) >>> 0 < Y5 >>> 0 ? a5 + 1 | 0 : a5, Y5 = M5, e4 = (67108863 & a5) << 6 | M5 >>> 26, a5 = r5, a5 = (M5 = e4 + p5 | 0) >>> 0 < e4 >>> 0 ? a5 + 1 | 0 : a5, e4 = M5, k5 = t5, N5 = a5 = (M5 = (67108863 & a5) << 6 | M5 >>> 26) + s5 | 0, t5 = (67108863 & (k5 = a5 >>> 0 < M5 >>> 0 ? k5 + 1 | 0 : k5)) << 6 | a5 >>> 26, a5 = K5, J5 = (67108863 & Y5) + ((a5 = F4((67108863 & ((M5 = t5 + H5 | 0) >>> 0 < t5 >>> 0 ? a5 + 1 : a5)) << 6 | M5 >>> 26, 5) + (67108863 & J5) | 0) >>> 26 | 0) | 0, Y5 = 67108863 & e4, e4 = 67108863 & N5, N5 = 67108863 & M5, K5 = 67108863 & a5, I6 = I6 + 16 | 0, !(C6 = C6 - (g6 >>> 0 < 16) | 0) & (g6 = g6 - 16 | 0) >>> 0 > 15 | C6; ) ;
              o4[A7 + 36 >> 2] = N5, o4[A7 + 32 >> 2] = e4, o4[A7 + 28 >> 2] = Y5, o4[A7 + 24 >> 2] = J5, o4[A7 + 20 >> 2] = K5;
            }
            function Z2(A7, I6, g6) {
              var C6, B5, Q5, i2, E5, D5, c5, h5, w5, F5, y5, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, r5 = 0, n5 = 0, t5 = 0, U5 = 0, J5 = 0, K5 = 0, e4 = 0, Y5 = 0, N5 = 0, G5 = 0, s5 = 0, p5 = 0, L5 = 0, d5 = 0;
              f5 = o4[I6 + 40 >> 2], S4 = o4[I6 + 4 >> 2], k5 = o4[I6 + 44 >> 2], M5 = o4[I6 + 8 >> 2], r5 = o4[I6 + 48 >> 2], n5 = o4[I6 + 12 >> 2], t5 = o4[I6 + 52 >> 2], U5 = o4[I6 + 16 >> 2], J5 = o4[I6 + 56 >> 2], K5 = o4[I6 + 20 >> 2], e4 = o4[I6 + 60 >> 2], Y5 = o4[I6 + 24 >> 2], N5 = o4[(a5 = I6 - -64 | 0) >> 2], G5 = o4[I6 + 28 >> 2], s5 = o4[I6 + 68 >> 2], p5 = o4[I6 + 32 >> 2], L5 = o4[I6 + 72 >> 2], d5 = o4[I6 >> 2], o4[A7 + 36 >> 2] = o4[I6 + 36 >> 2] + o4[I6 + 76 >> 2], o4[A7 + 32 >> 2] = p5 + L5, o4[A7 + 28 >> 2] = G5 + s5, o4[A7 + 24 >> 2] = Y5 + N5, o4[A7 + 20 >> 2] = K5 + e4, o4[A7 + 16 >> 2] = U5 + J5, o4[A7 + 12 >> 2] = n5 + t5, o4[A7 + 8 >> 2] = M5 + r5, o4[A7 + 4 >> 2] = S4 + k5, o4[A7 >> 2] = f5 + d5, k5 = o4[I6 + 40 >> 2], f5 = o4[I6 + 4 >> 2], M5 = o4[I6 + 44 >> 2], r5 = o4[I6 + 8 >> 2], n5 = o4[I6 + 48 >> 2], t5 = o4[I6 + 12 >> 2], U5 = o4[I6 + 52 >> 2], J5 = o4[I6 + 16 >> 2], K5 = o4[I6 + 56 >> 2], e4 = o4[I6 + 20 >> 2], Y5 = o4[I6 + 60 >> 2], N5 = o4[I6 + 24 >> 2], a5 = o4[a5 >> 2], S4 = o4[I6 + 28 >> 2], G5 = o4[I6 + 68 >> 2], s5 = o4[I6 + 32 >> 2], p5 = o4[I6 + 72 >> 2], L5 = o4[I6 >> 2], o4[A7 + 76 >> 2] = o4[I6 + 76 >> 2] - o4[I6 + 36 >> 2], o4[A7 + 72 >> 2] = p5 - s5, o4[A7 + 68 >> 2] = G5 - S4, o4[(S4 = A7 - -64 | 0) >> 2] = a5 - N5, o4[A7 + 60 >> 2] = Y5 - e4, o4[A7 + 56 >> 2] = K5 - J5, o4[A7 + 52 >> 2] = U5 - t5, o4[A7 + 48 >> 2] = n5 - r5, o4[A7 + 44 >> 2] = M5 - f5, o4[(f5 = A7 + 40 | 0) >> 2] = k5 - L5, H4(A7 + 80 | 0, A7, g6), H4(f5, f5, g6 + 40 | 0), H4(A7 + 120 | 0, g6 + 120 | 0, I6 + 120 | 0), H4(A7, I6 + 80 | 0, g6 + 80 | 0), d5 = o4[A7 + 4 >> 2], Q5 = o4[A7 + 8 >> 2], i2 = o4[A7 + 12 >> 2], E5 = o4[A7 + 16 >> 2], D5 = o4[A7 + 20 >> 2], c5 = o4[A7 + 24 >> 2], h5 = o4[A7 + 28 >> 2], w5 = o4[A7 + 32 >> 2], F5 = o4[A7 + 36 >> 2], I6 = o4[f5 >> 2], g6 = o4[A7 + 80 >> 2], k5 = o4[A7 + 44 >> 2], M5 = o4[A7 + 84 >> 2], r5 = o4[A7 + 48 >> 2], n5 = o4[A7 + 88 >> 2], t5 = o4[A7 + 52 >> 2], U5 = o4[A7 + 92 >> 2], J5 = o4[A7 + 56 >> 2], K5 = o4[A7 + 96 >> 2], e4 = o4[A7 + 60 >> 2], Y5 = o4[A7 + 100 >> 2], a5 = o4[S4 >> 2], N5 = o4[A7 + 104 >> 2], G5 = o4[A7 + 68 >> 2], s5 = o4[A7 + 108 >> 2], p5 = o4[A7 + 72 >> 2], L5 = o4[A7 + 112 >> 2], y5 = o4[A7 >> 2], C6 = o4[A7 + 76 >> 2], B5 = o4[A7 + 116 >> 2], o4[A7 + 76 >> 2] = C6 + B5, o4[A7 + 72 >> 2] = p5 + L5, o4[A7 + 68 >> 2] = G5 + s5, o4[S4 >> 2] = a5 + N5, o4[A7 + 60 >> 2] = e4 + Y5, o4[A7 + 56 >> 2] = J5 + K5, o4[A7 + 52 >> 2] = t5 + U5, o4[A7 + 48 >> 2] = r5 + n5, o4[A7 + 44 >> 2] = k5 + M5, o4[f5 >> 2] = I6 + g6, o4[A7 + 36 >> 2] = B5 - C6, o4[A7 + 32 >> 2] = L5 - p5, o4[A7 + 28 >> 2] = s5 - G5, o4[A7 + 24 >> 2] = N5 - a5, o4[A7 + 20 >> 2] = Y5 - e4, o4[A7 + 16 >> 2] = K5 - J5, o4[A7 + 12 >> 2] = U5 - t5, o4[A7 + 8 >> 2] = n5 - r5, o4[A7 + 4 >> 2] = M5 - k5, o4[A7 >> 2] = g6 - I6, I6 = F5 << 1, g6 = o4[A7 + 156 >> 2], o4[A7 + 156 >> 2] = I6 - g6, f5 = w5 << 1, S4 = o4[A7 + 152 >> 2], o4[A7 + 152 >> 2] = f5 - S4, k5 = h5 << 1, M5 = o4[A7 + 148 >> 2], o4[A7 + 148 >> 2] = k5 - M5, r5 = c5 << 1, n5 = o4[A7 + 144 >> 2], o4[A7 + 144 >> 2] = r5 - n5, t5 = D5 << 1, U5 = o4[A7 + 140 >> 2], o4[A7 + 140 >> 2] = t5 - U5, J5 = E5 << 1, K5 = o4[A7 + 136 >> 2], o4[A7 + 136 >> 2] = J5 - K5, e4 = i2 << 1, Y5 = o4[A7 + 132 >> 2], o4[A7 + 132 >> 2] = e4 - Y5, a5 = Q5 << 1, N5 = o4[A7 + 128 >> 2], o4[A7 + 128 >> 2] = a5 - N5, G5 = d5 << 1, s5 = o4[A7 + 124 >> 2], o4[A7 + 124 >> 2] = G5 - s5, p5 = y5 << 1, L5 = o4[A7 + 120 >> 2], o4[A7 + 120 >> 2] = p5 - L5, o4[A7 + 112 >> 2] = f5 + S4, o4[A7 + 108 >> 2] = k5 + M5, o4[A7 + 104 >> 2] = r5 + n5, o4[A7 + 100 >> 2] = t5 + U5, o4[A7 + 96 >> 2] = J5 + K5, o4[A7 + 92 >> 2] = e4 + Y5, o4[A7 + 88 >> 2] = a5 + N5, o4[A7 + 84 >> 2] = G5 + s5, o4[A7 + 80 >> 2] = p5 + L5, o4[A7 + 116 >> 2] = I6 + g6;
            }
            function $2(A7, I6, g6) {
              var C6, B5, Q5, i2, E5, D5, c5, h5, w5, F5, y5, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, r5 = 0, n5 = 0, t5 = 0, U5 = 0, J5 = 0, K5 = 0, e4 = 0, Y5 = 0, N5 = 0, G5 = 0, s5 = 0, p5 = 0, L5 = 0, d5 = 0;
              f5 = o4[I6 + 40 >> 2], S4 = o4[I6 + 4 >> 2], k5 = o4[I6 + 44 >> 2], M5 = o4[I6 + 8 >> 2], r5 = o4[I6 + 48 >> 2], n5 = o4[I6 + 12 >> 2], t5 = o4[I6 + 52 >> 2], U5 = o4[I6 + 16 >> 2], J5 = o4[I6 + 56 >> 2], K5 = o4[I6 + 20 >> 2], e4 = o4[I6 + 60 >> 2], Y5 = o4[I6 + 24 >> 2], N5 = o4[(a5 = I6 - -64 | 0) >> 2], G5 = o4[I6 + 28 >> 2], s5 = o4[I6 + 68 >> 2], p5 = o4[I6 + 32 >> 2], L5 = o4[I6 + 72 >> 2], d5 = o4[I6 >> 2], o4[A7 + 36 >> 2] = o4[I6 + 36 >> 2] + o4[I6 + 76 >> 2], o4[A7 + 32 >> 2] = p5 + L5, o4[A7 + 28 >> 2] = G5 + s5, o4[A7 + 24 >> 2] = Y5 + N5, o4[A7 + 20 >> 2] = K5 + e4, o4[A7 + 16 >> 2] = U5 + J5, o4[A7 + 12 >> 2] = n5 + t5, o4[A7 + 8 >> 2] = M5 + r5, o4[A7 + 4 >> 2] = S4 + k5, o4[A7 >> 2] = f5 + d5, k5 = o4[I6 + 40 >> 2], f5 = o4[I6 + 4 >> 2], M5 = o4[I6 + 44 >> 2], r5 = o4[I6 + 8 >> 2], n5 = o4[I6 + 48 >> 2], t5 = o4[I6 + 12 >> 2], U5 = o4[I6 + 52 >> 2], J5 = o4[I6 + 16 >> 2], K5 = o4[I6 + 56 >> 2], e4 = o4[I6 + 20 >> 2], Y5 = o4[I6 + 60 >> 2], N5 = o4[I6 + 24 >> 2], a5 = o4[a5 >> 2], S4 = o4[I6 + 28 >> 2], G5 = o4[I6 + 68 >> 2], s5 = o4[I6 + 32 >> 2], p5 = o4[I6 + 72 >> 2], L5 = o4[I6 >> 2], o4[A7 + 76 >> 2] = o4[I6 + 76 >> 2] - o4[I6 + 36 >> 2], o4[A7 + 72 >> 2] = p5 - s5, o4[A7 + 68 >> 2] = G5 - S4, o4[(S4 = A7 - -64 | 0) >> 2] = a5 - N5, o4[A7 + 60 >> 2] = Y5 - e4, o4[A7 + 56 >> 2] = K5 - J5, o4[A7 + 52 >> 2] = U5 - t5, o4[A7 + 48 >> 2] = n5 - r5, o4[A7 + 44 >> 2] = M5 - f5, o4[(f5 = A7 + 40 | 0) >> 2] = k5 - L5, H4(A7 + 80 | 0, A7, g6 + 40 | 0), H4(f5, f5, g6), H4(A7 + 120 | 0, g6 + 120 | 0, I6 + 120 | 0), H4(A7, I6 + 80 | 0, g6 + 80 | 0), d5 = o4[A7 + 4 >> 2], Q5 = o4[A7 + 8 >> 2], i2 = o4[A7 + 12 >> 2], E5 = o4[A7 + 16 >> 2], D5 = o4[A7 + 20 >> 2], c5 = o4[A7 + 24 >> 2], h5 = o4[A7 + 28 >> 2], w5 = o4[A7 + 32 >> 2], F5 = o4[A7 + 36 >> 2], I6 = o4[f5 >> 2], g6 = o4[A7 + 80 >> 2], k5 = o4[A7 + 44 >> 2], M5 = o4[A7 + 84 >> 2], r5 = o4[A7 + 48 >> 2], n5 = o4[A7 + 88 >> 2], t5 = o4[A7 + 52 >> 2], U5 = o4[A7 + 92 >> 2], J5 = o4[A7 + 56 >> 2], K5 = o4[A7 + 96 >> 2], e4 = o4[A7 + 60 >> 2], Y5 = o4[A7 + 100 >> 2], a5 = o4[S4 >> 2], N5 = o4[A7 + 104 >> 2], G5 = o4[A7 + 68 >> 2], s5 = o4[A7 + 108 >> 2], p5 = o4[A7 + 72 >> 2], L5 = o4[A7 + 112 >> 2], y5 = o4[A7 >> 2], C6 = o4[A7 + 76 >> 2], B5 = o4[A7 + 116 >> 2], o4[A7 + 76 >> 2] = C6 + B5, o4[A7 + 72 >> 2] = p5 + L5, o4[A7 + 68 >> 2] = G5 + s5, o4[S4 >> 2] = a5 + N5, o4[A7 + 60 >> 2] = e4 + Y5, o4[A7 + 56 >> 2] = J5 + K5, o4[A7 + 52 >> 2] = t5 + U5, o4[A7 + 48 >> 2] = r5 + n5, o4[A7 + 44 >> 2] = k5 + M5, o4[f5 >> 2] = I6 + g6, o4[A7 + 36 >> 2] = B5 - C6, o4[A7 + 32 >> 2] = L5 - p5, o4[A7 + 28 >> 2] = s5 - G5, o4[A7 + 24 >> 2] = N5 - a5, o4[A7 + 20 >> 2] = Y5 - e4, o4[A7 + 16 >> 2] = K5 - J5, o4[A7 + 12 >> 2] = U5 - t5, o4[A7 + 8 >> 2] = n5 - r5, o4[A7 + 4 >> 2] = M5 - k5, o4[A7 >> 2] = g6 - I6, I6 = o4[A7 + 156 >> 2], g6 = F5 << 1, o4[A7 + 156 >> 2] = I6 + g6, f5 = o4[A7 + 152 >> 2], S4 = w5 << 1, o4[A7 + 152 >> 2] = f5 + S4, k5 = o4[A7 + 148 >> 2], M5 = h5 << 1, o4[A7 + 148 >> 2] = k5 + M5, r5 = o4[A7 + 144 >> 2], n5 = c5 << 1, o4[A7 + 144 >> 2] = r5 + n5, t5 = o4[A7 + 140 >> 2], U5 = D5 << 1, o4[A7 + 140 >> 2] = t5 + U5, J5 = o4[A7 + 136 >> 2], K5 = E5 << 1, o4[A7 + 136 >> 2] = J5 + K5, e4 = o4[A7 + 132 >> 2], Y5 = i2 << 1, o4[A7 + 132 >> 2] = e4 + Y5, a5 = o4[A7 + 128 >> 2], N5 = Q5 << 1, o4[A7 + 128 >> 2] = a5 + N5, G5 = o4[A7 + 124 >> 2], s5 = d5 << 1, o4[A7 + 124 >> 2] = G5 + s5, p5 = o4[A7 + 120 >> 2], L5 = y5 << 1, o4[A7 + 120 >> 2] = p5 + L5, o4[A7 + 112 >> 2] = S4 - f5, o4[A7 + 108 >> 2] = M5 - k5, o4[A7 + 104 >> 2] = n5 - r5, o4[A7 + 100 >> 2] = U5 - t5, o4[A7 + 96 >> 2] = K5 - J5, o4[A7 + 92 >> 2] = Y5 - e4, o4[A7 + 88 >> 2] = N5 - a5, o4[A7 + 84 >> 2] = s5 - G5, o4[A7 + 80 >> 2] = L5 - p5, o4[A7 + 116 >> 2] = g6 - I6;
            }
            function AA(A7, I6, g6) {
              var C6, B5, Q5, i2, E5, D5, c5, h5, w5, F5, y5, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, r5 = 0, n5 = 0, t5 = 0, U5 = 0, J5 = 0, K5 = 0, e4 = 0, Y5 = 0, N5 = 0, G5 = 0, s5 = 0, p5 = 0, L5 = 0, d5 = 0;
              f5 = o4[I6 + 40 >> 2], S4 = o4[I6 + 4 >> 2], k5 = o4[I6 + 44 >> 2], M5 = o4[I6 + 8 >> 2], r5 = o4[I6 + 48 >> 2], n5 = o4[I6 + 12 >> 2], t5 = o4[I6 + 52 >> 2], U5 = o4[I6 + 16 >> 2], J5 = o4[I6 + 56 >> 2], K5 = o4[I6 + 20 >> 2], e4 = o4[I6 + 60 >> 2], Y5 = o4[I6 + 24 >> 2], N5 = o4[(a5 = I6 - -64 | 0) >> 2], G5 = o4[I6 + 28 >> 2], s5 = o4[I6 + 68 >> 2], p5 = o4[I6 + 32 >> 2], L5 = o4[I6 + 72 >> 2], d5 = o4[I6 >> 2], o4[A7 + 36 >> 2] = o4[I6 + 36 >> 2] + o4[I6 + 76 >> 2], o4[A7 + 32 >> 2] = p5 + L5, o4[A7 + 28 >> 2] = G5 + s5, o4[A7 + 24 >> 2] = Y5 + N5, o4[A7 + 20 >> 2] = K5 + e4, o4[A7 + 16 >> 2] = U5 + J5, o4[A7 + 12 >> 2] = n5 + t5, o4[A7 + 8 >> 2] = M5 + r5, o4[A7 + 4 >> 2] = S4 + k5, o4[A7 >> 2] = f5 + d5, k5 = o4[I6 + 40 >> 2], f5 = o4[I6 + 4 >> 2], M5 = o4[I6 + 44 >> 2], r5 = o4[I6 + 8 >> 2], n5 = o4[I6 + 48 >> 2], t5 = o4[I6 + 12 >> 2], U5 = o4[I6 + 52 >> 2], J5 = o4[I6 + 16 >> 2], K5 = o4[I6 + 56 >> 2], e4 = o4[I6 + 20 >> 2], Y5 = o4[I6 + 60 >> 2], N5 = o4[I6 + 24 >> 2], a5 = o4[a5 >> 2], S4 = o4[I6 + 28 >> 2], G5 = o4[I6 + 68 >> 2], s5 = o4[I6 + 32 >> 2], p5 = o4[I6 + 72 >> 2], L5 = o4[I6 >> 2], o4[A7 + 76 >> 2] = o4[I6 + 76 >> 2] - o4[I6 + 36 >> 2], o4[A7 + 72 >> 2] = p5 - s5, o4[A7 + 68 >> 2] = G5 - S4, o4[(S4 = A7 - -64 | 0) >> 2] = a5 - N5, o4[A7 + 60 >> 2] = Y5 - e4, o4[A7 + 56 >> 2] = K5 - J5, o4[A7 + 52 >> 2] = U5 - t5, o4[A7 + 48 >> 2] = n5 - r5, o4[A7 + 44 >> 2] = M5 - f5, o4[(f5 = A7 + 40 | 0) >> 2] = k5 - L5, H4(A7 + 80 | 0, A7, g6), H4(f5, f5, g6 + 40 | 0), H4(A7 + 120 | 0, g6 + 80 | 0, I6 + 120 | 0), d5 = o4[I6 + 80 >> 2], Q5 = o4[I6 + 84 >> 2], i2 = o4[I6 + 88 >> 2], E5 = o4[I6 + 92 >> 2], D5 = o4[I6 + 96 >> 2], c5 = o4[I6 + 100 >> 2], h5 = o4[I6 + 104 >> 2], w5 = o4[I6 + 108 >> 2], F5 = o4[I6 + 112 >> 2], y5 = o4[I6 + 116 >> 2], I6 = o4[f5 >> 2], g6 = o4[A7 + 80 >> 2], k5 = o4[A7 + 44 >> 2], M5 = o4[A7 + 84 >> 2], r5 = o4[A7 + 48 >> 2], n5 = o4[A7 + 88 >> 2], t5 = o4[A7 + 52 >> 2], U5 = o4[A7 + 92 >> 2], J5 = o4[A7 + 56 >> 2], K5 = o4[A7 + 96 >> 2], e4 = o4[A7 + 60 >> 2], Y5 = o4[A7 + 100 >> 2], a5 = o4[S4 >> 2], N5 = o4[A7 + 104 >> 2], G5 = o4[A7 + 68 >> 2], s5 = o4[A7 + 108 >> 2], p5 = o4[A7 + 72 >> 2], L5 = o4[A7 + 112 >> 2], C6 = o4[A7 + 76 >> 2], B5 = o4[A7 + 116 >> 2], o4[A7 + 76 >> 2] = C6 + B5, o4[A7 + 72 >> 2] = p5 + L5, o4[A7 + 68 >> 2] = G5 + s5, o4[S4 >> 2] = a5 + N5, o4[A7 + 60 >> 2] = e4 + Y5, o4[A7 + 56 >> 2] = J5 + K5, o4[A7 + 52 >> 2] = t5 + U5, o4[A7 + 48 >> 2] = r5 + n5, o4[A7 + 44 >> 2] = k5 + M5, o4[f5 >> 2] = I6 + g6, o4[A7 + 36 >> 2] = B5 - C6, o4[A7 + 32 >> 2] = L5 - p5, o4[A7 + 28 >> 2] = s5 - G5, o4[A7 + 24 >> 2] = N5 - a5, o4[A7 + 20 >> 2] = Y5 - e4, o4[A7 + 16 >> 2] = K5 - J5, o4[A7 + 12 >> 2] = U5 - t5, o4[A7 + 8 >> 2] = n5 - r5, o4[A7 + 4 >> 2] = M5 - k5, o4[A7 >> 2] = g6 - I6, I6 = y5 << 1, g6 = o4[A7 + 156 >> 2], o4[A7 + 156 >> 2] = I6 - g6, f5 = F5 << 1, S4 = o4[A7 + 152 >> 2], o4[A7 + 152 >> 2] = f5 - S4, k5 = w5 << 1, M5 = o4[A7 + 148 >> 2], o4[A7 + 148 >> 2] = k5 - M5, r5 = h5 << 1, n5 = o4[A7 + 144 >> 2], o4[A7 + 144 >> 2] = r5 - n5, t5 = c5 << 1, U5 = o4[A7 + 140 >> 2], o4[A7 + 140 >> 2] = t5 - U5, J5 = D5 << 1, K5 = o4[A7 + 136 >> 2], o4[A7 + 136 >> 2] = J5 - K5, e4 = E5 << 1, Y5 = o4[A7 + 132 >> 2], o4[A7 + 132 >> 2] = e4 - Y5, a5 = i2 << 1, N5 = o4[A7 + 128 >> 2], o4[A7 + 128 >> 2] = a5 - N5, G5 = Q5 << 1, s5 = o4[A7 + 124 >> 2], o4[A7 + 124 >> 2] = G5 - s5, p5 = d5 << 1, L5 = o4[A7 + 120 >> 2], o4[A7 + 120 >> 2] = p5 - L5, o4[A7 + 112 >> 2] = f5 + S4, o4[A7 + 108 >> 2] = k5 + M5, o4[A7 + 104 >> 2] = r5 + n5, o4[A7 + 100 >> 2] = t5 + U5, o4[A7 + 96 >> 2] = J5 + K5, o4[A7 + 92 >> 2] = e4 + Y5, o4[A7 + 88 >> 2] = a5 + N5, o4[A7 + 84 >> 2] = G5 + s5, o4[A7 + 80 >> 2] = p5 + L5, o4[A7 + 116 >> 2] = I6 + g6;
            }
            function IA(A7, I6, g6, B5) {
              var D5, o5 = 0;
              return o5 = -1, (D5 = B5 - 65 | 0) >>> 0 < 4294967232 | g6 >>> 0 > 64 || (g6 && I6 ? (r4 = o5 = r4 - 128 | 0, !I6 | (B5 - 65 & 255) >>> 0 <= 191 | (g6 - 65 & 255) >>> 0 <= 191 ? (KI(), i()) : (Q4(A7 - -64 | 0, 0, 293), C5[A7 + 56 | 0] = 121, C5[A7 + 57 | 0] = 33, C5[A7 + 58 | 0] = 126, C5[A7 + 59 | 0] = 19, C5[A7 + 60 | 0] = 25, C5[A7 + 61 | 0] = 205, C5[A7 + 62 | 0] = 224, C5[A7 + 63 | 0] = 91, C5[A7 + 48 | 0] = 107, C5[A7 + 49 | 0] = 189, C5[A7 + 50 | 0] = 65, C5[A7 + 51 | 0] = 251, C5[A7 + 52 | 0] = 171, C5[A7 + 53 | 0] = 217, C5[A7 + 54 | 0] = 131, C5[A7 + 55 | 0] = 31, C5[A7 + 40 | 0] = 31, C5[A7 + 41 | 0] = 108, C5[A7 + 42 | 0] = 62, C5[A7 + 43 | 0] = 43, C5[A7 + 44 | 0] = 140, C5[A7 + 45 | 0] = 104, C5[A7 + 46 | 0] = 5, C5[A7 + 47 | 0] = 155, C5[A7 + 32 | 0] = 209, C5[A7 + 33 | 0] = 130, C5[A7 + 34 | 0] = 230, C5[A7 + 35 | 0] = 173, C5[A7 + 36 | 0] = 127, C5[A7 + 37 | 0] = 82, C5[A7 + 38 | 0] = 14, C5[A7 + 39 | 0] = 81, C5[A7 + 24 | 0] = 241, C5[A7 + 25 | 0] = 54, C5[A7 + 26 | 0] = 29, C5[A7 + 27 | 0] = 95, C5[A7 + 28 | 0] = 58, C5[A7 + 29 | 0] = 245, C5[A7 + 30 | 0] = 79, C5[A7 + 31 | 0] = 165, C5[A7 + 16 | 0] = 43, C5[A7 + 17 | 0] = 248, C5[A7 + 18 | 0] = 148, C5[A7 + 19 | 0] = 254, C5[A7 + 20 | 0] = 114, C5[A7 + 21 | 0] = 243, C5[A7 + 22 | 0] = 110, C5[A7 + 23 | 0] = 60, C5[A7 + 8 | 0] = 59, C5[A7 + 9 | 0] = 167, C5[A7 + 10 | 0] = 202, C5[A7 + 11 | 0] = 132, C5[A7 + 12 | 0] = 133, C5[A7 + 13 | 0] = 174, C5[A7 + 14 | 0] = 103, C5[A7 + 15 | 0] = 187, B5 = -222443256 ^ (g6 << 8 | B5), C5[0 | A7] = B5, C5[A7 + 1 | 0] = B5 >>> 8, C5[A7 + 2 | 0] = B5 >>> 16, C5[A7 + 3 | 0] = B5 >>> 24, B5 = g6 >>> 24 ^ 1779033703, C5[A7 + 4 | 0] = B5, C5[A7 + 5 | 0] = B5 >>> 8, C5[A7 + 6 | 0] = B5 >>> 16, C5[A7 + 7 | 0] = B5 >>> 24, Q4(o5, 0, 128), g6 && E4(o5, I6, g6), E4(A7 + 96 | 0, o5, 128), C5[A7 + 352 | 0] = 128, C5[A7 + 353 | 0] = 0, C5[A7 + 354 | 0] = 0, C5[A7 + 355 | 0] = 0, xI(o5, 128), r4 = o5 + 128 | 0)) : ((255 & D5) >>> 0 <= 191 && (KI(), i()), Q4(A7 - -64 | 0, 0, 293), C5[A7 + 56 | 0] = 121, C5[A7 + 57 | 0] = 33, C5[A7 + 58 | 0] = 126, C5[A7 + 59 | 0] = 19, C5[A7 + 60 | 0] = 25, C5[A7 + 61 | 0] = 205, C5[A7 + 62 | 0] = 224, C5[A7 + 63 | 0] = 91, C5[A7 + 48 | 0] = 107, C5[A7 + 49 | 0] = 189, C5[A7 + 50 | 0] = 65, C5[A7 + 51 | 0] = 251, C5[A7 + 52 | 0] = 171, C5[A7 + 53 | 0] = 217, C5[A7 + 54 | 0] = 131, C5[A7 + 55 | 0] = 31, C5[A7 + 40 | 0] = 31, C5[A7 + 41 | 0] = 108, C5[A7 + 42 | 0] = 62, C5[A7 + 43 | 0] = 43, C5[A7 + 44 | 0] = 140, C5[A7 + 45 | 0] = 104, C5[A7 + 46 | 0] = 5, C5[A7 + 47 | 0] = 155, C5[A7 + 32 | 0] = 209, C5[A7 + 33 | 0] = 130, C5[A7 + 34 | 0] = 230, C5[A7 + 35 | 0] = 173, C5[A7 + 36 | 0] = 127, C5[A7 + 37 | 0] = 82, C5[A7 + 38 | 0] = 14, C5[A7 + 39 | 0] = 81, C5[A7 + 24 | 0] = 241, C5[A7 + 25 | 0] = 54, C5[A7 + 26 | 0] = 29, C5[A7 + 27 | 0] = 95, C5[A7 + 28 | 0] = 58, C5[A7 + 29 | 0] = 245, C5[A7 + 30 | 0] = 79, C5[A7 + 31 | 0] = 165, C5[A7 + 16 | 0] = 43, C5[A7 + 17 | 0] = 248, C5[A7 + 18 | 0] = 148, C5[A7 + 19 | 0] = 254, C5[A7 + 20 | 0] = 114, C5[A7 + 21 | 0] = 243, C5[A7 + 22 | 0] = 110, C5[A7 + 23 | 0] = 60, C5[A7 + 8 | 0] = 59, C5[A7 + 9 | 0] = 167, C5[A7 + 10 | 0] = 202, C5[A7 + 11 | 0] = 132, C5[A7 + 12 | 0] = 133, C5[A7 + 13 | 0] = 174, C5[A7 + 14 | 0] = 103, C5[A7 + 15 | 0] = 187, I6 = -222443256 ^ B5, C5[0 | A7] = I6, C5[A7 + 1 | 0] = I6 >>> 8, C5[A7 + 2 | 0] = I6 >>> 16, C5[A7 + 3 | 0] = I6 >>> 24, C5[A7 + 4 | 0] = 103, C5[A7 + 5 | 0] = 230, C5[A7 + 6 | 0] = 9, C5[A7 + 7 | 0] = 106), o5 = 0), o5;
            }
            function gA(A7, I6) {
              var g6, C6, B5, Q5, i2, E5, D5, h5, w5, F5, y5, f5, S4, a5, k5 = 0, M5 = 0, r5 = 0, t5 = 0, U5 = 0, J5 = 0, K5 = 0, e4 = 0, Y5 = 0, N5 = 0, G5 = 0, H5 = 0, s5 = 0;
              B5 = c4[I6 + 31 | 0], Q5 = c4[I6 + 30 | 0], i2 = c4[I6 + 29 | 0], E5 = c4[I6 + 6 | 0], D5 = c4[I6 + 5 | 0], h5 = c4[I6 + 4 | 0], w5 = c4[I6 + 9 | 0], F5 = c4[I6 + 8 | 0], y5 = c4[I6 + 7 | 0], f5 = c4[I6 + 12 | 0], N5 = c4[I6 + 11 | 0], G5 = c4[I6 + 10 | 0], g6 = c4[I6 + 15 | 0], H5 = c4[I6 + 14 | 0], S4 = c4[I6 + 13 | 0], K5 = c4[I6 + 28 | 0], Y5 = c4[I6 + 27 | 0], e4 = c4[I6 + 26 | 0], J5 = c4[I6 + 25 | 0], t5 = c4[I6 + 24 | 0], r5 = c4[I6 + 23 | 0], a5 = c4[0 | I6] | c4[I6 + 1 | 0] << 8 | c4[I6 + 2 | 0] << 16 | c4[I6 + 3 | 0] << 24, U5 = (M5 = c4[I6 + 21 | 0]) << 15, M5 = k5, s5 = (k5 = U5) | (U5 = c4[I6 + 20 | 0]) << 7, U5 = M5 | M5, k5 = (k5 = c4[I6 + 22 | 0]) << 23 | s5, M5 |= U5, C6 = c4[I6 + 16 | 0] | c4[I6 + 17 | 0] << 8 | c4[I6 + 18 | 0] << 16 | c4[I6 + 19 | 0] << 24, I6 = 0, U5 = k5, k5 = (33554431 & (I6 = (s5 = C6 + 16777216 | 0) >>> 0 < 16777216 ? 1 : I6)) << 7 | s5 >>> 25, I6 = (I6 >>> 25 | 0) + M5 | 0, k5 = (M5 = U5 = U5 + k5 | 0) >>> 0 < k5 >>> 0 ? I6 + 1 | 0 : I6, I6 = (U5 = M5 + 33554432 | 0) >>> 0 < 33554432 ? k5 + 1 | 0 : k5, o4[A7 + 24 >> 2] = M5 - (-67108864 & U5), k5 = (M5 = r5 >>> 27 | 0) | t5 >>> 19 | J5 >>> 11, M5 = r5 = (t5 = J5 << 21 | (r5 = t5 << 13 | r5 << 5)) + (M5 = (67108863 & (M5 = I6)) << 6 | U5 >>> 26) | 0, I6 = k5, k5 = (r5 = t5 + 16777216 | 0) >>> 0 < 16777216 ? I6 + 1 | 0 : I6, o4[A7 + 28 >> 2] = M5 - (1040187392 & r5), M5 = (k5 = (I6 = k5) >>> 25 | 0) + (M5 = Y5 >>> 20 | e4 >>> 28 | K5 >>> 12) | 0, I6 = M5 = (k5 = r5 = (I6 = (33554431 & I6) << 7 | r5 >>> 25) + (Y5 << 12 | e4 << 4 | K5 << 20) | 0) >>> 0 < I6 >>> 0 ? M5 + 1 | 0 : M5, r5 = (K5 = k5 + 33554432 | 0) >>> 0 < 33554432 ? I6 + 1 | 0 : I6, o4[A7 + 32 >> 2] = k5 - (-67108864 & K5), k5 = N5 >>> 21 | G5 >>> 29, I6 = (M5 = (Y5 = 16777216 + (N5 = N5 << 11 | G5 << 3 | f5 << 19) | 0) >>> 0 < 16777216 ? k5 + 1 | 0 : k5) >>> 25 | 0, M5 = (k5 = t5 = H5 << 10 | S4 << 2 | g6 << 18) + (t5 = (33554431 & M5) << 7 | Y5 >>> 25) | 0, k5 = I6 + (J5 = H5 >>> 22 | g6 >>> 14) | 0, I6 = k5 = M5 >>> 0 < t5 >>> 0 ? k5 + 1 | 0 : k5, t5 = ((67108863 & (I6 = (t5 = M5 + 33554432 | 0) >>> 0 < 33554432 ? I6 + 1 | 0 : I6)) << 6 | (k5 = t5) >>> 26) + (e4 = C6 - (-33554432 & s5) | 0) | 0, o4[A7 + 20 >> 2] = t5, o4[A7 + 16 >> 2] = M5 - (-67108864 & k5), k5 = 0, M5 = (k5 = (e4 = 16777216 + (G5 = D5 << 14 | h5 << 6 | E5 << 22) | 0) >>> 0 < 16777216 ? k5 + 1 | 0 : k5) >>> 25 | 0, k5 = (I6 = t5 = F5 << 13 | y5 << 5 | w5 << 21) + (t5 = (33554431 & k5) << 7 | e4 >>> 25) | 0, I6 = M5 + (J5 = 0) | 0, I6 = k5 >>> 0 < t5 >>> 0 ? I6 + 1 | 0 : I6, M5 = (J5 = k5 + 33554432 | 0) >>> 0 < 33554432 ? I6 + 1 | 0 : I6, o4[A7 + 8 >> 2] = k5 - (-67108864 & J5), K5 = (r5 = (67108863 & r5) << 6 | K5 >>> 26) + (H5 = B5 << 18 & 33292288 | Q5 << 10 | i2 << 2) | 0, I6 = k5 = 0, k5 = (r5 = H5 + 16777216 | 0) >>> 0 < 16777216 ? I6 + 1 | 0 : I6, o4[A7 + 36 >> 2] = K5 - (33554432 & r5), M5 = N5 + ((67108863 & M5) << 6 | J5 >>> 26) | 0, o4[A7 + 12 >> 2] = M5 - (234881024 & Y5), t5 = G5 - (2113929216 & e4) | 0, M5 = AI((33554431 & (I6 = k5)) << 7 | r5 >>> 25, k5 = I6 >>> 25 | 0, 19, 0), I6 = n4, M5 = (k5 = M5 + a5 | 0) >>> 0 < M5 >>> 0 ? I6 + 1 | 0 : I6, r5 = ((67108863 & (M5 = (I6 = k5 + 33554432 | 0) >>> 0 < 33554432 ? M5 + 1 | 0 : M5)) << 6 | I6 >>> 26) + t5 | 0, o4[A7 + 4 >> 2] = r5, o4[A7 >> 2] = k5 - (-67108864 & I6);
            }
            function CA(A7, I6, g6, B5) {
              var Q5, i2 = 0, E5 = 0, D5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, n5 = 0;
              r4 = Q5 = r4 - 704 | 0;
              A: if (g6 | B5) if (D5 = (B5 << 3 | g6 >>> 29) + (E5 = D5 = o4[A7 + 76 >> 2]) | 0, h5 = (y5 = o4[A7 + 72 >> 2]) + (w5 = g6 << 3) | 0, o4[A7 + 72 >> 2] = h5, D5 = h5 >>> 0 < w5 >>> 0 ? D5 + 1 | 0 : D5, o4[A7 + 76 >> 2] = D5, w5 = i2 = A7 - -64 | 0, h5 = (0 | E5) == (0 | D5) & h5 >>> 0 < y5 >>> 0 | E5 >>> 0 > D5 >>> 0, D5 = o4[i2 + 4 >> 2], i2 = (M5 = h5) >>> 0 > (h5 = h5 + o4[i2 >> 2] | 0) >>> 0 ? D5 + 1 | 0 : D5, h5 = (F5 = B5 >>> 29 | 0) + h5 | 0, o4[w5 >> 2] = h5, o4[w5 + 4 >> 2] = h5 >>> 0 < F5 >>> 0 ? i2 + 1 | 0 : i2, h5 = A7 + 80 | 0, y5 = i2 = 128 - (D5 = w5 = 127 & ((7 & E5) << 29 | y5 >>> 3)) | 0, (0 | B5) == (0 | (D5 = M5 = 0 - ((F5 = 0) + (D5 >>> 0 > 128) | 0) | 0)) & g6 >>> 0 >= i2 >>> 0 | B5 >>> 0 > D5 >>> 0) {
                n5 = 3 & i2, E5 = 0, D5 = 0;
                I: {
                  if (!F5 & (127 ^ w5) >>> 0 >= 3 | F5) {
                    for (F5 = 252 & i2; C5[(i2 = E5 + w5 | 0) + h5 | 0] = c4[I6 + E5 | 0], C5[h5 + (w5 + (i2 = 1 | E5) | 0) | 0] = c4[I6 + i2 | 0], C5[h5 + (w5 + (i2 = 2 | E5) | 0) | 0] = c4[I6 + i2 | 0], C5[h5 + (w5 + (i2 = 3 | E5) | 0) | 0] = c4[I6 + i2 | 0], D5 = (E5 = E5 + 4 | 0) >>> 0 < 4 ? D5 + 1 | 0 : D5, i2 = k5, k5 = i2 = (S4 = S4 + 4 | 0) >>> 0 < 4 ? i2 + 1 | 0 : i2, (0 | F5) != (0 | S4) | (0 | a5) != (0 | i2); ) ;
                    if (!(0 | n5)) break I;
                  }
                  for (; C5[(i2 = E5 + w5 | 0) + h5 | 0] = c4[I6 + E5 | 0], i2 = D5, D5 = (E5 = E5 + 1 | 0) ? i2 : i2 + 1 | 0, i2 = a5, a5 = i2 = (f5 = f5 + 1 | 0) ? i2 : i2 + 1 | 0, (0 | f5) != (0 | n5) | !!(0 | i2); ) ;
                }
                if (e3(A7, h5, Q5, E5 = Q5 + 640 | 0), I6 = I6 + y5 | 0, !(B5 = B5 - ((g6 >>> 0 < y5 >>> 0) + M5 | 0) | 0) & (g6 = g6 - y5 | 0) >>> 0 > 127 | B5) for (; e3(A7, I6, Q5, E5), I6 = I6 + 128 | 0, !(B5 = B5 - (g6 >>> 0 < 128) | 0) & (g6 = g6 - 128 | 0) >>> 0 > 127 | B5; ) ;
                I: if (g6 | B5) {
                  if (A7 = 3 & g6, k5 = 0, f5 = 0, a5 = 0, E5 = 0, D5 = 0, !B5 & g6 >>> 0 >= 4 | B5) {
                    for (S4 = 124 & g6, y5 = 0, g6 = 0, B5 = 0; C5[E5 + h5 | 0] = c4[I6 + E5 | 0], C5[(i2 = 1 | E5) + h5 | 0] = c4[I6 + i2 | 0], C5[(i2 = 2 | E5) + h5 | 0] = c4[I6 + i2 | 0], C5[(i2 = 3 | E5) + h5 | 0] = c4[I6 + i2 | 0], i2 = D5, D5 = (E5 = E5 + 4 | 0) >>> 0 < 4 ? i2 + 1 | 0 : i2, i2 = B5, B5 = i2 = (g6 = g6 + 4 | 0) >>> 0 < 4 ? i2 + 1 | 0 : i2, (0 | g6) != (0 | S4) | (0 | y5) != (0 | i2); ) ;
                    if (!(A7 | k5)) break I;
                  }
                  for (; C5[E5 + h5 | 0] = c4[I6 + E5 | 0], D5 = (E5 = E5 + 1 | 0) ? D5 : D5 + 1 | 0, i2 = a5, a5 = i2 = (f5 = f5 + 1 | 0) ? i2 : i2 + 1 | 0, (0 | A7) != (0 | f5) | (0 | k5) != (0 | i2); ) ;
                }
                xI(Q5, 704);
              } else {
                if (A7 = 3 & g6, y5 = 0, E5 = 0, D5 = 0, !B5 & g6 >>> 0 >= 4 | B5) {
                  for (g6 &= -4; C5[(i2 = E5 + w5 | 0) + h5 | 0] = c4[I6 + E5 | 0], C5[h5 + (F5 = w5 + (i2 = 1 | E5) | 0) | 0] = c4[I6 + i2 | 0], C5[h5 + (F5 = w5 + (i2 = 2 | E5) | 0) | 0] = c4[I6 + i2 | 0], C5[h5 + (F5 = w5 + (i2 = 3 | E5) | 0) | 0] = c4[I6 + i2 | 0], D5 = (E5 = E5 + 4 | 0) >>> 0 < 4 ? D5 + 1 | 0 : D5, i2 = k5, k5 = i2 = (S4 = S4 + 4 | 0) >>> 0 < 4 ? i2 + 1 | 0 : i2, (0 | g6) != (0 | S4) | (0 | B5) != (0 | i2); ) ;
                  if (!(A7 | y5)) break A;
                }
                for (; C5[(g6 = E5 + w5 | 0) + h5 | 0] = c4[I6 + E5 | 0], D5 = (E5 = E5 + 1 | 0) ? D5 : D5 + 1 | 0, i2 = a5, a5 = i2 = (f5 = f5 + 1 | 0) ? i2 : i2 + 1 | 0, (0 | A7) != (0 | f5) | (0 | y5) != (0 | i2); ) ;
              }
              return r4 = Q5 + 704 | 0, 0;
            }
            function BA(A7, I6, g6) {
              var B5 = 0, Q5 = 0, i2 = 0, E5 = 0, D5 = 0, o5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, r5 = 0, n5 = 0, t5 = 0, U5 = 0, J5 = 0;
              for (Q5 = 2036477234, E5 = 857760878, B5 = 1634760805, o5 = 1797285236, i2 = c4[I6 + 12 | 0] | c4[I6 + 13 | 0] << 8 | c4[I6 + 14 | 0] << 16 | c4[I6 + 15 | 0] << 24, F5 = c4[I6 + 8 | 0] | c4[I6 + 9 | 0] << 8 | c4[I6 + 10 | 0] << 16 | c4[I6 + 11 | 0] << 24, D5 = c4[I6 + 4 | 0] | c4[I6 + 5 | 0] << 8 | c4[I6 + 6 | 0] << 16 | c4[I6 + 7 | 0] << 24, y5 = c4[g6 + 28 | 0] | c4[g6 + 29 | 0] << 8 | c4[g6 + 30 | 0] << 16 | c4[g6 + 31 | 0] << 24, h5 = c4[g6 + 24 | 0] | c4[g6 + 25 | 0] << 8 | c4[g6 + 26 | 0] << 16 | c4[g6 + 27 | 0] << 24, n5 = c4[g6 + 20 | 0] | c4[g6 + 21 | 0] << 8 | c4[g6 + 22 | 0] << 16 | c4[g6 + 23 | 0] << 24, f5 = c4[g6 + 16 | 0] | c4[g6 + 17 | 0] << 8 | c4[g6 + 18 | 0] << 16 | c4[g6 + 19 | 0] << 24, S4 = c4[g6 + 12 | 0] | c4[g6 + 13 | 0] << 8 | c4[g6 + 14 | 0] << 16 | c4[g6 + 15 | 0] << 24, a5 = c4[g6 + 8 | 0] | c4[g6 + 9 | 0] << 8 | c4[g6 + 10 | 0] << 16 | c4[g6 + 11 | 0] << 24, k5 = c4[g6 + 4 | 0] | c4[g6 + 5 | 0] << 8 | c4[g6 + 6 | 0] << 16 | c4[g6 + 7 | 0] << 24, I6 = c4[0 | I6] | c4[I6 + 1 | 0] << 8 | c4[I6 + 2 | 0] << 16 | c4[I6 + 3 | 0] << 24, g6 = c4[0 | g6] | c4[g6 + 1 | 0] << 8 | c4[g6 + 2 | 0] << 16 | c4[g6 + 3 | 0] << 24; w5 = g6, g6 = kI((M5 = I6) ^ (I6 = g6 + B5 | 0), 16), w5 = f5 = kI(w5 ^ (B5 = g6 + f5 | 0), 12), t5 = kI((M5 = I6 + f5 | 0) ^ g6, 8), I6 = kI(w5 ^ (f5 = t5 + B5 | 0), 7), B5 = S4, S4 = kI((g6 = o5 + S4 | 0) ^ i2, 16), B5 = kI(B5 ^ (y5 = S4 + y5 | 0), 12), i2 = a5, o5 = kI((Q5 = Q5 + a5 | 0) ^ F5, 16), i2 = kI(i2 ^ (a5 = o5 + h5 | 0), 12), h5 = kI((Q5 = i2 + Q5 | 0) ^ o5, 8), g6 = kI(h5 ^ (o5 = I6 + (r5 = g6 + B5 | 0) | 0), 16), F5 = kI((E5 = E5 + k5 | 0) ^ D5, 16), k5 = kI((D5 = F5 + n5 | 0) ^ k5, 12), w5 = I6, I6 = kI((E5 = E5 + k5 | 0) ^ F5, 8), w5 = kI(w5 ^ (D5 = g6 + (U5 = I6 + D5 | 0) | 0), 12), F5 = kI(g6 ^ (o5 = w5 + o5 | 0), 8), g6 = kI((n5 = F5 + D5 | 0) ^ w5, 7), w5 = Q5, Q5 = B5, r5 = kI(S4 ^ r5, 8), Q5 = kI(Q5 ^ (B5 = r5 + y5 | 0), 7), S4 = kI((D5 = w5 + Q5 | 0) ^ I6, 16), y5 = kI((I6 = S4 + f5 | 0) ^ Q5, 12), D5 = kI(S4 ^ (Q5 = y5 + D5 | 0), 8), S4 = kI((f5 = I6 + D5 | 0) ^ y5, 7), I6 = kI((I6 = i2) ^ (i2 = h5 + a5 | 0), 7), a5 = kI((E5 = I6 + E5 | 0) ^ t5, 16), h5 = kI(I6 ^ (B5 = a5 + B5 | 0), 12), I6 = kI(a5 ^ (E5 = h5 + E5 | 0), 8), a5 = kI((y5 = B5 + I6 | 0) ^ h5, 7), w5 = i2, B5 = kI(k5 ^ U5, 7), h5 = kI((i2 = B5 + M5 | 0) ^ r5, 16), M5 = kI(B5 ^ (k5 = w5 + h5 | 0), 12), i2 = kI(h5 ^ (B5 = M5 + i2 | 0), 8), k5 = kI((h5 = k5 + i2 | 0) ^ M5, 7), 10 != (0 | (J5 = J5 + 1 | 0)); ) ;
              C5[0 | A7] = B5, C5[A7 + 1 | 0] = B5 >>> 8, C5[A7 + 2 | 0] = B5 >>> 16, C5[A7 + 3 | 0] = B5 >>> 24, C5[A7 + 28 | 0] = i2, C5[A7 + 29 | 0] = i2 >>> 8, C5[A7 + 30 | 0] = i2 >>> 16, C5[A7 + 31 | 0] = i2 >>> 24, C5[A7 + 24 | 0] = F5, C5[A7 + 25 | 0] = F5 >>> 8, C5[A7 + 26 | 0] = F5 >>> 16, C5[A7 + 27 | 0] = F5 >>> 24, C5[A7 + 20 | 0] = D5, C5[A7 + 21 | 0] = D5 >>> 8, C5[A7 + 22 | 0] = D5 >>> 16, C5[A7 + 23 | 0] = D5 >>> 24, C5[A7 + 16 | 0] = I6, C5[A7 + 17 | 0] = I6 >>> 8, C5[A7 + 18 | 0] = I6 >>> 16, C5[A7 + 19 | 0] = I6 >>> 24, C5[A7 + 12 | 0] = o5, C5[A7 + 13 | 0] = o5 >>> 8, C5[A7 + 14 | 0] = o5 >>> 16, C5[A7 + 15 | 0] = o5 >>> 24, C5[A7 + 8 | 0] = Q5, C5[A7 + 9 | 0] = Q5 >>> 8, C5[A7 + 10 | 0] = Q5 >>> 16, C5[A7 + 11 | 0] = Q5 >>> 24, C5[A7 + 4 | 0] = E5, C5[A7 + 5 | 0] = E5 >>> 8, C5[A7 + 6 | 0] = E5 >>> 16, C5[A7 + 7 | 0] = E5 >>> 24;
            }
            function QA(A7, I6, g6) {
              var B5 = 0, Q5 = 0, i2 = 0, E5 = 0, D5 = 0;
              A: if (!(!A7 | A7 >>> 0 >= I6 >>> 0 | !I6 | !g6 || (i2 = 255 & (D5 = c4[0 | A7] - 48 | 0)) >>> 0 > 9)) {
                Q5 = A7 + 1 | 0;
                I: if (1 != (0 | (B5 = I6 - A7 | 0))) {
                  if (!((E5 = c4[0 | Q5] - 48 & 255) >>> 0 > 9)) {
                    if ((i2 = E5 + F4(i2, 10) | 0) >>> 0 > 255) break A;
                    if (Q5 = A7 + 2 | 0, 2 == (0 | B5)) {
                      A7 = I6;
                      break I;
                    }
                    if (!((E5 = c4[0 | Q5] - 48 & 255) >>> 0 > 9)) {
                      if ((i2 = E5 + F4(i2, 10) | 0) >>> 0 > 255) break A;
                      if (Q5 = A7 + 3 | 0, 3 == (0 | B5)) {
                        A7 = I6;
                        break I;
                      }
                      if ((c4[0 | Q5] - 48 & 255) >>> 0 < 10) break A;
                    }
                  }
                  if (A7 = Q5, (255 & D5) >>> 0 > 9) break A;
                } else A7 = I6;
                if (C5[0 | g6] = i2, !(46 != c4[0 | A7] | I6 >>> 0 <= Q5 >>> 0)) {
                  if (D5 = I6 >>> 0 >= (Q5 = I6 - (i2 = A7 + 1 | 0) | 0) >>> 0 ? Q5 : 0, I6 >>> 0 <= i2 >>> 0) B5 = 0, Q5 = D5;
                  else if (B5 = 0, Q5 = 0, !((E5 = c4[0 | i2] - 48 & 255) >>> 0 >= 10)) if (i2 = A7 + 2 | 0, Q5 = 1, 1 != (0 | D5)) if ((B5 = c4[0 | i2] - 48 & 255) >>> 0 > 9) B5 = E5;
                  else {
                    if ((B5 = B5 + F4(E5, 10) | 0) >>> 0 > 255) break A;
                    if (i2 = A7 + 3 | 0, 2 != (0 | D5)) {
                      if (!((E5 = c4[0 | i2] - 48 & 255) >>> 0 > 9)) {
                        if ((B5 = E5 + F4(B5, 10) | 0) >>> 0 > 255) break A;
                        if (i2 = A7 + 4 | 0, 3 != (0 | D5)) {
                          if ((c4[0 | i2] - 48 & 255) >>> 0 < 10) break A;
                        } else Q5 = D5;
                      }
                    } else Q5 = D5;
                  }
                  else B5 = E5, Q5 = D5;
                  if (!Q5) return 0;
                  if (C5[g6 + 1 | 0] = B5, I6 >>> 0 <= i2 >>> 0) return 0;
                  if (46 == c4[0 | i2]) {
                    if (D5 = I6 >>> 0 >= (Q5 = I6 - (A7 = i2 + 1 | 0) | 0) >>> 0 ? Q5 : 0, A7 >>> 0 >= I6 >>> 0) B5 = 0, Q5 = D5;
                    else if (B5 = 0, Q5 = 0, !((E5 = c4[0 | A7] - 48 & 255) >>> 0 >= 10)) if (A7 = i2 + 2 | 0, Q5 = 1, 1 != (0 | D5)) if ((B5 = c4[0 | A7] - 48 & 255) >>> 0 > 9) B5 = E5;
                    else {
                      if ((B5 = B5 + F4(E5, 10) | 0) >>> 0 > 255) break A;
                      if (A7 = i2 + 3 | 0, 2 != (0 | D5)) {
                        if (!((E5 = c4[0 | A7] - 48 & 255) >>> 0 > 9)) {
                          if ((B5 = E5 + F4(B5, 10) | 0) >>> 0 > 255) break A;
                          if (A7 = i2 + 4 | 0, 3 != (0 | D5)) {
                            if ((c4[0 | A7] - 48 & 255) >>> 0 < 10) break A;
                          } else Q5 = D5;
                        }
                      } else Q5 = D5;
                    }
                    else B5 = E5, Q5 = D5;
                    if (!Q5) return 0;
                    if (C5[g6 + 2 | 0] = B5, A7 >>> 0 >= I6 >>> 0) return 0;
                    if (46 == c4[0 | A7]) {
                      if (Q5 = 0, B5 = I6 >>> 0 >= (B5 = I6 - (i2 = A7 + 1 | 0) | 0) >>> 0 ? B5 : 0, I6 >>> 0 <= i2 >>> 0) D5 = B5;
                      else if (D5 = 0, !((E5 = c4[0 | i2] - 48 & 255) >>> 0 >= 10)) if (i2 = A7 + 2 | 0, D5 = 1, 1 != (0 | B5)) if ((Q5 = c4[0 | i2] - 48 & 255) >>> 0 > 9) Q5 = E5;
                      else {
                        if ((Q5 = Q5 + F4(E5, 10) | 0) >>> 0 > 255) break A;
                        if (i2 = A7 + 3 | 0, 2 != (0 | B5)) {
                          if (!((E5 = c4[0 | i2] - 48 & 255) >>> 0 > 9)) {
                            if ((Q5 = E5 + F4(Q5, 10) | 0) >>> 0 > 255) break A;
                            if (i2 = A7 + 4 | 0, 3 != (0 | B5)) {
                              if ((c4[0 | i2] - 48 & 255) >>> 0 <= 9) break A;
                            } else D5 = B5;
                          }
                        } else D5 = B5;
                      }
                      else Q5 = E5, D5 = B5;
                      if (D5) return C5[g6 + 3 | 0] = Q5, (0 | I6) == (0 | i2);
                    }
                  }
                }
              }
              return 0;
            }
            function iA(A7, I6, g6) {
              var B5 = 0, Q5 = 0, i2 = 0, E5 = 0, D5 = 0, o5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, r5 = 0, n5 = 0, t5 = 0, U5 = 0, J5 = 0;
              for (B5 = 1797285236, h5 = 2036477234, w5 = 857760878, Q5 = 1634760805, i2 = c4[I6 + 12 | 0] | c4[I6 + 13 | 0] << 8 | c4[I6 + 14 | 0] << 16 | c4[I6 + 15 | 0] << 24, D5 = c4[I6 + 8 | 0] | c4[I6 + 9 | 0] << 8 | c4[I6 + 10 | 0] << 16 | c4[I6 + 11 | 0] << 24, E5 = c4[I6 + 4 | 0] | c4[I6 + 5 | 0] << 8 | c4[I6 + 6 | 0] << 16 | c4[I6 + 7 | 0] << 24, M5 = c4[g6 + 28 | 0] | c4[g6 + 29 | 0] << 8 | c4[g6 + 30 | 0] << 16 | c4[g6 + 31 | 0] << 24, k5 = c4[g6 + 24 | 0] | c4[g6 + 25 | 0] << 8 | c4[g6 + 26 | 0] << 16 | c4[g6 + 27 | 0] << 24, r5 = 20, S4 = c4[g6 + 20 | 0] | c4[g6 + 21 | 0] << 8 | c4[g6 + 22 | 0] << 16 | c4[g6 + 23 | 0] << 24, a5 = c4[g6 + 16 | 0] | c4[g6 + 17 | 0] << 8 | c4[g6 + 18 | 0] << 16 | c4[g6 + 19 | 0] << 24, F5 = c4[g6 + 12 | 0] | c4[g6 + 13 | 0] << 8 | c4[g6 + 14 | 0] << 16 | c4[g6 + 15 | 0] << 24, y5 = c4[g6 + 8 | 0] | c4[g6 + 9 | 0] << 8 | c4[g6 + 10 | 0] << 16 | c4[g6 + 11 | 0] << 24, f5 = c4[g6 + 4 | 0] | c4[g6 + 5 | 0] << 8 | c4[g6 + 6 | 0] << 16 | c4[g6 + 7 | 0] << 24, I6 = c4[0 | I6] | c4[I6 + 1 | 0] << 8 | c4[I6 + 2 | 0] << 16 | c4[I6 + 3 | 0] << 24, g6 = c4[0 | g6] | c4[g6 + 1 | 0] << 8 | c4[g6 + 2 | 0] << 16 | c4[g6 + 3 | 0] << 24; o5 = kI(g6 + w5 | 0, 7) ^ i2, n5 = kI(o5 + w5 | 0, 9) ^ k5, F5 = kI(Q5 + S4 | 0, 7) ^ F5, t5 = kI(F5 + Q5 | 0, 9) ^ D5, U5 = kI(t5 + F5 | 0, 13) ^ S4, y5 = kI(B5 + a5 | 0, 7) ^ y5, E5 = kI(y5 + B5 | 0, 9) ^ E5, D5 = kI(E5 + y5 | 0, 13) ^ a5, B5 = kI(E5 + D5 | 0, 18) ^ B5, i2 = kI(I6 + h5 | 0, 7) ^ M5, S4 = U5 ^ kI(B5 + i2 | 0, 7), k5 = n5 ^ kI(S4 + B5 | 0, 9), M5 = kI(S4 + k5 | 0, 13) ^ i2, B5 = kI(k5 + M5 | 0, 18) ^ B5, f5 = kI(i2 + h5 | 0, 9) ^ f5, J5 = kI(f5 + i2 | 0, 13) ^ I6, I6 = kI(J5 + f5 | 0, 18) ^ h5, a5 = kI(I6 + o5 | 0, 7) ^ D5, D5 = kI(a5 + I6 | 0, 9) ^ t5, i2 = kI(D5 + a5 | 0, 13) ^ o5, h5 = kI(i2 + D5 | 0, 18) ^ I6, o5 = kI(o5 + n5 | 0, 13) ^ g6, g6 = kI(o5 + n5 | 0, 18) ^ w5, I6 = kI(g6 + F5 | 0, 7) ^ J5, E5 = kI(I6 + g6 | 0, 9) ^ E5, F5 = kI(I6 + E5 | 0, 13) ^ F5, w5 = kI(E5 + F5 | 0, 18) ^ g6, Q5 = kI(t5 + U5 | 0, 18) ^ Q5, g6 = kI(Q5 + y5 | 0, 7) ^ o5, f5 = kI(g6 + Q5 | 0, 9) ^ f5, y5 = kI(g6 + f5 | 0, 13) ^ y5, Q5 = kI(f5 + y5 | 0, 18) ^ Q5, o5 = r5 >>> 0 > 2, r5 = r5 - 2 | 0, o5; ) ;
              return C5[0 | A7] = Q5, C5[A7 + 1 | 0] = Q5 >>> 8, C5[A7 + 2 | 0] = Q5 >>> 16, C5[A7 + 3 | 0] = Q5 >>> 24, C5[A7 + 28 | 0] = i2, C5[A7 + 29 | 0] = i2 >>> 8, C5[A7 + 30 | 0] = i2 >>> 16, C5[A7 + 31 | 0] = i2 >>> 24, C5[A7 + 24 | 0] = D5, C5[A7 + 25 | 0] = D5 >>> 8, C5[A7 + 26 | 0] = D5 >>> 16, C5[A7 + 27 | 0] = D5 >>> 24, C5[A7 + 20 | 0] = E5, C5[A7 + 21 | 0] = E5 >>> 8, C5[A7 + 22 | 0] = E5 >>> 16, C5[A7 + 23 | 0] = E5 >>> 24, C5[A7 + 16 | 0] = I6, C5[A7 + 17 | 0] = I6 >>> 8, C5[A7 + 18 | 0] = I6 >>> 16, C5[A7 + 19 | 0] = I6 >>> 24, C5[A7 + 12 | 0] = B5, C5[A7 + 13 | 0] = B5 >>> 8, C5[A7 + 14 | 0] = B5 >>> 16, C5[A7 + 15 | 0] = B5 >>> 24, C5[A7 + 8 | 0] = h5, C5[A7 + 9 | 0] = h5 >>> 8, C5[A7 + 10 | 0] = h5 >>> 16, C5[A7 + 11 | 0] = h5 >>> 24, C5[A7 + 4 | 0] = w5, C5[A7 + 5 | 0] = w5 >>> 8, C5[A7 + 6 | 0] = w5 >>> 16, C5[A7 + 7 | 0] = w5 >>> 24, 0;
            }
            function EA(A7, I6, g6) {
              var B5, Q5 = 0, i2 = 0, E5 = 0, D5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0;
              r4 = B5 = r4 - 96 | 0, g6 >>> 0 >= 65 && (gI(A7), oA(A7, I6, g6), hA(A7, B5), g6 = 32, I6 = B5), gI(A7), o4[B5 + 88 >> 2] = 909522486, o4[B5 + 92 >> 2] = 909522486, o4[B5 + 80 >> 2] = 909522486, o4[B5 + 84 >> 2] = 909522486, o4[B5 + 72 >> 2] = 909522486, o4[B5 + 76 >> 2] = 909522486, o4[B5 + 64 >> 2] = 909522486, o4[B5 + 68 >> 2] = 909522486, o4[B5 + 56 >> 2] = 909522486, o4[B5 + 60 >> 2] = 909522486, o4[B5 + 48 >> 2] = 909522486, o4[B5 + 52 >> 2] = 909522486, o4[B5 + 40 >> 2] = 909522486, o4[B5 + 44 >> 2] = 909522486, o4[B5 + 32 >> 2] = 909522486, o4[B5 + 36 >> 2] = 909522486;
              A: if (g6) {
                if (F5 = 3 & g6, g6 >>> 0 >= 4) {
                  for (E5 = 124 & g6; C5[0 | (i2 = (D5 = B5 + 32 | 0) + Q5 | 0)] = c4[0 | i2] ^ c4[I6 + Q5 | 0], C5[0 | (y5 = (i2 = 1 | Q5) + D5 | 0)] = c4[0 | y5] ^ c4[I6 + i2 | 0], C5[0 | (y5 = (i2 = 2 | Q5) + D5 | 0)] = c4[0 | y5] ^ c4[I6 + i2 | 0], C5[0 | (i2 = (i2 = D5) + (D5 = 3 | Q5) | 0)] = c4[0 | i2] ^ c4[I6 + D5 | 0], Q5 = Q5 + 4 | 0, (0 | E5) != (0 | (h5 = h5 + 4 | 0)); ) ;
                  if (!F5) break A;
                }
                for (; C5[0 | (h5 = (B5 + 32 | 0) + Q5 | 0)] = c4[0 | h5] ^ c4[I6 + Q5 | 0], Q5 = Q5 + 1 | 0, (0 | F5) != (0 | (w5 = w5 + 1 | 0)); ) ;
              }
              oA(A7, B5 + 32 | 0, 64), gI(F5 = A7 + 104 | 0), o4[B5 + 88 >> 2] = 1549556828, o4[B5 + 92 >> 2] = 1549556828, o4[B5 + 80 >> 2] = 1549556828, o4[B5 + 84 >> 2] = 1549556828, o4[B5 + 72 >> 2] = 1549556828, o4[B5 + 76 >> 2] = 1549556828, o4[B5 + 64 >> 2] = 1549556828, o4[B5 + 68 >> 2] = 1549556828, o4[B5 + 56 >> 2] = 1549556828, o4[B5 + 60 >> 2] = 1549556828, o4[B5 + 48 >> 2] = 1549556828, o4[B5 + 52 >> 2] = 1549556828, o4[B5 + 40 >> 2] = 1549556828, o4[B5 + 44 >> 2] = 1549556828, o4[B5 + 32 >> 2] = 1549556828, o4[B5 + 36 >> 2] = 1549556828;
              A: if (g6) {
                if (D5 = 3 & g6, w5 = 0, Q5 = 0, g6 >>> 0 >= 4) {
                  for (g6 &= 124, h5 = 0; C5[0 | (E5 = (A7 = B5 + 32 | 0) + Q5 | 0)] = c4[0 | E5] ^ c4[I6 + Q5 | 0], C5[0 | (i2 = (E5 = 1 | Q5) + A7 | 0)] = c4[0 | i2] ^ c4[I6 + E5 | 0], C5[0 | (i2 = (E5 = 2 | Q5) + A7 | 0)] = c4[0 | i2] ^ c4[I6 + E5 | 0], C5[0 | (E5 = (i2 = A7) + (A7 = 3 | Q5) | 0)] = c4[0 | E5] ^ c4[A7 + I6 | 0], Q5 = Q5 + 4 | 0, (0 | g6) != (0 | (h5 = h5 + 4 | 0)); ) ;
                  if (!D5) break A;
                }
                for (; C5[0 | (A7 = (B5 + 32 | 0) + Q5 | 0)] = c4[0 | A7] ^ c4[I6 + Q5 | 0], Q5 = Q5 + 1 | 0, (0 | D5) != (0 | (w5 = w5 + 1 | 0)); ) ;
              }
              return oA(F5, A7 = B5 + 32 | 0, 64), xI(A7, 64), xI(B5, 32), r4 = B5 + 96 | 0, 0;
            }
            function DA(A7, I6, g6, C6, B5, D5, c5) {
              var h5 = 0, w5 = 0, F5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0;
              if (I6 - 65 >>> 0 < 4294967232 | c5 >>> 0 > 64) A7 = -1;
              else {
                S4 = h5 = r4, r4 = h5 = h5 - 512 & -64;
                A: {
                  I: if (!(!(!(C6 | B5) | g6) | !A7 | (I6 - 65 & 255) >>> 0 <= 191 | !(!c5 || D5) | c5 >>> 0 >= 65)) {
                    if (c5) {
                      if (!D5) break I;
                      Q4(h5 - -64 | 0, 0, 293), o4[h5 + 56 >> 2] = 327033209, o4[h5 + 60 >> 2] = 1541459225, o4[h5 + 48 >> 2] = -79577749, o4[h5 + 52 >> 2] = 528734635, o4[h5 + 40 >> 2] = 725511199, o4[h5 + 44 >> 2] = -1694144372, o4[h5 + 32 >> 2] = -1377402159, o4[h5 + 36 >> 2] = 1359893119, o4[h5 + 24 >> 2] = 1595750129, o4[h5 + 28 >> 2] = -1521486534, o4[h5 + 16 >> 2] = -23791573, o4[h5 + 20 >> 2] = 1013904242, o4[h5 + 8 >> 2] = -2067093701, o4[h5 + 12 >> 2] = -1150833019, o4[h5 >> 2] = -222443256 ^ (c5 << 8 | I6), o4[h5 + 4 >> 2] = c5 >>> 24 ^ 1779033703, F5 = 128, (w5 = 128 - c5 | 0) && Q4((h5 + 384 | 0) + c5 | 0, 0, w5), c5 && E4(h5 + 384 | 0, D5, c5), E4(h5 + 96 | 0, D5 = h5 + 384 | 0, 128), o4[h5 + 352 >> 2] = 128, xI(D5, 128);
                    } else Q4(h5 - -64 | 0, 0, 293), o4[h5 + 56 >> 2] = 327033209, o4[h5 + 60 >> 2] = 1541459225, o4[h5 + 48 >> 2] = -79577749, o4[h5 + 52 >> 2] = 528734635, o4[h5 + 40 >> 2] = 725511199, o4[h5 + 44 >> 2] = -1694144372, o4[h5 + 32 >> 2] = -1377402159, o4[h5 + 36 >> 2] = 1359893119, o4[h5 + 24 >> 2] = 1595750129, o4[h5 + 28 >> 2] = -1521486534, o4[h5 + 16 >> 2] = -23791573, o4[h5 + 20 >> 2] = 1013904242, o4[h5 + 8 >> 2] = -2067093701, o4[h5 + 12 >> 2] = -1150833019, o4[h5 >> 2] = -222443256 ^ I6, o4[h5 + 4 >> 2] = 1779033703;
                    if (C6 | B5) {
                      if (f5 = h5 + 96 | 0, !B5 & C6 >>> 0 > (D5 = 256 - F5 | 0) >>> 0 | B5) for (a5 = h5 + 224 | 0; D5 && E4(F5 + f5 | 0, g6, D5), o4[h5 + 352 >> 2] = o4[h5 + 352 >> 2] + D5, F5 = c5 = o4[h5 + 68 >> 2], c5 = (y5 = (w5 = o4[h5 + 64 >> 2]) + 128 | 0) >>> 0 < 128 ? c5 + 1 | 0 : c5, o4[h5 + 64 >> 2] = y5, o4[h5 + 68 >> 2] = c5, c5 = o4[h5 + 76 >> 2], c5 = (F5 = w5 = -1 == (0 | F5) & w5 >>> 0 > 4294967167) >>> 0 > (w5 = w5 + o4[h5 + 72 >> 2] | 0) >>> 0 ? c5 + 1 | 0 : c5, o4[h5 + 72 >> 2] = w5, o4[h5 + 76 >> 2] = c5, U4(h5, f5), E4(f5, a5, 128), F5 = (y5 = o4[h5 + 352 >> 2]) - 128 | 0, o4[h5 + 352 >> 2] = F5, g6 = g6 + D5 | 0, B5 = B5 - (C6 >>> 0 < (c5 = D5) >>> 0) | 0, C6 = w5 = C6 - c5 | 0, !B5 & (D5 = 384 - y5 | 0) >>> 0 < w5 >>> 0 | B5; ) ;
                      C6 && E4(F5 + f5 | 0, g6, C6), o4[h5 + 352 >> 2] = C6 + o4[h5 + 352 >> 2];
                    }
                    j2(h5, A7, I6), r4 = S4;
                    break A;
                  }
                  KI(), i();
                }
                A7 = 0;
              }
              return A7;
            }
            function oA(A7, I6, g6) {
              var B5, Q5 = 0, i2 = 0, E5 = 0, D5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0;
              r4 = B5 = r4 - 288 | 0;
              A: if (g6) if (Q5 = o4[A7 + 36 >> 2], w5 = (D5 = o4[A7 + 32 >> 2]) + (h5 = g6 << 3) | 0, o4[A7 + 32 >> 2] = w5, i2 = (g6 >>> 29 | 0) + Q5 | 0, o4[A7 + 36 >> 2] = h5 >>> 0 > w5 >>> 0 ? i2 + 1 | 0 : i2, h5 = A7 + 40 | 0, g6 >>> 0 >= (i2 = 64 - (w5 = 63 & ((7 & Q5) << 29 | D5 >>> 3)) | 0) >>> 0) {
                a5 = 3 & i2, Q5 = 0, D5 = 0;
                I: {
                  if ((63 ^ w5) >>> 0 >= 3) {
                    for (k5 = 124 & i2; C5[(Q5 + w5 | 0) + h5 | 0] = c4[I6 + Q5 | 0], C5[(w5 + (f5 = 1 | Q5) | 0) + h5 | 0] = c4[I6 + f5 | 0], C5[(w5 + (f5 = 2 | Q5) | 0) + h5 | 0] = c4[I6 + f5 | 0], C5[(w5 + (f5 = 3 | Q5) | 0) + h5 | 0] = c4[I6 + f5 | 0], D5 = (Q5 = Q5 + 4 | 0) >>> 0 < 4 ? D5 + 1 | 0 : D5, (E5 = (S4 = S4 + 4 | 0) >>> 0 < 4 ? E5 + 1 | 0 : E5) | (0 | S4) != (0 | k5); ) ;
                    if (!a5) break I;
                  }
                  for (; C5[(Q5 + w5 | 0) + h5 | 0] = c4[I6 + Q5 | 0], D5 = (Q5 = Q5 + 1 | 0) ? D5 : D5 + 1 | 0, (F5 = (y5 = y5 + 1 | 0) ? F5 : F5 + 1 | 0) | (0 | y5) != (0 | a5); ) ;
                }
                if (p4(A7, h5, B5, F5 = B5 + 256 | 0), I6 = I6 + i2 | 0, !(E5 = 0 - ((g6 >>> 0 < i2 >>> 0) + 0 | 0) | 0) & (g6 = g6 - i2 | 0) >>> 0 > 63 | E5) for (; p4(A7, I6, B5, F5), I6 = I6 - -64 | 0, E5 = E5 - 1 | 0, !(E5 = (g6 = g6 + -64 | 0) >>> 0 < 4294967232 ? E5 + 1 | 0 : E5) & g6 >>> 0 > 63 | E5; ) ;
                I: if (g6 | E5) {
                  if (A7 = 3 & g6, y5 = 0, F5 = 0, Q5 = 0, D5 = 0, !E5 & g6 >>> 0 >= 4 | E5) {
                    for (w5 = 60 & g6, g6 = 0, E5 = 0; C5[Q5 + h5 | 0] = c4[I6 + Q5 | 0], C5[(i2 = 1 | Q5) + h5 | 0] = c4[I6 + i2 | 0], C5[(i2 = 2 | Q5) + h5 | 0] = c4[I6 + i2 | 0], C5[(i2 = 3 | Q5) + h5 | 0] = c4[I6 + i2 | 0], D5 = (Q5 = Q5 + 4 | 0) >>> 0 < 4 ? D5 + 1 | 0 : D5, (E5 = (g6 = g6 + 4 | 0) >>> 0 < 4 ? E5 + 1 | 0 : E5) | (0 | g6) != (0 | w5); ) ;
                    if (!A7) break I;
                  }
                  for (; C5[Q5 + h5 | 0] = c4[I6 + Q5 | 0], D5 = (Q5 = Q5 + 1 | 0) ? D5 : D5 + 1 | 0, (F5 = (y5 = y5 + 1 | 0) ? F5 : F5 + 1 | 0) | (0 | A7) != (0 | y5); ) ;
                }
                xI(B5, 288);
              } else {
                if (A7 = 3 & g6, Q5 = 0, D5 = 0, g6 >>> 0 >= 4) {
                  for (g6 &= -4; C5[(Q5 + w5 | 0) + h5 | 0] = c4[I6 + Q5 | 0], C5[(w5 + (i2 = 1 | Q5) | 0) + h5 | 0] = c4[I6 + i2 | 0], C5[(w5 + (i2 = 2 | Q5) | 0) + h5 | 0] = c4[I6 + i2 | 0], C5[(w5 + (i2 = 3 | Q5) | 0) + h5 | 0] = c4[I6 + i2 | 0], D5 = (Q5 = Q5 + 4 | 0) >>> 0 < 4 ? D5 + 1 | 0 : D5, (E5 = (S4 = S4 + 4 | 0) >>> 0 < 4 ? E5 + 1 | 0 : E5) | (0 | g6) != (0 | S4); ) ;
                  if (!A7) break A;
                }
                for (; C5[(Q5 + w5 | 0) + h5 | 0] = c4[I6 + Q5 | 0], D5 = (Q5 = Q5 + 1 | 0) ? D5 : D5 + 1 | 0, (F5 = (y5 = y5 + 1 | 0) ? F5 : F5 + 1 | 0) | (0 | A7) != (0 | y5); ) ;
              }
              r4 = B5 + 288 | 0;
            }
            function cA(A7, I6, g6, B5) {
              var Q5 = 0, i2 = 0, E5 = 0, D5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0;
              A: {
                if ((E5 = o4[A7 + 56 >> 2]) | (Q5 = o4[A7 + 60 >> 2])) {
                  if (F5 = D5 = 16 - E5 | 0, w5 = (D5 = (0 | (i2 = 0 - ((E5 >>> 0 > 16) + Q5 | 0) | 0)) == (0 | B5) & g6 >>> 0 > D5 >>> 0 | B5 >>> 0 > i2 >>> 0) ? F5 : g6, F5 = D5 = D5 ? i2 : B5, D5 | w5) {
                    k5 = 3 & w5, D5 = A7 - -64 | 0, i2 = 0, E5 = 0;
                    I: {
                      if (!F5 & w5 >>> 0 >= 4 | F5) {
                        for (y5 = -4 & w5; Q5 = i2 + o4[A7 + 56 >> 2] | 0, C5[Q5 + D5 | 0] = c4[I6 + i2 | 0], Q5 = (f5 = 1 | i2) + o4[A7 + 56 >> 2] | 0, C5[Q5 + D5 | 0] = c4[I6 + f5 | 0], Q5 = (f5 = 2 | i2) + o4[A7 + 56 >> 2] | 0, C5[Q5 + D5 | 0] = c4[I6 + f5 | 0], Q5 = (f5 = 3 | i2) + o4[A7 + 56 >> 2] | 0, C5[Q5 + D5 | 0] = c4[I6 + f5 | 0], Q5 = E5, E5 = (i2 = i2 + 4 | 0) >>> 0 < 4 ? Q5 + 1 | 0 : Q5, (0 | y5) != (0 | (S4 = S4 + 4 | 0)) | (0 | (h5 = S4 >>> 0 < 4 ? h5 + 1 | 0 : h5)) != (0 | F5); ) ;
                        if (!(0 | k5)) break I;
                      }
                      for (; Q5 = i2 + o4[A7 + 56 >> 2] | 0, C5[Q5 + D5 | 0] = c4[I6 + i2 | 0], Q5 = E5, E5 = (i2 = i2 + 1 | 0) ? Q5 : Q5 + 1 | 0, Q5 = M5, M5 = Q5 = (a5 = a5 + 1 | 0) ? Q5 : Q5 + 1 | 0, (0 | a5) != (0 | k5) | !!(0 | Q5); ) ;
                    }
                    E5 = o4[A7 + 56 >> 2], Q5 = o4[A7 + 60 >> 2];
                  }
                  if (h5 = Q5 + F5 | 0, h5 = (E5 = E5 + w5 | 0) >>> 0 < w5 >>> 0 ? h5 + 1 | 0 : h5, o4[A7 + 56 >> 2] = E5, o4[A7 + 60 >> 2] = h5, !h5 & E5 >>> 0 < 16) break A;
                  T2(A7, A7 - -64 | 0, 16, 0), o4[A7 + 56 >> 2] = 0, o4[A7 + 60 >> 2] = 0, g6 = (E5 = g6) - w5 | 0, B5 = B5 - ((E5 >>> 0 < w5 >>> 0) + F5 | 0) | 0, I6 = I6 + w5 | 0;
                }
                if (!B5 & g6 >>> 0 >= 16 | B5 && (T2(A7, I6, E5 = -16 & g6, B5), g6 &= 15, B5 = 0, I6 = I6 + E5 | 0), g6 | B5) {
                  w5 = 3 & g6, F5 = 0, D5 = A7 - -64 | 0, a5 = 0, M5 = 0, i2 = 0, E5 = 0;
                  I: {
                    if (!B5 & g6 >>> 0 >= 4 | B5) {
                      for (k5 = 12 & g6, S4 = 0, h5 = 0; Q5 = i2 + o4[A7 + 56 >> 2] | 0, C5[Q5 + D5 | 0] = c4[I6 + i2 | 0], Q5 = (y5 = 1 | i2) + o4[A7 + 56 >> 2] | 0, C5[Q5 + D5 | 0] = c4[I6 + y5 | 0], Q5 = (y5 = 2 | i2) + o4[A7 + 56 >> 2] | 0, C5[Q5 + D5 | 0] = c4[I6 + y5 | 0], Q5 = (y5 = 3 | i2) + o4[A7 + 56 >> 2] | 0, C5[Q5 + D5 | 0] = c4[I6 + y5 | 0], Q5 = E5, E5 = (i2 = i2 + 4 | 0) >>> 0 < 4 ? Q5 + 1 | 0 : Q5, (0 | (S4 = S4 + 4 | 0)) != (0 | k5) | !!(0 | (h5 = S4 >>> 0 < 4 ? h5 + 1 | 0 : h5)); ) ;
                      if (!(w5 | F5)) break I;
                    }
                    for (; Q5 = i2 + o4[A7 + 56 >> 2] | 0, C5[Q5 + D5 | 0] = c4[I6 + i2 | 0], E5 = (i2 = i2 + 1 | 0) ? E5 : E5 + 1 | 0, Q5 = M5, M5 = Q5 = (a5 = a5 + 1 | 0) ? Q5 : Q5 + 1 | 0, (0 | w5) != (0 | a5) | (0 | F5) != (0 | Q5); ) ;
                  }
                  h5 = B5 + o4[A7 + 60 >> 2] | 0, h5 = (I6 = g6 + o4[A7 + 56 >> 2] | 0) >>> 0 < g6 >>> 0 ? h5 + 1 | 0 : h5, o4[A7 + 56 >> 2] = I6, o4[A7 + 60 >> 2] = h5;
                }
              }
            }
            function hA(A7, I6) {
              var g6, B5, Q5, i2, D5 = 0, c5 = 0, h5 = 0;
              r4 = g6 = r4 - 288 | 0, c5 = (B5 = A7 + 40 | 0) + (D5 = o4[A7 + 32 >> 2] >>> 3 & 63) | 0, D5 >>> 0 >= 56 ? ((D5 = 64 - D5 | 0) && E4(c5, 39664, D5), p4(A7, B5, g6, g6 + 256 | 0), o4[(D5 = B5) + 48 >> 2] = 0, o4[D5 + 52 >> 2] = 0, o4[D5 + 40 >> 2] = 0, o4[D5 + 44 >> 2] = 0, o4[D5 + 32 >> 2] = 0, o4[D5 + 36 >> 2] = 0, o4[D5 + 24 >> 2] = 0, o4[D5 + 28 >> 2] = 0, o4[D5 + 16 >> 2] = 0, o4[D5 + 20 >> 2] = 0, o4[D5 + 8 >> 2] = 0, o4[D5 + 12 >> 2] = 0, o4[D5 >> 2] = 0, o4[D5 + 4 >> 2] = 0) : (D5 = 56 - D5 | 0) && E4(c5, 39664, D5), Q5 = (D5 = 16711680 & (c5 = o4[A7 + 32 >> 2])) >>> 8 | 0, h5 = D5 << 24, i2 = (D5 = -16777216 & c5) >>> 24 | 0, h5 |= D5 << 8, D5 = o4[A7 + 36 >> 2], o4[A7 + 96 >> 2] = h5 | -16777216 & ((255 & D5) << 24 | c5 >>> 8) | 16711680 & ((16777215 & D5) << 8 | c5 >>> 24) | D5 >>> 8 & 65280 | D5 >>> 24, D5 = Q5 | i2 | c5 << 24 | (65280 & c5) << 8, o4[A7 + 100 >> 2] = D5, p4(A7, B5, g6, g6 + 256 | 0), D5 = aI(16711935 & (D5 = o4[A7 >> 2]), 8) | 16711935 & aI(D5, 24), C5[0 | I6] = D5, C5[I6 + 1 | 0] = D5 >>> 8, C5[I6 + 2 | 0] = D5 >>> 16, C5[I6 + 3 | 0] = D5 >>> 24, D5 = aI(16711935 & (D5 = o4[A7 + 4 >> 2]), 8) | 16711935 & aI(D5, 24), C5[I6 + 4 | 0] = D5, C5[I6 + 5 | 0] = D5 >>> 8, C5[I6 + 6 | 0] = D5 >>> 16, C5[I6 + 7 | 0] = D5 >>> 24, D5 = aI(16711935 & (D5 = o4[A7 + 8 >> 2]), 8) | 16711935 & aI(D5, 24), C5[I6 + 8 | 0] = D5, C5[I6 + 9 | 0] = D5 >>> 8, C5[I6 + 10 | 0] = D5 >>> 16, C5[I6 + 11 | 0] = D5 >>> 24, D5 = aI(16711935 & (D5 = o4[A7 + 12 >> 2]), 8) | 16711935 & aI(D5, 24), C5[I6 + 12 | 0] = D5, C5[I6 + 13 | 0] = D5 >>> 8, C5[I6 + 14 | 0] = D5 >>> 16, C5[I6 + 15 | 0] = D5 >>> 24, D5 = aI(16711935 & (D5 = o4[A7 + 16 >> 2]), 8) | 16711935 & aI(D5, 24), C5[I6 + 16 | 0] = D5, C5[I6 + 17 | 0] = D5 >>> 8, C5[I6 + 18 | 0] = D5 >>> 16, C5[I6 + 19 | 0] = D5 >>> 24, D5 = aI(16711935 & (D5 = o4[A7 + 20 >> 2]), 8) | 16711935 & aI(D5, 24), C5[I6 + 20 | 0] = D5, C5[I6 + 21 | 0] = D5 >>> 8, C5[I6 + 22 | 0] = D5 >>> 16, C5[I6 + 23 | 0] = D5 >>> 24, D5 = aI(16711935 & (D5 = o4[A7 + 24 >> 2]), 8) | 16711935 & aI(D5, 24), C5[I6 + 24 | 0] = D5, C5[I6 + 25 | 0] = D5 >>> 8, C5[I6 + 26 | 0] = D5 >>> 16, C5[I6 + 27 | 0] = D5 >>> 24, D5 = aI(16711935 & (D5 = o4[A7 + 28 >> 2]), 8) | 16711935 & aI(D5, 24), C5[I6 + 28 | 0] = D5, C5[I6 + 29 | 0] = D5 >>> 8, C5[I6 + 30 | 0] = D5 >>> 16, C5[I6 + 31 | 0] = D5 >>> 24, xI(g6, 288), xI(A7, 104), r4 = g6 + 288 | 0;
            }
            function wA(A7, I6) {
              var g6, C6 = 0, B5 = 0, Q5 = 0;
              for (r4 = g6 = r4 - 176 | 0, o4[g6 >> 2] = c4[0 | I6] | c4[I6 + 1 | 0] << 8 | c4[I6 + 2 | 0] << 16 | c4[I6 + 3 | 0] << 24, C6 = 4, o4[g6 + 4 >> 2] = c4[I6 + 4 | 0] | c4[I6 + 5 | 0] << 8 | c4[I6 + 6 | 0] << 16 | c4[I6 + 7 | 0] << 24, o4[g6 + 8 >> 2] = c4[I6 + 8 | 0] | c4[I6 + 9 | 0] << 8 | c4[I6 + 10 | 0] << 16 | c4[I6 + 11 | 0] << 24, I6 = c4[I6 + 12 | 0] | c4[I6 + 13 | 0] << 8 | c4[I6 + 14 | 0] << 16 | c4[I6 + 15 | 0] << 24, o4[g6 + 12 >> 2] = I6; B5 = (C6 << 2) + g6 | 0, 3 & C6 || (Q5 = c4[33888 + (C6 >>> 2 | 0) | 0], I6 = kI(I6, 24), I6 = Q5 ^ (c4[38256 + (I6 >>> 8 & 255) | 0] << 8 | c4[38256 + (255 & I6) | 0] | c4[38256 + (I6 >>> 16 & 255) | 0] << 16 | c4[38256 + (I6 >>> 24 | 0) | 0] << 24)), I6 = o4[B5 - 16 >> 2] ^ I6, o4[B5 >> 2] = I6, 44 != (0 | (C6 = C6 + 1 | 0)); ) ;
              o4[A7 >> 2] = o4[g6 >> 2], o4[A7 + 4 >> 2] = o4[g6 + 4 >> 2], o4[A7 + 8 >> 2] = o4[g6 + 8 >> 2], o4[A7 + 12 >> 2] = o4[g6 + 12 >> 2], o4[A7 + 16 >> 2] = o4[g6 + 16 >> 2], o4[A7 + 20 >> 2] = o4[g6 + 20 >> 2], o4[A7 + 24 >> 2] = o4[g6 + 24 >> 2], o4[A7 + 28 >> 2] = o4[g6 + 28 >> 2], o4[A7 + 32 >> 2] = o4[g6 + 32 >> 2], o4[A7 + 36 >> 2] = o4[g6 + 36 >> 2], o4[A7 + 40 >> 2] = o4[g6 + 40 >> 2], o4[A7 + 44 >> 2] = o4[g6 + 44 >> 2], o4[A7 + 48 >> 2] = o4[g6 + 48 >> 2], o4[A7 + 52 >> 2] = o4[g6 + 52 >> 2], o4[A7 + 56 >> 2] = o4[g6 + 56 >> 2], o4[A7 + 60 >> 2] = o4[g6 + 60 >> 2], o4[A7 - -64 >> 2] = o4[g6 + 64 >> 2], o4[A7 + 68 >> 2] = o4[g6 + 68 >> 2], o4[A7 + 72 >> 2] = o4[g6 + 72 >> 2], o4[A7 + 76 >> 2] = o4[g6 + 76 >> 2], o4[A7 + 80 >> 2] = o4[g6 + 80 >> 2], o4[A7 + 84 >> 2] = o4[g6 + 84 >> 2], o4[A7 + 88 >> 2] = o4[g6 + 88 >> 2], o4[A7 + 92 >> 2] = o4[g6 + 92 >> 2], o4[A7 + 96 >> 2] = o4[g6 + 96 >> 2], o4[A7 + 100 >> 2] = o4[g6 + 100 >> 2], o4[A7 + 104 >> 2] = o4[g6 + 104 >> 2], o4[A7 + 108 >> 2] = o4[g6 + 108 >> 2], o4[A7 + 112 >> 2] = o4[g6 + 112 >> 2], o4[A7 + 116 >> 2] = o4[g6 + 116 >> 2], o4[A7 + 120 >> 2] = o4[g6 + 120 >> 2], o4[A7 + 124 >> 2] = o4[g6 + 124 >> 2], o4[A7 + 128 >> 2] = o4[g6 + 128 >> 2], o4[A7 + 132 >> 2] = o4[g6 + 132 >> 2], o4[A7 + 136 >> 2] = o4[g6 + 136 >> 2], o4[A7 + 140 >> 2] = o4[g6 + 140 >> 2], o4[A7 + 144 >> 2] = o4[g6 + 144 >> 2], o4[A7 + 148 >> 2] = o4[g6 + 148 >> 2], o4[A7 + 152 >> 2] = o4[g6 + 152 >> 2], o4[A7 + 156 >> 2] = o4[g6 + 156 >> 2], o4[A7 + 160 >> 2] = o4[g6 + 160 >> 2], o4[A7 + 164 >> 2] = o4[g6 + 164 >> 2], o4[A7 + 168 >> 2] = o4[g6 + 168 >> 2], o4[A7 + 172 >> 2] = o4[g6 + 172 >> 2], r4 = g6 + 176 | 0;
            }
            function FA(A7, I6, g6) {
              var C6, B5 = 0, Q5 = 0, i2 = 0, E5 = 0, D5 = 0, c5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, r5 = 0, n5 = 0, t5 = 0, U5 = 0;
              S4 = o4[I6 + 4 >> 2], B5 = o4[A7 + 4 >> 2], a5 = o4[I6 + 8 >> 2], Q5 = o4[A7 + 8 >> 2], k5 = o4[I6 + 12 >> 2], i2 = o4[A7 + 12 >> 2], M5 = o4[I6 + 16 >> 2], E5 = o4[A7 + 16 >> 2], r5 = o4[I6 + 20 >> 2], D5 = o4[A7 + 20 >> 2], n5 = o4[I6 + 24 >> 2], c5 = o4[A7 + 24 >> 2], y5 = o4[I6 + 28 >> 2], h5 = o4[A7 + 28 >> 2], t5 = o4[I6 + 32 >> 2], w5 = o4[A7 + 32 >> 2], U5 = o4[I6 + 36 >> 2], F5 = o4[A7 + 36 >> 2], g6 = 0 - g6 | 0, f5 = o4[A7 >> 2], o4[A7 >> 2] = g6 & (f5 ^ o4[I6 >> 2]) ^ f5, o4[A7 + 36 >> 2] = F5 ^ g6 & (F5 ^ U5), o4[A7 + 32 >> 2] = w5 ^ g6 & (w5 ^ t5), o4[A7 + 28 >> 2] = h5 ^ g6 & (h5 ^ y5), o4[A7 + 24 >> 2] = c5 ^ g6 & (c5 ^ n5), o4[A7 + 20 >> 2] = D5 ^ g6 & (D5 ^ r5), o4[A7 + 16 >> 2] = E5 ^ g6 & (E5 ^ M5), o4[A7 + 12 >> 2] = i2 ^ g6 & (i2 ^ k5), o4[A7 + 8 >> 2] = Q5 ^ g6 & (Q5 ^ a5), o4[A7 + 4 >> 2] = B5 ^ g6 & (B5 ^ S4), B5 = o4[A7 + 40 >> 2], S4 = o4[I6 + 40 >> 2], Q5 = o4[A7 + 44 >> 2], a5 = o4[I6 + 44 >> 2], i2 = o4[A7 + 48 >> 2], k5 = o4[I6 + 48 >> 2], E5 = o4[A7 + 52 >> 2], M5 = o4[I6 + 52 >> 2], D5 = o4[A7 + 56 >> 2], r5 = o4[I6 + 56 >> 2], c5 = o4[A7 + 60 >> 2], n5 = o4[I6 + 60 >> 2], h5 = o4[(y5 = A7 - -64 | 0) >> 2], t5 = o4[I6 - -64 >> 2], w5 = o4[A7 + 68 >> 2], U5 = o4[I6 + 68 >> 2], F5 = o4[A7 + 72 >> 2], f5 = o4[I6 + 72 >> 2], C6 = o4[A7 + 76 >> 2], o4[A7 + 76 >> 2] = C6 ^ g6 & (o4[I6 + 76 >> 2] ^ C6), o4[A7 + 72 >> 2] = F5 ^ g6 & (F5 ^ f5), o4[A7 + 68 >> 2] = w5 ^ g6 & (w5 ^ U5), o4[y5 >> 2] = h5 ^ g6 & (h5 ^ t5), o4[A7 + 60 >> 2] = c5 ^ g6 & (c5 ^ n5), o4[A7 + 56 >> 2] = D5 ^ g6 & (D5 ^ r5), o4[A7 + 52 >> 2] = E5 ^ g6 & (E5 ^ M5), o4[A7 + 48 >> 2] = i2 ^ g6 & (i2 ^ k5), o4[A7 + 44 >> 2] = Q5 ^ g6 & (Q5 ^ a5), o4[A7 + 40 >> 2] = B5 ^ g6 & (B5 ^ S4), B5 = o4[A7 + 80 >> 2], S4 = o4[I6 + 80 >> 2], Q5 = o4[A7 + 84 >> 2], a5 = o4[I6 + 84 >> 2], i2 = o4[A7 + 88 >> 2], k5 = o4[I6 + 88 >> 2], E5 = o4[A7 + 92 >> 2], M5 = o4[I6 + 92 >> 2], D5 = o4[A7 + 96 >> 2], r5 = o4[I6 + 96 >> 2], c5 = o4[A7 + 100 >> 2], n5 = o4[I6 + 100 >> 2], h5 = o4[A7 + 104 >> 2], y5 = o4[I6 + 104 >> 2], w5 = o4[A7 + 108 >> 2], t5 = o4[I6 + 108 >> 2], F5 = o4[A7 + 112 >> 2], U5 = o4[I6 + 112 >> 2], f5 = o4[I6 + 116 >> 2], I6 = o4[A7 + 116 >> 2], o4[A7 + 116 >> 2] = g6 & (f5 ^ I6) ^ I6, o4[A7 + 112 >> 2] = F5 ^ g6 & (F5 ^ U5), o4[A7 + 108 >> 2] = w5 ^ g6 & (w5 ^ t5), o4[A7 + 104 >> 2] = h5 ^ g6 & (h5 ^ y5), o4[A7 + 100 >> 2] = c5 ^ g6 & (c5 ^ n5), o4[A7 + 96 >> 2] = D5 ^ g6 & (D5 ^ r5), o4[A7 + 92 >> 2] = E5 ^ g6 & (E5 ^ M5), o4[A7 + 88 >> 2] = i2 ^ g6 & (i2 ^ k5), o4[A7 + 84 >> 2] = Q5 ^ g6 & (Q5 ^ a5), o4[A7 + 80 >> 2] = B5 ^ g6 & (B5 ^ S4);
            }
            function yA(A7, I6) {
              var g6, C6, B5 = 0;
              for (r4 = g6 = r4 - 192 | 0, d4(C6 = g6 + 144 | 0, I6), d4(B5 = g6 + 96 | 0, C6), d4(B5, B5), H4(B5, I6, B5), H4(C6, C6, B5), d4(I6 = g6 + 48 | 0, C6), H4(B5, B5, I6), d4(I6, B5), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), H4(B5, I6, B5), d4(I6, B5), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), H4(I6, I6, B5), d4(g6, I6), d4(g6, g6), d4(g6, g6), d4(g6, g6), d4(g6, g6), d4(g6, g6), d4(g6, g6), d4(g6, g6), d4(g6, g6), d4(g6, g6), d4(g6, g6), d4(g6, g6), d4(g6, g6), d4(g6, g6), d4(g6, g6), d4(g6, g6), d4(g6, g6), d4(g6, g6), d4(g6, g6), d4(g6, g6), H4(I6, g6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), H4(B5, I6, B5), d4(I6, B5), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), H4(I6, I6, B5), d4(g6, I6), I6 = 1; d4(g6, g6), 100 != (0 | (I6 = I6 + 1 | 0)); ) ;
              H4(I6 = g6 + 48 | 0, g6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), d4(I6, I6), H4(B5 = g6 + 96 | 0, I6, B5), d4(B5, B5), d4(B5, B5), d4(B5, B5), d4(B5, B5), d4(B5, B5), H4(A7, B5, g6 + 144 | 0), r4 = g6 + 192 | 0;
            }
            function fA(A7, I6, g6) {
              var C6, B5, i2, E5, D5, h5, w5, y5, f5 = 0;
              r4 = C6 = r4 - 128 | 0, f5 = c4[41282], o4[A7 + 4 >> 2] = 0, o4[A7 + 8 >> 2] = 0, o4[A7 >> 2] = 1, o4[A7 + 12 >> 2] = 0, o4[A7 + 16 >> 2] = 0, o4[A7 + 20 >> 2] = 0, o4[A7 + 24 >> 2] = 0, o4[A7 + 28 >> 2] = 0, o4[A7 + 32 >> 2] = 0, o4[A7 + 36 >> 2] = 0, o4[A7 + 40 >> 2] = 1, Q4(A7 + 44 | 0, 0, 76), g6 = g6 - ((0 - (f5 = f5 >>> 2 ^ (128 & g6) >>> 7) & g6) << 1) | 0, FA(A7, I6 = F4(I6, 960) + 2688 | 0, c4[41282] >>> 2 ^ (255 & (1 ^ g6)) - 1 >>> 31), FA(A7, I6 + 120 | 0, c4[41282] >>> 2 ^ (255 & (2 ^ g6)) - 1 >>> 31), FA(A7, I6 + 240 | 0, c4[41282] >>> 2 ^ (255 & (3 ^ g6)) - 1 >>> 31), FA(A7, I6 + 360 | 0, c4[41282] >>> 2 ^ (255 & (4 ^ g6)) - 1 >>> 31), FA(A7, I6 + 480 | 0, c4[41282] >>> 2 ^ (255 & (5 ^ g6)) - 1 >>> 31), FA(A7, I6 + 600 | 0, c4[41282] >>> 2 ^ (255 & (6 ^ g6)) - 1 >>> 31), FA(A7, I6 + 720 | 0, c4[41282] >>> 2 ^ (255 & (7 ^ g6)) - 1 >>> 31), FA(A7, I6 + 840 | 0, c4[41282] >>> 2 ^ (255 & (8 ^ g6)) - 1 >>> 31), I6 = o4[A7 + 76 >> 2], o4[C6 + 40 >> 2] = o4[A7 + 72 >> 2], o4[C6 + 44 >> 2] = I6, g6 = o4[4 + (I6 = A7 - -64 | 0) >> 2], o4[C6 + 32 >> 2] = o4[I6 >> 2], o4[C6 + 36 >> 2] = g6, I6 = o4[A7 + 60 >> 2], o4[C6 + 24 >> 2] = o4[A7 + 56 >> 2], o4[C6 + 28 >> 2] = I6, I6 = o4[A7 + 52 >> 2], o4[C6 + 16 >> 2] = o4[A7 + 48 >> 2], o4[C6 + 20 >> 2] = I6, I6 = o4[A7 + 44 >> 2], o4[C6 + 8 >> 2] = o4[A7 + 40 >> 2], o4[C6 + 12 >> 2] = I6, I6 = o4[A7 + 4 >> 2], o4[C6 + 48 >> 2] = o4[A7 >> 2], o4[C6 + 52 >> 2] = I6, I6 = o4[A7 + 12 >> 2], o4[C6 + 56 >> 2] = o4[A7 + 8 >> 2], o4[C6 + 60 >> 2] = I6, I6 = o4[A7 + 20 >> 2], o4[C6 + 64 >> 2] = o4[A7 + 16 >> 2], o4[C6 + 68 >> 2] = I6, I6 = o4[A7 + 28 >> 2], o4[C6 + 72 >> 2] = o4[A7 + 24 >> 2], o4[C6 + 76 >> 2] = I6, I6 = o4[A7 + 36 >> 2], o4[C6 + 80 >> 2] = o4[A7 + 32 >> 2], o4[C6 + 84 >> 2] = I6, I6 = o4[A7 + 80 >> 2], g6 = o4[A7 + 84 >> 2], B5 = o4[A7 + 88 >> 2], i2 = o4[A7 + 92 >> 2], E5 = o4[A7 + 96 >> 2], D5 = o4[A7 + 100 >> 2], h5 = o4[A7 + 104 >> 2], w5 = o4[A7 + 108 >> 2], y5 = o4[A7 + 112 >> 2], o4[C6 + 124 >> 2] = 0 - o4[A7 + 116 >> 2], o4[C6 + 120 >> 2] = 0 - y5, o4[C6 + 116 >> 2] = 0 - w5, o4[C6 + 112 >> 2] = 0 - h5, o4[C6 + 108 >> 2] = 0 - D5, o4[C6 + 104 >> 2] = 0 - E5, o4[C6 + 100 >> 2] = 0 - i2, o4[C6 + 96 >> 2] = 0 - B5, o4[C6 + 92 >> 2] = 0 - g6, o4[C6 + 88 >> 2] = 0 - I6, FA(A7, C6 + 8 | 0, f5), r4 = C6 + 128 | 0;
            }
            function SA(A7, I6, g6, B5) {
              var Q5 = 0, i2 = 0, D5 = 0, o5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0, f5 = 0;
              if (g6 | B5) A: for (y5 = A7 + 224 | 0, F5 = A7 + 96 | 0, i2 = c4[A7 + 352 | 0] | c4[A7 + 353 | 0] << 8 | c4[A7 + 354 | 0] << 16 | c4[A7 + 355 | 0] << 24, D5 = A7 - -64 | 0; ; ) {
                if (Q5 = i2 + F5 | 0, !B5 & g6 >>> 0 <= (h5 = 256 - i2 | 0) >>> 0) {
                  g6 && E4(Q5, I6, g6), I6 = g6 + (c4[A7 + 352 | 0] | c4[A7 + 353 | 0] << 8 | c4[A7 + 354 | 0] << 16 | c4[A7 + 355 | 0] << 24) | 0, C5[A7 + 352 | 0] = I6, C5[A7 + 353 | 0] = I6 >>> 8, C5[A7 + 354 | 0] = I6 >>> 16, C5[A7 + 355 | 0] = I6 >>> 24;
                  break A;
                }
                if (h5 && E4(Q5, I6, h5), Q5 = h5 + (c4[A7 + 352 | 0] | c4[A7 + 353 | 0] << 8 | c4[A7 + 354 | 0] << 16 | c4[A7 + 355 | 0] << 24) | 0, C5[A7 + 352 | 0] = Q5, C5[A7 + 353 | 0] = Q5 >>> 8, C5[A7 + 354 | 0] = Q5 >>> 16, C5[A7 + 355 | 0] = Q5 >>> 24, f5 = i2 = c4[D5 + 4 | 0] | c4[D5 + 5 | 0] << 8 | c4[D5 + 6 | 0] << 16 | c4[D5 + 7 | 0] << 24, i2 = (w5 = 128 + (o5 = c4[0 | D5] | c4[D5 + 1 | 0] << 8 | c4[D5 + 2 | 0] << 16 | c4[D5 + 3 | 0] << 24) | 0) >>> 0 < 128 ? i2 + 1 | 0 : i2, C5[0 | (Q5 = D5)] = w5, C5[Q5 + 1 | 0] = w5 >>> 8, C5[Q5 + 2 | 0] = w5 >>> 16, C5[Q5 + 3 | 0] = w5 >>> 24, C5[Q5 + 4 | 0] = i2, C5[Q5 + 5 | 0] = i2 >>> 8, C5[Q5 + 6 | 0] = i2 >>> 16, C5[Q5 + 7 | 0] = i2 >>> 24, i2 = c4[A7 + 76 | 0] | c4[A7 + 77 | 0] << 8 | c4[A7 + 78 | 0] << 16 | c4[A7 + 79 | 0] << 24, i2 = (Q5 = -1 == (0 | f5) & o5 >>> 0 > 4294967167) >>> 0 > (o5 = Q5 + (c4[A7 + 72 | 0] | c4[A7 + 73 | 0] << 8 | c4[A7 + 74 | 0] << 16 | c4[A7 + 75 | 0] << 24) | 0) >>> 0 ? i2 + 1 | 0 : i2, C5[A7 + 72 | 0] = o5, C5[A7 + 73 | 0] = o5 >>> 8, C5[A7 + 74 | 0] = o5 >>> 16, C5[A7 + 75 | 0] = o5 >>> 24, C5[A7 + 76 | 0] = i2, C5[A7 + 77 | 0] = i2 >>> 8, C5[A7 + 78 | 0] = i2 >>> 16, C5[A7 + 79 | 0] = i2 >>> 24, U4(A7, F5), E4(F5, y5, 128), Q5 = i2 = (c4[A7 + 352 | 0] | c4[A7 + 353 | 0] << 8 | c4[A7 + 354 | 0] << 16 | c4[A7 + 355 | 0] << 24) - 128 | 0, C5[A7 + 352 | 0] = Q5, C5[A7 + 353 | 0] = Q5 >>> 8, C5[A7 + 354 | 0] = Q5 >>> 16, C5[A7 + 355 | 0] = Q5 >>> 24, I6 = I6 + h5 | 0, !((B5 = B5 - (g6 >>> 0 < h5 >>> 0) | 0) | (g6 = g6 - h5 | 0))) break;
              }
              return 0;
            }
            function aA(A7) {
              var I6, g6 = 0, C6 = 0, B5 = 0, Q5 = 0, i2 = 0;
              g6 = JA(o4[A7 + 16 >> 2]), C6 = JA(o4[A7 + 20 >> 2]), B5 = JA(o4[A7 + 24 >> 2]), Q5 = A7, i2 = JA(o4[A7 + 28 >> 2]), o4[Q5 + 28 >> 2] = i2, o4[A7 + 24 >> 2] = B5, o4[A7 + 20 >> 2] = C6, o4[A7 + 16 >> 2] = g6, g6 = JA(o4[A7 + 32 >> 2]), C6 = JA(o4[A7 + 36 >> 2]), B5 = JA(o4[A7 + 40 >> 2]), Q5 = A7, i2 = JA(o4[A7 + 44 >> 2]), o4[Q5 + 44 >> 2] = i2, o4[A7 + 40 >> 2] = B5, o4[A7 + 36 >> 2] = C6, o4[A7 + 32 >> 2] = g6, g6 = JA(o4[A7 + 48 >> 2]), C6 = JA(o4[A7 + 52 >> 2]), B5 = JA(o4[A7 + 56 >> 2]), Q5 = A7, i2 = JA(o4[A7 + 60 >> 2]), o4[Q5 + 60 >> 2] = i2, o4[A7 + 56 >> 2] = B5, o4[A7 + 52 >> 2] = C6, o4[A7 + 48 >> 2] = g6, C6 = JA(o4[(g6 = A7 - -64 | 0) >> 2]), B5 = JA(o4[A7 + 68 >> 2]), I6 = JA(o4[A7 + 72 >> 2]), Q5 = A7, i2 = JA(o4[A7 + 76 >> 2]), o4[Q5 + 76 >> 2] = i2, o4[A7 + 72 >> 2] = I6, o4[A7 + 68 >> 2] = B5, o4[g6 >> 2] = C6, g6 = JA(o4[A7 + 80 >> 2]), C6 = JA(o4[A7 + 84 >> 2]), B5 = JA(o4[A7 + 88 >> 2]), Q5 = A7, i2 = JA(o4[A7 + 92 >> 2]), o4[Q5 + 92 >> 2] = i2, o4[A7 + 88 >> 2] = B5, o4[A7 + 84 >> 2] = C6, o4[A7 + 80 >> 2] = g6, g6 = JA(o4[A7 + 96 >> 2]), C6 = JA(o4[A7 + 100 >> 2]), B5 = JA(o4[A7 + 104 >> 2]), Q5 = A7, i2 = JA(o4[A7 + 108 >> 2]), o4[Q5 + 108 >> 2] = i2, o4[A7 + 104 >> 2] = B5, o4[A7 + 100 >> 2] = C6, o4[A7 + 96 >> 2] = g6, g6 = JA(o4[A7 + 112 >> 2]), C6 = JA(o4[A7 + 116 >> 2]), B5 = JA(o4[A7 + 120 >> 2]), Q5 = A7, i2 = JA(o4[A7 + 124 >> 2]), o4[Q5 + 124 >> 2] = i2, o4[A7 + 120 >> 2] = B5, o4[A7 + 116 >> 2] = C6, o4[A7 + 112 >> 2] = g6, g6 = JA(o4[A7 + 128 >> 2]), C6 = JA(o4[A7 + 132 >> 2]), B5 = JA(o4[A7 + 136 >> 2]), Q5 = A7, i2 = JA(o4[A7 + 140 >> 2]), o4[Q5 + 140 >> 2] = i2, o4[A7 + 136 >> 2] = B5, o4[A7 + 132 >> 2] = C6, o4[A7 + 128 >> 2] = g6, g6 = JA(o4[A7 + 144 >> 2]), C6 = JA(o4[A7 + 148 >> 2]), B5 = JA(o4[A7 + 152 >> 2]), Q5 = A7, i2 = JA(o4[A7 + 156 >> 2]), o4[Q5 + 156 >> 2] = i2, o4[A7 + 152 >> 2] = B5, o4[A7 + 148 >> 2] = C6, o4[A7 + 144 >> 2] = g6;
            }
            function kA(A7, I6) {
              var g6, C6 = 0, B5 = 0, Q5 = 0, i2 = 0, E5 = 0, D5 = 0, c5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, r5 = 0, n5 = 0;
              C6 = o4[I6 + 40 >> 2], Q5 = o4[I6 + 4 >> 2], i2 = o4[I6 + 44 >> 2], E5 = o4[I6 + 8 >> 2], D5 = o4[I6 + 48 >> 2], c5 = o4[I6 + 12 >> 2], h5 = o4[I6 + 52 >> 2], w5 = o4[I6 + 16 >> 2], F5 = o4[I6 + 56 >> 2], y5 = o4[I6 + 20 >> 2], f5 = o4[I6 + 60 >> 2], S4 = o4[I6 + 24 >> 2], a5 = o4[(B5 = I6 - -64 | 0) >> 2], k5 = o4[I6 + 28 >> 2], M5 = o4[I6 + 68 >> 2], r5 = o4[I6 + 32 >> 2], n5 = o4[I6 + 72 >> 2], g6 = o4[I6 >> 2], o4[A7 + 36 >> 2] = o4[I6 + 36 >> 2] + o4[I6 + 76 >> 2], o4[A7 + 32 >> 2] = r5 + n5, o4[A7 + 28 >> 2] = k5 + M5, o4[A7 + 24 >> 2] = S4 + a5, o4[A7 + 20 >> 2] = y5 + f5, o4[A7 + 16 >> 2] = w5 + F5, o4[A7 + 12 >> 2] = c5 + h5, o4[A7 + 8 >> 2] = E5 + D5, o4[A7 + 4 >> 2] = Q5 + i2, o4[A7 >> 2] = C6 + g6, C6 = o4[I6 + 40 >> 2], Q5 = o4[I6 + 4 >> 2], i2 = o4[I6 + 44 >> 2], E5 = o4[I6 + 8 >> 2], D5 = o4[I6 + 48 >> 2], c5 = o4[I6 + 12 >> 2], h5 = o4[I6 + 52 >> 2], w5 = o4[I6 + 16 >> 2], F5 = o4[I6 + 56 >> 2], y5 = o4[I6 + 20 >> 2], f5 = o4[I6 + 60 >> 2], S4 = o4[I6 + 24 >> 2], B5 = o4[B5 >> 2], a5 = o4[I6 + 28 >> 2], k5 = o4[I6 + 68 >> 2], M5 = o4[I6 + 32 >> 2], r5 = o4[I6 + 72 >> 2], n5 = o4[I6 >> 2], o4[A7 + 76 >> 2] = o4[I6 + 76 >> 2] - o4[I6 + 36 >> 2], o4[A7 + 72 >> 2] = r5 - M5, o4[A7 + 68 >> 2] = k5 - a5, o4[A7 - -64 >> 2] = B5 - S4, o4[A7 + 60 >> 2] = f5 - y5, o4[A7 + 56 >> 2] = F5 - w5, o4[A7 + 52 >> 2] = h5 - c5, o4[A7 + 48 >> 2] = D5 - E5, o4[A7 + 44 >> 2] = i2 - Q5, o4[A7 + 40 >> 2] = C6 - n5, C6 = o4[I6 + 84 >> 2], o4[A7 + 80 >> 2] = o4[I6 + 80 >> 2], o4[A7 + 84 >> 2] = C6, C6 = o4[I6 + 92 >> 2], o4[A7 + 88 >> 2] = o4[I6 + 88 >> 2], o4[A7 + 92 >> 2] = C6, C6 = o4[I6 + 100 >> 2], o4[A7 + 96 >> 2] = o4[I6 + 96 >> 2], o4[A7 + 100 >> 2] = C6, C6 = o4[I6 + 108 >> 2], o4[A7 + 104 >> 2] = o4[I6 + 104 >> 2], o4[A7 + 108 >> 2] = C6, C6 = o4[I6 + 116 >> 2], o4[A7 + 112 >> 2] = o4[I6 + 112 >> 2], o4[A7 + 116 >> 2] = C6, H4(A7 + 120 | 0, I6 + 120 | 0, 1424);
            }
            function MA(A7, I6) {
              var g6, B5, i2, E5, D5, c5 = 0, h5 = 0, w5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, r5 = 0;
              (c5 = o4[A7 + 56 >> 2]) | (h5 = o4[A7 + 60 >> 2]) && (C5[(y5 = A7 - -64 | 0) + c5 | 0] = 1, !(h5 = (r5 = c5 + 1 | 0) ? h5 : h5 + 1 | 0) & r5 >>> 0 > 15 | h5 || (h5 = 15 - c5 | 0) && Q4(65 + (A7 + c5 | 0) | 0, 0, h5), C5[A7 + 80 | 0] = 1, T2(A7, y5, 16, 0)), r5 = o4[A7 + 52 >> 2], k5 = o4[A7 + 48 >> 2], y5 = o4[A7 + 44 >> 2], c5 = o4[A7 + 24 >> 2], f5 = o4[A7 + 28 >> 2] + (c5 >>> 26 | 0) | 0, w5 = o4[A7 + 32 >> 2] + (f5 >>> 26 | 0) | 0, g6 = o4[A7 + 36 >> 2] + (w5 >>> 26 | 0) | 0, h5 = (a5 = (c5 = (c5 = (67108863 & c5) + ((S4 = o4[A7 + 20 >> 2] + F4(g6 >>> 26 | 0, 5) | 0) >>> 26 | 0) | 0) & (f5 = (w5 = (D5 = (67108863 & g6) + ((E5 = (B5 = 67108863 & w5) + ((i2 = (M5 = 67108863 & f5) + ((S4 = c5 + ((h5 = 5 + (a5 = 67108863 & S4) | 0) >>> 26 | 0) | 0) >>> 26 | 0) | 0) >>> 26 | 0) | 0) >>> 26 | 0) | 0) - 67108864 | 0) >> 31) | S4 & (w5 = 67108863 & (S4 = (w5 >>> 31 | 0) - 1 | 0))) << 26 | h5 & w5 | f5 & a5) + o4[A7 + 40 >> 2] | 0, C5[0 | I6] = h5, C5[I6 + 1 | 0] = h5 >>> 8, C5[I6 + 2 | 0] = h5 >>> 16, C5[I6 + 3 | 0] = h5 >>> 24, a5 = h5 >>> 0 < a5 >>> 0, h5 = 0, h5 = (c5 = (M5 = f5 & M5 | w5 & i2) << 20 | c5 >>> 6) >>> 0 > (c5 = c5 + y5 | 0) >>> 0 ? 1 : h5, h5 = (y5 = c5) >>> 0 > (c5 = c5 + a5 | 0) >>> 0 ? h5 + 1 | 0 : h5, C5[I6 + 4 | 0] = c5, C5[I6 + 5 | 0] = c5 >>> 8, C5[I6 + 6 | 0] = c5 >>> 16, C5[I6 + 7 | 0] = c5 >>> 24, c5 = 0, y5 = (y5 = (w5 = f5 & B5 | w5 & E5) << 14 | M5 >>> 12) >>> 0 > (k5 = y5 + k5 | 0) >>> 0 ? 1 : c5, c5 = k5, k5 = h5, c5 = c5 + h5 | 0, h5 = y5, h5 = c5 >>> 0 < k5 >>> 0 ? h5 + 1 | 0 : h5, C5[I6 + 8 | 0] = c5, C5[I6 + 9 | 0] = c5 >>> 8, C5[I6 + 10 | 0] = c5 >>> 16, C5[I6 + 11 | 0] = c5 >>> 24, h5 = (c5 = (c5 = (S4 & D5 | f5 & g6) << 8 | w5 >>> 18) + r5 | 0) + h5 | 0, C5[I6 + 12 | 0] = h5, C5[I6 + 13 | 0] = h5 >>> 8, C5[I6 + 14 | 0] = h5 >>> 16, C5[I6 + 15 | 0] = h5 >>> 24, xI(A7, 88);
            }
            function rA(A7, I6, g6) {
              var B5, Q5 = 0;
              return r4 = B5 = r4 - 16 | 0, C5[B5 + 15 | 0] = 0, Q5 = -1, 0 | og[o4[9962]](A7, I6, g6) || (C5[B5 + 15 | 0] = c4[0 | A7] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 1 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 2 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 3 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 4 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 5 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 6 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 7 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 8 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 9 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 10 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 11 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 12 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 13 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 14 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 15 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 16 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 17 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 18 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 19 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 20 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 21 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 22 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 23 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 24 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 25 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 26 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 27 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 28 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 29 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 30 | 0] | c4[B5 + 15 | 0], C5[B5 + 15 | 0] = c4[A7 + 31 | 0] | c4[B5 + 15 | 0], Q5 = (c4[B5 + 15 | 0] << 23) - 8388608 >> 31), r4 = B5 + 16 | 0, Q5;
            }
            function nA(A7, I6) {
              var g6, B5, Q5, i2, E5, D5, c5, h5 = 0, w5 = 0;
              B5 = o4[I6 + 32 >> 2], Q5 = o4[I6 + 28 >> 2], i2 = o4[I6 + 24 >> 2], E5 = o4[I6 + 20 >> 2], D5 = o4[I6 + 16 >> 2], c5 = o4[I6 + 12 >> 2], h5 = o4[I6 + 4 >> 2], w5 = o4[I6 >> 2], g6 = o4[I6 + 36 >> 2], I6 = o4[I6 + 8 >> 2], w5 = F4((B5 + (Q5 + (i2 + (E5 + (D5 + (c5 + ((h5 + (w5 + (F4(g6, 19) + 16777216 >>> 25 | 0) >> 26) >> 25) + I6 >> 26) >> 25) >> 26) >> 25) >> 26) >> 25) >> 26) + g6 >> 25, 19) + w5 | 0, C5[0 | A7] = w5, C5[A7 + 2 | 0] = w5 >>> 16, C5[A7 + 1 | 0] = w5 >>> 8, h5 = h5 + (w5 >> 26) | 0, C5[A7 + 5 | 0] = h5 >>> 14, C5[A7 + 4 | 0] = h5 >>> 6, C5[A7 + 3 | 0] = w5 >>> 24 & 3 | h5 << 2, I6 = I6 + (h5 >> 25) | 0, C5[A7 + 8 | 0] = I6 >>> 13, C5[A7 + 7 | 0] = I6 >>> 5, C5[A7 + 6 | 0] = I6 << 3 | (29360128 & h5) >>> 22, w5 = (I6 >> 26) + c5 | 0, C5[A7 + 11 | 0] = w5 >>> 11, C5[A7 + 10 | 0] = w5 >>> 3, C5[A7 + 9 | 0] = w5 << 5 | (65011712 & I6) >>> 21, h5 = (w5 >> 25) + D5 | 0, C5[A7 + 15 | 0] = h5 >>> 18, C5[A7 + 14 | 0] = h5 >>> 10, C5[A7 + 13 | 0] = h5 >>> 2, I6 = (h5 >> 26) + E5 | 0, C5[A7 + 16 | 0] = I6, C5[A7 + 12 | 0] = h5 << 6 | (33030144 & w5) >>> 19, C5[A7 + 18 | 0] = I6 >>> 16, C5[A7 + 17 | 0] = I6 >>> 8, h5 = (I6 >> 25) + i2 | 0, C5[A7 + 21 | 0] = h5 >>> 15, C5[A7 + 20 | 0] = h5 >>> 7, C5[A7 + 19 | 0] = I6 >>> 24 & 1 | h5 << 1, I6 = (h5 >> 26) + Q5 | 0, C5[A7 + 24 | 0] = I6 >>> 13, C5[A7 + 23 | 0] = I6 >>> 5, C5[A7 + 22 | 0] = I6 << 3 | (58720256 & h5) >>> 23, h5 = (I6 >> 25) + B5 | 0, C5[A7 + 27 | 0] = h5 >>> 12, C5[A7 + 26 | 0] = h5 >>> 4, C5[A7 + 25 | 0] = h5 << 4 | (31457280 & I6) >>> 21, I6 = g6 + (h5 >> 26) | 0, C5[A7 + 30 | 0] = I6 >>> 10, C5[A7 + 29 | 0] = I6 >>> 2, C5[A7 + 31 | 0] = (33292288 & I6) >>> 18, C5[A7 + 28 | 0] = I6 << 6 | (66060288 & h5) >>> 20;
            }
            function tA(A7, I6) {
              var g6;
              return o4[12 + (g6 = r4 - 16 | 0) >> 2] = A7, o4[g6 + 8 >> 2] = I6, D4[g6 + 6 >> 1] = 0, D4[g6 + 6 >> 1] = h4[g6 + 6 >> 1] | c4[o4[g6 + 12 >> 2]] ^ c4[o4[g6 + 8 >> 2]], D4[g6 + 6 >> 1] = h4[g6 + 6 >> 1] | c4[o4[g6 + 12 >> 2] + 1 | 0] ^ c4[o4[g6 + 8 >> 2] + 1 | 0], D4[g6 + 6 >> 1] = h4[g6 + 6 >> 1] | c4[o4[g6 + 12 >> 2] + 2 | 0] ^ c4[o4[g6 + 8 >> 2] + 2 | 0], D4[g6 + 6 >> 1] = h4[g6 + 6 >> 1] | c4[o4[g6 + 12 >> 2] + 3 | 0] ^ c4[o4[g6 + 8 >> 2] + 3 | 0], D4[g6 + 6 >> 1] = h4[g6 + 6 >> 1] | c4[o4[g6 + 12 >> 2] + 4 | 0] ^ c4[o4[g6 + 8 >> 2] + 4 | 0], D4[g6 + 6 >> 1] = h4[g6 + 6 >> 1] | c4[o4[g6 + 12 >> 2] + 5 | 0] ^ c4[o4[g6 + 8 >> 2] + 5 | 0], D4[g6 + 6 >> 1] = h4[g6 + 6 >> 1] | c4[o4[g6 + 12 >> 2] + 6 | 0] ^ c4[o4[g6 + 8 >> 2] + 6 | 0], D4[g6 + 6 >> 1] = h4[g6 + 6 >> 1] | c4[o4[g6 + 12 >> 2] + 7 | 0] ^ c4[o4[g6 + 8 >> 2] + 7 | 0], D4[g6 + 6 >> 1] = h4[g6 + 6 >> 1] | c4[o4[g6 + 12 >> 2] + 8 | 0] ^ c4[o4[g6 + 8 >> 2] + 8 | 0], D4[g6 + 6 >> 1] = h4[g6 + 6 >> 1] | c4[o4[g6 + 12 >> 2] + 9 | 0] ^ c4[o4[g6 + 8 >> 2] + 9 | 0], D4[g6 + 6 >> 1] = h4[g6 + 6 >> 1] | c4[o4[g6 + 12 >> 2] + 10 | 0] ^ c4[o4[g6 + 8 >> 2] + 10 | 0], D4[g6 + 6 >> 1] = h4[g6 + 6 >> 1] | c4[o4[g6 + 12 >> 2] + 11 | 0] ^ c4[o4[g6 + 8 >> 2] + 11 | 0], D4[g6 + 6 >> 1] = h4[g6 + 6 >> 1] | c4[o4[g6 + 12 >> 2] + 12 | 0] ^ c4[o4[g6 + 8 >> 2] + 12 | 0], D4[g6 + 6 >> 1] = h4[g6 + 6 >> 1] | c4[o4[g6 + 12 >> 2] + 13 | 0] ^ c4[o4[g6 + 8 >> 2] + 13 | 0], D4[g6 + 6 >> 1] = h4[g6 + 6 >> 1] | c4[o4[g6 + 12 >> 2] + 14 | 0] ^ c4[o4[g6 + 8 >> 2] + 14 | 0], D4[g6 + 6 >> 1] = h4[g6 + 6 >> 1] | c4[o4[g6 + 12 >> 2] + 15 | 0] ^ c4[o4[g6 + 8 >> 2] + 15 | 0], D4[g6 + 6 >> 1] = h4[g6 + 6 >> 1], D4[g6 + 6 >> 1] = h4[g6 + 6 >> 1] - 1, D4[g6 + 6 >> 1] = h4[20640] >>> 2 ^ h4[g6 + 6 >> 1] >>> 15, h4[g6 + 6 >> 1] - 1 | 0;
            }
            function UA(A7, I6, g6) {
              var B5, i2 = 0, E5 = 0, D5 = 0, o5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0;
              r4 = B5 = r4 - 192 | 0, g6 >>> 0 >= 129 && (uA(A7), CA(A7, I6, g6, 0), W2(A7, B5), g6 = 64, I6 = B5), uA(A7), Q4(B5 - -64 | 0, 54, 128);
              A: if (g6) {
                if (F5 = 3 & g6, g6 >>> 0 >= 4) {
                  for (D5 = 252 & g6; C5[0 | (E5 = (o5 = B5 - -64 | 0) + i2 | 0)] = c4[0 | E5] ^ c4[I6 + i2 | 0], C5[0 | (y5 = (E5 = 1 | i2) + o5 | 0)] = c4[0 | y5] ^ c4[I6 + E5 | 0], C5[0 | (y5 = (E5 = 2 | i2) + o5 | 0)] = c4[0 | y5] ^ c4[I6 + E5 | 0], C5[0 | (E5 = (E5 = o5) + (o5 = 3 | i2) | 0)] = c4[0 | E5] ^ c4[I6 + o5 | 0], i2 = i2 + 4 | 0, (0 | D5) != (0 | (h5 = h5 + 4 | 0)); ) ;
                  if (!F5) break A;
                }
                for (; C5[0 | (h5 = (B5 - -64 | 0) + i2 | 0)] = c4[0 | h5] ^ c4[I6 + i2 | 0], i2 = i2 + 1 | 0, (0 | F5) != (0 | (w5 = w5 + 1 | 0)); ) ;
              }
              CA(A7, i2 = B5 - -64 | 0, 128, 0), uA(F5 = A7 + 208 | 0), Q4(i2, 92, 128);
              A: if (g6) {
                if (o5 = 3 & g6, w5 = 0, i2 = 0, g6 >>> 0 >= 4) {
                  for (g6 &= 252, h5 = 0; C5[0 | (D5 = (A7 = B5 - -64 | 0) + i2 | 0)] = c4[0 | D5] ^ c4[I6 + i2 | 0], C5[0 | (E5 = (D5 = 1 | i2) + A7 | 0)] = c4[0 | E5] ^ c4[I6 + D5 | 0], C5[0 | (E5 = (D5 = 2 | i2) + A7 | 0)] = c4[0 | E5] ^ c4[I6 + D5 | 0], C5[0 | (D5 = (E5 = A7) + (A7 = 3 | i2) | 0)] = c4[0 | D5] ^ c4[A7 + I6 | 0], i2 = i2 + 4 | 0, (0 | g6) != (0 | (h5 = h5 + 4 | 0)); ) ;
                  if (!o5) break A;
                }
                for (; C5[0 | (A7 = (B5 - -64 | 0) + i2 | 0)] = c4[0 | A7] ^ c4[I6 + i2 | 0], i2 = i2 + 1 | 0, (0 | o5) != (0 | (w5 = w5 + 1 | 0)); ) ;
              }
              return CA(F5, A7 = B5 - -64 | 0, 128, 0), xI(A7, 128), xI(B5, 64), r4 = B5 + 192 | 0, 0;
            }
            function JA(A7) {
              var I6, g6, C6, B5, Q5, i2, E5, D5, o5, c5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, r5 = 0, n5 = 0, t5 = 0, U5 = 0, J5 = 0;
              return M5 = (J5 = (w5 = (r5 = (M5 = A7 << 1) ^ A7 << 24 >> 24 >>> 7 & 27) << 1) ^ M5 << 24 >> 24 >>> 7 & 27) ^ A7, (J5 = (255 & ((I6 = A7 >>> 16 | 0) ^ (w5 = (h5 = (B5 = (C6 = (k5 = (c5 = I6 << 1) ^ I6 << 24 >> 24 >>> 7 & 27) << 1) ^ c5 << 24 >> 24 >>> 7 & 27) ^ I6) << 24 >> 24 >>> 7 & 27 ^ (a5 = (S4 = (g6 = A7 >>> 24 | 0) ^ (f5 = (y5 = g6 << 1) ^ A7 >> 31 & 27)) << 1) << 24 >> 24 >>> 7 & 27 ^ w5 << 24 >> 24 >>> 7 & 27 ^ J5 << 1 ^ (h5 ^ (o5 = a5 ^ S4 << 24 >> 24 >>> 7 & 27)) << 1) ^ (h5 = (c5 = A7 >>> 8 | 0) ^ (a5 = (Q5 = (F5 = (t5 = (n5 = c5 << 1) ^ c5 << 24 >> 24 >>> 7 & 27) ^ c5) << 1) ^ F5 << 24 >> 24 >>> 7 & 27)) << 1 ^ h5 << 24 >> 24 >>> 7 & 27 ^ A7 ^ g6)) << 8) | 255 & (c5 ^ I6 ^ (k5 = (U5 = I6 ^ k5) << 1) << 24 >> 24 >>> 7 & 27 ^ (E5 = f5 << 1) << 24 >> 24 >>> 7 & 27 ^ (D5 = E5 ^ y5 << 24 >> 24 >>> 7 & 27) << 1 ^ ((w5 = (h5 = (r5 = (i2 = A7 ^ r5) << 1) ^ i2 << 24 >> 24 >>> 7 & 27) ^ A7) ^ (U5 = k5 ^ U5 << 24 >> 24 >>> 7 & 27) ^ (F5 = (t5 = (F5 = n5 << 24 >> 24 >>> 7 & 27) ^ (n5 = t5 << 1)) ^ c5)) << 1 ^ F5 << 24 >> 24 >>> 7 & 27 ^ w5 << 24 >> 24 >>> 7 & 27 ^ g6) | (255 & (c5 ^ (y5 = I6 ^ U5) << 24 >> 24 >>> 7 & 27 ^ (f5 = D5 ^ g6) << 24 >> 24 >>> 7 & 27 ^ n5 << 24 >> 24 >>> 7 & 27 ^ r5 << 24 >> 24 >>> 7 & 27 ^ f5 << 1 ^ t5 << 1 ^ (h5 ^ y5) << 1 ^ A7 ^ g6)) << 16 | (c5 ^ I6 ^ (S4 = o5 ^ g6) << 24 >> 24 >>> 7 & 27 ^ Q5 << 24 >> 24 >>> 7 & 27 ^ M5 << 24 >> 24 >>> 7 & 27 ^ C6 << 24 >> 24 >>> 7 & 27 ^ (M5 ^ B5) << 1 ^ (S4 ^ a5) << 1 ^ A7) << 24;
            }
            function KA(A7, I6, g6, C6, B5, Q5, i2) {
              var D5, c5, h5, w5 = 0, F5 = 0, y5 = 0, f5 = 0;
              r4 = D5 = r4 - 352 | 0, iA(D5, Q5, i2);
              A: {
                if (!((!B5 & A7 - g6 >>> 0 < C6 >>> 0 | !!(0 | B5)) & A7 >>> 0 > g6 >>> 0) & (!B5 & g6 - A7 >>> 0 >= C6 >>> 0 | A7 >>> 0 >= g6 >>> 0)) {
                  if (o4[D5 + 56 >> 2] = 0, o4[D5 + 60 >> 2] = 0, o4[D5 + 48 >> 2] = 0, o4[D5 + 52 >> 2] = 0, o4[D5 + 40 >> 2] = 0, o4[D5 + 44 >> 2] = 0, o4[D5 + 32 >> 2] = 0, o4[D5 + 36 >> 2] = 0, w5 = (i2 = (F5 = !!(0 | B5)) | !B5 & C6 >>> 0 >= 32) ? 32 : C6, y5 = i2 ? 0 : B5, i2 = F5 | !B5 & C6 >>> 0 > 32, !(C6 | B5)) {
                    f5 = 1;
                    break A;
                  }
                } else C6 && E4(A7, g6, C6), o4[D5 + 56 >> 2] = 0, o4[D5 + 60 >> 2] = 0, o4[D5 + 48 >> 2] = 0, o4[D5 + 52 >> 2] = 0, o4[D5 + 40 >> 2] = 0, o4[D5 + 44 >> 2] = 0, o4[D5 + 32 >> 2] = 0, o4[D5 + 36 >> 2] = 0, w5 = (g6 = (i2 = !!(0 | B5)) | !B5 & C6 >>> 0 >= 32) ? 32 : C6, y5 = g6 ? 0 : B5, i2 |= !B5 & C6 >>> 0 > 32, g6 = A7;
                w5 && E4(D5 - -64 | 0, g6, w5), f5 = 0;
              }
              return F5 = y5, eI(c5 = D5 + 32 | 0, c5, h5 = w5 + 32 | 0, F5 = h5 >>> 0 < 32 ? F5 + 1 | 0 : F5, F5 = Q5 + 16 | 0, D5), qI(D5 + 96 | 0, c5), !w5 | f5 || E4(A7, D5 - -64 | 0, w5), xI(D5 + 32 | 0, 64), i2 && YI(A7 + w5 | 0, g6 + w5 | 0, C6 - w5 | 0, B5 - (y5 + (C6 >>> 0 < w5 >>> 0) | 0) | 0, F5, D5), xI(D5, 32), bI(g6 = D5 + 96 | 0, A7, C6, B5), WI(g6, I6), xI(g6, 256), r4 = D5 + 352 | 0, 0;
            }
            function eA(A7, I6) {
              var g6, C6 = 0, B5 = 0;
              g6 = I6;
              A: {
                I: {
                  g: {
                    if (I6 &= 255) {
                      if (3 & A7) for (; ; ) {
                        if (!(C6 = c4[0 | A7]) | (0 | I6) == (0 | C6)) break A;
                        if (!(3 & (A7 = A7 + 1 | 0))) break;
                      }
                      if (-2139062144 != (-2139062144 & ((C6 = o4[A7 >> 2]) | 16843008 - C6))) break g;
                      for (B5 = F4(I6, 16843009); ; ) {
                        if (-2139062144 != (-2139062144 & (16843008 - (I6 = C6 ^ B5) | I6))) break g;
                        if (C6 = o4[A7 + 4 >> 2], A7 = I6 = A7 + 4 | 0, -2139062144 != (-2139062144 & (16843008 - C6 | C6))) break;
                      }
                      break I;
                    }
                    C6 = A7;
                    C: {
                      B: {
                        Q: if (3 & A7) {
                          if (I6 = 0, !c4[0 | A7]) break C;
                          for (; ; ) {
                            if (!(3 & (A7 = A7 + 1 | 0))) break Q;
                            if (!c4[0 | A7]) break;
                          }
                          break B;
                        }
                        for (; I6 = A7, A7 = A7 + 4 | 0, -2139062144 == (-2139062144 & (16843008 - (B5 = o4[I6 >> 2]) | B5)); ) ;
                        for (; I6 = (A7 = I6) + 1 | 0, c4[0 | A7]; ) ;
                      }
                      I6 = A7 - C6 | 0;
                    }
                    A7 = I6 + C6 | 0;
                    break A;
                  }
                  I6 = A7;
                }
                for (; ; ) {
                  if (!(C6 = c4[0 | (A7 = I6)])) break A;
                  if (I6 = A7 + 1 | 0, (0 | C6) == (255 & g6)) break;
                }
              }
              return c4[0 | A7] == (255 & g6) ? A7 : 0;
            }
            function YA(A7, I6, g6, C6, B5, Q5, i2) {
              var D5, c5, h5 = 0, w5 = 0, F5 = 0, y5 = 0;
              r4 = D5 = r4 - 96 | 0, iA(D5, Q5, i2), i2 = D5 + 32 | 0, c5 = Q5 + 16 | 0, og[o4[9964]](i2, 32, 0, c5, D5), Q5 = -1;
              A: {
                I: if (!(0 | og[o4[9958]](g6, I6, C6, B5, i2))) {
                  if (Q5 = 0, !A7) break A;
                  g: {
                    if (!((!B5 & I6 - A7 >>> 0 < C6 >>> 0 | !!(0 | B5)) & A7 >>> 0 < I6 >>> 0) & (!B5 & A7 - I6 >>> 0 >= C6 >>> 0 | A7 >>> 0 <= I6 >>> 0)) {
                      if (!(C6 | B5)) break g;
                    } else C6 && E4(A7, I6, C6), I6 = A7;
                    if (h5 = D5 - -64 | 0, i2 = (Q5 = !B5 & C6 >>> 0 >= 32 | !!(0 | B5)) ? 0 : B5, (w5 = !(g6 = Q5 ? 32 : C6)) || E4(h5, I6, g6), F5 = Q5 = D5 + 32 | 0, Q5 = i2, eI(F5, F5, y5 = g6 + 32 | 0, Q5 = y5 >>> 0 < 32 ? Q5 + 1 | 0 : Q5, c5, D5), w5 || E4(A7, h5, g6), xI(D5 + 32 | 0, 64), Q5 = 0, !B5 & C6 >>> 0 < 33) break I;
                    YI(A7 + g6 | 0, I6 + g6 | 0, C6 - g6 | 0, B5 - (i2 + (g6 >>> 0 > C6 >>> 0) | 0) | 0, c5, D5);
                    break I;
                  }
                  eI(A7 = D5 + 32 | 0, A7, 32, 0, c5, D5), xI(A7, 64);
                }
                xI(D5, 32);
              }
              return r4 = D5 + 96 | 0, Q5;
            }
            function NA(A7, I6, g6) {
              var C6, B5, Q5, i2 = 0, E5 = 0;
              C6 = o4[I6 >> 2], B5 = o4[I6 + 12 >> 2], Q5 = o4[I6 + 8 >> 2], I6 = o4[I6 + 4 >> 2], i2 = A7, E5 = o4[g6 >> 2] ^ JA(c4[38e3 + (255 & C6) | 0] | c4[38e3 + (B5 >>> 8 & 255) | 0] << 8 | c4[38e3 + (Q5 >>> 16 & 255) | 0] << 16 | c4[38e3 + (I6 >>> 24 | 0) | 0] << 24), o4[i2 >> 2] = E5, i2 = A7, E5 = o4[g6 + 4 >> 2] ^ JA(c4[38e3 + (255 & I6) | 0] | c4[38e3 + (C6 >>> 8 & 255) | 0] << 8 | c4[38e3 + (B5 >>> 16 & 255) | 0] << 16 | c4[38e3 + (Q5 >>> 24 | 0) | 0] << 24), o4[i2 + 4 >> 2] = E5, i2 = A7, E5 = o4[g6 + 8 >> 2] ^ JA(c4[38e3 + (255 & Q5) | 0] | c4[38e3 + (I6 >>> 8 & 255) | 0] << 8 | c4[38e3 + (C6 >>> 16 & 255) | 0] << 16 | c4[38e3 + (B5 >>> 24 | 0) | 0] << 24), o4[i2 + 8 >> 2] = E5, i2 = A7, E5 = o4[g6 + 12 >> 2] ^ JA(c4[38e3 + (255 & B5) | 0] | c4[38e3 + (Q5 >>> 8 & 255) | 0] << 8 | c4[38e3 + (I6 >>> 16 & 255) | 0] << 16 | c4[38e3 + (C6 >>> 24 | 0) | 0] << 24), o4[i2 + 12 >> 2] = E5;
            }
            function GA(A7, I6, g6) {
              var C6, B5, Q5;
              C6 = o4[I6 + 12 >> 2], B5 = o4[I6 + 8 >> 2], Q5 = o4[I6 + 4 >> 2], I6 = o4[I6 >> 2], o4[A7 >> 2] = o4[g6 >> 2] ^ o4[36976 + (C6 >>> 22 & 1020) >> 2] ^ o4[35952 + (B5 >>> 14 & 1020) >> 2] ^ o4[34928 + (Q5 >>> 6 & 1020) >> 2] ^ o4[33904 + ((255 & I6) << 2) >> 2], o4[A7 + 4 >> 2] = o4[g6 + 4 >> 2] ^ o4[36976 + (I6 >>> 22 & 1020) >> 2] ^ o4[35952 + (C6 >>> 14 & 1020) >> 2] ^ o4[34928 + (B5 >>> 6 & 1020) >> 2] ^ o4[33904 + ((255 & Q5) << 2) >> 2], o4[A7 + 8 >> 2] = o4[g6 + 8 >> 2] ^ o4[36976 + (Q5 >>> 22 & 1020) >> 2] ^ o4[35952 + (I6 >>> 14 & 1020) >> 2] ^ o4[34928 + (C6 >>> 6 & 1020) >> 2] ^ o4[33904 + ((255 & B5) << 2) >> 2], o4[A7 + 12 >> 2] = o4[g6 + 12 >> 2] ^ o4[36976 + (B5 >>> 22 & 1020) >> 2] ^ o4[35952 + (Q5 >>> 14 & 1020) >> 2] ^ o4[34928 + (I6 >>> 6 & 1020) >> 2] ^ o4[33904 + ((255 & C6) << 2) >> 2];
            }
            function HA(A7, I6, g6, C6, B5, i2, E5, D5, h5, w5) {
              var F5, y5;
              return r4 = F5 = r4 - 400 | 0, o4[F5 + 4 >> 2] = 0, BA(y5 = F5 + 16 | 0, h5, w5), w5 = c4[h5 + 20 | 0] | c4[h5 + 21 | 0] << 8 | c4[h5 + 22 | 0] << 16 | c4[h5 + 23 | 0] << 24, o4[F5 + 8 >> 2] = c4[h5 + 16 | 0] | c4[h5 + 17 | 0] << 8 | c4[h5 + 18 | 0] << 16 | c4[h5 + 19 | 0] << 24, o4[F5 + 12 >> 2] = w5, sI(w5 = F5 + 80 | 0, 64, F5 + 4 | 0, y5), qI(h5 = F5 + 144 | 0, w5), xI(w5, 64), bI(h5, i2, E5, D5), bI(h5, 39728, 0 - E5 & 15, 0), bI(h5, I6, g6, C6), bI(h5, 39728, 0 - g6 & 15, 0), o4[F5 + 72 >> 2] = E5, o4[F5 + 76 >> 2] = D5, bI(h5, i2 = F5 + 72 | 0, 8, 0), o4[F5 + 72 >> 2] = g6, o4[F5 + 76 >> 2] = C6, bI(h5, i2, 8, 0), WI(h5, i2 = F5 + 48 | 0), xI(h5, 256), h5 = tA(i2, B5), xI(i2, 16), A7 && (h5 ? (g6 && Q4(A7, 0, g6), h5 = -1) : (nI(A7, I6, g6, C6, F5 + 4 | 0, F5 + 16 | 0), h5 = 0)), xI(F5 + 16 | 0, 32), r4 = F5 + 400 | 0, h5;
            }
            function sA(A7, I6, g6) {
              var C6, B5, Q5;
              C6 = o4[I6 >> 2], B5 = o4[I6 + 4 >> 2], Q5 = o4[I6 + 8 >> 2], I6 = o4[I6 + 12 >> 2], o4[A7 >> 2] = o4[g6 >> 2] ^ (c4[38256 + (255 & C6) | 0] | c4[38256 + (B5 >>> 8 & 255) | 0] << 8 | c4[38256 + (Q5 >>> 16 & 255) | 0] << 16 | c4[38256 + (I6 >>> 24 | 0) | 0] << 24), o4[A7 + 4 >> 2] = o4[g6 + 4 >> 2] ^ (c4[38256 + (255 & B5) | 0] | c4[38256 + (Q5 >>> 8 & 255) | 0] << 8 | c4[38256 + (I6 >>> 16 & 255) | 0] << 16 | c4[38256 + (C6 >>> 24 | 0) | 0] << 24), o4[A7 + 8 >> 2] = o4[g6 + 8 >> 2] ^ (c4[38256 + (255 & Q5) | 0] | c4[38256 + (I6 >>> 8 & 255) | 0] << 8 | c4[38256 + (C6 >>> 16 & 255) | 0] << 16 | c4[38256 + (B5 >>> 24 | 0) | 0] << 24), o4[A7 + 12 >> 2] = o4[g6 + 12 >> 2] ^ (c4[38256 + (255 & I6) | 0] | c4[38256 + (C6 >>> 8 & 255) | 0] << 8 | c4[38256 + (B5 >>> 16 & 255) | 0] << 16 | c4[38256 + (Q5 >>> 24 | 0) | 0] << 24);
            }
            function pA(A7, I6, g6) {
              var C6, B5, Q5;
              C6 = o4[I6 >> 2], B5 = o4[I6 + 12 >> 2], Q5 = o4[I6 + 8 >> 2], I6 = o4[I6 + 4 >> 2], o4[A7 >> 2] = o4[g6 >> 2] ^ (c4[38e3 + (255 & C6) | 0] | c4[38e3 + (B5 >>> 8 & 255) | 0] << 8 | c4[38e3 + (Q5 >>> 16 & 255) | 0] << 16 | c4[38e3 + (I6 >>> 24 | 0) | 0] << 24), o4[A7 + 4 >> 2] = o4[g6 + 4 >> 2] ^ (c4[38e3 + (255 & I6) | 0] | c4[38e3 + (C6 >>> 8 & 255) | 0] << 8 | c4[38e3 + (B5 >>> 16 & 255) | 0] << 16 | c4[38e3 + (Q5 >>> 24 | 0) | 0] << 24), o4[A7 + 8 >> 2] = o4[g6 + 8 >> 2] ^ (c4[38e3 + (255 & Q5) | 0] | c4[38e3 + (I6 >>> 8 & 255) | 0] << 8 | c4[38e3 + (C6 >>> 16 & 255) | 0] << 16 | c4[38e3 + (B5 >>> 24 | 0) | 0] << 24), o4[A7 + 12 >> 2] = o4[g6 + 12 >> 2] ^ (c4[38e3 + (255 & B5) | 0] | c4[38e3 + (Q5 >>> 8 & 255) | 0] << 8 | c4[38e3 + (I6 >>> 16 & 255) | 0] << 16 | c4[38e3 + (C6 >>> 24 | 0) | 0] << 24);
            }
            function LA(A7, I6, g6, C6, B5, Q5, i2, E5, D5, h5, w5) {
              var F5, y5, f5;
              return r4 = F5 = r4 - 384 | 0, o4[F5 + 4 >> 2] = 0, BA(y5 = F5 + 16 | 0, h5, w5), w5 = c4[h5 + 20 | 0] | c4[h5 + 21 | 0] << 8 | c4[h5 + 22 | 0] << 16 | c4[h5 + 23 | 0] << 24, o4[F5 + 8 >> 2] = c4[h5 + 16 | 0] | c4[h5 + 17 | 0] << 8 | c4[h5 + 18 | 0] << 16 | c4[h5 + 19 | 0] << 24, o4[F5 + 12 >> 2] = w5, sI(w5 = F5 - -64 | 0, 64, f5 = F5 + 4 | 0, y5), qI(h5 = F5 + 128 | 0, w5), xI(w5, 64), bI(h5, i2, E5, D5), bI(h5, 39728, 0 - E5 & 15, 0), nI(A7, C6, B5, Q5, f5, y5), bI(h5, A7, B5, Q5), bI(h5, 39728, 0 - B5 & 15, 0), o4[F5 + 56 >> 2] = E5, o4[F5 + 60 >> 2] = D5, bI(h5, A7 = F5 + 56 | 0, 8, 0), o4[F5 + 56 >> 2] = B5, o4[F5 + 60 >> 2] = Q5, bI(h5, A7, 8, 0), WI(h5, I6), xI(h5, 256), g6 && (o4[g6 >> 2] = 16, o4[g6 + 4 >> 2] = 0), xI(F5 + 16 | 0, 32), r4 = F5 + 384 | 0, 0;
            }
            function dA(A7, I6, g6, B5, Q5) {
              var i2, E5 = 0, D5 = 0;
              if (r4 = i2 = r4 - 16 | 0, !c4[A7 + 228 | 0]) {
                A: {
                  I: {
                    g: {
                      C: switch ((E5 = o4[A7 + 224 >> 2]) - Q5 | 0) {
                        case 0:
                          break C;
                        case 1:
                          break g;
                        default:
                          break I;
                      }
                      E5 = -128 ^ c4[A7 + 229 | 0];
                      break A;
                    }
                    t4(A7), E5 = 0, o4[A7 + 224 >> 2] = 0;
                  }
                  zA(A7, A7 + 229 | 0, E5, 1), E5 = 128;
                }
                C5[i2 + 15 | 0] = E5, zA(A7, i2 + 15 | 0, Q5, 1), t4(A7), C5[A7 + 228 | 0] = 1, o4[A7 + 224 >> 2] = 0;
              }
              if (g6) for (E5 = o4[A7 + 224 >> 2]; (0 | B5) == (0 | E5) && (t4(A7), o4[A7 + 224 >> 2] = 0, E5 = 0), zI(A7, I6 + D5 | 0, E5, Q5 = (Q5 = B5 - E5 | 0) >>> 0 < (E5 = g6 - D5 | 0) >>> 0 ? Q5 : E5), E5 = Q5 + o4[A7 + 224 >> 2] | 0, o4[A7 + 224 >> 2] = E5, (D5 = Q5 + D5 | 0) >>> 0 < g6 >>> 0; ) ;
              return r4 = i2 + 16 | 0, 0;
            }
            function PA(A7, I6, g6, B5, Q5) {
              var i2, E5 = 0, D5 = 0;
              if (r4 = i2 = r4 - 16 | 0, !c4[A7 + 228 | 0]) {
                A: {
                  I: {
                    g: {
                      C: switch ((E5 = o4[A7 + 224 >> 2]) - Q5 | 0) {
                        case 0:
                          break C;
                        case 1:
                          break g;
                        default:
                          break I;
                      }
                      E5 = -128 ^ c4[A7 + 229 | 0];
                      break A;
                    }
                    K4(A7), E5 = 0, o4[A7 + 224 >> 2] = 0;
                  }
                  zA(A7, A7 + 229 | 0, E5, 1), E5 = 128;
                }
                C5[i2 + 15 | 0] = E5, zA(A7, i2 + 15 | 0, Q5, 1), K4(A7), C5[A7 + 228 | 0] = 1, o4[A7 + 224 >> 2] = 0;
              }
              if (g6) for (E5 = o4[A7 + 224 >> 2]; (0 | B5) == (0 | E5) && (K4(A7), o4[A7 + 224 >> 2] = 0, E5 = 0), zI(A7, I6 + D5 | 0, E5, Q5 = (Q5 = B5 - E5 | 0) >>> 0 < (E5 = g6 - D5 | 0) >>> 0 ? Q5 : E5), E5 = Q5 + o4[A7 + 224 >> 2] | 0, o4[A7 + 224 >> 2] = E5, (D5 = Q5 + D5 | 0) >>> 0 < g6 >>> 0; ) ;
              return r4 = i2 + 16 | 0, 0;
            }
            function RA(A7, I6, g6, C6) {
              var B5, Q5 = 0;
              return r4 = B5 = r4 - 208 | 0, o4[B5 + 72 >> 2] = 0, o4[B5 + 76 >> 2] = 0, o4[B5 + 64 >> 2] = 0, o4[B5 + 68 >> 2] = 0, Q5 = o4[9633], o4[B5 >> 2] = o4[9632], o4[B5 + 4 >> 2] = Q5, Q5 = o4[9635], o4[B5 + 8 >> 2] = o4[9634], o4[B5 + 12 >> 2] = Q5, Q5 = o4[9637], o4[B5 + 16 >> 2] = o4[9636], o4[B5 + 20 >> 2] = Q5, Q5 = o4[9639], o4[B5 + 24 >> 2] = o4[9638], o4[B5 + 28 >> 2] = Q5, Q5 = o4[9641], o4[B5 + 32 >> 2] = o4[9640], o4[B5 + 36 >> 2] = Q5, Q5 = o4[9643], o4[B5 + 40 >> 2] = o4[9642], o4[B5 + 44 >> 2] = Q5, Q5 = o4[9645], o4[B5 + 48 >> 2] = o4[9644], o4[B5 + 52 >> 2] = Q5, Q5 = o4[9647], o4[B5 + 56 >> 2] = o4[9646], o4[B5 + 60 >> 2] = Q5, CA(B5, I6, g6, C6), W2(B5, A7), r4 = B5 + 208 | 0, 0;
            }
            function bA(A7, I6) {
              var g6 = 0;
              g6 = !!(0 | I6);
              A: {
                I: {
                  g: if (!(!(3 & A7) | !I6)) for (; ; ) {
                    if (58 == c4[0 | A7]) break I;
                    if (g6 = !!(0 | (I6 = I6 - 1 | 0)), !(3 & (A7 = A7 + 1 | 0))) break g;
                    if (!I6) break;
                  }
                  if (!g6) break A;
                  if (!(58 == c4[0 | A7] | I6 >>> 0 < 4)) for (; ; ) {
                    if (-2139062144 != (-2139062144 & (16843008 - (g6 = 976894522 ^ o4[A7 >> 2]) | g6))) break I;
                    if (A7 = A7 + 4 | 0, !((I6 = I6 - 4 | 0) >>> 0 > 3)) break;
                  }
                  if (!I6) break A;
                }
                for (; ; ) {
                  if (58 == c4[0 | A7]) return A7;
                  if (A7 = A7 + 1 | 0, !(I6 = I6 - 1 | 0)) break;
                }
              }
              return 0;
            }
            function vA(A7, I6) {
              var g6, B5 = 0, Q5 = 0, i2 = 0, E5 = 0;
              C5[15 + (g6 = r4 - 16 | 0) | 0] = 0;
              A: if (I6) {
                if (Q5 = 3 & I6, I6 >>> 0 >= 4) {
                  for (E5 = -4 & I6; I6 = A7 + B5 | 0, C5[g6 + 15 | 0] = c4[0 | I6] | c4[g6 + 15 | 0], C5[g6 + 15 | 0] = c4[I6 + 1 | 0] | c4[g6 + 15 | 0], C5[g6 + 15 | 0] = c4[I6 + 2 | 0] | c4[g6 + 15 | 0], C5[g6 + 15 | 0] = c4[I6 + 3 | 0] | c4[g6 + 15 | 0], B5 = B5 + 4 | 0, (0 | E5) != (0 | (i2 = i2 + 4 | 0)); ) ;
                  if (!Q5) break A;
                }
                for (I6 = 0; C5[g6 + 15 | 0] = c4[A7 + B5 | 0] | c4[g6 + 15 | 0], B5 = B5 + 1 | 0, (0 | Q5) != (0 | (I6 = I6 + 1 | 0)); ) ;
              }
              return c4[g6 + 15 | 0] - 1 >>> 31 | 0;
            }
            function uA(A7) {
              var I6 = 0;
              o4[A7 + 72 >> 2] = 0, o4[A7 + 76 >> 2] = 0, o4[(I6 = A7 - -64 | 0) >> 2] = 0, o4[I6 + 4 >> 2] = 0, I6 = o4[9633], o4[A7 >> 2] = o4[9632], o4[A7 + 4 >> 2] = I6, I6 = o4[9635], o4[A7 + 8 >> 2] = o4[9634], o4[A7 + 12 >> 2] = I6, I6 = o4[9637], o4[A7 + 16 >> 2] = o4[9636], o4[A7 + 20 >> 2] = I6, I6 = o4[9639], o4[A7 + 24 >> 2] = o4[9638], o4[A7 + 28 >> 2] = I6, I6 = o4[9641], o4[A7 + 32 >> 2] = o4[9640], o4[A7 + 36 >> 2] = I6, I6 = o4[9643], o4[A7 + 40 >> 2] = o4[9642], o4[A7 + 44 >> 2] = I6, I6 = o4[9645], o4[A7 + 48 >> 2] = o4[9644], o4[A7 + 52 >> 2] = I6, I6 = o4[9647], o4[A7 + 56 >> 2] = o4[9646], o4[A7 + 60 >> 2] = I6;
            }
            function zA(A7, I6, g6, B5) {
              var Q5 = 0, i2 = 0, E5 = 0, D5 = 0, o5 = 0;
              A: if (B5) {
                if (E5 = 3 & B5, g6 = A7 + g6 | 0, A7 = 0, B5 >>> 0 >= 4) {
                  for (o5 = -4 & B5, B5 = 0; C5[0 | (Q5 = A7 + g6 | 0)] = c4[0 | Q5] ^ c4[A7 + I6 | 0], C5[0 | (i2 = (Q5 = 1 | A7) + g6 | 0)] = c4[0 | i2] ^ c4[I6 + Q5 | 0], C5[0 | (i2 = (Q5 = 2 | A7) + g6 | 0)] = c4[0 | i2] ^ c4[I6 + Q5 | 0], C5[0 | (i2 = (Q5 = 3 | A7) + g6 | 0)] = c4[0 | i2] ^ c4[I6 + Q5 | 0], A7 = A7 + 4 | 0, (0 | o5) != (0 | (B5 = B5 + 4 | 0)); ) ;
                  if (!E5) break A;
                }
                for (; C5[0 | (B5 = A7 + g6 | 0)] = c4[0 | B5] ^ c4[A7 + I6 | 0], A7 = A7 + 1 | 0, (0 | E5) != (0 | (D5 = D5 + 1 | 0)); ) ;
              }
            }
            function OA(A7, I6, g6) {
              var B5, Q5 = 0, i2 = 0;
              o4[12 + (B5 = r4 - 16 | 0) >> 2] = A7, o4[B5 + 8 >> 2] = I6, A7 = 0, C5[B5 + 7 | 0] = 0;
              A: if (g6) {
                if (1 != (0 | g6)) {
                  for (I6 = 1 & g6, i2 = -2 & g6, g6 = 0; C5[B5 + 7 | 0] = c4[B5 + 7 | 0] | c4[o4[B5 + 12 >> 2] + A7 | 0] ^ c4[o4[B5 + 8 >> 2] + A7 | 0], Q5 = 1 | A7, C5[B5 + 7 | 0] = c4[B5 + 7 | 0] | c4[Q5 + o4[B5 + 12 >> 2] | 0] ^ c4[o4[B5 + 8 >> 2] + Q5 | 0], A7 = A7 + 2 | 0, (0 | i2) != (0 | (g6 = g6 + 2 | 0)); ) ;
                  if (!I6) break A;
                }
                C5[B5 + 7 | 0] = c4[B5 + 7 | 0] | c4[o4[B5 + 12 >> 2] + A7 | 0] ^ c4[o4[B5 + 8 >> 2] + A7 | 0];
              }
              return (c4[B5 + 7 | 0] - 1 >>> 31 | 0) - 1 | 0;
            }
            function qA(A7) {
              for (var I6 = 0, g6 = 0, C6 = 0, B5 = 0, Q5 = 0, i2 = 0, E5 = 0, D5 = 0, o5 = 0, h5 = 0; B5 = (g6 = c4[A7 + C6 | 0]) ^ c4[0 | (I6 = C6 + 2432 | 0)] | B5, Q5 = g6 ^ c4[I6 + 192 | 0] | Q5, i2 = g6 ^ c4[I6 + 160 | 0] | i2, E5 = g6 ^ c4[I6 + 128 | 0] | E5, D5 = g6 ^ c4[I6 + 96 | 0] | D5, o5 = g6 ^ c4[I6 - -64 | 0] | o5, h5 = g6 ^ c4[I6 + 32 | 0] | h5, 31 != (0 | (C6 = C6 + 1 | 0)); ) ;
              return ((255 & ((I6 = 127 ^ (A7 = 127 & c4[A7 + 31 | 0])) | Q5)) - 1 | (255 & (I6 | i2)) - 1 | (255 & (I6 | E5)) - 1 | (255 & (122 ^ A7 | D5)) - 1 | (255 & (5 ^ A7 | o5)) - 1 | (255 & (A7 | h5)) - 1 | (255 & (A7 | B5)) - 1) >>> 8 & 1;
            }
            function WA(A7, I6, g6, C6, B5, i2, E5, D5, c5, h5) {
              var w5, F5, y5;
              return r4 = w5 = r4 - 352 | 0, sI(y5 = w5 + 32 | 0, 64, c5, h5), qI(F5 = w5 + 96 | 0, y5), xI(y5, 64), bI(F5, i2, E5, D5), bI(F5, 39792, 0 - E5 & 15, 0), bI(F5, I6, g6, C6), bI(F5, 39792, 0 - g6 & 15, 0), o4[w5 + 24 >> 2] = E5, o4[w5 + 28 >> 2] = D5, bI(F5, i2 = w5 + 24 | 0, 8, 0), o4[w5 + 24 >> 2] = g6, o4[w5 + 28 >> 2] = C6, bI(F5, i2, 8, 0), WI(F5, w5), xI(F5, 256), i2 = tA(w5, B5), xI(w5, 16), A7 && (i2 ? (g6 && Q4(A7, 0, g6), i2 = -1) : (II(A7, I6, g6, C6, c5, 1, h5), i2 = 0)), r4 = w5 + 352 | 0, i2;
            }
            function xA(A7, I6, g6) {
              var C6 = 0, B5 = 0, Q5 = 0, i2 = 0;
              return B5 = 31 & (Q5 = i2 = 63 & g6), Q5 = Q5 >>> 0 >= 32 ? -1 >>> B5 | 0 : (C6 = -1 >>> B5 | 0) | (1 << B5) - 1 << 32 - B5, Q5 &= A7, C6 &= I6, B5 = 31 & i2, i2 >>> 0 >= 32 ? (C6 = Q5 << B5, i2 = 0) : (C6 = (1 << B5) - 1 & Q5 >>> 32 - B5 | C6 << B5, i2 = Q5 << B5), Q5 = C6, C6 = 31 & (B5 = 0 - g6 & 63), B5 >>> 0 >= 32 ? (C6 = -1 << C6, g6 = 0) : C6 = (g6 = -1 << C6) | (1 << C6) - 1 & -1 >>> 32 - C6, A7 &= g6, I6 &= C6, C6 = 31 & B5, B5 >>> 0 >= 32 ? (g6 = 0, A7 = I6 >>> C6 | 0) : (g6 = I6 >>> C6 | 0, A7 = ((1 << C6) - 1 & I6) << 32 - C6 | A7 >>> C6), n4 = g6 | Q5, A7 | i2;
            }
            function VA(A7, I6, g6, C6, B5, Q5, i2, E5, D5, c5, h5) {
              var w5, F5, y5;
              return r4 = w5 = r4 - 336 | 0, sI(y5 = w5 + 16 | 0, 64, c5, h5), qI(F5 = w5 + 80 | 0, y5), xI(y5, 64), bI(F5, i2, E5, D5), bI(F5, 39792, 0 - E5 & 15, 0), II(A7, C6, B5, Q5, c5, 1, h5), bI(F5, A7, B5, Q5), bI(F5, 39792, 0 - B5 & 15, 0), o4[w5 + 8 >> 2] = E5, o4[w5 + 12 >> 2] = D5, bI(F5, A7 = w5 + 8 | 0, 8, 0), o4[w5 + 8 >> 2] = B5, o4[w5 + 12 >> 2] = Q5, bI(F5, A7, 8, 0), WI(F5, I6), xI(F5, 256), g6 && (o4[g6 >> 2] = 16, o4[g6 + 4 >> 2] = 0), r4 = w5 + 336 | 0, 0;
            }
            function jA(A7, I6, g6, C6, B5, i2, E5, D5, c5, h5) {
              var w5, F5, y5;
              return r4 = w5 = r4 - 352 | 0, dI(y5 = w5 + 32 | 0, c5, h5), qI(F5 = w5 + 96 | 0, y5), xI(y5, 64), bI(F5, i2, E5, D5), o4[w5 + 24 >> 2] = E5, o4[w5 + 28 >> 2] = D5, bI(F5, i2 = w5 + 24 | 0, 8, 0), bI(F5, I6, g6, C6), o4[w5 + 24 >> 2] = g6, o4[w5 + 28 >> 2] = C6, bI(F5, i2, 8, 0), WI(F5, w5), xI(F5, 256), i2 = tA(w5, B5), xI(w5, 16), A7 && (i2 ? (g6 && Q4(A7, 0, g6), i2 = -1) : (MI(A7, I6, g6, C6, c5, h5), i2 = 0)), r4 = w5 + 352 | 0, i2;
            }
            function mA(A7, I6) {
              var g6;
              for (o4[12 + (g6 = r4 - 16 | 0) >> 2] = A7, o4[g6 + 8 >> 2] = I6, A7 = 0, D4[g6 + 6 >> 1] = 0; D4[g6 + 6 >> 1] = h4[g6 + 6 >> 1] | c4[o4[g6 + 12 >> 2] + A7 | 0] ^ c4[o4[g6 + 8 >> 2] + A7 | 0], I6 = 1 | A7, D4[g6 + 6 >> 1] = h4[g6 + 6 >> 1] | c4[I6 + o4[g6 + 12 >> 2] | 0] ^ c4[I6 + o4[g6 + 8 >> 2] | 0], 32 != (0 | (A7 = A7 + 2 | 0)); ) ;
              return D4[g6 + 6 >> 1] = h4[g6 + 6 >> 1], D4[g6 + 6 >> 1] = h4[g6 + 6 >> 1] - 1, D4[g6 + 6 >> 1] = h4[20640] >>> 2 ^ h4[g6 + 6 >> 1] >>> 15, h4[g6 + 6 >> 1] - 1 | 0;
            }
            function lA(A7, I6, g6, C6, B5, Q5, i2, E5, D5, c5, h5) {
              var w5, F5, y5;
              return r4 = w5 = r4 - 336 | 0, dI(y5 = w5 + 16 | 0, c5, h5), qI(F5 = w5 + 80 | 0, y5), xI(y5, 64), bI(F5, i2, E5, D5), o4[w5 + 8 >> 2] = E5, o4[w5 + 12 >> 2] = D5, bI(F5, i2 = w5 + 8 | 0, 8, 0), MI(A7, C6, B5, Q5, c5, h5), bI(F5, A7, B5, Q5), o4[w5 + 8 >> 2] = B5, o4[w5 + 12 >> 2] = Q5, bI(F5, i2, 8, 0), WI(F5, I6), xI(F5, 256), g6 && (o4[g6 >> 2] = 16, o4[g6 + 4 >> 2] = 0), r4 = w5 + 336 | 0, 0;
            }
            function _A(A7, I6, g6, B5) {
              var Q5, i2 = 0, E5 = 0;
              if (c4[A7 + 228 | 0] && (o4[A7 + 224 >> 2] = 0, C5[A7 + 228 | 0] = 0), Q5 = g6, g6) for (g6 = o4[A7 + 224 >> 2]; (0 | g6) == (0 | B5) && (t4(A7), o4[A7 + 224 >> 2] = 0, g6 = 0), zA(A7, I6 + E5 | 0, g6, i2 = (g6 = B5 - g6 | 0) >>> 0 < (i2 = Q5 - E5 | 0) >>> 0 ? g6 : i2), g6 = i2 + o4[A7 + 224 >> 2] | 0, o4[A7 + 224 >> 2] = g6, Q5 >>> 0 > (E5 = E5 + i2 | 0) >>> 0; ) ;
              return 0;
            }
            function XA(A7, I6, g6, B5) {
              var Q5, i2 = 0, E5 = 0;
              if (c4[A7 + 228 | 0] && (o4[A7 + 224 >> 2] = 0, C5[A7 + 228 | 0] = 0), Q5 = g6, g6) for (g6 = o4[A7 + 224 >> 2]; (0 | g6) == (0 | B5) && (K4(A7), o4[A7 + 224 >> 2] = 0, g6 = 0), zA(A7, I6 + E5 | 0, g6, i2 = (g6 = B5 - g6 | 0) >>> 0 < (i2 = Q5 - E5 | 0) >>> 0 ? g6 : i2), g6 = i2 + o4[A7 + 224 >> 2] | 0, o4[A7 + 224 >> 2] = g6, Q5 >>> 0 > (E5 = E5 + i2 | 0) >>> 0; ) ;
              return 0;
            }
            function TA(A7, I6, g6, C6, B5, Q5, i2, E5, D5, c5, h5) {
              var w5 = 0, F5 = 0, y5 = 0;
              return F5 = -1, (w5 = C6 >>> 0 < 32) & !B5 || !(w5 = B5 - w5 | 0) & (y5 = C6 - 32 | 0) >>> 0 > 4294967263 | w5 | !E5 & i2 >>> 0 > 4294967263 | E5 || (F5 = 0 | og[o4[h5 >> 2]](A7, g6, y5, (g6 + C6 | 0) - 32 | 0, 32, Q5, i2, D5, c5)), I6 && (o4[I6 >> 2] = F5 ? 0 : C6 - 32 | 0, o4[I6 + 4 >> 2] = F5 ? 0 : B5 - (C6 >>> 0 < 32) | 0), F5;
            }
            function ZA(A7) {
              var I6 = 0, g6 = 0, B5 = 0, Q5 = 0, i2 = 0;
              for (I6 = 1; g6 = (B5 = I6) + c4[0 | (I6 = A7 + Q5 | 0)] | 0, C5[0 | I6] = g6, g6 = c4[I6 + 1 | 0] + (g6 >>> 8 | 0) | 0, C5[I6 + 1 | 0] = g6, g6 = c4[I6 + 2 | 0] + (g6 >>> 8 | 0) | 0, C5[I6 + 2 | 0] = g6, B5 = I6, I6 = c4[I6 + 3 | 0] + (g6 >>> 8 | 0) | 0, C5[B5 + 3 | 0] = I6, I6 = I6 >>> 8 | 0, Q5 = Q5 + 4 | 0, 4 != (0 | (i2 = i2 + 4 | 0)); ) ;
            }
            function $A(A7, I6, g6, C6, B5, Q5, E5, D5, c5, h5, w5) {
              return !B5 & C6 >>> 0 > 4294967263 | !!(0 | B5) | !D5 & E5 >>> 0 >= 4294967264 | !!(0 | D5) ? (KI(), i()) : (A7 = 0 | og[o4[w5 >> 2]](A7, A7 + C6 | 0, 32, g6, C6, Q5, E5, c5, h5), I6 && (C6 = (g6 = C6 + 32 | 0) >>> 0 < 32 ? B5 + 1 | 0 : B5, o4[I6 >> 2] = A7 ? 0 : g6, o4[I6 + 4 >> 2] = A7 ? 0 : C6)), A7;
            }
            function AI(A7, I6, g6, C6) {
              var B5, Q5, i2, E5, D5 = 0, o5 = 0;
              return E5 = F4(D5 = g6 >>> 16 | 0, o5 = A7 >>> 16 | 0), D5 = (65535 & (o5 = ((i2 = F4(B5 = 65535 & g6, Q5 = 65535 & A7)) >>> 16 | 0) + F4(o5, B5) | 0)) + F4(D5, Q5) | 0, n4 = (F4(I6, g6) + E5 | 0) + F4(A7, C6) + (o5 >>> 16) + (D5 >>> 16) | 0, 65535 & i2 | D5 << 16;
            }
            function II(A7, I6, g6, C6, B5, Q5, E5) {
              var D5 = 0, c5 = 0;
              D5 = C6, 1 == (((D5 = (c5 = g6 + 63 | 0) >>> 0 < 63 ? D5 + 1 | 0 : D5) >>> 6 | 0) + !!(0 | (D5 = (63 & D5) << 26 | c5 >>> 6)) | 0) & Q5 >>> 0 > (c5 = 0 - D5 | 0) >>> 0 | 1 == (0 | C6) | C6 >>> 0 > 1 ? (KI(), i()) : og[o4[9973]](A7, I6, g6, C6, B5, Q5, E5);
            }
            function gI(A7) {
              var I6 = 0;
              o4[A7 + 32 >> 2] = 0, o4[A7 + 36 >> 2] = 0, I6 = o4[9845], o4[A7 >> 2] = o4[9844], o4[A7 + 4 >> 2] = I6, I6 = o4[9847], o4[A7 + 8 >> 2] = o4[9846], o4[A7 + 12 >> 2] = I6, I6 = o4[9849], o4[A7 + 16 >> 2] = o4[9848], o4[A7 + 20 >> 2] = I6, I6 = o4[9851], o4[A7 + 24 >> 2] = o4[9850], o4[A7 + 28 >> 2] = I6;
            }
            function CI(A7) {
              var I6, g6, C6 = 0;
              C6 = (A7 = A7 + 7 | 0) >>> 0 < 7 ? 1 : C6;
              A: {
                if (!((A7 = (g6 = -8 & A7) + (I6 = o4[9956]) | 0) >>> 0 < g6 >>> 0 ? C6 + 1 | 0 : C6)) {
                  if (A7 >>> 0 <= cg() << 16 >>> 0) break A;
                  if (0 | M4(0 | A7)) break A;
                }
                return o4[10188] = 48, -1;
              }
              return o4[9956] = A7, I6;
            }
            function BI(A7, I6, g6, C6, B5, Q5, i2) {
              var E5, D5, o5 = 0;
              return r4 = E5 = r4 - 32 | 0, o5 = -1, (D5 = g6 >>> 0 < 16) & !C6 || hI(E5, Q5, i2) || (o5 = YA(A7, I6 + 16 | 0, I6, g6 - 16 | 0, C6 - D5 | 0, B5, E5), xI(E5, 32)), r4 = E5 + 32 | 0, o5;
            }
            function QI(A7, I6) {
              var g6, B5, Q5;
              r4 = g6 = r4 - 176 | 0, yA(B5 = g6 + 96 | 0, I6 + 80 | 0), H4(Q5 = g6 + 48 | 0, I6, B5), H4(g6, I6 + 40 | 0, B5), nA(A7, g6), nA(g6 + 144 | 0, Q5), C5[A7 + 31 | 0] = c4[A7 + 31 | 0] ^ c4[g6 + 144 | 0] << 7, r4 = g6 + 176 | 0;
            }
            function iI(A7, I6, g6, C6, B5, Q5, E5, D5, c5, h5, w5, F5) {
              return g6 && (o4[g6 >> 2] = 32, o4[g6 + 4 >> 2] = 0), !c5 & D5 >>> 0 < 4294967264 & !Q5 & B5 >>> 0 <= 4294967263 || (KI(), i()), 0 | og[o4[F5 >> 2]](A7, I6, 32, C6, B5, E5, D5, h5, w5);
            }
            function EI() {
              var A7 = 0;
              o4[10323] || (o4[10328] = 18, o4[10326] = 19, o4[10325] = 20, o4[10324] = 21, o4[10323] = 41296, EI(), (A7 = o4[o4[10323] + 8 >> 2]) && og[0 | A7]());
            }
            function DI(A7, I6, g6, C6, B5, Q5, E5) {
              var D5, o5 = 0;
              if (r4 = D5 = r4 - 32 | 0, !C6 & g6 >>> 0 < 4294967280) return o5 = -1, hI(D5, Q5, E5) || (o5 = KA(A7 + 16 | 0, A7, I6, g6, C6, B5, D5), xI(D5, 32)), r4 = D5 + 32 | 0, o5;
              KI(), i();
            }
            function oI(A7, I6, g6, C6, B5, Q5) {
              return I6 |= 0, 0 | (!(C6 |= 0) & (g6 |= 0) >>> 0 >= 16 | C6 ? YA(A7 |= 0, I6 + 16 | 0, I6, g6 - 16 | 0, C6 - (g6 >>> 0 < 16) | 0, B5 |= 0, Q5 |= 0) : -1);
            }
            function cI(A7, I6, g6, C6, B5, Q5, i2, E5, D5, c5, h5) {
              return !C6 & g6 >>> 0 > 4294967263 | C6 | !E5 & i2 >>> 0 > 4294967263 | E5 ? -1 : 0 | og[o4[h5 >> 2]](A7, I6, g6, B5, 32, Q5, i2, D5, c5);
            }
            function hI(A7, I6, g6) {
              A7 |= 0;
              var C6, B5 = 0;
              return r4 = C6 = r4 - 32 | 0, B5 = -1, rA(C6, g6 |= 0, I6 |= 0) || (B5 = iA(A7, 39808, C6)), r4 = C6 + 32 | 0, 0 | B5;
            }
            function wI(A7, I6) {
              var g6;
              r4 = g6 = r4 + -64 | 0, W2(A7, g6), CA(A7 = A7 + 208 | 0, g6, 64, 0), W2(A7, I6), xI(g6, 64), r4 = g6 - -64 | 0;
            }
            function FI(A7, I6, g6) {
              return A7 |= 0, I6 |= 0, (g6 |= 0) >>> 0 >= 256 && (S3(1251, 1178, 107, 1058), i()), 0 | j2(A7, I6, g6);
            }
            function yI(A7, I6, g6, C6, B5, Q5, i2) {
              return 0 | KA(A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, B5 |= 0, Q5 |= 0, i2 |= 0);
            }
            function fI(A7, I6, g6, C6, B5, Q5, i2) {
              return 0 | YA(A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, B5 |= 0, Q5 |= 0, i2 |= 0);
            }
            function SI(A7, I6) {
              var g6;
              r4 = g6 = r4 - 32 | 0, hA(A7, g6), oA(A7 = A7 + 104 | 0, g6, 32), hA(A7, I6), xI(g6, 32), r4 = g6 + 32 | 0;
            }
            function aI(A7, I6) {
              var g6 = 0;
              return (-1 << (g6 = 31 & I6) & A7) >>> g6 | ((g6 = A7) & -1 >>> (A7 = 0 - I6 & 31)) << A7;
            }
            function kI(A7, I6) {
              var g6 = 0;
              return (-1 >>> (g6 = 31 & I6) & A7) << g6 | ((g6 = A7) & -1 << (A7 = 0 - I6 & 31)) >>> A7;
            }
            function MI(A7, I6, g6, C6, B5, Q5) {
              1 == (0 | C6) | C6 >>> 0 > 1 && (KI(), i()), og[o4[9972]](A7, I6, g6, C6, B5, 1, 0, Q5);
            }
            function rI(A7, I6) {
              return I6 |= 0, mI(A7 |= 0), C5[A7 + 229 | 0] = I6, C5[A7 + 228 | 0] = 0, o4[A7 + 224 >> 2] = 0, 0;
            }
            function nI(A7, I6, g6, C6, B5, Q5) {
              1 == (0 | C6) | C6 >>> 0 > 1 && (KI(), i()), og[o4[9973]](A7, I6, g6, C6, B5, 1, Q5);
            }
            function tI(A7) {
              return mI(A7 |= 0), D4[A7 + 228 >> 1] = 7936, o4[A7 + 224 >> 2] = 0, 0;
            }
            function UI(A7, I6) {
              A7 |= 0, I6 |= 0, EI(), I6 && og[o4[o4[10323] + 16 >> 2]](A7, I6);
            }
            function JI() {
              var A7;
              EI(), (A7 = o4[o4[10323] + 8 >> 2]) && og[0 | A7]();
            }
            function KI() {
              var A7;
              (A7 = o4[10322]) && og[0 | A7](), k4(), i();
            }
            function eI(A7, I6, g6, C6, B5, Q5) {
              og[o4[9965]](A7, I6, g6, C6, B5, 0, 0, Q5);
            }
            function YI(A7, I6, g6, C6, B5, Q5) {
              og[o4[9965]](A7, I6, g6, C6, B5, 1, 0, Q5);
            }
            function NI(A7, I6) {
              return A7 |= 0, UI(I6 |= 0, 32), 0 | uI(A7, I6);
            }
            function GI(A7) {
              return A7 ? 31 - y4(A7 - 1 ^ A7) | 0 : 32;
            }
            function HI(A7, I6, g6, C6) {
              og[o4[9973]](A7, I6, 40, 0, g6, 0, C6);
            }
            function sI(A7, I6, g6, C6) {
              og[o4[9971]](A7, I6, 0, g6, C6);
            }
            function pI(A7, I6, g6) {
              return PA(A7, I6, g6, 168, 167);
            }
            function LI(A7, I6, g6) {
              return dA(A7, I6, g6, 136, 135);
            }
            function dI(A7, I6, g6) {
              og[o4[9970]](A7, 64, 0, I6, g6);
            }
            function PI(A7, I6, g6) {
              return dA(A7, I6, g6, 168, 167);
            }
            function RI(A7, I6, g6) {
              return PA(A7, I6, g6, 136, 135);
            }
            function bI(A7, I6, g6, C6) {
              og[o4[9960]](A7, I6, g6, C6);
            }
            function vI(A7, I6, g6, C6) {
              return CA(A7, I6, g6, C6), 0;
            }
            function uI(A7, I6) {
              return 0 | og[o4[9963]](A7, I6);
            }
            function zI(A7, I6, g6, C6) {
              C6 && E4(I6, A7 + g6 | 0, C6);
            }
            function OI(A7, I6, g6) {
              return oA(A7, I6, g6), 0;
            }
            function qI(A7, I6) {
              og[o4[9959]](A7, I6);
            }
            function WI(A7, I6) {
              og[o4[9961]](A7, I6);
            }
            function xI(A7, I6) {
              I6 && Q4(A7, 0, I6);
            }
            function VI(A7) {
              UI(A7 |= 0, 32);
            }
            function jI(A7) {
              UI(A7 |= 0, 16);
            }
            function mI(A7) {
              Q4(A7, 0, 200);
            }
            function lI() {
              return 256;
            }
            function _I() {
              return 168;
            }
            function XI() {
              return 208;
            }
            function TI() {
              return 136;
            }
            function ZI() {
              return 31;
            }
            function $I() {
              return 16;
            }
            function Ag() {
              return 32;
            }
            function Ig() {
              return 24;
            }
            function gg() {
              return -33;
            }
            function Cg() {
              return -17;
            }
            function Bg() {
              return 64;
            }
            function Qg() {
              return 0;
            }
            function ig() {
              return 8;
            }
            function Eg() {
              return 1;
            }
            function Dg() {
              return 3;
            }
            B4(I5 = c4, 1024, "anMAcmFuZG9tYnl0ZXMAYjY0X3BvcyA8PSBiNjRfbGVuAGNyeXB0b19nZW5lcmljaGFzaF9ibGFrZTJiX2ZpbmFsAHJhbmRvbWJ5dGVzL3JhbmRvbWJ5dGVzLmMAc29kaXVtL2NvZGVjcy5jAGNyeXB0b19nZW5lcmljaGFzaC9ibGFrZTJiL3JlZi9ibGFrZTJiLXJlZi5jAGNyeXB0b19nZW5lcmljaGFzaC9ibGFrZTJiL3JlZi9nZW5lcmljaGFzaF9ibGFrZTJiLmMAYnVmX2xlbiA8PSBTSVpFX01BWABvdXRsZW4gPD0gVUlOVDhfTUFYAFMtPmJ1ZmxlbiA8PSBCTEFLRTJCX0JMT0NLQllURVMAc29kaXVtX2JpbjJiYXNlNjQAMS4wLjIxALZ4Wf+FctMAvW4V/w8KagApwAEAmOh5/7w8oP+Zcc7/ALfi/rQNSP8AAAAAAAAAALCgDv7TyYb/nhiPAH9pNQBgDL0Ap9f7/59MgP5qZeH/HvwEAJIMrg=="), B4(I5, 1424, "WfGy/grlpv973Sr+HhTUAFKAAwAw0fMAd3lA/zLjnP8AbsUBZxuQ"), B4(I5, 1472, "hTuMAb3xJP/4JcMBYNw3ALdMPv/DQj0AMkykAeGkTP9MPaP/dT4fAFGRQP92QQ4AonPW/waKLgB85vT/CoqPADQawgC49EwAgY8pAb70E/97qnr/YoFEAHnVkwBWZR7/oWebAIxZQ//v5b4BQwu1AMbwif7uRbz/Q5fuABMqbP/lVXEBMkSH/xFqCQAyZwH/UAGoASOYHv8QqLkBOFno/2XS/AAp+kcAzKpP/w4u7/9QTe8AvdZL/xGN+QAmUEz/vlV1AFbkqgCc2NABw8+k/5ZCTP+v4RD/jVBiAUzb8gDGonIALtqYAJsr8f6boGj/M7ulAAIRrwBCVKAB9zoeACNBNf5F7L8ALYb1AaN73QAgbhT/NBelALrWRwDpsGAA8u82ATlZigBTAFT/iKBkAFyOeP5ofL4AtbE+//opVQCYgioBYPz2AJeXP/7vhT4AIDicAC2nvf+OhbMBg1bTALuzlv76qg7/0qNOACU0lwBjTRoA7pzV/9XA0QFJLlQAFEEpATbOTwDJg5L+qm8Y/7EhMv6rJsv/Tvd0ANHdmQCFgLIBOiwZAMknOwG9E/wAMeXSAXW7dQC1s7gBAHLbADBekwD1KTgAfQ3M/vStdwAs3SD+VOoUAPmgxgHsfur/L2Oo/qrimf9ms9gA4o16/3pCmf629YYA4+QZAdY56//YrTj/tefSAHeAnf+BX4j/bn4zAAKpt/8HgmL+RbBe/3QE4wHZ8pH/yq0fAWkBJ/8ur0UA5C86/9fgRf7POEX/EP6L/xfP1P/KFH7/X9Vg/wmwIQDIBc//8SqA/iMhwP/45cQBgRF4APtnl/8HNHD/jDhC/yji9f/ZRiX+rNYJ/0hDhgGSwNb/LCZwAES4S//OWvsAleuNALWqOgB09O8AXJ0CAGatYgDpiWABfzHLAAWblAAXlAn/03oMACKGGv/bzIgAhggp/+BTK/5VGfcAbX8A/qmIMADud9v/563VAM4S/v4Iugf/fgkHAW8qSABvNOz+YD+NAJO/f/7NTsD/DmrtAbvbTACv87v+aVmtAFUZWQGi85QAAnbR/iGeCQCLoy7/XUYoAGwqjv5v/I7/m9+QADPlp/9J/Jv/XnQM/5ig2v+c7iX/s+rP/8UAs/+apI0A4cRoAAojGf7R1PL/Yf3e/rhl5QDeEn8BpIiH/x7PjP6SYfMAgcAa/slUIf9vCk7/k1Gy/wQEGACh7tf/Bo0hADXXDv8ptdD/54udALPL3f//uXEAveKs/3FC1v/KPi3/ZkAI/06uEP6FdUT/"), B4(I5, 2464, "AQ=="), B4(I5, 2496, "JuiVj8KyJ7BFw/SJ8u+Y8NXfrAXTxjM5sTgCiG1T/AXHF2pwPU3YT7o8C3YNEGcPKiBT+iw5zMZOx/13kqwDeuz///////////////////////////////////////9/7f///////////////////////////////////////3/u////////////////////////////////////////f+3T9VwaYxJY1pz3ot753hQ="), B4(I5, 2687, " "), B4(I5, 33660, "AQ=="), B4(I5, 33696, "AQ=="), B4(I5, 33728, " "), B4(I5, 39376, "Z+YJaoWuZ7ty8248OvVPpX9SDlGMaAWbq9mDHxnN4FuYL4pCkUQ3cc/7wLWl27XpW8JWOfER8Vmkgj+S1V4cq5iqB9gBW4MSvoUxJMN9DFV0Xb5y/rHegKcG3Jt08ZvBwWmb5IZHvu/GncEPzKEMJG8s6S2qhHRK3KmwXNqI+XZSUT6YbcYxqMgnA7DHf1m/8wvgxkeRp9VRY8oGZykpFIUKtyc4IRsu/G0sTRMNOFNUcwpluwpqdi7JwoGFLHKSoei/oktmGqhwi0vCo1FsxxnoktEkBpnWhTUO9HCgahAWwaQZCGw3Hkx3SCe1vLA0swwcOUqq2E5Pypxb828uaO6Cj3RvY6V4FHjIhAgCx4z6/76Q62xQpPej+b7yeHHGgA=="), B4(I5, 39744, "U2lnRWQyNTUxOSBubyBFZDI1NTE5IGNvbGxpc2lvbnMB"), B4(I5, 39824, "cKEBAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0=");
            var og = [null, function(A7, I6, g6, B5, Q5) {
              var i2, E5, D5;
              return A7 |= 0, I6 |= 0, g6 |= 0, B5 |= 0, Q5 |= 0, r4 = i2 = (E5 = r4) - 128 & -64, o4[i2 >> 2] = 67108863 & (c4[0 | Q5] | c4[Q5 + 1 | 0] << 8 | c4[Q5 + 2 | 0] << 16 | c4[Q5 + 3 | 0] << 24), o4[i2 + 4 >> 2] = (c4[Q5 + 3 | 0] | c4[Q5 + 4 | 0] << 8 | c4[Q5 + 5 | 0] << 16 | c4[Q5 + 6 | 0] << 24) >>> 2 & 67108611, o4[i2 + 8 >> 2] = (c4[Q5 + 6 | 0] | c4[Q5 + 7 | 0] << 8 | c4[Q5 + 8 | 0] << 16 | c4[Q5 + 9 | 0] << 24) >>> 4 & 67092735, o4[i2 + 12 >> 2] = (c4[Q5 + 9 | 0] | c4[Q5 + 10 | 0] << 8 | c4[Q5 + 11 | 0] << 16 | c4[Q5 + 12 | 0] << 24) >>> 6 & 66076671, D5 = c4[Q5 + 12 | 0] | c4[Q5 + 13 | 0] << 8 | c4[Q5 + 14 | 0] << 16 | c4[Q5 + 15 | 0] << 24, o4[i2 + 20 >> 2] = 0, o4[i2 + 24 >> 2] = 0, o4[i2 + 28 >> 2] = 0, o4[i2 + 32 >> 2] = 0, o4[i2 + 36 >> 2] = 0, o4[i2 + 16 >> 2] = D5 >>> 8 & 1048575, o4[i2 + 40 >> 2] = c4[Q5 + 16 | 0] | c4[Q5 + 17 | 0] << 8 | c4[Q5 + 18 | 0] << 16 | c4[Q5 + 19 | 0] << 24, o4[i2 + 44 >> 2] = c4[Q5 + 20 | 0] | c4[Q5 + 21 | 0] << 8 | c4[Q5 + 22 | 0] << 16 | c4[Q5 + 23 | 0] << 24, o4[i2 + 48 >> 2] = c4[Q5 + 24 | 0] | c4[Q5 + 25 | 0] << 8 | c4[Q5 + 26 | 0] << 16 | c4[Q5 + 27 | 0] << 24, Q5 = c4[Q5 + 28 | 0] | c4[Q5 + 29 | 0] << 8 | c4[Q5 + 30 | 0] << 16 | c4[Q5 + 31 | 0] << 24, C5[i2 + 80 | 0] = 0, o4[i2 + 56 >> 2] = 0, o4[i2 + 60 >> 2] = 0, o4[i2 + 52 >> 2] = Q5, cA(i2, I6, g6, B5), MA(i2, A7), r4 = E5, 0;
            }, function(A7, I6, g6, B5, Q5) {
              var i2, E5, D5;
              return A7 |= 0, I6 |= 0, g6 |= 0, B5 |= 0, Q5 |= 0, r4 = i2 = (E5 = r4) - 192 & -64, o4[i2 + 64 >> 2] = 67108863 & (c4[0 | Q5] | c4[Q5 + 1 | 0] << 8 | c4[Q5 + 2 | 0] << 16 | c4[Q5 + 3 | 0] << 24), o4[i2 + 68 >> 2] = (c4[Q5 + 3 | 0] | c4[Q5 + 4 | 0] << 8 | c4[Q5 + 5 | 0] << 16 | c4[Q5 + 6 | 0] << 24) >>> 2 & 67108611, o4[i2 + 72 >> 2] = (c4[Q5 + 6 | 0] | c4[Q5 + 7 | 0] << 8 | c4[Q5 + 8 | 0] << 16 | c4[Q5 + 9 | 0] << 24) >>> 4 & 67092735, o4[i2 + 76 >> 2] = (c4[Q5 + 9 | 0] | c4[Q5 + 10 | 0] << 8 | c4[Q5 + 11 | 0] << 16 | c4[Q5 + 12 | 0] << 24) >>> 6 & 66076671, D5 = c4[Q5 + 12 | 0] | c4[Q5 + 13 | 0] << 8 | c4[Q5 + 14 | 0] << 16 | c4[Q5 + 15 | 0] << 24, o4[i2 + 84 >> 2] = 0, o4[i2 + 88 >> 2] = 0, o4[i2 + 92 >> 2] = 0, o4[i2 + 96 >> 2] = 0, o4[i2 + 100 >> 2] = 0, o4[i2 + 80 >> 2] = D5 >>> 8 & 1048575, o4[i2 + 104 >> 2] = c4[Q5 + 16 | 0] | c4[Q5 + 17 | 0] << 8 | c4[Q5 + 18 | 0] << 16 | c4[Q5 + 19 | 0] << 24, o4[i2 + 108 >> 2] = c4[Q5 + 20 | 0] | c4[Q5 + 21 | 0] << 8 | c4[Q5 + 22 | 0] << 16 | c4[Q5 + 23 | 0] << 24, o4[i2 + 112 >> 2] = c4[Q5 + 24 | 0] | c4[Q5 + 25 | 0] << 8 | c4[Q5 + 26 | 0] << 16 | c4[Q5 + 27 | 0] << 24, Q5 = c4[Q5 + 28 | 0] | c4[Q5 + 29 | 0] << 8 | c4[Q5 + 30 | 0] << 16 | c4[Q5 + 31 | 0] << 24, C5[i2 + 144 | 0] = 0, o4[i2 + 120 >> 2] = 0, o4[i2 + 124 >> 2] = 0, o4[i2 + 116 >> 2] = Q5, cA(Q5 = i2 - -64 | 0, I6, g6, B5), MA(Q5, I6 = i2 + 48 | 0), A7 = tA(A7, I6), r4 = E5, 0 | A7;
            }, function(A7, I6) {
              var g6;
              return I6 |= 0, o4[(A7 |= 0) >> 2] = 67108863 & (c4[0 | I6] | c4[I6 + 1 | 0] << 8 | c4[I6 + 2 | 0] << 16 | c4[I6 + 3 | 0] << 24), o4[A7 + 4 >> 2] = (c4[I6 + 3 | 0] | c4[I6 + 4 | 0] << 8 | c4[I6 + 5 | 0] << 16 | c4[I6 + 6 | 0] << 24) >>> 2 & 67108611, o4[A7 + 8 >> 2] = (c4[I6 + 6 | 0] | c4[I6 + 7 | 0] << 8 | c4[I6 + 8 | 0] << 16 | c4[I6 + 9 | 0] << 24) >>> 4 & 67092735, o4[A7 + 12 >> 2] = (c4[I6 + 9 | 0] | c4[I6 + 10 | 0] << 8 | c4[I6 + 11 | 0] << 16 | c4[I6 + 12 | 0] << 24) >>> 6 & 66076671, g6 = c4[I6 + 12 | 0] | c4[I6 + 13 | 0] << 8 | c4[I6 + 14 | 0] << 16 | c4[I6 + 15 | 0] << 24, o4[A7 + 20 >> 2] = 0, o4[A7 + 24 >> 2] = 0, o4[A7 + 28 >> 2] = 0, o4[A7 + 32 >> 2] = 0, o4[A7 + 36 >> 2] = 0, o4[A7 + 16 >> 2] = g6 >>> 8 & 1048575, o4[A7 + 40 >> 2] = c4[I6 + 16 | 0] | c4[I6 + 17 | 0] << 8 | c4[I6 + 18 | 0] << 16 | c4[I6 + 19 | 0] << 24, o4[A7 + 44 >> 2] = c4[I6 + 20 | 0] | c4[I6 + 21 | 0] << 8 | c4[I6 + 22 | 0] << 16 | c4[I6 + 23 | 0] << 24, o4[A7 + 48 >> 2] = c4[I6 + 24 | 0] | c4[I6 + 25 | 0] << 8 | c4[I6 + 26 | 0] << 16 | c4[I6 + 27 | 0] << 24, I6 = c4[I6 + 28 | 0] | c4[I6 + 29 | 0] << 8 | c4[I6 + 30 | 0] << 16 | c4[I6 + 31 | 0] << 24, C5[A7 + 80 | 0] = 0, o4[A7 + 56 >> 2] = 0, o4[A7 + 60 >> 2] = 0, o4[A7 + 52 >> 2] = I6, 0;
            }, function(A7, I6, g6, C6) {
              return cA(A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0), 0;
            }, function(A7, I6) {
              return MA(A7 |= 0, I6 |= 0), 0;
            }, function(A7, I6, g6) {
              A7 |= 0, I6 |= 0, g6 |= 0;
              var B5, Q5 = 0, i2 = 0, E5 = 0, D5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, t5 = 0, U5 = 0, J5 = 0, K5 = 0, e4 = 0, Y5 = 0, N5 = 0, G5 = 0, s5 = 0, p5 = 0, L5 = 0, P5 = 0, R4 = 0, b4 = 0, v5 = 0, u4 = 0, z3 = 0, O3 = 0, q3 = 0, W3 = 0, x3 = 0, V3 = 0, j3 = 0, m3 = 0, l3 = 0, _3 = 0, X3 = 0, T3 = 0, Z3 = 0, $3 = 0, AA2 = 0, IA2 = 0, CA2 = 0, BA2 = 0, QA2 = 0, iA2 = 0, EA2 = 0, DA2 = 0, oA2 = 0, cA2 = 0, hA2 = 0, wA2 = 0, FA2 = 0, fA2 = 0, SA2 = 0, aA2 = 0, kA2 = 0, MA2 = 0, rA2 = 0, tA2 = 0, UA2 = 0;
              for (r4 = B5 = r4 - 368 | 0; k5 = (F5 = c4[g6 + Q5 | 0]) ^ c4[0 | (h5 = Q5 + 33664 | 0)] | k5, M5 = F5 ^ c4[h5 + 192 | 0] | M5, a5 = F5 ^ c4[h5 + 160 | 0] | a5, w5 = F5 ^ c4[h5 + 128 | 0] | w5, D5 = F5 ^ c4[h5 + 96 | 0] | D5, E5 = F5 ^ c4[h5 - -64 | 0] | E5, i2 = F5 ^ c4[h5 + 32 | 0] | i2, 31 != (0 | (Q5 = Q5 + 1 | 0)); ) ;
              if (Q5 = -1, !(256 & ((255 & ((F5 = 127 ^ (h5 = 127 & c4[g6 + 31 | 0])) | M5)) - 1 | (255 & (F5 | a5)) - 1 | (255 & (w5 | F5)) - 1 | (255 & (87 ^ h5 | D5)) - 1 | (255 & (E5 | h5)) - 1 | (255 & (i2 | h5)) - 1 | (255 & (h5 | k5)) - 1))) {
                for (Q5 = c4[I6 + 4 | 0] | c4[I6 + 5 | 0] << 8 | c4[I6 + 6 | 0] << 16 | c4[I6 + 7 | 0] << 24, i2 = c4[0 | I6] | c4[I6 + 1 | 0] << 8 | c4[I6 + 2 | 0] << 16 | c4[I6 + 3 | 0] << 24, o4[B5 + 336 >> 2] = i2, o4[B5 + 340 >> 2] = Q5, Q5 = c4[I6 + 28 | 0] | c4[I6 + 29 | 0] << 8 | c4[I6 + 30 | 0] << 16 | c4[I6 + 31 | 0] << 24, o4[B5 + 360 >> 2] = c4[I6 + 24 | 0] | c4[I6 + 25 | 0] << 8 | c4[I6 + 26 | 0] << 16 | c4[I6 + 27 | 0] << 24, o4[B5 + 364 >> 2] = Q5, Q5 = c4[I6 + 20 | 0] | c4[I6 + 21 | 0] << 8 | c4[I6 + 22 | 0] << 16 | c4[I6 + 23 | 0] << 24, o4[B5 + 352 >> 2] = c4[I6 + 16 | 0] | c4[I6 + 17 | 0] << 8 | c4[I6 + 18 | 0] << 16 | c4[I6 + 19 | 0] << 24, o4[B5 + 356 >> 2] = Q5, Q5 = c4[I6 + 12 | 0] | c4[I6 + 13 | 0] << 8 | c4[I6 + 14 | 0] << 16 | c4[I6 + 15 | 0] << 24, o4[B5 + 344 >> 2] = c4[I6 + 8 | 0] | c4[I6 + 9 | 0] << 8 | c4[I6 + 10 | 0] << 16 | c4[I6 + 11 | 0] << 24, o4[B5 + 348 >> 2] = Q5, C5[B5 + 336 | 0] = 248 & i2, C5[B5 + 367 | 0] = 63 & c4[B5 + 367 | 0] | 64, gA(B5 + 288 | 0, g6), o4[B5 + 244 >> 2] = 0, o4[B5 + 248 >> 2] = 0, o4[B5 + 240 >> 2] = 1, o4[B5 + 252 >> 2] = 0, o4[B5 + 256 >> 2] = 0, o4[B5 + 260 >> 2] = 0, o4[B5 + 264 >> 2] = 0, o4[B5 + 268 >> 2] = 0, o4[B5 + 272 >> 2] = 0, o4[B5 + 276 >> 2] = 0, o4[B5 + 192 >> 2] = 0, o4[B5 + 196 >> 2] = 0, o4[B5 + 200 >> 2] = 0, o4[B5 + 204 >> 2] = 0, o4[B5 + 208 >> 2] = 0, o4[B5 + 212 >> 2] = 0, o4[B5 + 216 >> 2] = 0, o4[B5 + 220 >> 2] = 0, o4[B5 + 224 >> 2] = 0, o4[B5 + 228 >> 2] = 0, I6 = o4[B5 + 292 >> 2], o4[B5 + 144 >> 2] = o4[B5 + 288 >> 2], o4[B5 + 148 >> 2] = I6, I6 = o4[B5 + 300 >> 2], o4[B5 + 152 >> 2] = o4[B5 + 296 >> 2], o4[B5 + 156 >> 2] = I6, I6 = o4[B5 + 308 >> 2], o4[B5 + 160 >> 2] = o4[B5 + 304 >> 2], o4[B5 + 164 >> 2] = I6, I6 = o4[B5 + 316 >> 2], o4[B5 + 168 >> 2] = o4[B5 + 312 >> 2], o4[B5 + 172 >> 2] = I6, I6 = o4[B5 + 324 >> 2], o4[B5 + 176 >> 2] = o4[B5 + 320 >> 2], o4[B5 + 180 >> 2] = I6, o4[B5 + 100 >> 2] = 0, o4[B5 + 104 >> 2] = 0, o4[B5 + 96 >> 2] = 1, o4[B5 + 108 >> 2] = 0, o4[B5 + 112 >> 2] = 0, o4[B5 + 116 >> 2] = 0, o4[B5 + 120 >> 2] = 0, o4[B5 + 124 >> 2] = 0, o4[B5 + 128 >> 2] = 0, o4[B5 + 132 >> 2] = 0, g6 = 254; V3 = o4[B5 + 144 >> 2], j3 = o4[B5 + 240 >> 2], m3 = o4[B5 + 96 >> 2], l3 = o4[B5 + 192 >> 2], _3 = o4[B5 + 148 >> 2], X3 = o4[B5 + 244 >> 2], T3 = o4[B5 + 100 >> 2], Z3 = o4[B5 + 196 >> 2], $3 = o4[B5 + 152 >> 2], AA2 = o4[B5 + 248 >> 2], IA2 = o4[B5 + 104 >> 2], CA2 = o4[B5 + 200 >> 2], BA2 = o4[B5 + 156 >> 2], QA2 = o4[B5 + 252 >> 2], iA2 = o4[B5 + 108 >> 2], EA2 = o4[B5 + 204 >> 2], DA2 = o4[B5 + 160 >> 2], L5 = o4[B5 + 256 >> 2], oA2 = o4[B5 + 112 >> 2], y5 = o4[B5 + 208 >> 2], cA2 = o4[B5 + 164 >> 2], t5 = o4[B5 + 260 >> 2], hA2 = o4[B5 + 116 >> 2], e4 = o4[B5 + 212 >> 2], wA2 = o4[B5 + 168 >> 2], Y5 = o4[B5 + 264 >> 2], R4 = o4[B5 + 120 >> 2], S4 = o4[B5 + 216 >> 2], J5 = o4[B5 + 172 >> 2], U5 = o4[B5 + 268 >> 2], f5 = o4[B5 + 124 >> 2], h5 = o4[B5 + 220 >> 2], i2 = o4[B5 + 176 >> 2], F5 = o4[B5 + 272 >> 2], k5 = o4[B5 + 128 >> 2], M5 = o4[B5 + 224 >> 2], FA2 = g6, K5 = 0 - ((I6 = x3) ^ (x3 = c4[(fA2 = B5 + 336 | 0) + (g6 >>> 3 | 0) | 0] >>> (7 & g6) & 1)) | 0, SA2 = (Q5 = o4[B5 + 180 >> 2]) ^ (a5 = K5 & (Q5 ^ (D5 = o4[B5 + 276 >> 2]))), aA2 = (I6 = o4[B5 + 132 >> 2]) ^ (w5 = K5 & (I6 ^ (E5 = o4[B5 + 228 >> 2]))), o4[B5 + 84 >> 2] = SA2 - aA2, kA2 = (I6 = i2) ^ (i2 = K5 & (i2 ^ F5)), MA2 = (Q5 = K5 & (k5 ^ M5)) ^ k5, o4[B5 + 80 >> 2] = kA2 - MA2, rA2 = (g6 = K5 & (U5 ^ J5)) ^ J5, N5 = (I6 = K5 & (h5 ^ f5)) ^ f5, o4[B5 + 76 >> 2] = rA2 - N5, G5 = D5 ^ a5, P5 = E5 ^ w5, o4[B5 + 36 >> 2] = G5 - P5, v5 = i2 ^ F5, u4 = Q5 ^ M5, o4[B5 + 32 >> 2] = v5 - u4, tA2 = g6 ^ U5, UA2 = I6 ^ h5, o4[B5 + 28 >> 2] = tA2 - UA2, z3 = (b4 = K5 & (Y5 ^ wA2)) ^ Y5, O3 = (w5 = K5 & (S4 ^ R4)) ^ S4, o4[B5 + 24 >> 2] = z3 - O3, q3 = (s5 = K5 & (t5 ^ cA2)) ^ t5, W3 = (D5 = K5 & (e4 ^ hA2)) ^ e4, o4[B5 + 20 >> 2] = q3 - W3, L5 ^= p5 = K5 & (L5 ^ DA2), y5 ^= E5 = K5 & (y5 ^ oA2), o4[B5 + 16 >> 2] = L5 - y5, e4 = QA2 ^ (t5 = K5 & (BA2 ^ QA2)), Y5 = EA2 ^ (i2 = K5 & (iA2 ^ EA2)), o4[B5 + 12 >> 2] = e4 - Y5, J5 = AA2 ^ (S4 = K5 & ($3 ^ AA2)), U5 = CA2 ^ (Q5 = K5 & (IA2 ^ CA2)), o4[B5 + 8 >> 2] = J5 - U5, h5 = X3 ^ (f5 = K5 & (_3 ^ X3)), F5 = Z3 ^ (g6 = K5 & (T3 ^ Z3)), o4[B5 + 4 >> 2] = h5 - F5, M5 = j3 ^ (k5 = K5 & (V3 ^ j3)), a5 = l3 ^ (I6 = K5 & (m3 ^ l3)), o4[B5 >> 2] = M5 - a5, R4 ^= w5, o4[B5 + 120 >> 2] = R4, w5 = b4 ^ wA2, o4[B5 + 72 >> 2] = w5 - R4, b4 = D5 ^ hA2, o4[B5 + 116 >> 2] = b4, D5 = s5 ^ cA2, o4[B5 + 68 >> 2] = D5 - b4, s5 = E5 ^ oA2, o4[B5 + 112 >> 2] = s5, E5 = p5 ^ DA2, o4[B5 + 64 >> 2] = E5 - s5, p5 = i2 ^ iA2, o4[B5 + 108 >> 2] = p5, i2 = t5 ^ BA2, o4[B5 + 60 >> 2] = i2 - p5, t5 = Q5 ^ IA2, o4[B5 + 104 >> 2] = t5, Q5 = S4 ^ $3, o4[B5 + 56 >> 2] = Q5 - t5, S4 = g6 ^ T3, o4[B5 + 100 >> 2] = S4, g6 = f5 ^ _3, o4[B5 + 52 >> 2] = g6 - S4, f5 = I6 ^ m3, o4[B5 + 96 >> 2] = f5, I6 = k5 ^ V3, o4[B5 + 48 >> 2] = I6 - f5, o4[B5 + 276 >> 2] = G5 + P5, o4[B5 + 272 >> 2] = v5 + u4, o4[B5 + 268 >> 2] = tA2 + UA2, o4[B5 + 264 >> 2] = z3 + O3, o4[B5 + 260 >> 2] = q3 + W3, o4[B5 + 256 >> 2] = y5 + L5, o4[B5 + 252 >> 2] = e4 + Y5, o4[B5 + 248 >> 2] = U5 + J5, o4[B5 + 244 >> 2] = h5 + F5, o4[B5 + 240 >> 2] = a5 + M5, o4[B5 + 228 >> 2] = SA2 + aA2, o4[B5 + 224 >> 2] = kA2 + MA2, o4[B5 + 220 >> 2] = N5 + rA2, o4[B5 + 216 >> 2] = w5 + R4, o4[B5 + 212 >> 2] = D5 + b4, o4[B5 + 208 >> 2] = E5 + s5, o4[B5 + 200 >> 2] = Q5 + t5, o4[B5 + 196 >> 2] = g6 + S4, o4[B5 + 192 >> 2] = I6 + f5, o4[B5 + 204 >> 2] = i2 + p5, H4(u4 = B5 + 96 | 0, P5 = B5 + 48 | 0, G5 = B5 + 240 | 0), H4(N5 = B5 + 192 | 0, N5, B5), d4(P5, B5), d4(B5, G5), y5 = o4[B5 + 192 >> 2], t5 = o4[B5 + 96 >> 2], e4 = o4[B5 + 196 >> 2], Y5 = o4[B5 + 100 >> 2], S4 = o4[B5 + 200 >> 2], J5 = o4[B5 + 104 >> 2], U5 = o4[B5 + 204 >> 2], f5 = o4[B5 + 108 >> 2], h5 = o4[B5 + 208 >> 2], F5 = o4[B5 + 112 >> 2], k5 = o4[B5 + 212 >> 2], M5 = o4[B5 + 116 >> 2], a5 = o4[B5 + 216 >> 2], w5 = o4[B5 + 120 >> 2], D5 = o4[B5 + 220 >> 2], E5 = o4[B5 + 124 >> 2], i2 = o4[B5 + 224 >> 2], Q5 = o4[B5 + 128 >> 2], g6 = o4[B5 + 228 >> 2], I6 = o4[B5 + 132 >> 2], o4[B5 + 180 >> 2] = g6 + I6, o4[B5 + 176 >> 2] = Q5 + i2, o4[B5 + 172 >> 2] = E5 + D5, o4[B5 + 168 >> 2] = w5 + a5, o4[B5 + 164 >> 2] = k5 + M5, o4[B5 + 160 >> 2] = h5 + F5, o4[B5 + 156 >> 2] = f5 + U5, o4[B5 + 152 >> 2] = S4 + J5, o4[B5 + 148 >> 2] = e4 + Y5, o4[B5 + 144 >> 2] = y5 + t5, o4[B5 + 228 >> 2] = I6 - g6, o4[B5 + 224 >> 2] = Q5 - i2, o4[B5 + 220 >> 2] = E5 - D5, o4[B5 + 216 >> 2] = w5 - a5, o4[B5 + 212 >> 2] = M5 - k5, o4[B5 + 208 >> 2] = F5 - h5, o4[B5 + 204 >> 2] = f5 - U5, o4[B5 + 200 >> 2] = J5 - S4, o4[B5 + 196 >> 2] = Y5 - e4, o4[B5 + 192 >> 2] = t5 - y5, H4(G5, B5, P5), f5 = o4[B5 + 72 >> 2], S4 = o4[B5 + 24 >> 2], z3 = o4[B5 + 68 >> 2], J5 = o4[B5 + 20 >> 2], h5 = o4[B5 + 64 >> 2], U5 = o4[B5 + 16 >> 2], O3 = o4[B5 + 60 >> 2], a5 = o4[B5 + 12 >> 2], F5 = o4[B5 + 56 >> 2], w5 = o4[B5 + 8 >> 2], s5 = o4[B5 + 52 >> 2], D5 = o4[B5 + 4 >> 2], q3 = o4[B5 + 84 >> 2], E5 = o4[B5 + 36 >> 2], v5 = o4[B5 + 48 >> 2], Q5 = o4[B5 >> 2], W3 = o4[B5 + 76 >> 2], I6 = o4[B5 + 28 >> 2], i2 = o4[B5 + 80 >> 2], g6 = o4[B5 + 32 >> 2] - i2 | 0, o4[B5 + 32 >> 2] = g6, I6 = I6 - W3 | 0, o4[B5 + 28 >> 2] = I6, t5 = Q5 - v5 | 0, o4[B5 >> 2] = t5, e4 = E5 - q3 | 0, o4[B5 + 36 >> 2] = e4, k5 = D5 - s5 | 0, o4[B5 + 4 >> 2] = k5, M5 = w5 - F5 | 0, o4[B5 + 8 >> 2] = M5, a5 = a5 - O3 | 0, o4[B5 + 12 >> 2] = a5, w5 = U5 - h5 | 0, o4[B5 + 16 >> 2] = w5, D5 = J5 - z3 | 0, o4[B5 + 20 >> 2] = D5, E5 = S4 - f5 | 0, o4[B5 + 24 >> 2] = E5, d4(N5, N5), d4(Q5 = B5 + 144 | 0, Q5), Q5 = AI(g6, g6 >> 31, 121666, 0), U5 = n4, g6 = AI(I6, I6 >> 31, 121666, 0), I6 = n4, p5 = g6, g6 = (33554431 & (I6 = (Y5 = g6 + 16777216 | 0) >>> 0 < 16777216 ? I6 + 1 | 0 : I6)) << 7 | Y5 >>> 25, I6 = (I6 >> 25) + U5 | 0, I6 = g6 >>> 0 > (Q5 = g6 + Q5 | 0) >>> 0 ? I6 + 1 | 0 : I6, g6 = (S4 = Q5 + 33554432 | 0) >>> 0 < 33554432 ? I6 + 1 | 0 : I6, o4[B5 + 80 >> 2] = (Q5 - (-67108864 & S4) | 0) + i2, i2 = f5, E5 = AI(E5, E5 >> 31, 121666, 0), f5 = n4, Q5 = AI(D5, D5 >> 31, 121666, 0), I6 = n4, D5 = E5, L5 = Q5, E5 = (33554431 & (I6 = (J5 = Q5 + 16777216 | 0) >>> 0 < 16777216 ? I6 + 1 | 0 : I6)) << 7 | J5 >>> 25, I6 = (I6 >> 25) + f5 | 0, I6 = (Q5 = D5 + E5 | 0) >>> 0 < E5 >>> 0 ? I6 + 1 | 0 : I6, E5 = (U5 = Q5 + 33554432 | 0) >>> 0 < 33554432 ? I6 + 1 | 0 : I6, o4[B5 + 72 >> 2] = (Q5 - (-67108864 & U5) | 0) + i2, D5 = h5, i2 = AI(w5, w5 >> 31, 121666, 0), w5 = n4, Q5 = AI(a5, a5 >> 31, 121666, 0), I6 = n4, h5 = i2, y5 = Q5, i2 = (33554431 & (I6 = (f5 = Q5 + 16777216 | 0) >>> 0 < 16777216 ? I6 + 1 | 0 : I6)) << 7 | f5 >>> 25, I6 = (I6 >> 25) + w5 | 0, I6 = (Q5 = h5 + i2 | 0) >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, i2 = (h5 = Q5 + 33554432 | 0) >>> 0 < 33554432 ? I6 + 1 | 0 : I6, o4[B5 + 64 >> 2] = (Q5 - (-67108864 & h5) | 0) + D5, w5 = F5, Q5 = AI(M5, M5 >> 31, 121666, 0), a5 = n4, F5 = AI(k5, k5 >> 31, 121666, 0), I6 = n4, D5 = Q5, Q5 = (33554431 & (I6 = (k5 = F5 + 16777216 | 0) >>> 0 < 16777216 ? I6 + 1 | 0 : I6)) << 7 | k5 >>> 25, I6 = (I6 >> 25) + a5 | 0, I6 = Q5 >>> 0 > (D5 = D5 + Q5 | 0) >>> 0 ? I6 + 1 | 0 : I6, Q5 = (M5 = D5 + 33554432 | 0) >>> 0 < 33554432 ? I6 + 1 | 0 : I6, o4[B5 + 56 >> 2] = (D5 - (-67108864 & M5) | 0) + w5, a5 = q3, w5 = g6, S4 = (g6 = AI(e4, e4 >> 31, 121666, 0)) + (w5 = (67108863 & w5) << 6 | S4 >>> 26) | 0, I6 = D5 = n4, g6 = (w5 = g6 + 16777216 | 0) >>> 0 < 16777216 ? I6 + 1 | 0 : I6, o4[B5 + 84 >> 2] = (S4 - (-33554432 & w5) | 0) + a5, D5 = W3, E5 = p5 + ((67108863 & E5) << 6 | U5 >>> 26) | 0, o4[B5 + 76 >> 2] = (E5 - (-33554432 & Y5) | 0) + D5, E5 = z3, i2 = L5 + ((67108863 & i2) << 6 | h5 >>> 26) | 0, o4[B5 + 68 >> 2] = (i2 - (-33554432 & J5) | 0) + E5, i2 = O3, Q5 = y5 + ((67108863 & Q5) << 6 | M5 >>> 26) | 0, o4[B5 + 60 >> 2] = (Q5 - (-33554432 & f5) | 0) + i2, i2 = s5, E5 = F5 - (-33554432 & k5) | 0, g6 = AI((33554431 & g6) << 7 | w5 >>> 25, g6 >> 25, 19, 0), I6 = n4, Q5 = g6, g6 = AI(t5, t5 >> 31, 121666, 0), I6 = n4 + I6 | 0, I6 = g6 >>> 0 > (Q5 = Q5 + g6 | 0) >>> 0 ? I6 + 1 | 0 : I6, E5 = ((67108863 & (I6 = (g6 = Q5 + 33554432 | 0) >>> 0 < 33554432 ? I6 + 1 | 0 : I6)) << 6 | g6 >>> 26) + E5 | 0, o4[B5 + 52 >> 2] = i2 + E5, o4[B5 + 48 >> 2] = (Q5 - (-67108864 & g6) | 0) + v5, g6 = FA2 - 1 | 0, H4(u4, B5 + 288 | 0, N5), H4(N5, B5, P5), FA2; ) ;
                k5 = o4[B5 + 144 >> 2], t5 = o4[B5 + 240 >> 2], M5 = o4[B5 + 148 >> 2], e4 = o4[B5 + 244 >> 2], a5 = o4[B5 + 152 >> 2], Y5 = o4[B5 + 248 >> 2], w5 = o4[B5 + 156 >> 2], S4 = o4[B5 + 252 >> 2], D5 = o4[B5 + 160 >> 2], J5 = o4[B5 + 256 >> 2], E5 = o4[B5 + 164 >> 2], U5 = o4[B5 + 260 >> 2], i2 = o4[B5 + 168 >> 2], f5 = o4[B5 + 264 >> 2], Q5 = o4[B5 + 172 >> 2], h5 = o4[B5 + 268 >> 2], g6 = o4[B5 + 176 >> 2], F5 = o4[B5 + 272 >> 2], y5 = 0 - x3 | 0, I6 = o4[B5 + 276 >> 2], o4[B5 + 276 >> 2] = y5 & (I6 ^ o4[B5 + 180 >> 2]) ^ I6, o4[B5 + 272 >> 2] = F5 ^ y5 & (g6 ^ F5), o4[B5 + 268 >> 2] = h5 ^ y5 & (Q5 ^ h5), o4[B5 + 264 >> 2] = f5 ^ y5 & (i2 ^ f5), o4[B5 + 260 >> 2] = U5 ^ y5 & (E5 ^ U5), o4[B5 + 256 >> 2] = J5 ^ y5 & (D5 ^ J5), o4[B5 + 252 >> 2] = S4 ^ y5 & (w5 ^ S4), o4[B5 + 248 >> 2] = Y5 ^ y5 & (a5 ^ Y5), o4[B5 + 244 >> 2] = e4 ^ y5 & (M5 ^ e4), o4[B5 + 240 >> 2] = t5 ^ y5 & (k5 ^ t5), t5 = o4[B5 + 192 >> 2], k5 = o4[B5 + 96 >> 2], e4 = o4[B5 + 196 >> 2], M5 = o4[B5 + 100 >> 2], Y5 = o4[B5 + 200 >> 2], a5 = o4[B5 + 104 >> 2], S4 = o4[B5 + 204 >> 2], w5 = o4[B5 + 108 >> 2], J5 = o4[B5 + 208 >> 2], D5 = o4[B5 + 112 >> 2], U5 = o4[B5 + 212 >> 2], E5 = o4[B5 + 116 >> 2], f5 = o4[B5 + 216 >> 2], i2 = o4[B5 + 120 >> 2], h5 = o4[B5 + 220 >> 2], Q5 = o4[B5 + 124 >> 2], F5 = o4[B5 + 224 >> 2], g6 = o4[B5 + 128 >> 2], I6 = o4[B5 + 228 >> 2], o4[B5 + 228 >> 2] = y5 & (I6 ^ o4[B5 + 132 >> 2]) ^ I6, o4[B5 + 224 >> 2] = F5 ^ y5 & (g6 ^ F5), o4[B5 + 220 >> 2] = h5 ^ y5 & (Q5 ^ h5), o4[B5 + 216 >> 2] = f5 ^ y5 & (i2 ^ f5), o4[B5 + 212 >> 2] = U5 ^ y5 & (E5 ^ U5), o4[B5 + 208 >> 2] = J5 ^ y5 & (D5 ^ J5), o4[B5 + 204 >> 2] = S4 ^ y5 & (w5 ^ S4), o4[B5 + 200 >> 2] = Y5 ^ y5 & (a5 ^ Y5), o4[B5 + 196 >> 2] = e4 ^ y5 & (M5 ^ e4), o4[B5 + 192 >> 2] = t5 ^ y5 & (k5 ^ t5), yA(N5, N5), H4(G5, G5, N5), nA(A7, G5), xI(fA2, 32), Q5 = 0;
              }
              return r4 = B5 + 368 | 0, 0 | Q5;
            }, function(A7, I6) {
              var g6, B5, Q5, i2, E5, D5, h5, w5, F5, y5, f5, S4, a5, k5, M5, n5, t5, U5, J5, K5;
              return I6 |= 0, r4 = g6 = r4 - 304 | 0, C5[0 | (A7 |= 0)] = c4[0 | I6], C5[A7 + 1 | 0] = c4[I6 + 1 | 0], C5[A7 + 2 | 0] = c4[I6 + 2 | 0], C5[A7 + 3 | 0] = c4[I6 + 3 | 0], C5[A7 + 4 | 0] = c4[I6 + 4 | 0], C5[A7 + 5 | 0] = c4[I6 + 5 | 0], C5[A7 + 6 | 0] = c4[I6 + 6 | 0], C5[A7 + 7 | 0] = c4[I6 + 7 | 0], C5[A7 + 8 | 0] = c4[I6 + 8 | 0], C5[A7 + 9 | 0] = c4[I6 + 9 | 0], C5[A7 + 10 | 0] = c4[I6 + 10 | 0], C5[A7 + 11 | 0] = c4[I6 + 11 | 0], C5[A7 + 12 | 0] = c4[I6 + 12 | 0], C5[A7 + 13 | 0] = c4[I6 + 13 | 0], C5[A7 + 14 | 0] = c4[I6 + 14 | 0], C5[A7 + 15 | 0] = c4[I6 + 15 | 0], C5[A7 + 16 | 0] = c4[I6 + 16 | 0], C5[A7 + 17 | 0] = c4[I6 + 17 | 0], C5[A7 + 18 | 0] = c4[I6 + 18 | 0], C5[A7 + 19 | 0] = c4[I6 + 19 | 0], C5[A7 + 20 | 0] = c4[I6 + 20 | 0], C5[A7 + 21 | 0] = c4[I6 + 21 | 0], C5[A7 + 22 | 0] = c4[I6 + 22 | 0], C5[A7 + 23 | 0] = c4[I6 + 23 | 0], C5[A7 + 24 | 0] = c4[I6 + 24 | 0], C5[A7 + 25 | 0] = c4[I6 + 25 | 0], C5[A7 + 26 | 0] = c4[I6 + 26 | 0], C5[A7 + 27 | 0] = c4[I6 + 27 | 0], C5[A7 + 28 | 0] = c4[I6 + 28 | 0], C5[A7 + 29 | 0] = c4[I6 + 29 | 0], C5[A7 + 30 | 0] = c4[I6 + 30 | 0], I6 = c4[I6 + 31 | 0], C5[0 | A7] = 248 & c4[0 | A7], C5[A7 + 31 | 0] = 63 & I6 | 64, V2(g6 + 48 | 0, A7), I6 = o4[g6 + 128 >> 2], B5 = o4[g6 + 88 >> 2], Q5 = o4[g6 + 132 >> 2], i2 = o4[g6 + 92 >> 2], E5 = o4[g6 + 136 >> 2], D5 = o4[g6 + 96 >> 2], h5 = o4[g6 + 140 >> 2], w5 = o4[g6 + 100 >> 2], F5 = o4[g6 + 144 >> 2], y5 = o4[g6 + 104 >> 2], f5 = o4[g6 + 148 >> 2], S4 = o4[g6 + 108 >> 2], a5 = o4[g6 + 152 >> 2], k5 = o4[g6 + 112 >> 2], M5 = o4[g6 + 156 >> 2], n5 = o4[g6 + 116 >> 2], t5 = o4[g6 + 160 >> 2], U5 = o4[g6 + 120 >> 2], J5 = o4[g6 + 124 >> 2], K5 = o4[g6 + 164 >> 2], o4[g6 + 292 >> 2] = J5 + K5, o4[g6 + 288 >> 2] = t5 + U5, o4[g6 + 284 >> 2] = M5 + n5, o4[g6 + 280 >> 2] = a5 + k5, o4[g6 + 276 >> 2] = f5 + S4, o4[g6 + 272 >> 2] = F5 + y5, o4[g6 + 268 >> 2] = h5 + w5, o4[g6 + 264 >> 2] = E5 + D5, o4[g6 + 260 >> 2] = Q5 + i2, o4[g6 + 256 >> 2] = I6 + B5, o4[g6 + 244 >> 2] = K5 - J5, o4[g6 + 240 >> 2] = t5 - U5, o4[g6 + 236 >> 2] = M5 - n5, o4[g6 + 232 >> 2] = a5 - k5, o4[g6 + 228 >> 2] = f5 - S4, o4[g6 + 224 >> 2] = F5 - y5, o4[g6 + 220 >> 2] = h5 - w5, o4[g6 + 216 >> 2] = E5 - D5, o4[g6 + 212 >> 2] = Q5 - i2, o4[g6 + 208 >> 2] = I6 - B5, yA(I6 = g6 + 208 | 0, I6), H4(g6, g6 + 256 | 0, I6), nA(A7, g6), r4 = g6 + 304 | 0, 0;
            }, function(A7, I6, g6, B5, Q5) {
              A7 |= 0, B5 |= 0, Q5 |= 0;
              var i2, E5 = 0, D5 = 0, h5 = 0, w5 = 0;
              if (r4 = i2 = r4 - 112 | 0, (I6 |= 0) | (g6 |= 0)) {
                E5 = c4[Q5 + 28 | 0] | c4[Q5 + 29 | 0] << 8 | c4[Q5 + 30 | 0] << 16 | c4[Q5 + 31 | 0] << 24, o4[i2 + 24 >> 2] = c4[Q5 + 24 | 0] | c4[Q5 + 25 | 0] << 8 | c4[Q5 + 26 | 0] << 16 | c4[Q5 + 27 | 0] << 24, o4[i2 + 28 >> 2] = E5, E5 = c4[Q5 + 20 | 0] | c4[Q5 + 21 | 0] << 8 | c4[Q5 + 22 | 0] << 16 | c4[Q5 + 23 | 0] << 24, o4[i2 + 16 >> 2] = c4[Q5 + 16 | 0] | c4[Q5 + 17 | 0] << 8 | c4[Q5 + 18 | 0] << 16 | c4[Q5 + 19 | 0] << 24, o4[i2 + 20 >> 2] = E5, E5 = c4[Q5 + 12 | 0] | c4[Q5 + 13 | 0] << 8 | c4[Q5 + 14 | 0] << 16 | c4[Q5 + 15 | 0] << 24, o4[i2 + 8 >> 2] = c4[Q5 + 8 | 0] | c4[Q5 + 9 | 0] << 8 | c4[Q5 + 10 | 0] << 16 | c4[Q5 + 11 | 0] << 24, o4[i2 + 12 >> 2] = E5, E5 = c4[Q5 + 4 | 0] | c4[Q5 + 5 | 0] << 8 | c4[Q5 + 6 | 0] << 16 | c4[Q5 + 7 | 0] << 24, o4[i2 >> 2] = c4[0 | Q5] | c4[Q5 + 1 | 0] << 8 | c4[Q5 + 2 | 0] << 16 | c4[Q5 + 3 | 0] << 24, o4[i2 + 4 >> 2] = E5, Q5 = c4[0 | B5] | c4[B5 + 1 | 0] << 8 | c4[B5 + 2 | 0] << 16 | c4[B5 + 3 | 0] << 24, B5 = c4[B5 + 4 | 0] | c4[B5 + 5 | 0] << 8 | c4[B5 + 6 | 0] << 16 | c4[B5 + 7 | 0] << 24, o4[i2 + 104 >> 2] = 0, o4[i2 + 108 >> 2] = 0, o4[i2 + 96 >> 2] = Q5, o4[i2 + 100 >> 2] = B5;
                A: {
                  if (!g6 & I6 >>> 0 >= 64 | g6) {
                    for (; X2(A7, i2 + 96 | 0, i2), B5 = c4[i2 + 104 | 0] + 1 | 0, C5[i2 + 104 | 0] = B5, B5 = c4[i2 + 105 | 0] + (B5 >>> 8 | 0) | 0, C5[i2 + 105 | 0] = B5, B5 = c4[i2 + 106 | 0] + (B5 >>> 8 | 0) | 0, C5[i2 + 106 | 0] = B5, B5 = c4[i2 + 107 | 0] + (B5 >>> 8 | 0) | 0, C5[i2 + 107 | 0] = B5, B5 = c4[i2 + 108 | 0] + (B5 >>> 8 | 0) | 0, C5[i2 + 108 | 0] = B5, B5 = c4[i2 + 109 | 0] + (B5 >>> 8 | 0) | 0, C5[i2 + 109 | 0] = B5, B5 = c4[i2 + 110 | 0] + (B5 >>> 8 | 0) | 0, C5[i2 + 110 | 0] = B5, C5[i2 + 111 | 0] = c4[i2 + 111 | 0] + (B5 >>> 8 | 0), A7 = A7 - -64 | 0, g6 = g6 - 1 | 0, !(g6 = (I6 = I6 + -64 | 0) >>> 0 < 4294967232 ? g6 + 1 | 0 : g6) & I6 >>> 0 > 63 | g6; ) ;
                    if (!(I6 | g6)) break A;
                  }
                  if (B5 = 0, X2(i2 + 32 | 0, i2 + 96 | 0, i2), E5 = 3 & I6, Q5 = 0, !g6 & I6 >>> 0 >= 4 | g6) {
                    for (g6 = 60 & I6, I6 = 0; D5 = h5 = i2 + 32 | 0, C5[A7 + Q5 | 0] = c4[D5 + Q5 | 0], C5[(w5 = 1 | Q5) + A7 | 0] = c4[D5 + w5 | 0], C5[(D5 = 2 | Q5) + A7 | 0] = c4[D5 + h5 | 0], C5[(D5 = 3 | Q5) + A7 | 0] = c4[D5 + (i2 + 32 | 0) | 0], Q5 = Q5 + 4 | 0, (0 | g6) != (0 | (I6 = I6 + 4 | 0)); ) ;
                    if (!E5) break A;
                  }
                  for (; C5[A7 + Q5 | 0] = c4[(i2 + 32 | 0) + Q5 | 0], Q5 = Q5 + 1 | 0, (0 | E5) != (0 | (B5 = B5 + 1 | 0)); ) ;
                }
                xI(i2 + 32 | 0, 64), xI(i2, 32);
              }
              return r4 = i2 + 112 | 0, 0;
            }, function(A7, I6, g6, B5, Q5, i2, E5, D5) {
              A7 |= 0, I6 |= 0, Q5 |= 0, i2 |= 0, E5 |= 0, D5 |= 0;
              var h5, w5 = 0;
              if (r4 = h5 = r4 - 112 | 0, (g6 |= 0) | (B5 |= 0)) {
                w5 = c4[D5 + 28 | 0] | c4[D5 + 29 | 0] << 8 | c4[D5 + 30 | 0] << 16 | c4[D5 + 31 | 0] << 24, o4[h5 + 24 >> 2] = c4[D5 + 24 | 0] | c4[D5 + 25 | 0] << 8 | c4[D5 + 26 | 0] << 16 | c4[D5 + 27 | 0] << 24, o4[h5 + 28 >> 2] = w5, w5 = c4[D5 + 20 | 0] | c4[D5 + 21 | 0] << 8 | c4[D5 + 22 | 0] << 16 | c4[D5 + 23 | 0] << 24, o4[h5 + 16 >> 2] = c4[D5 + 16 | 0] | c4[D5 + 17 | 0] << 8 | c4[D5 + 18 | 0] << 16 | c4[D5 + 19 | 0] << 24, o4[h5 + 20 >> 2] = w5, w5 = c4[D5 + 12 | 0] | c4[D5 + 13 | 0] << 8 | c4[D5 + 14 | 0] << 16 | c4[D5 + 15 | 0] << 24, o4[h5 + 8 >> 2] = c4[D5 + 8 | 0] | c4[D5 + 9 | 0] << 8 | c4[D5 + 10 | 0] << 16 | c4[D5 + 11 | 0] << 24, o4[h5 + 12 >> 2] = w5, w5 = c4[D5 + 4 | 0] | c4[D5 + 5 | 0] << 8 | c4[D5 + 6 | 0] << 16 | c4[D5 + 7 | 0] << 24, o4[h5 >> 2] = c4[0 | D5] | c4[D5 + 1 | 0] << 8 | c4[D5 + 2 | 0] << 16 | c4[D5 + 3 | 0] << 24, o4[h5 + 4 >> 2] = w5, D5 = c4[Q5 + 4 | 0] | c4[Q5 + 5 | 0] << 8 | c4[Q5 + 6 | 0] << 16 | c4[Q5 + 7 | 0] << 24, o4[h5 + 96 >> 2] = c4[0 | Q5] | c4[Q5 + 1 | 0] << 8 | c4[Q5 + 2 | 0] << 16 | c4[Q5 + 3 | 0] << 24, o4[h5 + 100 >> 2] = D5, C5[h5 + 104 | 0] = i2, C5[h5 + 111 | 0] = E5 >>> 24, C5[h5 + 110 | 0] = E5 >>> 16, C5[h5 + 109 | 0] = E5 >>> 8, C5[h5 + 108 | 0] = E5, C5[h5 + 107 | 0] = (16777215 & E5) << 8 | i2 >>> 24, C5[h5 + 106 | 0] = (65535 & E5) << 16 | i2 >>> 16, C5[h5 + 105 | 0] = (255 & E5) << 24 | i2 >>> 8;
                A: {
                  if (!B5 & g6 >>> 0 >= 64 | B5) {
                    for (; ; ) {
                      for (D5 = 0, X2(h5 + 32 | 0, h5 + 96 | 0, h5); i2 = h5 + 32 | 0, C5[A7 + D5 | 0] = c4[i2 + D5 | 0] ^ c4[I6 + D5 | 0], C5[(Q5 = 1 | D5) + A7 | 0] = c4[Q5 + i2 | 0] ^ c4[I6 + Q5 | 0], 64 != (0 | (D5 = D5 + 2 | 0)); ) ;
                      if (Q5 = c4[h5 + 104 | 0] + 1 | 0, C5[h5 + 104 | 0] = Q5, Q5 = c4[h5 + 105 | 0] + (Q5 >>> 8 | 0) | 0, C5[h5 + 105 | 0] = Q5, Q5 = c4[h5 + 106 | 0] + (Q5 >>> 8 | 0) | 0, C5[h5 + 106 | 0] = Q5, Q5 = c4[h5 + 107 | 0] + (Q5 >>> 8 | 0) | 0, C5[h5 + 107 | 0] = Q5, Q5 = c4[h5 + 108 | 0] + (Q5 >>> 8 | 0) | 0, C5[h5 + 108 | 0] = Q5, Q5 = c4[h5 + 109 | 0] + (Q5 >>> 8 | 0) | 0, C5[h5 + 109 | 0] = Q5, Q5 = c4[h5 + 110 | 0] + (Q5 >>> 8 | 0) | 0, C5[h5 + 110 | 0] = Q5, C5[h5 + 111 | 0] = c4[h5 + 111 | 0] + (Q5 >>> 8 | 0), I6 = I6 - -64 | 0, A7 = A7 - -64 | 0, B5 = B5 - 1 | 0, !(!(B5 = (g6 = g6 + -64 | 0) >>> 0 < 4294967232 ? B5 + 1 | 0 : B5) & g6 >>> 0 > 63 | B5)) break;
                    }
                    if (!(g6 | B5)) break A;
                  }
                  if (D5 = 0, X2(h5 + 32 | 0, h5 + 96 | 0, h5), 1 != (0 | g6) | B5) {
                    for (B5 = 1 & g6, i2 = 62 & g6, Q5 = 0; E5 = h5 + 32 | 0, C5[A7 + D5 | 0] = c4[E5 + D5 | 0] ^ c4[I6 + D5 | 0], C5[(g6 = 1 | D5) + A7 | 0] = c4[g6 + E5 | 0] ^ c4[I6 + g6 | 0], D5 = D5 + 2 | 0, (0 | i2) != (0 | (Q5 = Q5 + 2 | 0)); ) ;
                    if (!B5) break A;
                  }
                  C5[A7 + D5 | 0] = c4[(h5 + 32 | 0) + D5 | 0] ^ c4[I6 + D5 | 0];
                }
                xI(h5 + 32 | 0, 64), xI(h5, 32);
              }
              return r4 = h5 + 112 | 0, 0;
            }, function(A7, I6, g6, C6, B5, i2, D5, o5, c5) {
              A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, B5 |= 0, i2 |= 0, D5 |= 0;
              var h5, w5 = 0, F5 = 0;
              if (h5 = w5 = r4, r4 = w5 = w5 - 192 & -32, u3(c5 |= 0, o5 |= 0, w5 - -64 | 0), o5 = 0, D5 >>> 0 > 63) for (c5 = 64; L4(i2 + o5 | 0, w5 - -64 | 0), o5 = c5, (c5 = c5 - -64 | 0) >>> 0 <= D5 >>> 0; ) ;
              if ((c5 = 32 | o5) >>> 0 <= D5 >>> 0) for (; x2(i2 + o5 | 0, w5 - -64 | 0), o5 = c5, (c5 = c5 + 32 | 0) >>> 0 <= D5 >>> 0; ) ;
              if ((c5 = 31 & D5) && ((F5 = 32 - c5 | 0) && Q4(c5 | w5 + 32, 0, F5), c5 && E4(w5 + 32 | 0, i2 + o5 | 0, c5), x2(w5 + 32 | 0, w5 - -64 | 0)), i2 = 32, o5 = 0, B5 >>> 0 >= 32) for (; v3(A7 + o5 | 0, C6 + o5 | 0, w5 - -64 | 0), o5 = i2, (i2 = i2 + 32 | 0) >>> 0 <= B5 >>> 0; ) ;
              return (i2 = 31 & B5) && ((c5 = 32 - i2 | 0) && Q4(i2 | w5 + 32, 0, c5), (c5 = !i2) || E4(w5 + 32 | 0, C6 + o5 | 0, i2), v3(w5, w5 + 32 | 0, w5 - -64 | 0), c5 || E4(A7 + o5 | 0, w5, i2)), P4(I6, g6, D5, B5, w5 - -64 | 0), r4 = h5, 0;
            }, function(A7, I6, g6, C6, B5, i2, D5, c5, h5) {
              A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, B5 |= 0, i2 |= 0, D5 |= 0;
              var w5, F5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, n5 = 0, t5 = 0, U5 = 0, J5 = 0, K5 = 0, e4 = 0, Y5 = 0, N5 = 0, G5 = 0, H5 = 0, s5 = 0, p5 = 0, d5 = 0, R4 = 0, v5 = 0, z3 = 0, O3 = 0, q3 = 0, W3 = 0, V3 = 0, j3 = 0, m3 = 0, l3 = 0, _3 = 0, X3 = 0, T3 = 0, Z3 = 0;
              if (w5 = y5 = r4, r4 = y5 = y5 - 224 & -32, u3(h5 |= 0, c5 |= 0, y5 + 96 | 0), c5 = 0, D5 >>> 0 > 63) for (h5 = 64; L4(i2 + c5 | 0, y5 + 96 | 0), (h5 = (c5 = h5) - -64 | 0) >>> 0 <= D5 >>> 0; ) ;
              if ((h5 = 32 | c5) >>> 0 <= D5 >>> 0) for (; x2(i2 + c5 | 0, y5 + 96 | 0), (h5 = (c5 = h5) + 32 | 0) >>> 0 <= D5 >>> 0; ) ;
              (h5 = 31 & D5) && ((f5 = 32 - h5 | 0) && Q4(h5 | y5 - -64, 0, f5), h5 && E4(y5 - -64 | 0, i2 + c5 | 0, h5), x2(y5 - -64 | 0, y5 + 96 | 0));
              A: if (A7) {
                if (i2 = 32, c5 = 0, g6 >>> 0 < 32) break A;
                for (; b3(A7 + c5 | 0, I6 + c5 | 0, y5 + 96 | 0), c5 = i2, (i2 = i2 + 32 | 0) >>> 0 <= g6 >>> 0; ) ;
              } else if (i2 = 32, c5 = 0, !(g6 >>> 0 < 32)) for (; b3(y5 + 32 | 0, I6 + c5 | 0, y5 + 96 | 0), c5 = i2, (i2 = i2 + 32 | 0) >>> 0 <= g6 >>> 0; ) ;
              (h5 = 31 & g6) && (U5 = A7 ? A7 + c5 | 0 : y5 + 32 | 0, S4 = I6 + c5 | 0, i2 = y5 + 96 | 0, r4 = I6 = r4 - 320 | 0, c5 = h5 + (I6 + 256 | 0) | 0, (F5 = !(f5 = 32 - h5 | 0)) || Q4(c5, 0, f5), (J5 = !h5) || E4(I6 + 256 | 0, S4, h5), Y5 = o4[i2 + 16 >> 2], N5 = o4[i2 + 48 >> 2], G5 = o4[i2 + 20 >> 2], H5 = o4[i2 + 52 >> 2], s5 = o4[i2 + 24 >> 2], p5 = o4[i2 + 56 >> 2], d5 = o4[i2 + 28 >> 2], R4 = o4[i2 + 60 >> 2], S4 = o4[i2 + 32 >> 2], v5 = o4[i2 + 80 >> 2], z3 = o4[i2 + 112 >> 2], a5 = o4[i2 + 96 >> 2], k5 = o4[i2 + 36 >> 2], O3 = o4[i2 + 84 >> 2], q3 = o4[i2 + 116 >> 2], M5 = o4[i2 + 100 >> 2], n5 = o4[i2 + 40 >> 2], W3 = o4[i2 + 88 >> 2], V3 = o4[i2 + 120 >> 2], t5 = o4[i2 + 104 >> 2], j3 = o4[I6 + 256 >> 2], m3 = o4[I6 + 260 >> 2], l3 = o4[I6 + 264 >> 2], _3 = o4[I6 + 268 >> 2], X3 = o4[I6 + 272 >> 2], T3 = o4[I6 + 276 >> 2], Z3 = o4[I6 + 280 >> 2], K5 = o4[i2 + 44 >> 2], e4 = o4[i2 + 108 >> 2], o4[I6 + 284 >> 2] = K5 ^ e4 & o4[i2 + 124 >> 2] ^ o4[i2 + 92 >> 2] ^ o4[I6 + 284 >> 2], o4[I6 + 280 >> 2] = t5 & V3 ^ W3 ^ Z3 ^ n5, o4[I6 + 276 >> 2] = M5 & q3 ^ O3 ^ T3 ^ k5, o4[I6 + 272 >> 2] = a5 & z3 ^ v5 ^ X3 ^ S4, o4[I6 + 268 >> 2] = e4 ^ R4 & K5 ^ d5 ^ _3, o4[I6 + 264 >> 2] = n5 & p5 ^ s5 ^ l3 ^ t5, o4[I6 + 260 >> 2] = k5 & H5 ^ G5 ^ m3 ^ M5, o4[I6 + 256 >> 2] = S4 & N5 ^ Y5 ^ j3 ^ a5, F5 || Q4(c5, 0, f5), J5 || E4(U5, I6 + 256 | 0, h5), f5 = o4[I6 + 284 >> 2], S4 = o4[I6 + 280 >> 2], a5 = o4[I6 + 276 >> 2], k5 = o4[I6 + 272 >> 2], M5 = o4[I6 + 256 >> 2], n5 = o4[I6 + 260 >> 2], t5 = o4[I6 + 264 >> 2], U5 = o4[I6 + 268 >> 2], c5 = o4[i2 + 124 >> 2], o4[I6 + 312 >> 2] = o4[i2 + 120 >> 2], o4[I6 + 316 >> 2] = c5, c5 = o4[i2 + 116 >> 2], o4[I6 + 304 >> 2] = o4[i2 + 112 >> 2], o4[I6 + 308 >> 2] = c5, c5 = o4[i2 + 100 >> 2], o4[I6 + 240 >> 2] = o4[i2 + 96 >> 2], o4[I6 + 244 >> 2] = c5, c5 = o4[i2 + 108 >> 2], o4[I6 + 248 >> 2] = o4[i2 + 104 >> 2], o4[I6 + 252 >> 2] = c5, c5 = o4[i2 + 116 >> 2], o4[I6 + 224 >> 2] = o4[i2 + 112 >> 2], o4[I6 + 228 >> 2] = c5, c5 = o4[i2 + 124 >> 2], o4[I6 + 232 >> 2] = o4[i2 + 120 >> 2], o4[I6 + 236 >> 2] = c5, GA(c5 = I6 + 288 | 0, I6 + 240 | 0, I6 + 224 | 0), h5 = o4[I6 + 300 >> 2], o4[i2 + 120 >> 2] = o4[I6 + 296 >> 2], o4[i2 + 124 >> 2] = h5, h5 = o4[I6 + 292 >> 2], o4[i2 + 112 >> 2] = o4[I6 + 288 >> 2], o4[i2 + 116 >> 2] = h5, h5 = o4[i2 + 84 >> 2], o4[I6 + 208 >> 2] = o4[i2 + 80 >> 2], o4[I6 + 212 >> 2] = h5, h5 = o4[i2 + 92 >> 2], o4[I6 + 216 >> 2] = o4[i2 + 88 >> 2], o4[I6 + 220 >> 2] = h5, h5 = o4[i2 + 100 >> 2], o4[I6 + 192 >> 2] = o4[i2 + 96 >> 2], o4[I6 + 196 >> 2] = h5, h5 = o4[i2 + 108 >> 2], o4[I6 + 200 >> 2] = o4[i2 + 104 >> 2], o4[I6 + 204 >> 2] = h5, GA(c5, I6 + 208 | 0, I6 + 192 | 0), h5 = o4[I6 + 300 >> 2], o4[i2 + 104 >> 2] = o4[I6 + 296 >> 2], o4[i2 + 108 >> 2] = h5, h5 = o4[I6 + 292 >> 2], o4[i2 + 96 >> 2] = o4[I6 + 288 >> 2], o4[i2 + 100 >> 2] = h5, F5 = o4[4 + (h5 = i2 - -64 | 0) >> 2], o4[I6 + 176 >> 2] = o4[h5 >> 2], o4[I6 + 180 >> 2] = F5, F5 = o4[i2 + 76 >> 2], o4[I6 + 184 >> 2] = o4[i2 + 72 >> 2], o4[I6 + 188 >> 2] = F5, F5 = o4[i2 + 84 >> 2], o4[I6 + 160 >> 2] = o4[i2 + 80 >> 2], o4[I6 + 164 >> 2] = F5, F5 = o4[i2 + 92 >> 2], o4[I6 + 168 >> 2] = o4[i2 + 88 >> 2], o4[I6 + 172 >> 2] = F5, GA(c5, I6 + 176 | 0, I6 + 160 | 0), F5 = o4[I6 + 300 >> 2], o4[i2 + 88 >> 2] = o4[I6 + 296 >> 2], o4[i2 + 92 >> 2] = F5, F5 = o4[I6 + 292 >> 2], o4[i2 + 80 >> 2] = o4[I6 + 288 >> 2], o4[i2 + 84 >> 2] = F5, F5 = o4[i2 + 52 >> 2], o4[I6 + 144 >> 2] = o4[i2 + 48 >> 2], o4[I6 + 148 >> 2] = F5, F5 = o4[i2 + 60 >> 2], o4[I6 + 152 >> 2] = o4[i2 + 56 >> 2], o4[I6 + 156 >> 2] = F5, F5 = o4[h5 + 4 >> 2], o4[I6 + 128 >> 2] = o4[h5 >> 2], o4[I6 + 132 >> 2] = F5, F5 = o4[i2 + 76 >> 2], o4[I6 + 136 >> 2] = o4[i2 + 72 >> 2], o4[I6 + 140 >> 2] = F5, GA(c5, I6 + 144 | 0, I6 + 128 | 0), F5 = o4[I6 + 300 >> 2], o4[i2 + 72 >> 2] = o4[I6 + 296 >> 2], o4[i2 + 76 >> 2] = F5, F5 = o4[I6 + 292 >> 2], o4[h5 >> 2] = o4[I6 + 288 >> 2], o4[h5 + 4 >> 2] = F5, F5 = o4[i2 + 36 >> 2], o4[I6 + 112 >> 2] = o4[i2 + 32 >> 2], o4[I6 + 116 >> 2] = F5, F5 = o4[i2 + 44 >> 2], o4[I6 + 120 >> 2] = o4[i2 + 40 >> 2], o4[I6 + 124 >> 2] = F5, F5 = o4[i2 + 52 >> 2], o4[I6 + 96 >> 2] = o4[i2 + 48 >> 2], o4[I6 + 100 >> 2] = F5, F5 = o4[i2 + 60 >> 2], o4[I6 + 104 >> 2] = o4[i2 + 56 >> 2], o4[I6 + 108 >> 2] = F5, GA(c5, I6 + 112 | 0, I6 + 96 | 0), F5 = o4[I6 + 300 >> 2], o4[i2 + 56 >> 2] = o4[I6 + 296 >> 2], o4[i2 + 60 >> 2] = F5, F5 = o4[I6 + 292 >> 2], o4[i2 + 48 >> 2] = o4[I6 + 288 >> 2], o4[i2 + 52 >> 2] = F5, F5 = o4[i2 + 20 >> 2], o4[I6 + 80 >> 2] = o4[i2 + 16 >> 2], o4[I6 + 84 >> 2] = F5, F5 = o4[i2 + 28 >> 2], o4[I6 + 88 >> 2] = o4[i2 + 24 >> 2], o4[I6 + 92 >> 2] = F5, F5 = o4[i2 + 36 >> 2], o4[I6 + 64 >> 2] = o4[i2 + 32 >> 2], o4[I6 + 68 >> 2] = F5, F5 = o4[i2 + 44 >> 2], o4[I6 + 72 >> 2] = o4[i2 + 40 >> 2], o4[I6 + 76 >> 2] = F5, GA(c5, I6 + 80 | 0, I6 - -64 | 0), F5 = o4[I6 + 300 >> 2], o4[i2 + 40 >> 2] = o4[I6 + 296 >> 2], o4[i2 + 44 >> 2] = F5, F5 = o4[I6 + 292 >> 2], o4[i2 + 32 >> 2] = o4[I6 + 288 >> 2], o4[i2 + 36 >> 2] = F5, F5 = o4[i2 + 4 >> 2], o4[I6 + 48 >> 2] = o4[i2 >> 2], o4[I6 + 52 >> 2] = F5, F5 = o4[i2 + 12 >> 2], o4[I6 + 56 >> 2] = o4[i2 + 8 >> 2], o4[I6 + 60 >> 2] = F5, F5 = o4[i2 + 20 >> 2], o4[I6 + 32 >> 2] = o4[i2 + 16 >> 2], o4[I6 + 36 >> 2] = F5, F5 = o4[i2 + 28 >> 2], o4[I6 + 40 >> 2] = o4[i2 + 24 >> 2], o4[I6 + 44 >> 2] = F5, GA(c5, I6 + 48 | 0, I6 + 32 | 0), F5 = o4[I6 + 300 >> 2], o4[i2 + 24 >> 2] = o4[I6 + 296 >> 2], o4[i2 + 28 >> 2] = F5, F5 = o4[I6 + 292 >> 2], o4[i2 + 16 >> 2] = o4[I6 + 288 >> 2], o4[i2 + 20 >> 2] = F5, F5 = o4[I6 + 308 >> 2], o4[I6 + 16 >> 2] = o4[I6 + 304 >> 2], o4[I6 + 20 >> 2] = F5, F5 = o4[I6 + 316 >> 2], o4[I6 + 24 >> 2] = o4[I6 + 312 >> 2], o4[I6 + 28 >> 2] = F5, F5 = o4[i2 + 4 >> 2], o4[I6 >> 2] = o4[i2 >> 2], o4[I6 + 4 >> 2] = F5, F5 = o4[i2 + 12 >> 2], o4[I6 + 8 >> 2] = o4[i2 + 8 >> 2], o4[I6 + 12 >> 2] = F5, GA(c5, I6 + 16 | 0, I6), c5 = o4[I6 + 300 >> 2], o4[i2 + 8 >> 2] = o4[I6 + 296 >> 2], o4[i2 + 12 >> 2] = c5, c5 = o4[I6 + 292 >> 2], o4[i2 >> 2] = o4[I6 + 288 >> 2], o4[i2 + 4 >> 2] = c5, o4[i2 + 12 >> 2] = U5 ^ o4[i2 + 12 >> 2], o4[i2 + 8 >> 2] = t5 ^ o4[i2 + 8 >> 2], o4[i2 + 4 >> 2] = n5 ^ o4[i2 + 4 >> 2], o4[i2 >> 2] = M5 ^ o4[i2 >> 2], o4[h5 >> 2] = k5 ^ o4[h5 >> 2], o4[i2 + 68 >> 2] = a5 ^ o4[i2 + 68 >> 2], o4[i2 + 72 >> 2] = S4 ^ o4[i2 + 72 >> 2], o4[i2 + 76 >> 2] = f5 ^ o4[i2 + 76 >> 2], r4 = I6 + 320 | 0), P4(y5, B5, D5, g6, y5 + 96 | 0), c5 = -1;
              A: {
                I: {
                  g: {
                    C: {
                      B: {
                        if (I6 = B5 - 16 | 0) {
                          if (16 == (0 | I6)) break B;
                          break g;
                        }
                        c5 = tA(y5, C6);
                        break C;
                      }
                      c5 = mA(y5, C6);
                    }
                    if (!c5) break I;
                  }
                  if (!A7 | !g6) break A;
                  return Q4(A7, 0, g6), r4 = w5, 0 | c5;
                }
                c5 = 0;
              }
              return r4 = w5, 0 | c5;
            }, function(A7, I6, g6, C6, B5, i2, D5, h5, w5) {
              A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, B5 |= 0, i2 |= 0, D5 |= 0;
              var F5, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0;
              if (r4 = F5 = r4 - 528 | 0, N4(w5 |= 0, h5 |= 0, F5 + 400 | 0), w5 = 0, D5 >>> 0 > 31) for (h5 = 32; R3(i2 + w5 | 0, F5 + 400 | 0), w5 = h5, (h5 = h5 + 32 | 0) >>> 0 <= D5 >>> 0; ) ;
              if ((h5 = 16 | w5) >>> 0 <= D5 >>> 0) for (; f5 = c4[0 | (w5 = i2 + w5 | 0)] | c4[w5 + 1 | 0] << 8 | c4[w5 + 2 | 0] << 16 | c4[w5 + 3 | 0] << 24, S4 = c4[w5 + 4 | 0] | c4[w5 + 5 | 0] << 8 | c4[w5 + 6 | 0] << 16 | c4[w5 + 7 | 0] << 24, a5 = c4[w5 + 8 | 0] | c4[w5 + 9 | 0] << 8 | c4[w5 + 10 | 0] << 16 | c4[w5 + 11 | 0] << 24, k5 = c4[w5 + 12 | 0] | c4[w5 + 13 | 0] << 8 | c4[w5 + 14 | 0] << 16 | c4[w5 + 15 | 0] << 24, w5 = o4[F5 + 492 >> 2], o4[F5 + 520 >> 2] = o4[F5 + 488 >> 2], o4[F5 + 524 >> 2] = w5, w5 = o4[F5 + 484 >> 2], o4[F5 + 512 >> 2] = o4[F5 + 480 >> 2], o4[F5 + 516 >> 2] = w5, w5 = o4[F5 + 468 >> 2], o4[F5 + 368 >> 2] = o4[F5 + 464 >> 2], o4[F5 + 372 >> 2] = w5, w5 = o4[F5 + 476 >> 2], o4[F5 + 376 >> 2] = o4[F5 + 472 >> 2], o4[F5 + 380 >> 2] = w5, w5 = o4[F5 + 484 >> 2], o4[F5 + 352 >> 2] = o4[F5 + 480 >> 2], o4[F5 + 356 >> 2] = w5, w5 = o4[F5 + 492 >> 2], o4[F5 + 360 >> 2] = o4[F5 + 488 >> 2], o4[F5 + 364 >> 2] = w5, GA(w5 = F5 + 496 | 0, F5 + 368 | 0, F5 + 352 | 0), y5 = o4[F5 + 508 >> 2], o4[F5 + 488 >> 2] = o4[F5 + 504 >> 2], o4[F5 + 492 >> 2] = y5, y5 = o4[F5 + 500 >> 2], o4[F5 + 480 >> 2] = o4[F5 + 496 >> 2], o4[F5 + 484 >> 2] = y5, y5 = o4[F5 + 452 >> 2], o4[F5 + 336 >> 2] = o4[F5 + 448 >> 2], o4[F5 + 340 >> 2] = y5, y5 = o4[F5 + 460 >> 2], o4[F5 + 344 >> 2] = o4[F5 + 456 >> 2], o4[F5 + 348 >> 2] = y5, y5 = o4[F5 + 468 >> 2], o4[F5 + 320 >> 2] = o4[F5 + 464 >> 2], o4[F5 + 324 >> 2] = y5, y5 = o4[F5 + 476 >> 2], o4[F5 + 328 >> 2] = o4[F5 + 472 >> 2], o4[F5 + 332 >> 2] = y5, GA(w5, F5 + 336 | 0, F5 + 320 | 0), y5 = o4[F5 + 508 >> 2], o4[F5 + 472 >> 2] = o4[F5 + 504 >> 2], o4[F5 + 476 >> 2] = y5, y5 = o4[F5 + 500 >> 2], o4[F5 + 464 >> 2] = o4[F5 + 496 >> 2], o4[F5 + 468 >> 2] = y5, y5 = o4[F5 + 436 >> 2], o4[F5 + 304 >> 2] = o4[F5 + 432 >> 2], o4[F5 + 308 >> 2] = y5, y5 = o4[F5 + 444 >> 2], o4[F5 + 312 >> 2] = o4[F5 + 440 >> 2], o4[F5 + 316 >> 2] = y5, y5 = o4[F5 + 452 >> 2], o4[F5 + 288 >> 2] = o4[F5 + 448 >> 2], o4[F5 + 292 >> 2] = y5, y5 = o4[F5 + 460 >> 2], o4[F5 + 296 >> 2] = o4[F5 + 456 >> 2], o4[F5 + 300 >> 2] = y5, GA(w5, F5 + 304 | 0, F5 + 288 | 0), y5 = o4[F5 + 508 >> 2], o4[F5 + 456 >> 2] = o4[F5 + 504 >> 2], o4[F5 + 460 >> 2] = y5, y5 = o4[F5 + 500 >> 2], o4[F5 + 448 >> 2] = o4[F5 + 496 >> 2], o4[F5 + 452 >> 2] = y5, y5 = o4[F5 + 420 >> 2], o4[F5 + 272 >> 2] = o4[F5 + 416 >> 2], o4[F5 + 276 >> 2] = y5, y5 = o4[F5 + 428 >> 2], o4[F5 + 280 >> 2] = o4[F5 + 424 >> 2], o4[F5 + 284 >> 2] = y5, y5 = o4[F5 + 436 >> 2], o4[F5 + 256 >> 2] = o4[F5 + 432 >> 2], o4[F5 + 260 >> 2] = y5, y5 = o4[F5 + 444 >> 2], o4[F5 + 264 >> 2] = o4[F5 + 440 >> 2], o4[F5 + 268 >> 2] = y5, GA(w5, F5 + 272 | 0, F5 + 256 | 0), y5 = o4[F5 + 508 >> 2], o4[F5 + 440 >> 2] = o4[F5 + 504 >> 2], o4[F5 + 444 >> 2] = y5, y5 = o4[F5 + 500 >> 2], o4[F5 + 432 >> 2] = o4[F5 + 496 >> 2], o4[F5 + 436 >> 2] = y5, y5 = o4[F5 + 404 >> 2], o4[F5 + 240 >> 2] = o4[F5 + 400 >> 2], o4[F5 + 244 >> 2] = y5, y5 = o4[F5 + 412 >> 2], o4[F5 + 248 >> 2] = o4[F5 + 408 >> 2], o4[F5 + 252 >> 2] = y5, y5 = o4[F5 + 420 >> 2], o4[F5 + 224 >> 2] = o4[F5 + 416 >> 2], o4[F5 + 228 >> 2] = y5, y5 = o4[F5 + 428 >> 2], o4[F5 + 232 >> 2] = o4[F5 + 424 >> 2], o4[F5 + 236 >> 2] = y5, GA(w5, F5 + 240 | 0, F5 + 224 | 0), y5 = o4[F5 + 508 >> 2], o4[F5 + 424 >> 2] = o4[F5 + 504 >> 2], o4[F5 + 428 >> 2] = y5, y5 = o4[F5 + 500 >> 2], o4[F5 + 416 >> 2] = o4[F5 + 496 >> 2], o4[F5 + 420 >> 2] = y5, y5 = o4[F5 + 516 >> 2], o4[F5 + 208 >> 2] = o4[F5 + 512 >> 2], o4[F5 + 212 >> 2] = y5, y5 = o4[F5 + 524 >> 2], o4[F5 + 216 >> 2] = o4[F5 + 520 >> 2], o4[F5 + 220 >> 2] = y5, y5 = o4[F5 + 404 >> 2], o4[F5 + 192 >> 2] = o4[F5 + 400 >> 2], o4[F5 + 196 >> 2] = y5, y5 = o4[F5 + 412 >> 2], o4[F5 + 200 >> 2] = o4[F5 + 408 >> 2], o4[F5 + 204 >> 2] = y5, GA(w5, F5 + 208 | 0, F5 + 192 | 0), o4[F5 + 412 >> 2] = k5 ^ o4[F5 + 508 >> 2], o4[F5 + 408 >> 2] = o4[F5 + 504 >> 2] ^ a5, o4[F5 + 404 >> 2] = o4[F5 + 500 >> 2] ^ S4, o4[F5 + 400 >> 2] = f5 ^ o4[F5 + 496 >> 2], w5 = h5, (h5 = h5 + 16 | 0) >>> 0 <= D5 >>> 0; ) ;
              if ((h5 = 15 & D5) && ((f5 = 16 - h5 | 0) && Q4(h5 | F5 + 384, 0, f5), h5 && E4(F5 + 384 | 0, i2 + w5 | 0, h5), S4 = o4[F5 + 384 >> 2], a5 = o4[F5 + 388 >> 2], k5 = o4[F5 + 392 >> 2], y5 = o4[F5 + 396 >> 2], w5 = o4[F5 + 492 >> 2], i2 = o4[F5 + 488 >> 2], o4[F5 + 520 >> 2] = i2, o4[F5 + 524 >> 2] = w5, f5 = o4[F5 + 484 >> 2], h5 = o4[F5 + 480 >> 2], o4[F5 + 512 >> 2] = h5, o4[F5 + 516 >> 2] = f5, M5 = o4[F5 + 468 >> 2], o4[F5 + 176 >> 2] = o4[F5 + 464 >> 2], o4[F5 + 180 >> 2] = M5, M5 = o4[F5 + 476 >> 2], o4[F5 + 184 >> 2] = o4[F5 + 472 >> 2], o4[F5 + 188 >> 2] = M5, o4[F5 + 160 >> 2] = h5, o4[F5 + 164 >> 2] = f5, o4[F5 + 168 >> 2] = i2, o4[F5 + 172 >> 2] = w5, GA(i2 = F5 + 496 | 0, F5 + 176 | 0, F5 + 160 | 0), h5 = o4[F5 + 508 >> 2], o4[F5 + 488 >> 2] = o4[F5 + 504 >> 2], o4[F5 + 492 >> 2] = h5, h5 = o4[F5 + 500 >> 2], o4[F5 + 480 >> 2] = o4[F5 + 496 >> 2], o4[F5 + 484 >> 2] = h5, h5 = o4[F5 + 452 >> 2], o4[F5 + 144 >> 2] = o4[F5 + 448 >> 2], o4[F5 + 148 >> 2] = h5, h5 = o4[F5 + 460 >> 2], o4[F5 + 152 >> 2] = o4[F5 + 456 >> 2], o4[F5 + 156 >> 2] = h5, h5 = o4[F5 + 468 >> 2], o4[F5 + 128 >> 2] = o4[F5 + 464 >> 2], o4[F5 + 132 >> 2] = h5, h5 = o4[F5 + 476 >> 2], o4[F5 + 136 >> 2] = o4[F5 + 472 >> 2], o4[F5 + 140 >> 2] = h5, GA(i2, F5 + 144 | 0, F5 + 128 | 0), h5 = o4[F5 + 508 >> 2], o4[F5 + 472 >> 2] = o4[F5 + 504 >> 2], o4[F5 + 476 >> 2] = h5, h5 = o4[F5 + 500 >> 2], o4[F5 + 464 >> 2] = o4[F5 + 496 >> 2], o4[F5 + 468 >> 2] = h5, h5 = o4[F5 + 436 >> 2], o4[F5 + 112 >> 2] = o4[F5 + 432 >> 2], o4[F5 + 116 >> 2] = h5, h5 = o4[F5 + 444 >> 2], o4[F5 + 120 >> 2] = o4[F5 + 440 >> 2], o4[F5 + 124 >> 2] = h5, h5 = o4[F5 + 452 >> 2], o4[F5 + 96 >> 2] = o4[F5 + 448 >> 2], o4[F5 + 100 >> 2] = h5, h5 = o4[F5 + 460 >> 2], o4[F5 + 104 >> 2] = o4[F5 + 456 >> 2], o4[F5 + 108 >> 2] = h5, GA(i2, F5 + 112 | 0, F5 + 96 | 0), h5 = o4[F5 + 508 >> 2], o4[F5 + 456 >> 2] = o4[F5 + 504 >> 2], o4[F5 + 460 >> 2] = h5, h5 = o4[F5 + 500 >> 2], o4[F5 + 448 >> 2] = o4[F5 + 496 >> 2], o4[F5 + 452 >> 2] = h5, h5 = o4[F5 + 420 >> 2], o4[F5 + 80 >> 2] = o4[F5 + 416 >> 2], o4[F5 + 84 >> 2] = h5, h5 = o4[F5 + 428 >> 2], o4[F5 + 88 >> 2] = o4[F5 + 424 >> 2], o4[F5 + 92 >> 2] = h5, h5 = o4[F5 + 436 >> 2], o4[F5 + 64 >> 2] = o4[F5 + 432 >> 2], o4[F5 + 68 >> 2] = h5, h5 = o4[F5 + 444 >> 2], o4[F5 + 72 >> 2] = o4[F5 + 440 >> 2], o4[F5 + 76 >> 2] = h5, GA(i2, F5 + 80 | 0, F5 - -64 | 0), h5 = o4[F5 + 508 >> 2], o4[F5 + 440 >> 2] = o4[F5 + 504 >> 2], o4[F5 + 444 >> 2] = h5, h5 = o4[F5 + 500 >> 2], o4[F5 + 432 >> 2] = o4[F5 + 496 >> 2], o4[F5 + 436 >> 2] = h5, h5 = o4[F5 + 404 >> 2], o4[F5 + 48 >> 2] = o4[F5 + 400 >> 2], o4[F5 + 52 >> 2] = h5, h5 = o4[F5 + 412 >> 2], o4[F5 + 56 >> 2] = o4[F5 + 408 >> 2], o4[F5 + 60 >> 2] = h5, h5 = o4[F5 + 420 >> 2], o4[F5 + 32 >> 2] = o4[F5 + 416 >> 2], o4[F5 + 36 >> 2] = h5, h5 = o4[F5 + 428 >> 2], o4[F5 + 40 >> 2] = o4[F5 + 424 >> 2], o4[F5 + 44 >> 2] = h5, GA(i2, F5 + 48 | 0, F5 + 32 | 0), h5 = o4[F5 + 508 >> 2], o4[F5 + 424 >> 2] = o4[F5 + 504 >> 2], o4[F5 + 428 >> 2] = h5, h5 = o4[F5 + 500 >> 2], o4[F5 + 416 >> 2] = o4[F5 + 496 >> 2], o4[F5 + 420 >> 2] = h5, h5 = o4[F5 + 516 >> 2], o4[F5 + 16 >> 2] = o4[F5 + 512 >> 2], o4[F5 + 20 >> 2] = h5, h5 = o4[F5 + 524 >> 2], o4[F5 + 24 >> 2] = o4[F5 + 520 >> 2], o4[F5 + 28 >> 2] = h5, h5 = o4[F5 + 404 >> 2], o4[F5 >> 2] = o4[F5 + 400 >> 2], o4[F5 + 4 >> 2] = h5, h5 = o4[F5 + 412 >> 2], o4[F5 + 8 >> 2] = o4[F5 + 408 >> 2], o4[F5 + 12 >> 2] = h5, GA(i2, F5 + 16 | 0, F5), o4[F5 + 412 >> 2] = y5 ^ o4[F5 + 508 >> 2], o4[F5 + 408 >> 2] = k5 ^ o4[F5 + 504 >> 2], o4[F5 + 404 >> 2] = a5 ^ o4[F5 + 500 >> 2], o4[F5 + 400 >> 2] = S4 ^ o4[F5 + 496 >> 2]), w5 = 16, h5 = 0, B5 >>> 0 >= 16) for (; l2(A7 + h5 | 0, C6 + h5 | 0, F5 + 400 | 0), (w5 = (h5 = w5) + 16 | 0) >>> 0 <= B5 >>> 0; ) ;
              return (i2 = 15 & B5) && ((w5 = 16 - i2 | 0) && Q4(i2 | F5 + 384, 0, w5), (w5 = !i2) || E4(F5 + 384 | 0, C6 + h5 | 0, i2), l2(C6 = F5 + 512 | 0, F5 + 384 | 0, F5 + 400 | 0), w5 || E4(A7 + h5 | 0, C6, i2)), O2(I6, g6, D5, B5, F5 + 400 | 0), r4 = F5 + 528 | 0, 0;
            }, function(A7, I6, g6, C6, B5, i2, D5, h5, w5) {
              A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, B5 |= 0, i2 |= 0, D5 |= 0;
              var F5, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, n5 = 0, t5 = 0, U5 = 0, J5 = 0, K5 = 0, e4 = 0, Y5 = 0, G5 = 0, H5 = 0, s5 = 0, p5 = 0, L5 = 0, d5 = 0, P5 = 0, b4 = 0, v5 = 0, u4 = 0;
              if (r4 = F5 = r4 - 544 | 0, N4(w5 |= 0, h5 |= 0, F5 + 432 | 0), w5 = 0, D5 >>> 0 > 31) for (h5 = 32; R3(i2 + w5 | 0, F5 + 432 | 0), w5 = h5, (h5 = h5 + 32 | 0) >>> 0 <= D5 >>> 0; ) ;
              if ((h5 = 16 | w5) >>> 0 <= D5 >>> 0) for (; f5 = c4[0 | (w5 = i2 + w5 | 0)] | c4[w5 + 1 | 0] << 8 | c4[w5 + 2 | 0] << 16 | c4[w5 + 3 | 0] << 24, S4 = c4[w5 + 4 | 0] | c4[w5 + 5 | 0] << 8 | c4[w5 + 6 | 0] << 16 | c4[w5 + 7 | 0] << 24, k5 = c4[w5 + 8 | 0] | c4[w5 + 9 | 0] << 8 | c4[w5 + 10 | 0] << 16 | c4[w5 + 11 | 0] << 24, a5 = c4[w5 + 12 | 0] | c4[w5 + 13 | 0] << 8 | c4[w5 + 14 | 0] << 16 | c4[w5 + 15 | 0] << 24, w5 = o4[F5 + 524 >> 2], o4[F5 + 392 >> 2] = o4[F5 + 520 >> 2], o4[F5 + 396 >> 2] = w5, w5 = o4[F5 + 516 >> 2], o4[F5 + 384 >> 2] = o4[F5 + 512 >> 2], o4[F5 + 388 >> 2] = w5, w5 = o4[F5 + 500 >> 2], o4[F5 + 368 >> 2] = o4[F5 + 496 >> 2], o4[F5 + 372 >> 2] = w5, w5 = o4[F5 + 508 >> 2], o4[F5 + 376 >> 2] = o4[F5 + 504 >> 2], o4[F5 + 380 >> 2] = w5, w5 = o4[F5 + 516 >> 2], o4[F5 + 352 >> 2] = o4[F5 + 512 >> 2], o4[F5 + 356 >> 2] = w5, w5 = o4[F5 + 524 >> 2], o4[F5 + 360 >> 2] = o4[F5 + 520 >> 2], o4[F5 + 364 >> 2] = w5, GA(w5 = F5 + 528 | 0, F5 + 368 | 0, F5 + 352 | 0), y5 = o4[F5 + 540 >> 2], o4[F5 + 520 >> 2] = o4[F5 + 536 >> 2], o4[F5 + 524 >> 2] = y5, y5 = o4[F5 + 532 >> 2], o4[F5 + 512 >> 2] = o4[F5 + 528 >> 2], o4[F5 + 516 >> 2] = y5, y5 = o4[F5 + 484 >> 2], o4[F5 + 336 >> 2] = o4[F5 + 480 >> 2], o4[F5 + 340 >> 2] = y5, y5 = o4[F5 + 492 >> 2], o4[F5 + 344 >> 2] = o4[F5 + 488 >> 2], o4[F5 + 348 >> 2] = y5, y5 = o4[F5 + 500 >> 2], o4[F5 + 320 >> 2] = o4[F5 + 496 >> 2], o4[F5 + 324 >> 2] = y5, y5 = o4[F5 + 508 >> 2], o4[F5 + 328 >> 2] = o4[F5 + 504 >> 2], o4[F5 + 332 >> 2] = y5, GA(w5, F5 + 336 | 0, F5 + 320 | 0), y5 = o4[F5 + 540 >> 2], o4[F5 + 504 >> 2] = o4[F5 + 536 >> 2], o4[F5 + 508 >> 2] = y5, y5 = o4[F5 + 532 >> 2], o4[F5 + 496 >> 2] = o4[F5 + 528 >> 2], o4[F5 + 500 >> 2] = y5, y5 = o4[F5 + 468 >> 2], o4[F5 + 304 >> 2] = o4[F5 + 464 >> 2], o4[F5 + 308 >> 2] = y5, y5 = o4[F5 + 476 >> 2], o4[F5 + 312 >> 2] = o4[F5 + 472 >> 2], o4[F5 + 316 >> 2] = y5, y5 = o4[F5 + 484 >> 2], o4[F5 + 288 >> 2] = o4[F5 + 480 >> 2], o4[F5 + 292 >> 2] = y5, y5 = o4[F5 + 492 >> 2], o4[F5 + 296 >> 2] = o4[F5 + 488 >> 2], o4[F5 + 300 >> 2] = y5, GA(w5, F5 + 304 | 0, F5 + 288 | 0), y5 = o4[F5 + 540 >> 2], o4[F5 + 488 >> 2] = o4[F5 + 536 >> 2], o4[F5 + 492 >> 2] = y5, y5 = o4[F5 + 532 >> 2], o4[F5 + 480 >> 2] = o4[F5 + 528 >> 2], o4[F5 + 484 >> 2] = y5, y5 = o4[F5 + 452 >> 2], o4[F5 + 272 >> 2] = o4[F5 + 448 >> 2], o4[F5 + 276 >> 2] = y5, y5 = o4[F5 + 460 >> 2], o4[F5 + 280 >> 2] = o4[F5 + 456 >> 2], o4[F5 + 284 >> 2] = y5, y5 = o4[F5 + 468 >> 2], o4[F5 + 256 >> 2] = o4[F5 + 464 >> 2], o4[F5 + 260 >> 2] = y5, y5 = o4[F5 + 476 >> 2], o4[F5 + 264 >> 2] = o4[F5 + 472 >> 2], o4[F5 + 268 >> 2] = y5, GA(w5, F5 + 272 | 0, F5 + 256 | 0), y5 = o4[F5 + 540 >> 2], o4[F5 + 472 >> 2] = o4[F5 + 536 >> 2], o4[F5 + 476 >> 2] = y5, y5 = o4[F5 + 532 >> 2], o4[F5 + 464 >> 2] = o4[F5 + 528 >> 2], o4[F5 + 468 >> 2] = y5, y5 = o4[F5 + 436 >> 2], o4[F5 + 240 >> 2] = o4[F5 + 432 >> 2], o4[F5 + 244 >> 2] = y5, y5 = o4[F5 + 444 >> 2], o4[F5 + 248 >> 2] = o4[F5 + 440 >> 2], o4[F5 + 252 >> 2] = y5, y5 = o4[F5 + 452 >> 2], o4[F5 + 224 >> 2] = o4[F5 + 448 >> 2], o4[F5 + 228 >> 2] = y5, y5 = o4[F5 + 460 >> 2], o4[F5 + 232 >> 2] = o4[F5 + 456 >> 2], o4[F5 + 236 >> 2] = y5, GA(w5, F5 + 240 | 0, F5 + 224 | 0), y5 = o4[F5 + 540 >> 2], o4[F5 + 456 >> 2] = o4[F5 + 536 >> 2], o4[F5 + 460 >> 2] = y5, y5 = o4[F5 + 532 >> 2], o4[F5 + 448 >> 2] = o4[F5 + 528 >> 2], o4[F5 + 452 >> 2] = y5, y5 = o4[F5 + 388 >> 2], o4[F5 + 208 >> 2] = o4[F5 + 384 >> 2], o4[F5 + 212 >> 2] = y5, y5 = o4[F5 + 396 >> 2], o4[F5 + 216 >> 2] = o4[F5 + 392 >> 2], o4[F5 + 220 >> 2] = y5, y5 = o4[F5 + 436 >> 2], o4[F5 + 192 >> 2] = o4[F5 + 432 >> 2], o4[F5 + 196 >> 2] = y5, y5 = o4[F5 + 444 >> 2], o4[F5 + 200 >> 2] = o4[F5 + 440 >> 2], o4[F5 + 204 >> 2] = y5, GA(w5, F5 + 208 | 0, F5 + 192 | 0), o4[F5 + 444 >> 2] = a5 ^ o4[F5 + 540 >> 2], o4[F5 + 440 >> 2] = k5 ^ o4[F5 + 536 >> 2], o4[F5 + 436 >> 2] = S4 ^ o4[F5 + 532 >> 2], o4[F5 + 432 >> 2] = f5 ^ o4[F5 + 528 >> 2], w5 = h5, (h5 = h5 + 16 | 0) >>> 0 <= D5 >>> 0; ) ;
              (h5 = 15 & D5) && ((f5 = 16 - h5 | 0) && Q4(h5 | F5 + 416, 0, f5), h5 && E4(F5 + 416 | 0, i2 + w5 | 0, h5), S4 = o4[F5 + 416 >> 2], k5 = o4[F5 + 420 >> 2], a5 = o4[F5 + 424 >> 2], y5 = o4[F5 + 428 >> 2], h5 = o4[F5 + 524 >> 2], w5 = o4[F5 + 520 >> 2], o4[F5 + 392 >> 2] = w5, o4[F5 + 396 >> 2] = h5, f5 = o4[F5 + 516 >> 2], i2 = o4[F5 + 512 >> 2], o4[F5 + 384 >> 2] = i2, o4[F5 + 388 >> 2] = f5, M5 = o4[F5 + 500 >> 2], o4[F5 + 176 >> 2] = o4[F5 + 496 >> 2], o4[F5 + 180 >> 2] = M5, M5 = o4[F5 + 508 >> 2], o4[F5 + 184 >> 2] = o4[F5 + 504 >> 2], o4[F5 + 188 >> 2] = M5, o4[F5 + 160 >> 2] = i2, o4[F5 + 164 >> 2] = f5, o4[F5 + 168 >> 2] = w5, o4[F5 + 172 >> 2] = h5, GA(i2 = F5 + 528 | 0, F5 + 176 | 0, F5 + 160 | 0), h5 = o4[F5 + 540 >> 2], o4[F5 + 520 >> 2] = o4[F5 + 536 >> 2], o4[F5 + 524 >> 2] = h5, h5 = o4[F5 + 532 >> 2], o4[F5 + 512 >> 2] = o4[F5 + 528 >> 2], o4[F5 + 516 >> 2] = h5, h5 = o4[F5 + 484 >> 2], o4[F5 + 144 >> 2] = o4[F5 + 480 >> 2], o4[F5 + 148 >> 2] = h5, h5 = o4[F5 + 492 >> 2], o4[F5 + 152 >> 2] = o4[F5 + 488 >> 2], o4[F5 + 156 >> 2] = h5, h5 = o4[F5 + 500 >> 2], o4[F5 + 128 >> 2] = o4[F5 + 496 >> 2], o4[F5 + 132 >> 2] = h5, h5 = o4[F5 + 508 >> 2], o4[F5 + 136 >> 2] = o4[F5 + 504 >> 2], o4[F5 + 140 >> 2] = h5, GA(i2, F5 + 144 | 0, F5 + 128 | 0), h5 = o4[F5 + 540 >> 2], o4[F5 + 504 >> 2] = o4[F5 + 536 >> 2], o4[F5 + 508 >> 2] = h5, h5 = o4[F5 + 532 >> 2], o4[F5 + 496 >> 2] = o4[F5 + 528 >> 2], o4[F5 + 500 >> 2] = h5, h5 = o4[F5 + 468 >> 2], o4[F5 + 112 >> 2] = o4[F5 + 464 >> 2], o4[F5 + 116 >> 2] = h5, h5 = o4[F5 + 476 >> 2], o4[F5 + 120 >> 2] = o4[F5 + 472 >> 2], o4[F5 + 124 >> 2] = h5, h5 = o4[F5 + 484 >> 2], o4[F5 + 96 >> 2] = o4[F5 + 480 >> 2], o4[F5 + 100 >> 2] = h5, h5 = o4[F5 + 492 >> 2], o4[F5 + 104 >> 2] = o4[F5 + 488 >> 2], o4[F5 + 108 >> 2] = h5, GA(i2, F5 + 112 | 0, F5 + 96 | 0), h5 = o4[F5 + 540 >> 2], o4[F5 + 488 >> 2] = o4[F5 + 536 >> 2], o4[F5 + 492 >> 2] = h5, h5 = o4[F5 + 532 >> 2], o4[F5 + 480 >> 2] = o4[F5 + 528 >> 2], o4[F5 + 484 >> 2] = h5, h5 = o4[F5 + 452 >> 2], o4[F5 + 80 >> 2] = o4[F5 + 448 >> 2], o4[F5 + 84 >> 2] = h5, h5 = o4[F5 + 460 >> 2], o4[F5 + 88 >> 2] = o4[F5 + 456 >> 2], o4[F5 + 92 >> 2] = h5, h5 = o4[F5 + 468 >> 2], o4[F5 + 64 >> 2] = o4[F5 + 464 >> 2], o4[F5 + 68 >> 2] = h5, h5 = o4[F5 + 476 >> 2], o4[F5 + 72 >> 2] = o4[F5 + 472 >> 2], o4[F5 + 76 >> 2] = h5, GA(i2, F5 + 80 | 0, F5 - -64 | 0), h5 = o4[F5 + 540 >> 2], o4[F5 + 472 >> 2] = o4[F5 + 536 >> 2], o4[F5 + 476 >> 2] = h5, h5 = o4[F5 + 532 >> 2], o4[F5 + 464 >> 2] = o4[F5 + 528 >> 2], o4[F5 + 468 >> 2] = h5, h5 = o4[F5 + 436 >> 2], o4[F5 + 48 >> 2] = o4[F5 + 432 >> 2], o4[F5 + 52 >> 2] = h5, h5 = o4[F5 + 444 >> 2], o4[F5 + 56 >> 2] = o4[F5 + 440 >> 2], o4[F5 + 60 >> 2] = h5, h5 = o4[F5 + 452 >> 2], o4[F5 + 32 >> 2] = o4[F5 + 448 >> 2], o4[F5 + 36 >> 2] = h5, h5 = o4[F5 + 460 >> 2], o4[F5 + 40 >> 2] = o4[F5 + 456 >> 2], o4[F5 + 44 >> 2] = h5, GA(i2, F5 + 48 | 0, F5 + 32 | 0), h5 = o4[F5 + 540 >> 2], o4[F5 + 456 >> 2] = o4[F5 + 536 >> 2], o4[F5 + 460 >> 2] = h5, h5 = o4[F5 + 532 >> 2], o4[F5 + 448 >> 2] = o4[F5 + 528 >> 2], o4[F5 + 452 >> 2] = h5, h5 = o4[F5 + 388 >> 2], o4[F5 + 16 >> 2] = o4[F5 + 384 >> 2], o4[F5 + 20 >> 2] = h5, h5 = o4[F5 + 396 >> 2], o4[F5 + 24 >> 2] = o4[F5 + 392 >> 2], o4[F5 + 28 >> 2] = h5, h5 = o4[F5 + 436 >> 2], o4[F5 >> 2] = o4[F5 + 432 >> 2], o4[F5 + 4 >> 2] = h5, h5 = o4[F5 + 444 >> 2], o4[F5 + 8 >> 2] = o4[F5 + 440 >> 2], o4[F5 + 12 >> 2] = h5, GA(i2, F5 + 16 | 0, F5), o4[F5 + 444 >> 2] = y5 ^ o4[F5 + 540 >> 2], o4[F5 + 440 >> 2] = a5 ^ o4[F5 + 536 >> 2], o4[F5 + 436 >> 2] = k5 ^ o4[F5 + 532 >> 2], o4[F5 + 432 >> 2] = S4 ^ o4[F5 + 528 >> 2]);
              A: if (A7) {
                if (w5 = 16, h5 = 0, g6 >>> 0 < 16) break A;
                for (; _2(A7 + h5 | 0, I6 + h5 | 0, F5 + 432 | 0), (w5 = (h5 = w5) + 16 | 0) >>> 0 <= g6 >>> 0; ) ;
              } else if (w5 = 16, h5 = 0, !(g6 >>> 0 < 16)) for (; _2(F5 + 528 | 0, I6 + h5 | 0, F5 + 432 | 0), (w5 = (h5 = w5) + 16 | 0) >>> 0 <= g6 >>> 0; ) ;
              (w5 = 15 & g6) && (k5 = A7 ? A7 + h5 | 0 : F5 + 528 | 0, h5 = I6 + h5 | 0, i2 = F5 + 432 | 0, r4 = I6 = r4 - 240 | 0, f5 = w5 + (I6 + 192 | 0) | 0, (a5 = !(S4 = 16 - w5 | 0)) || Q4(f5, 0, S4), (y5 = !w5) || E4(I6 + 192 | 0, h5, w5), M5 = o4[i2 + 16 >> 2], n5 = o4[(h5 = i2 - -64 | 0) >> 2], t5 = o4[i2 + 80 >> 2], U5 = o4[i2 + 32 >> 2], J5 = o4[i2 + 48 >> 2], K5 = o4[i2 + 20 >> 2], e4 = o4[i2 + 68 >> 2], Y5 = o4[i2 + 84 >> 2], G5 = o4[i2 + 36 >> 2], H5 = o4[i2 + 52 >> 2], s5 = o4[i2 + 24 >> 2], p5 = o4[i2 + 72 >> 2], L5 = o4[i2 + 88 >> 2], d5 = o4[i2 + 40 >> 2], P5 = o4[i2 + 56 >> 2], b4 = o4[I6 + 192 >> 2], v5 = o4[I6 + 196 >> 2], u4 = o4[I6 + 200 >> 2], o4[I6 + 204 >> 2] = o4[i2 + 44 >> 2] & o4[i2 + 60 >> 2] ^ o4[i2 + 28 >> 2] ^ o4[i2 + 76 >> 2] ^ o4[i2 + 92 >> 2] ^ o4[I6 + 204 >> 2], o4[I6 + 200 >> 2] = d5 & P5 ^ p5 ^ L5 ^ u4 ^ s5, o4[I6 + 196 >> 2] = G5 & H5 ^ Y5 ^ v5 ^ e4 ^ K5, o4[I6 + 192 >> 2] = U5 & J5 ^ t5 ^ b4 ^ n5 ^ M5, a5 || Q4(f5, 0, S4), y5 || E4(k5, I6 + 192 | 0, w5), f5 = o4[I6 + 192 >> 2], S4 = o4[I6 + 196 >> 2], k5 = o4[I6 + 200 >> 2], a5 = o4[I6 + 204 >> 2], w5 = o4[i2 + 92 >> 2], o4[I6 + 232 >> 2] = o4[i2 + 88 >> 2], o4[I6 + 236 >> 2] = w5, w5 = o4[i2 + 84 >> 2], o4[I6 + 224 >> 2] = o4[i2 + 80 >> 2], o4[I6 + 228 >> 2] = w5, w5 = o4[h5 + 4 >> 2], o4[I6 + 176 >> 2] = o4[h5 >> 2], o4[I6 + 180 >> 2] = w5, w5 = o4[i2 + 76 >> 2], o4[I6 + 184 >> 2] = o4[i2 + 72 >> 2], o4[I6 + 188 >> 2] = w5, w5 = o4[i2 + 84 >> 2], o4[I6 + 160 >> 2] = o4[i2 + 80 >> 2], o4[I6 + 164 >> 2] = w5, w5 = o4[i2 + 92 >> 2], o4[I6 + 168 >> 2] = o4[i2 + 88 >> 2], o4[I6 + 172 >> 2] = w5, GA(w5 = I6 + 208 | 0, I6 + 176 | 0, I6 + 160 | 0), y5 = o4[I6 + 220 >> 2], o4[i2 + 88 >> 2] = o4[I6 + 216 >> 2], o4[i2 + 92 >> 2] = y5, y5 = o4[I6 + 212 >> 2], o4[i2 + 80 >> 2] = o4[I6 + 208 >> 2], o4[i2 + 84 >> 2] = y5, y5 = o4[i2 + 52 >> 2], o4[I6 + 144 >> 2] = o4[i2 + 48 >> 2], o4[I6 + 148 >> 2] = y5, y5 = o4[i2 + 60 >> 2], o4[I6 + 152 >> 2] = o4[i2 + 56 >> 2], o4[I6 + 156 >> 2] = y5, y5 = o4[h5 + 4 >> 2], o4[I6 + 128 >> 2] = o4[h5 >> 2], o4[I6 + 132 >> 2] = y5, y5 = o4[i2 + 76 >> 2], o4[I6 + 136 >> 2] = o4[i2 + 72 >> 2], o4[I6 + 140 >> 2] = y5, GA(w5, I6 + 144 | 0, I6 + 128 | 0), y5 = o4[I6 + 220 >> 2], o4[i2 + 72 >> 2] = o4[I6 + 216 >> 2], o4[i2 + 76 >> 2] = y5, y5 = o4[I6 + 212 >> 2], o4[h5 >> 2] = o4[I6 + 208 >> 2], o4[h5 + 4 >> 2] = y5, h5 = o4[i2 + 36 >> 2], o4[I6 + 112 >> 2] = o4[i2 + 32 >> 2], o4[I6 + 116 >> 2] = h5, h5 = o4[i2 + 44 >> 2], o4[I6 + 120 >> 2] = o4[i2 + 40 >> 2], o4[I6 + 124 >> 2] = h5, h5 = o4[i2 + 52 >> 2], o4[I6 + 96 >> 2] = o4[i2 + 48 >> 2], o4[I6 + 100 >> 2] = h5, h5 = o4[i2 + 60 >> 2], o4[I6 + 104 >> 2] = o4[i2 + 56 >> 2], o4[I6 + 108 >> 2] = h5, GA(w5, I6 + 112 | 0, I6 + 96 | 0), h5 = o4[I6 + 220 >> 2], o4[i2 + 56 >> 2] = o4[I6 + 216 >> 2], o4[i2 + 60 >> 2] = h5, h5 = o4[I6 + 212 >> 2], o4[i2 + 48 >> 2] = o4[I6 + 208 >> 2], o4[i2 + 52 >> 2] = h5, h5 = o4[i2 + 20 >> 2], o4[I6 + 80 >> 2] = o4[i2 + 16 >> 2], o4[I6 + 84 >> 2] = h5, h5 = o4[i2 + 28 >> 2], o4[I6 + 88 >> 2] = o4[i2 + 24 >> 2], o4[I6 + 92 >> 2] = h5, h5 = o4[i2 + 36 >> 2], o4[I6 + 64 >> 2] = o4[i2 + 32 >> 2], o4[I6 + 68 >> 2] = h5, h5 = o4[i2 + 44 >> 2], o4[I6 + 72 >> 2] = o4[i2 + 40 >> 2], o4[I6 + 76 >> 2] = h5, GA(w5, I6 + 80 | 0, I6 - -64 | 0), h5 = o4[I6 + 220 >> 2], o4[i2 + 40 >> 2] = o4[I6 + 216 >> 2], o4[i2 + 44 >> 2] = h5, h5 = o4[I6 + 212 >> 2], o4[i2 + 32 >> 2] = o4[I6 + 208 >> 2], o4[i2 + 36 >> 2] = h5, h5 = o4[i2 + 4 >> 2], o4[I6 + 48 >> 2] = o4[i2 >> 2], o4[I6 + 52 >> 2] = h5, h5 = o4[i2 + 12 >> 2], o4[I6 + 56 >> 2] = o4[i2 + 8 >> 2], o4[I6 + 60 >> 2] = h5, h5 = o4[i2 + 20 >> 2], o4[I6 + 32 >> 2] = o4[i2 + 16 >> 2], o4[I6 + 36 >> 2] = h5, h5 = o4[i2 + 28 >> 2], o4[I6 + 40 >> 2] = o4[i2 + 24 >> 2], o4[I6 + 44 >> 2] = h5, GA(w5, I6 + 48 | 0, I6 + 32 | 0), h5 = o4[I6 + 220 >> 2], o4[i2 + 24 >> 2] = o4[I6 + 216 >> 2], o4[i2 + 28 >> 2] = h5, h5 = o4[I6 + 212 >> 2], o4[i2 + 16 >> 2] = o4[I6 + 208 >> 2], o4[i2 + 20 >> 2] = h5, h5 = o4[I6 + 228 >> 2], o4[I6 + 16 >> 2] = o4[I6 + 224 >> 2], o4[I6 + 20 >> 2] = h5, h5 = o4[I6 + 236 >> 2], o4[I6 + 24 >> 2] = o4[I6 + 232 >> 2], o4[I6 + 28 >> 2] = h5, h5 = o4[i2 + 4 >> 2], o4[I6 >> 2] = o4[i2 >> 2], o4[I6 + 4 >> 2] = h5, h5 = o4[i2 + 12 >> 2], o4[I6 + 8 >> 2] = o4[i2 + 8 >> 2], o4[I6 + 12 >> 2] = h5, GA(w5, I6 + 16 | 0, I6), h5 = o4[I6 + 208 >> 2], w5 = o4[I6 + 212 >> 2], y5 = o4[I6 + 216 >> 2], o4[i2 + 12 >> 2] = a5 ^ o4[I6 + 220 >> 2], o4[i2 + 8 >> 2] = y5 ^ k5, o4[i2 + 4 >> 2] = w5 ^ S4, o4[i2 >> 2] = h5 ^ f5, r4 = I6 + 240 | 0), O2(F5 + 384 | 0, B5, D5, g6, F5 + 432 | 0), h5 = -1;
              A: {
                I: {
                  g: {
                    C: {
                      B: {
                        if (I6 = B5 - 16 | 0) {
                          if (16 == (0 | I6)) break B;
                          break g;
                        }
                        h5 = tA(F5 + 384 | 0, C6);
                        break C;
                      }
                      h5 = mA(F5 + 384 | 0, C6);
                    }
                    if (!h5) break I;
                  }
                  if (!A7 | !g6) break A;
                  Q4(A7, 0, g6);
                  break A;
                }
                h5 = 0;
              }
              return r4 = F5 + 544 | 0, 0 | h5;
            }, function(A7, I6, g6, C6, B5) {
              var i2;
              return A7 |= 0, C6 |= 0, B5 |= 0, r4 = i2 = r4 + -64 | 0, (I6 |= 0) | (g6 |= 0) && (o4[i2 + 8 >> 2] = 2036477234, o4[i2 + 12 >> 2] = 1797285236, o4[i2 >> 2] = 1634760805, o4[i2 + 4 >> 2] = 857760878, o4[i2 + 16 >> 2] = c4[0 | B5] | c4[B5 + 1 | 0] << 8 | c4[B5 + 2 | 0] << 16 | c4[B5 + 3 | 0] << 24, o4[i2 + 20 >> 2] = c4[B5 + 4 | 0] | c4[B5 + 5 | 0] << 8 | c4[B5 + 6 | 0] << 16 | c4[B5 + 7 | 0] << 24, o4[i2 + 24 >> 2] = c4[B5 + 8 | 0] | c4[B5 + 9 | 0] << 8 | c4[B5 + 10 | 0] << 16 | c4[B5 + 11 | 0] << 24, o4[i2 + 28 >> 2] = c4[B5 + 12 | 0] | c4[B5 + 13 | 0] << 8 | c4[B5 + 14 | 0] << 16 | c4[B5 + 15 | 0] << 24, o4[i2 + 32 >> 2] = c4[B5 + 16 | 0] | c4[B5 + 17 | 0] << 8 | c4[B5 + 18 | 0] << 16 | c4[B5 + 19 | 0] << 24, o4[i2 + 36 >> 2] = c4[B5 + 20 | 0] | c4[B5 + 21 | 0] << 8 | c4[B5 + 22 | 0] << 16 | c4[B5 + 23 | 0] << 24, o4[i2 + 40 >> 2] = c4[B5 + 24 | 0] | c4[B5 + 25 | 0] << 8 | c4[B5 + 26 | 0] << 16 | c4[B5 + 27 | 0] << 24, B5 = c4[B5 + 28 | 0] | c4[B5 + 29 | 0] << 8 | c4[B5 + 30 | 0] << 16 | c4[B5 + 31 | 0] << 24, o4[i2 + 48 >> 2] = 0, o4[i2 + 52 >> 2] = 0, o4[i2 + 44 >> 2] = B5, o4[i2 + 56 >> 2] = c4[0 | C6] | c4[C6 + 1 | 0] << 8 | c4[C6 + 2 | 0] << 16 | c4[C6 + 3 | 0] << 24, o4[i2 + 60 >> 2] = c4[C6 + 4 | 0] | c4[C6 + 5 | 0] << 8 | c4[C6 + 6 | 0] << 16 | c4[C6 + 7 | 0] << 24, I6 && Q4(A7, 0, I6), z2(i2, A7, A7, I6, g6), xI(i2, 64)), r4 = i2 - -64 | 0, 0;
            }, function(A7, I6, g6, C6, B5) {
              var i2;
              return A7 |= 0, C6 |= 0, B5 |= 0, r4 = i2 = r4 + -64 | 0, (I6 |= 0) | (g6 |= 0) && (o4[i2 + 8 >> 2] = 2036477234, o4[i2 + 12 >> 2] = 1797285236, o4[i2 >> 2] = 1634760805, o4[i2 + 4 >> 2] = 857760878, o4[i2 + 16 >> 2] = c4[0 | B5] | c4[B5 + 1 | 0] << 8 | c4[B5 + 2 | 0] << 16 | c4[B5 + 3 | 0] << 24, o4[i2 + 20 >> 2] = c4[B5 + 4 | 0] | c4[B5 + 5 | 0] << 8 | c4[B5 + 6 | 0] << 16 | c4[B5 + 7 | 0] << 24, o4[i2 + 24 >> 2] = c4[B5 + 8 | 0] | c4[B5 + 9 | 0] << 8 | c4[B5 + 10 | 0] << 16 | c4[B5 + 11 | 0] << 24, o4[i2 + 28 >> 2] = c4[B5 + 12 | 0] | c4[B5 + 13 | 0] << 8 | c4[B5 + 14 | 0] << 16 | c4[B5 + 15 | 0] << 24, o4[i2 + 32 >> 2] = c4[B5 + 16 | 0] | c4[B5 + 17 | 0] << 8 | c4[B5 + 18 | 0] << 16 | c4[B5 + 19 | 0] << 24, o4[i2 + 36 >> 2] = c4[B5 + 20 | 0] | c4[B5 + 21 | 0] << 8 | c4[B5 + 22 | 0] << 16 | c4[B5 + 23 | 0] << 24, o4[i2 + 40 >> 2] = c4[B5 + 24 | 0] | c4[B5 + 25 | 0] << 8 | c4[B5 + 26 | 0] << 16 | c4[B5 + 27 | 0] << 24, B5 = c4[B5 + 28 | 0] | c4[B5 + 29 | 0] << 8 | c4[B5 + 30 | 0] << 16 | c4[B5 + 31 | 0] << 24, o4[i2 + 48 >> 2] = 0, o4[i2 + 44 >> 2] = B5, o4[i2 + 52 >> 2] = c4[0 | C6] | c4[C6 + 1 | 0] << 8 | c4[C6 + 2 | 0] << 16 | c4[C6 + 3 | 0] << 24, o4[i2 + 56 >> 2] = c4[C6 + 4 | 0] | c4[C6 + 5 | 0] << 8 | c4[C6 + 6 | 0] << 16 | c4[C6 + 7 | 0] << 24, o4[i2 + 60 >> 2] = c4[C6 + 8 | 0] | c4[C6 + 9 | 0] << 8 | c4[C6 + 10 | 0] << 16 | c4[C6 + 11 | 0] << 24, I6 && Q4(A7, 0, I6), z2(i2, A7, A7, I6, g6), xI(i2, 64)), r4 = i2 - -64 | 0, 0;
            }, function(A7, I6, g6, C6, B5, Q5, i2, E5) {
              var D5;
              return A7 |= 0, I6 |= 0, B5 |= 0, Q5 |= 0, i2 |= 0, E5 |= 0, r4 = D5 = r4 + -64 | 0, (g6 |= 0) | (C6 |= 0) && (o4[D5 + 8 >> 2] = 2036477234, o4[D5 + 12 >> 2] = 1797285236, o4[D5 >> 2] = 1634760805, o4[D5 + 4 >> 2] = 857760878, o4[D5 + 16 >> 2] = c4[0 | E5] | c4[E5 + 1 | 0] << 8 | c4[E5 + 2 | 0] << 16 | c4[E5 + 3 | 0] << 24, o4[D5 + 20 >> 2] = c4[E5 + 4 | 0] | c4[E5 + 5 | 0] << 8 | c4[E5 + 6 | 0] << 16 | c4[E5 + 7 | 0] << 24, o4[D5 + 24 >> 2] = c4[E5 + 8 | 0] | c4[E5 + 9 | 0] << 8 | c4[E5 + 10 | 0] << 16 | c4[E5 + 11 | 0] << 24, o4[D5 + 28 >> 2] = c4[E5 + 12 | 0] | c4[E5 + 13 | 0] << 8 | c4[E5 + 14 | 0] << 16 | c4[E5 + 15 | 0] << 24, o4[D5 + 32 >> 2] = c4[E5 + 16 | 0] | c4[E5 + 17 | 0] << 8 | c4[E5 + 18 | 0] << 16 | c4[E5 + 19 | 0] << 24, o4[D5 + 36 >> 2] = c4[E5 + 20 | 0] | c4[E5 + 21 | 0] << 8 | c4[E5 + 22 | 0] << 16 | c4[E5 + 23 | 0] << 24, o4[D5 + 40 >> 2] = c4[E5 + 24 | 0] | c4[E5 + 25 | 0] << 8 | c4[E5 + 26 | 0] << 16 | c4[E5 + 27 | 0] << 24, E5 = c4[E5 + 28 | 0] | c4[E5 + 29 | 0] << 8 | c4[E5 + 30 | 0] << 16 | c4[E5 + 31 | 0] << 24, o4[D5 + 48 >> 2] = Q5, o4[D5 + 52 >> 2] = i2, o4[D5 + 44 >> 2] = E5, o4[D5 + 56 >> 2] = c4[0 | B5] | c4[B5 + 1 | 0] << 8 | c4[B5 + 2 | 0] << 16 | c4[B5 + 3 | 0] << 24, o4[D5 + 60 >> 2] = c4[B5 + 4 | 0] | c4[B5 + 5 | 0] << 8 | c4[B5 + 6 | 0] << 16 | c4[B5 + 7 | 0] << 24, z2(D5, I6, A7, g6, C6), xI(D5, 64)), r4 = D5 - -64 | 0, 0;
            }, function(A7, I6, g6, C6, B5, Q5, i2) {
              var E5;
              return A7 |= 0, I6 |= 0, B5 |= 0, Q5 |= 0, i2 |= 0, r4 = E5 = r4 + -64 | 0, (g6 |= 0) | (C6 |= 0) && (o4[E5 + 8 >> 2] = 2036477234, o4[E5 + 12 >> 2] = 1797285236, o4[E5 >> 2] = 1634760805, o4[E5 + 4 >> 2] = 857760878, o4[E5 + 16 >> 2] = c4[0 | i2] | c4[i2 + 1 | 0] << 8 | c4[i2 + 2 | 0] << 16 | c4[i2 + 3 | 0] << 24, o4[E5 + 20 >> 2] = c4[i2 + 4 | 0] | c4[i2 + 5 | 0] << 8 | c4[i2 + 6 | 0] << 16 | c4[i2 + 7 | 0] << 24, o4[E5 + 24 >> 2] = c4[i2 + 8 | 0] | c4[i2 + 9 | 0] << 8 | c4[i2 + 10 | 0] << 16 | c4[i2 + 11 | 0] << 24, o4[E5 + 28 >> 2] = c4[i2 + 12 | 0] | c4[i2 + 13 | 0] << 8 | c4[i2 + 14 | 0] << 16 | c4[i2 + 15 | 0] << 24, o4[E5 + 32 >> 2] = c4[i2 + 16 | 0] | c4[i2 + 17 | 0] << 8 | c4[i2 + 18 | 0] << 16 | c4[i2 + 19 | 0] << 24, o4[E5 + 36 >> 2] = c4[i2 + 20 | 0] | c4[i2 + 21 | 0] << 8 | c4[i2 + 22 | 0] << 16 | c4[i2 + 23 | 0] << 24, o4[E5 + 40 >> 2] = c4[i2 + 24 | 0] | c4[i2 + 25 | 0] << 8 | c4[i2 + 26 | 0] << 16 | c4[i2 + 27 | 0] << 24, i2 = c4[i2 + 28 | 0] | c4[i2 + 29 | 0] << 8 | c4[i2 + 30 | 0] << 16 | c4[i2 + 31 | 0] << 24, o4[E5 + 48 >> 2] = Q5, o4[E5 + 44 >> 2] = i2, o4[E5 + 52 >> 2] = c4[0 | B5] | c4[B5 + 1 | 0] << 8 | c4[B5 + 2 | 0] << 16 | c4[B5 + 3 | 0] << 24, o4[E5 + 56 >> 2] = c4[B5 + 4 | 0] | c4[B5 + 5 | 0] << 8 | c4[B5 + 6 | 0] << 16 | c4[B5 + 7 | 0] << 24, o4[E5 + 60 >> 2] = c4[B5 + 8 | 0] | c4[B5 + 9 | 0] << 8 | c4[B5 + 10 | 0] << 16 | c4[B5 + 11 | 0] << 24, z2(E5, I6, A7, g6, C6), xI(E5, 64)), r4 = E5 - -64 | 0, 0;
            }, function(A7, I6) {
              A7 |= 0;
              var g6 = 0, B5 = 0, Q5 = 0;
              if (I6 |= 0) for (; EI(), B5 = A7 + g6 | 0, Q5 = 0 | og[o4[o4[10323] + 4 >> 2]](), C5[0 | B5] = Q5, (0 | (g6 = g6 + 1 | 0)) != (0 | I6); ) ;
            }, function() {
              var A7;
              r4 = A7 = r4 - 16 | 0, C5[A7 + 15 | 0] = 0, a4(39964, A7 + 15 | 0, 0), r4 = A7 + 16 | 0;
            }, function() {
              var A7, I6;
              return r4 = A7 = r4 - 16 | 0, C5[A7 + 15 | 0] = 0, I6 = 0 | a4(39928, A7 + 15 | 0, 0), r4 = A7 + 16 | 0, 0 | I6;
            }, function() {
              return 1024;
            }, function(A7, I6, g6) {
              A7 |= 0, I6 |= 0;
              var B5, Q5, i2 = 0, E5 = 0;
              r4 = B5 = r4 - 528 | 0, wA(B5 + 320 | 0, g6 |= 0), E5 = c4[I6 + 8 | 0] | c4[I6 + 9 | 0] << 8 | c4[I6 + 10 | 0] << 16 | c4[I6 + 11 | 0] << 24, i2 = c4[I6 + 12 | 0] | c4[I6 + 13 | 0] << 8 | c4[I6 + 14 | 0] << 16 | c4[I6 + 15 | 0] << 24, g6 = c4[0 | I6] | c4[I6 + 1 | 0] << 8 | c4[I6 + 2 | 0] << 16 | c4[I6 + 3 | 0] << 24, o4[B5 + 516 >> 2] = o4[B5 + 324 >> 2] ^ (c4[I6 + 4 | 0] | c4[I6 + 5 | 0] << 8 | c4[I6 + 6 | 0] << 16 | c4[I6 + 7 | 0] << 24), o4[B5 + 512 >> 2] = o4[B5 + 320 >> 2] ^ g6, o4[B5 + 524 >> 2] = o4[B5 + 332 >> 2] ^ i2, o4[B5 + 520 >> 2] = E5 ^ o4[B5 + 328 >> 2], I6 = o4[B5 + 516 >> 2], o4[B5 + 304 >> 2] = o4[B5 + 512 >> 2], o4[B5 + 308 >> 2] = I6, I6 = o4[B5 + 524 >> 2], o4[B5 + 312 >> 2] = o4[B5 + 520 >> 2], o4[B5 + 316 >> 2] = I6, I6 = o4[B5 + 340 >> 2], o4[B5 + 288 >> 2] = o4[B5 + 336 >> 2], o4[B5 + 292 >> 2] = I6, I6 = o4[B5 + 348 >> 2], o4[B5 + 296 >> 2] = o4[B5 + 344 >> 2], o4[B5 + 300 >> 2] = I6, GA(Q5 = B5 + 496 | 0, B5 + 304 | 0, B5 + 288 | 0), E5 = o4[B5 + 508 >> 2], I6 = o4[B5 + 504 >> 2], o4[B5 + 520 >> 2] = I6, o4[B5 + 524 >> 2] = E5, g6 = o4[B5 + 500 >> 2], i2 = o4[B5 + 496 >> 2], o4[B5 + 512 >> 2] = i2, o4[B5 + 516 >> 2] = g6, o4[B5 + 272 >> 2] = i2, o4[B5 + 276 >> 2] = g6, o4[B5 + 280 >> 2] = I6, o4[B5 + 284 >> 2] = E5, I6 = o4[B5 + 356 >> 2], o4[B5 + 256 >> 2] = o4[B5 + 352 >> 2], o4[B5 + 260 >> 2] = I6, I6 = o4[B5 + 364 >> 2], o4[B5 + 264 >> 2] = o4[B5 + 360 >> 2], o4[B5 + 268 >> 2] = I6, GA(Q5, B5 + 272 | 0, B5 + 256 | 0), E5 = o4[B5 + 508 >> 2], I6 = o4[B5 + 504 >> 2], o4[B5 + 520 >> 2] = I6, o4[B5 + 524 >> 2] = E5, g6 = o4[B5 + 500 >> 2], i2 = o4[B5 + 496 >> 2], o4[B5 + 512 >> 2] = i2, o4[B5 + 516 >> 2] = g6, o4[B5 + 240 >> 2] = i2, o4[B5 + 244 >> 2] = g6, o4[B5 + 248 >> 2] = I6, o4[B5 + 252 >> 2] = E5, I6 = o4[B5 + 372 >> 2], o4[B5 + 224 >> 2] = o4[B5 + 368 >> 2], o4[B5 + 228 >> 2] = I6, I6 = o4[B5 + 380 >> 2], o4[B5 + 232 >> 2] = o4[B5 + 376 >> 2], o4[B5 + 236 >> 2] = I6, GA(Q5, B5 + 240 | 0, B5 + 224 | 0), E5 = o4[B5 + 508 >> 2], I6 = o4[B5 + 504 >> 2], o4[B5 + 520 >> 2] = I6, o4[B5 + 524 >> 2] = E5, g6 = o4[B5 + 500 >> 2], i2 = o4[B5 + 496 >> 2], o4[B5 + 512 >> 2] = i2, o4[B5 + 516 >> 2] = g6, o4[B5 + 208 >> 2] = i2, o4[B5 + 212 >> 2] = g6, o4[B5 + 216 >> 2] = I6, o4[B5 + 220 >> 2] = E5, I6 = o4[B5 + 388 >> 2], o4[B5 + 192 >> 2] = o4[B5 + 384 >> 2], o4[B5 + 196 >> 2] = I6, I6 = o4[B5 + 396 >> 2], o4[B5 + 200 >> 2] = o4[B5 + 392 >> 2], o4[B5 + 204 >> 2] = I6, GA(Q5, B5 + 208 | 0, B5 + 192 | 0), E5 = o4[B5 + 508 >> 2], I6 = o4[B5 + 504 >> 2], o4[B5 + 520 >> 2] = I6, o4[B5 + 524 >> 2] = E5, g6 = o4[B5 + 500 >> 2], i2 = o4[B5 + 496 >> 2], o4[B5 + 512 >> 2] = i2, o4[B5 + 516 >> 2] = g6, o4[B5 + 176 >> 2] = i2, o4[B5 + 180 >> 2] = g6, o4[B5 + 184 >> 2] = I6, o4[B5 + 188 >> 2] = E5, I6 = o4[B5 + 404 >> 2], o4[B5 + 160 >> 2] = o4[B5 + 400 >> 2], o4[B5 + 164 >> 2] = I6, I6 = o4[B5 + 412 >> 2], o4[B5 + 168 >> 2] = o4[B5 + 408 >> 2], o4[B5 + 172 >> 2] = I6, GA(Q5, B5 + 176 | 0, B5 + 160 | 0), E5 = o4[B5 + 508 >> 2], I6 = o4[B5 + 504 >> 2], o4[B5 + 520 >> 2] = I6, o4[B5 + 524 >> 2] = E5, g6 = o4[B5 + 500 >> 2], i2 = o4[B5 + 496 >> 2], o4[B5 + 512 >> 2] = i2, o4[B5 + 516 >> 2] = g6, o4[B5 + 144 >> 2] = i2, o4[B5 + 148 >> 2] = g6, o4[B5 + 152 >> 2] = I6, o4[B5 + 156 >> 2] = E5, I6 = o4[B5 + 420 >> 2], o4[B5 + 128 >> 2] = o4[B5 + 416 >> 2], o4[B5 + 132 >> 2] = I6, I6 = o4[B5 + 428 >> 2], o4[B5 + 136 >> 2] = o4[B5 + 424 >> 2], o4[B5 + 140 >> 2] = I6, GA(Q5, B5 + 144 | 0, B5 + 128 | 0), E5 = o4[B5 + 508 >> 2], I6 = o4[B5 + 504 >> 2], o4[B5 + 520 >> 2] = I6, o4[B5 + 524 >> 2] = E5, g6 = o4[B5 + 500 >> 2], i2 = o4[B5 + 496 >> 2], o4[B5 + 512 >> 2] = i2, o4[B5 + 516 >> 2] = g6, o4[B5 + 112 >> 2] = i2, o4[B5 + 116 >> 2] = g6, o4[B5 + 120 >> 2] = I6, o4[B5 + 124 >> 2] = E5, I6 = o4[B5 + 436 >> 2], o4[B5 + 96 >> 2] = o4[B5 + 432 >> 2], o4[B5 + 100 >> 2] = I6, I6 = o4[B5 + 444 >> 2], o4[B5 + 104 >> 2] = o4[B5 + 440 >> 2], o4[B5 + 108 >> 2] = I6, GA(Q5, B5 + 112 | 0, B5 + 96 | 0), E5 = o4[B5 + 508 >> 2], I6 = o4[B5 + 504 >> 2], o4[B5 + 520 >> 2] = I6, o4[B5 + 524 >> 2] = E5, g6 = o4[B5 + 500 >> 2], i2 = o4[B5 + 496 >> 2], o4[B5 + 512 >> 2] = i2, o4[B5 + 516 >> 2] = g6, o4[B5 + 80 >> 2] = i2, o4[B5 + 84 >> 2] = g6, o4[B5 + 88 >> 2] = I6, o4[B5 + 92 >> 2] = E5, I6 = o4[B5 + 452 >> 2], o4[B5 + 64 >> 2] = o4[B5 + 448 >> 2], o4[B5 + 68 >> 2] = I6, I6 = o4[B5 + 460 >> 2], o4[B5 + 72 >> 2] = o4[B5 + 456 >> 2], o4[B5 + 76 >> 2] = I6, GA(Q5, B5 + 80 | 0, B5 - -64 | 0), E5 = o4[B5 + 508 >> 2], I6 = o4[B5 + 504 >> 2], o4[B5 + 520 >> 2] = I6, o4[B5 + 524 >> 2] = E5, g6 = o4[B5 + 500 >> 2], i2 = o4[B5 + 496 >> 2], o4[B5 + 512 >> 2] = i2, o4[B5 + 516 >> 2] = g6, o4[B5 + 48 >> 2] = i2, o4[B5 + 52 >> 2] = g6, o4[B5 + 56 >> 2] = I6, o4[B5 + 60 >> 2] = E5, I6 = o4[B5 + 468 >> 2], o4[B5 + 32 >> 2] = o4[B5 + 464 >> 2], o4[B5 + 36 >> 2] = I6, I6 = o4[B5 + 476 >> 2], o4[B5 + 40 >> 2] = o4[B5 + 472 >> 2], o4[B5 + 44 >> 2] = I6, GA(Q5, B5 + 48 | 0, B5 + 32 | 0), E5 = o4[B5 + 508 >> 2], I6 = o4[B5 + 504 >> 2], o4[B5 + 520 >> 2] = I6, o4[B5 + 524 >> 2] = E5, g6 = o4[B5 + 500 >> 2], i2 = o4[B5 + 496 >> 2], o4[B5 + 512 >> 2] = i2, o4[B5 + 516 >> 2] = g6, o4[B5 + 16 >> 2] = i2, o4[B5 + 20 >> 2] = g6, o4[B5 + 24 >> 2] = I6, o4[B5 + 28 >> 2] = E5, I6 = o4[B5 + 484 >> 2], o4[B5 >> 2] = o4[B5 + 480 >> 2], o4[B5 + 4 >> 2] = I6, I6 = o4[B5 + 492 >> 2], o4[B5 + 8 >> 2] = o4[B5 + 488 >> 2], o4[B5 + 12 >> 2] = I6, sA(Q5, B5 + 16 | 0, B5), i2 = o4[B5 + 508 >> 2], E5 = I6 = o4[B5 + 504 >> 2], o4[B5 + 520 >> 2] = I6, o4[B5 + 524 >> 2] = i2, g6 = o4[B5 + 500 >> 2], I6 = o4[B5 + 496 >> 2], o4[B5 + 512 >> 2] = I6, o4[B5 + 516 >> 2] = g6, C5[A7 + 8 | 0] = E5, C5[A7 + 9 | 0] = E5 >>> 8, C5[A7 + 10 | 0] = E5 >>> 16, C5[A7 + 11 | 0] = E5 >>> 24, C5[A7 + 12 | 0] = i2, C5[A7 + 13 | 0] = i2 >>> 8, C5[A7 + 14 | 0] = i2 >>> 16, C5[A7 + 15 | 0] = i2 >>> 24, C5[0 | A7] = I6, C5[A7 + 1 | 0] = I6 >>> 8, C5[A7 + 2 | 0] = I6 >>> 16, C5[A7 + 3 | 0] = I6 >>> 24, C5[A7 + 4 | 0] = g6, C5[A7 + 5 | 0] = g6 >>> 8, C5[A7 + 6 | 0] = g6 >>> 16, C5[A7 + 7 | 0] = g6 >>> 24, r4 = B5 + 528 | 0;
            }, function(A7, I6, g6) {
              A7 |= 0, I6 |= 0;
              var B5, Q5, i2 = 0, D5 = 0;
              r4 = B5 = r4 - 704 | 0, wA(i2 = B5 + 320 | 0, g6 |= 0), E4(g6 = B5 + 528 | 0, i2, 176), aA(g6), D5 = c4[I6 + 8 | 0] | c4[I6 + 9 | 0] << 8 | c4[I6 + 10 | 0] << 16 | c4[I6 + 11 | 0] << 24, i2 = c4[I6 + 12 | 0] | c4[I6 + 13 | 0] << 8 | c4[I6 + 14 | 0] << 16 | c4[I6 + 15 | 0] << 24, g6 = c4[0 | I6] | c4[I6 + 1 | 0] << 8 | c4[I6 + 2 | 0] << 16 | c4[I6 + 3 | 0] << 24, o4[B5 + 516 >> 2] = o4[B5 + 692 >> 2] ^ (c4[I6 + 4 | 0] | c4[I6 + 5 | 0] << 8 | c4[I6 + 6 | 0] << 16 | c4[I6 + 7 | 0] << 24), o4[B5 + 512 >> 2] = o4[B5 + 688 >> 2] ^ g6, o4[B5 + 524 >> 2] = i2 ^ o4[B5 + 700 >> 2], o4[B5 + 520 >> 2] = D5 ^ o4[B5 + 696 >> 2], I6 = o4[B5 + 676 >> 2], o4[B5 + 288 >> 2] = o4[B5 + 672 >> 2], o4[B5 + 292 >> 2] = I6, I6 = o4[B5 + 684 >> 2], o4[B5 + 296 >> 2] = o4[B5 + 680 >> 2], o4[B5 + 300 >> 2] = I6, I6 = o4[B5 + 516 >> 2], o4[B5 + 304 >> 2] = o4[B5 + 512 >> 2], o4[B5 + 308 >> 2] = I6, I6 = o4[B5 + 524 >> 2], o4[B5 + 312 >> 2] = o4[B5 + 520 >> 2], o4[B5 + 316 >> 2] = I6, NA(Q5 = B5 + 496 | 0, B5 + 304 | 0, B5 + 288 | 0), D5 = o4[B5 + 508 >> 2], I6 = o4[B5 + 504 >> 2], o4[B5 + 520 >> 2] = I6, o4[B5 + 524 >> 2] = D5, g6 = o4[B5 + 500 >> 2], i2 = o4[B5 + 496 >> 2], o4[B5 + 512 >> 2] = i2, o4[B5 + 516 >> 2] = g6, o4[B5 + 272 >> 2] = i2, o4[B5 + 276 >> 2] = g6, o4[B5 + 280 >> 2] = I6, o4[B5 + 284 >> 2] = D5, I6 = o4[B5 + 660 >> 2], o4[B5 + 256 >> 2] = o4[B5 + 656 >> 2], o4[B5 + 260 >> 2] = I6, I6 = o4[B5 + 668 >> 2], o4[B5 + 264 >> 2] = o4[B5 + 664 >> 2], o4[B5 + 268 >> 2] = I6, NA(Q5, B5 + 272 | 0, B5 + 256 | 0), D5 = o4[B5 + 508 >> 2], I6 = o4[B5 + 504 >> 2], o4[B5 + 520 >> 2] = I6, o4[B5 + 524 >> 2] = D5, g6 = o4[B5 + 500 >> 2], i2 = o4[B5 + 496 >> 2], o4[B5 + 512 >> 2] = i2, o4[B5 + 516 >> 2] = g6, o4[B5 + 240 >> 2] = i2, o4[B5 + 244 >> 2] = g6, o4[B5 + 248 >> 2] = I6, o4[B5 + 252 >> 2] = D5, I6 = o4[B5 + 644 >> 2], o4[B5 + 224 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 228 >> 2] = I6, I6 = o4[B5 + 652 >> 2], o4[B5 + 232 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 236 >> 2] = I6, NA(Q5, B5 + 240 | 0, B5 + 224 | 0), D5 = o4[B5 + 508 >> 2], I6 = o4[B5 + 504 >> 2], o4[B5 + 520 >> 2] = I6, o4[B5 + 524 >> 2] = D5, g6 = o4[B5 + 500 >> 2], i2 = o4[B5 + 496 >> 2], o4[B5 + 512 >> 2] = i2, o4[B5 + 516 >> 2] = g6, o4[B5 + 208 >> 2] = i2, o4[B5 + 212 >> 2] = g6, o4[B5 + 216 >> 2] = I6, o4[B5 + 220 >> 2] = D5, I6 = o4[B5 + 628 >> 2], o4[B5 + 192 >> 2] = o4[B5 + 624 >> 2], o4[B5 + 196 >> 2] = I6, I6 = o4[B5 + 636 >> 2], o4[B5 + 200 >> 2] = o4[B5 + 632 >> 2], o4[B5 + 204 >> 2] = I6, NA(Q5, B5 + 208 | 0, B5 + 192 | 0), D5 = o4[B5 + 508 >> 2], I6 = o4[B5 + 504 >> 2], o4[B5 + 520 >> 2] = I6, o4[B5 + 524 >> 2] = D5, g6 = o4[B5 + 500 >> 2], i2 = o4[B5 + 496 >> 2], o4[B5 + 512 >> 2] = i2, o4[B5 + 516 >> 2] = g6, o4[B5 + 176 >> 2] = i2, o4[B5 + 180 >> 2] = g6, o4[B5 + 184 >> 2] = I6, o4[B5 + 188 >> 2] = D5, I6 = o4[B5 + 612 >> 2], o4[B5 + 160 >> 2] = o4[B5 + 608 >> 2], o4[B5 + 164 >> 2] = I6, I6 = o4[B5 + 620 >> 2], o4[B5 + 168 >> 2] = o4[B5 + 616 >> 2], o4[B5 + 172 >> 2] = I6, NA(Q5, B5 + 176 | 0, B5 + 160 | 0), D5 = o4[B5 + 508 >> 2], I6 = o4[B5 + 504 >> 2], o4[B5 + 520 >> 2] = I6, o4[B5 + 524 >> 2] = D5, g6 = o4[B5 + 500 >> 2], i2 = o4[B5 + 496 >> 2], o4[B5 + 512 >> 2] = i2, o4[B5 + 516 >> 2] = g6, o4[B5 + 144 >> 2] = i2, o4[B5 + 148 >> 2] = g6, o4[B5 + 152 >> 2] = I6, o4[B5 + 156 >> 2] = D5, I6 = o4[B5 + 596 >> 2], o4[B5 + 128 >> 2] = o4[B5 + 592 >> 2], o4[B5 + 132 >> 2] = I6, I6 = o4[B5 + 604 >> 2], o4[B5 + 136 >> 2] = o4[B5 + 600 >> 2], o4[B5 + 140 >> 2] = I6, NA(Q5, B5 + 144 | 0, B5 + 128 | 0), D5 = o4[B5 + 508 >> 2], I6 = o4[B5 + 504 >> 2], o4[B5 + 520 >> 2] = I6, o4[B5 + 524 >> 2] = D5, g6 = o4[B5 + 500 >> 2], i2 = o4[B5 + 496 >> 2], o4[B5 + 512 >> 2] = i2, o4[B5 + 516 >> 2] = g6, o4[B5 + 112 >> 2] = i2, o4[B5 + 116 >> 2] = g6, o4[B5 + 120 >> 2] = I6, o4[B5 + 124 >> 2] = D5, I6 = o4[B5 + 580 >> 2], o4[B5 + 96 >> 2] = o4[B5 + 576 >> 2], o4[B5 + 100 >> 2] = I6, I6 = o4[B5 + 588 >> 2], o4[B5 + 104 >> 2] = o4[B5 + 584 >> 2], o4[B5 + 108 >> 2] = I6, NA(Q5, B5 + 112 | 0, B5 + 96 | 0), D5 = o4[B5 + 508 >> 2], I6 = o4[B5 + 504 >> 2], o4[B5 + 520 >> 2] = I6, o4[B5 + 524 >> 2] = D5, g6 = o4[B5 + 500 >> 2], i2 = o4[B5 + 496 >> 2], o4[B5 + 512 >> 2] = i2, o4[B5 + 516 >> 2] = g6, o4[B5 + 80 >> 2] = i2, o4[B5 + 84 >> 2] = g6, o4[B5 + 88 >> 2] = I6, o4[B5 + 92 >> 2] = D5, I6 = o4[B5 + 564 >> 2], o4[B5 + 64 >> 2] = o4[B5 + 560 >> 2], o4[B5 + 68 >> 2] = I6, I6 = o4[B5 + 572 >> 2], o4[B5 + 72 >> 2] = o4[B5 + 568 >> 2], o4[B5 + 76 >> 2] = I6, NA(Q5, B5 + 80 | 0, B5 - -64 | 0), D5 = o4[B5 + 508 >> 2], I6 = o4[B5 + 504 >> 2], o4[B5 + 520 >> 2] = I6, o4[B5 + 524 >> 2] = D5, g6 = o4[B5 + 500 >> 2], i2 = o4[B5 + 496 >> 2], o4[B5 + 512 >> 2] = i2, o4[B5 + 516 >> 2] = g6, o4[B5 + 48 >> 2] = i2, o4[B5 + 52 >> 2] = g6, o4[B5 + 56 >> 2] = I6, o4[B5 + 60 >> 2] = D5, I6 = o4[B5 + 548 >> 2], o4[B5 + 32 >> 2] = o4[B5 + 544 >> 2], o4[B5 + 36 >> 2] = I6, I6 = o4[B5 + 556 >> 2], o4[B5 + 40 >> 2] = o4[B5 + 552 >> 2], o4[B5 + 44 >> 2] = I6, NA(Q5, B5 + 48 | 0, B5 + 32 | 0), D5 = o4[B5 + 508 >> 2], I6 = o4[B5 + 504 >> 2], o4[B5 + 520 >> 2] = I6, o4[B5 + 524 >> 2] = D5, g6 = o4[B5 + 500 >> 2], i2 = o4[B5 + 496 >> 2], o4[B5 + 512 >> 2] = i2, o4[B5 + 516 >> 2] = g6, o4[B5 + 16 >> 2] = i2, o4[B5 + 20 >> 2] = g6, o4[B5 + 24 >> 2] = I6, o4[B5 + 28 >> 2] = D5, I6 = o4[B5 + 532 >> 2], o4[B5 >> 2] = o4[B5 + 528 >> 2], o4[B5 + 4 >> 2] = I6, I6 = o4[B5 + 540 >> 2], o4[B5 + 8 >> 2] = o4[B5 + 536 >> 2], o4[B5 + 12 >> 2] = I6, pA(Q5, B5 + 16 | 0, B5), i2 = o4[B5 + 508 >> 2], D5 = I6 = o4[B5 + 504 >> 2], o4[B5 + 520 >> 2] = I6, o4[B5 + 524 >> 2] = i2, g6 = o4[B5 + 500 >> 2], I6 = o4[B5 + 496 >> 2], o4[B5 + 512 >> 2] = I6, o4[B5 + 516 >> 2] = g6, C5[A7 + 8 | 0] = D5, C5[A7 + 9 | 0] = D5 >>> 8, C5[A7 + 10 | 0] = D5 >>> 16, C5[A7 + 11 | 0] = D5 >>> 24, C5[A7 + 12 | 0] = i2, C5[A7 + 13 | 0] = i2 >>> 8, C5[A7 + 14 | 0] = i2 >>> 16, C5[A7 + 15 | 0] = i2 >>> 24, C5[0 | A7] = I6, C5[A7 + 1 | 0] = I6 >>> 8, C5[A7 + 2 | 0] = I6 >>> 16, C5[A7 + 3 | 0] = I6 >>> 24, C5[A7 + 4 | 0] = g6, C5[A7 + 5 | 0] = g6 >>> 8, C5[A7 + 6 | 0] = g6 >>> 16, C5[A7 + 7 | 0] = g6 >>> 24, r4 = B5 + 704 | 0;
            }, function(A7, I6, g6, B5) {
              A7 |= 0, I6 |= 0, g6 |= 0;
              var Q5, i2, E5, D5, h5, w5 = 0, F5 = 0;
              r4 = Q5 = r4 - 560 | 0, wA(Q5 + 320 | 0, B5 |= 0), w5 = c4[g6 + 4 | 0] | c4[g6 + 5 | 0] << 8 | c4[g6 + 6 | 0] << 16 | c4[g6 + 7 | 0] << 24, B5 = c4[0 | g6] | c4[g6 + 1 | 0] << 8 | c4[g6 + 2 | 0] << 16 | c4[g6 + 3 | 0] << 24, C5[0 | A7] = B5, C5[A7 + 1 | 0] = B5 >>> 8, C5[A7 + 2 | 0] = B5 >>> 16, C5[A7 + 3 | 0] = B5 >>> 24, C5[A7 + 4 | 0] = w5, C5[A7 + 5 | 0] = w5 >>> 8, C5[A7 + 6 | 0] = w5 >>> 16, C5[A7 + 7 | 0] = w5 >>> 24, i2 = c4[g6 + 4 | 0] | c4[g6 + 5 | 0] << 8, E5 = c4[g6 + 6 | 0] | c4[g6 + 7 | 0] << 8, D5 = c4[0 | g6] | c4[g6 + 1 | 0] << 8, F5 = c4[I6 + 8 | 0] | c4[I6 + 9 | 0] << 8 | c4[I6 + 10 | 0] << 16 | c4[I6 + 11 | 0] << 24, w5 = c4[I6 + 12 | 0] | c4[I6 + 13 | 0] << 8 | c4[I6 + 14 | 0] << 16 | c4[I6 + 15 | 0] << 24, B5 = c4[0 | I6] | c4[I6 + 1 | 0] << 8 | c4[I6 + 2 | 0] << 16 | c4[I6 + 3 | 0] << 24, h5 = c4[g6 + 2 | 0] | c4[g6 + 3 | 0] << 8, o4[Q5 + 548 >> 2] = h5 ^ o4[Q5 + 324 >> 2] ^ (c4[I6 + 4 | 0] | c4[I6 + 5 | 0] << 8 | c4[I6 + 6 | 0] << 16 | c4[I6 + 7 | 0] << 24), o4[Q5 + 544 >> 2] = o4[Q5 + 320 >> 2] ^ B5 ^ D5, o4[Q5 + 556 >> 2] = o4[Q5 + 332 >> 2] ^ w5 ^ E5, o4[Q5 + 552 >> 2] = i2 ^ o4[Q5 + 328 >> 2] ^ F5, o4[Q5 + 516 >> 2] = h5 ^ o4[Q5 + 340 >> 2], o4[Q5 + 512 >> 2] = o4[Q5 + 336 >> 2] ^ D5, o4[Q5 + 524 >> 2] = o4[Q5 + 348 >> 2] ^ E5, o4[Q5 + 520 >> 2] = i2 ^ o4[Q5 + 344 >> 2], I6 = o4[Q5 + 556 >> 2], o4[Q5 + 312 >> 2] = o4[Q5 + 552 >> 2], o4[Q5 + 316 >> 2] = I6, I6 = o4[Q5 + 548 >> 2], o4[Q5 + 304 >> 2] = o4[Q5 + 544 >> 2], o4[Q5 + 308 >> 2] = I6, I6 = o4[Q5 + 524 >> 2], o4[Q5 + 296 >> 2] = o4[Q5 + 520 >> 2], o4[Q5 + 300 >> 2] = I6, I6 = o4[Q5 + 516 >> 2], o4[Q5 + 288 >> 2] = o4[Q5 + 512 >> 2], o4[Q5 + 292 >> 2] = I6, GA(F5 = Q5 + 528 | 0, Q5 + 304 | 0, Q5 + 288 | 0), o4[Q5 + 524 >> 2] = o4[Q5 + 364 >> 2] ^ E5, o4[Q5 + 520 >> 2] = i2 ^ o4[Q5 + 360 >> 2], o4[Q5 + 516 >> 2] = h5 ^ o4[Q5 + 356 >> 2], o4[Q5 + 512 >> 2] = o4[Q5 + 352 >> 2] ^ D5, w5 = o4[Q5 + 540 >> 2], I6 = o4[Q5 + 536 >> 2], o4[Q5 + 552 >> 2] = I6, o4[Q5 + 556 >> 2] = w5, g6 = o4[Q5 + 532 >> 2], B5 = o4[Q5 + 528 >> 2], o4[Q5 + 544 >> 2] = B5, o4[Q5 + 548 >> 2] = g6, o4[Q5 + 272 >> 2] = B5, o4[Q5 + 276 >> 2] = g6, o4[Q5 + 280 >> 2] = I6, o4[Q5 + 284 >> 2] = w5, I6 = o4[Q5 + 524 >> 2], o4[Q5 + 264 >> 2] = o4[Q5 + 520 >> 2], o4[Q5 + 268 >> 2] = I6, I6 = o4[Q5 + 516 >> 2], o4[Q5 + 256 >> 2] = o4[Q5 + 512 >> 2], o4[Q5 + 260 >> 2] = I6, GA(F5, Q5 + 272 | 0, Q5 + 256 | 0), o4[Q5 + 524 >> 2] = o4[Q5 + 380 >> 2] ^ E5, o4[Q5 + 520 >> 2] = i2 ^ o4[Q5 + 376 >> 2], o4[Q5 + 516 >> 2] = h5 ^ o4[Q5 + 372 >> 2], o4[Q5 + 512 >> 2] = o4[Q5 + 368 >> 2] ^ D5, w5 = o4[Q5 + 540 >> 2], I6 = o4[Q5 + 536 >> 2], o4[Q5 + 552 >> 2] = I6, o4[Q5 + 556 >> 2] = w5, g6 = o4[Q5 + 532 >> 2], B5 = o4[Q5 + 528 >> 2], o4[Q5 + 544 >> 2] = B5, o4[Q5 + 548 >> 2] = g6, o4[Q5 + 240 >> 2] = B5, o4[Q5 + 244 >> 2] = g6, o4[Q5 + 248 >> 2] = I6, o4[Q5 + 252 >> 2] = w5, I6 = o4[Q5 + 524 >> 2], o4[Q5 + 232 >> 2] = o4[Q5 + 520 >> 2], o4[Q5 + 236 >> 2] = I6, I6 = o4[Q5 + 516 >> 2], o4[Q5 + 224 >> 2] = o4[Q5 + 512 >> 2], o4[Q5 + 228 >> 2] = I6, GA(F5, Q5 + 240 | 0, Q5 + 224 | 0), o4[Q5 + 524 >> 2] = o4[Q5 + 396 >> 2] ^ E5, o4[Q5 + 520 >> 2] = i2 ^ o4[Q5 + 392 >> 2], o4[Q5 + 516 >> 2] = h5 ^ o4[Q5 + 388 >> 2], o4[Q5 + 512 >> 2] = o4[Q5 + 384 >> 2] ^ D5, w5 = o4[Q5 + 540 >> 2], I6 = o4[Q5 + 536 >> 2], o4[Q5 + 552 >> 2] = I6, o4[Q5 + 556 >> 2] = w5, g6 = o4[Q5 + 532 >> 2], B5 = o4[Q5 + 528 >> 2], o4[Q5 + 544 >> 2] = B5, o4[Q5 + 548 >> 2] = g6, o4[Q5 + 208 >> 2] = B5, o4[Q5 + 212 >> 2] = g6, o4[Q5 + 216 >> 2] = I6, o4[Q5 + 220 >> 2] = w5, I6 = o4[Q5 + 524 >> 2], o4[Q5 + 200 >> 2] = o4[Q5 + 520 >> 2], o4[Q5 + 204 >> 2] = I6, I6 = o4[Q5 + 516 >> 2], o4[Q5 + 192 >> 2] = o4[Q5 + 512 >> 2], o4[Q5 + 196 >> 2] = I6, GA(F5, Q5 + 208 | 0, Q5 + 192 | 0), o4[Q5 + 524 >> 2] = o4[Q5 + 412 >> 2] ^ E5, o4[Q5 + 520 >> 2] = i2 ^ o4[Q5 + 408 >> 2], o4[Q5 + 516 >> 2] = h5 ^ o4[Q5 + 404 >> 2], o4[Q5 + 512 >> 2] = o4[Q5 + 400 >> 2] ^ D5, w5 = o4[Q5 + 540 >> 2], I6 = o4[Q5 + 536 >> 2], o4[Q5 + 552 >> 2] = I6, o4[Q5 + 556 >> 2] = w5, g6 = o4[Q5 + 532 >> 2], B5 = o4[Q5 + 528 >> 2], o4[Q5 + 544 >> 2] = B5, o4[Q5 + 548 >> 2] = g6, o4[Q5 + 176 >> 2] = B5, o4[Q5 + 180 >> 2] = g6, o4[Q5 + 184 >> 2] = I6, o4[Q5 + 188 >> 2] = w5, I6 = o4[Q5 + 524 >> 2], o4[Q5 + 168 >> 2] = o4[Q5 + 520 >> 2], o4[Q5 + 172 >> 2] = I6, I6 = o4[Q5 + 516 >> 2], o4[Q5 + 160 >> 2] = o4[Q5 + 512 >> 2], o4[Q5 + 164 >> 2] = I6, GA(F5, Q5 + 176 | 0, Q5 + 160 | 0), o4[Q5 + 524 >> 2] = o4[Q5 + 428 >> 2] ^ E5, o4[Q5 + 520 >> 2] = i2 ^ o4[Q5 + 424 >> 2], o4[Q5 + 516 >> 2] = h5 ^ o4[Q5 + 420 >> 2], o4[Q5 + 512 >> 2] = o4[Q5 + 416 >> 2] ^ D5, w5 = o4[Q5 + 540 >> 2], I6 = o4[Q5 + 536 >> 2], o4[Q5 + 552 >> 2] = I6, o4[Q5 + 556 >> 2] = w5, g6 = o4[Q5 + 532 >> 2], B5 = o4[Q5 + 528 >> 2], o4[Q5 + 544 >> 2] = B5, o4[Q5 + 548 >> 2] = g6, o4[Q5 + 144 >> 2] = B5, o4[Q5 + 148 >> 2] = g6, o4[Q5 + 152 >> 2] = I6, o4[Q5 + 156 >> 2] = w5, I6 = o4[Q5 + 524 >> 2], o4[Q5 + 136 >> 2] = o4[Q5 + 520 >> 2], o4[Q5 + 140 >> 2] = I6, I6 = o4[Q5 + 516 >> 2], o4[Q5 + 128 >> 2] = o4[Q5 + 512 >> 2], o4[Q5 + 132 >> 2] = I6, GA(F5, Q5 + 144 | 0, Q5 + 128 | 0), o4[Q5 + 524 >> 2] = o4[Q5 + 444 >> 2] ^ E5, o4[Q5 + 520 >> 2] = i2 ^ o4[Q5 + 440 >> 2], o4[Q5 + 516 >> 2] = h5 ^ o4[Q5 + 436 >> 2], o4[Q5 + 512 >> 2] = o4[Q5 + 432 >> 2] ^ D5, w5 = o4[Q5 + 540 >> 2], I6 = o4[Q5 + 536 >> 2], o4[Q5 + 552 >> 2] = I6, o4[Q5 + 556 >> 2] = w5, g6 = o4[Q5 + 532 >> 2], B5 = o4[Q5 + 528 >> 2], o4[Q5 + 544 >> 2] = B5, o4[Q5 + 548 >> 2] = g6, o4[Q5 + 112 >> 2] = B5, o4[Q5 + 116 >> 2] = g6, o4[Q5 + 120 >> 2] = I6, o4[Q5 + 124 >> 2] = w5, I6 = o4[Q5 + 524 >> 2], o4[Q5 + 104 >> 2] = o4[Q5 + 520 >> 2], o4[Q5 + 108 >> 2] = I6, I6 = o4[Q5 + 516 >> 2], o4[Q5 + 96 >> 2] = o4[Q5 + 512 >> 2], o4[Q5 + 100 >> 2] = I6, GA(F5, Q5 + 112 | 0, Q5 + 96 | 0), o4[Q5 + 524 >> 2] = o4[Q5 + 460 >> 2] ^ E5, o4[Q5 + 520 >> 2] = i2 ^ o4[Q5 + 456 >> 2], o4[Q5 + 516 >> 2] = h5 ^ o4[Q5 + 452 >> 2], o4[Q5 + 512 >> 2] = o4[Q5 + 448 >> 2] ^ D5, w5 = o4[Q5 + 540 >> 2], I6 = o4[Q5 + 536 >> 2], o4[Q5 + 552 >> 2] = I6, o4[Q5 + 556 >> 2] = w5, g6 = o4[Q5 + 532 >> 2], B5 = o4[Q5 + 528 >> 2], o4[Q5 + 544 >> 2] = B5, o4[Q5 + 548 >> 2] = g6, o4[Q5 + 80 >> 2] = B5, o4[Q5 + 84 >> 2] = g6, o4[Q5 + 88 >> 2] = I6, o4[Q5 + 92 >> 2] = w5, I6 = o4[Q5 + 524 >> 2], o4[Q5 + 72 >> 2] = o4[Q5 + 520 >> 2], o4[Q5 + 76 >> 2] = I6, I6 = o4[Q5 + 516 >> 2], o4[Q5 + 64 >> 2] = o4[Q5 + 512 >> 2], o4[Q5 + 68 >> 2] = I6, GA(F5, Q5 + 80 | 0, Q5 - -64 | 0), o4[Q5 + 524 >> 2] = o4[Q5 + 476 >> 2] ^ E5, o4[Q5 + 520 >> 2] = i2 ^ o4[Q5 + 472 >> 2], o4[Q5 + 516 >> 2] = h5 ^ o4[Q5 + 468 >> 2], o4[Q5 + 512 >> 2] = o4[Q5 + 464 >> 2] ^ D5, w5 = o4[Q5 + 540 >> 2], I6 = o4[Q5 + 536 >> 2], o4[Q5 + 552 >> 2] = I6, o4[Q5 + 556 >> 2] = w5, g6 = o4[Q5 + 532 >> 2], B5 = o4[Q5 + 528 >> 2], o4[Q5 + 544 >> 2] = B5, o4[Q5 + 548 >> 2] = g6, o4[Q5 + 48 >> 2] = B5, o4[Q5 + 52 >> 2] = g6, o4[Q5 + 56 >> 2] = I6, o4[Q5 + 60 >> 2] = w5, I6 = o4[Q5 + 524 >> 2], o4[Q5 + 40 >> 2] = o4[Q5 + 520 >> 2], o4[Q5 + 44 >> 2] = I6, I6 = o4[Q5 + 516 >> 2], o4[Q5 + 32 >> 2] = o4[Q5 + 512 >> 2], o4[Q5 + 36 >> 2] = I6, GA(F5, Q5 + 48 | 0, Q5 + 32 | 0), o4[Q5 + 508 >> 2] = o4[Q5 + 492 >> 2] ^ E5, o4[Q5 + 504 >> 2] = i2 ^ o4[Q5 + 488 >> 2], o4[Q5 + 500 >> 2] = h5 ^ o4[Q5 + 484 >> 2], o4[Q5 + 496 >> 2] = o4[Q5 + 480 >> 2] ^ D5, w5 = o4[Q5 + 540 >> 2], I6 = o4[Q5 + 536 >> 2], o4[Q5 + 552 >> 2] = I6, o4[Q5 + 556 >> 2] = w5, g6 = o4[Q5 + 532 >> 2], B5 = o4[Q5 + 528 >> 2], o4[Q5 + 544 >> 2] = B5, o4[Q5 + 548 >> 2] = g6, o4[Q5 + 16 >> 2] = B5, o4[Q5 + 20 >> 2] = g6, o4[Q5 + 24 >> 2] = I6, o4[Q5 + 28 >> 2] = w5, I6 = o4[Q5 + 508 >> 2], o4[Q5 + 8 >> 2] = o4[Q5 + 504 >> 2], o4[Q5 + 12 >> 2] = I6, I6 = o4[Q5 + 500 >> 2], o4[Q5 >> 2] = o4[Q5 + 496 >> 2], o4[Q5 + 4 >> 2] = I6, sA(F5, Q5 + 16 | 0, Q5), B5 = o4[Q5 + 540 >> 2], w5 = I6 = o4[Q5 + 536 >> 2], o4[Q5 + 552 >> 2] = I6, o4[Q5 + 556 >> 2] = B5, g6 = o4[Q5 + 532 >> 2], I6 = o4[Q5 + 528 >> 2], o4[Q5 + 544 >> 2] = I6, o4[Q5 + 548 >> 2] = g6, C5[A7 + 16 | 0] = w5, C5[A7 + 17 | 0] = w5 >>> 8, C5[A7 + 18 | 0] = w5 >>> 16, C5[A7 + 19 | 0] = w5 >>> 24, C5[A7 + 20 | 0] = B5, C5[A7 + 21 | 0] = B5 >>> 8, C5[A7 + 22 | 0] = B5 >>> 16, C5[A7 + 23 | 0] = B5 >>> 24, C5[A7 + 8 | 0] = I6, C5[A7 + 9 | 0] = I6 >>> 8, C5[A7 + 10 | 0] = I6 >>> 16, C5[A7 + 11 | 0] = I6 >>> 24, C5[A7 + 12 | 0] = g6, C5[A7 + 13 | 0] = g6 >>> 8, C5[A7 + 14 | 0] = g6 >>> 16, C5[A7 + 15 | 0] = g6 >>> 24, r4 = Q5 + 560 | 0;
            }, function(A7, I6, g6) {
              A7 |= 0, I6 |= 0;
              var B5, Q5, i2, D5, h5, w5, F5 = 0, y5 = 0, f5 = 0, S4 = 0;
              r4 = B5 = r4 - 784 | 0, wA(F5 = B5 + 336 | 0, g6 |= 0), i2 = c4[0 | I6] | c4[I6 + 1 | 0] << 8, o4[B5 + 592 >> 2] = i2, D5 = c4[I6 + 2 | 0] | c4[I6 + 3 | 0] << 8, o4[B5 + 596 >> 2] = D5, h5 = c4[I6 + 4 | 0] | c4[I6 + 5 | 0] << 8, o4[B5 + 600 >> 2] = h5, w5 = c4[I6 + 6 | 0] | c4[I6 + 7 | 0] << 8, o4[B5 + 604 >> 2] = w5, g6 = o4[B5 + 596 >> 2], o4[B5 + 320 >> 2] = o4[B5 + 592 >> 2], o4[B5 + 324 >> 2] = g6, g6 = o4[B5 + 604 >> 2], o4[B5 + 328 >> 2] = o4[B5 + 600 >> 2], o4[B5 + 332 >> 2] = g6, f5 = B5, S4 = JA(o4[B5 + 320 >> 2]), o4[f5 + 576 >> 2] = S4, f5 = B5, S4 = JA(o4[B5 + 324 >> 2]), o4[f5 + 580 >> 2] = S4, f5 = B5, S4 = JA(o4[B5 + 328 >> 2]), o4[f5 + 584 >> 2] = S4, f5 = B5, S4 = JA(o4[B5 + 332 >> 2]), o4[f5 + 588 >> 2] = S4, E4(g6 = B5 + 608 | 0, F5, 176), aA(g6), y5 = c4[I6 + 16 | 0] | c4[I6 + 17 | 0] << 8 | c4[I6 + 18 | 0] << 16 | c4[I6 + 19 | 0] << 24, F5 = c4[I6 + 20 | 0] | c4[I6 + 21 | 0] << 8 | c4[I6 + 22 | 0] << 16 | c4[I6 + 23 | 0] << 24, g6 = c4[I6 + 8 | 0] | c4[I6 + 9 | 0] << 8 | c4[I6 + 10 | 0] << 16 | c4[I6 + 11 | 0] << 24, o4[B5 + 564 >> 2] = o4[B5 + 772 >> 2] ^ (c4[I6 + 12 | 0] | c4[I6 + 13 | 0] << 8 | c4[I6 + 14 | 0] << 16 | c4[I6 + 15 | 0] << 24) ^ D5, o4[B5 + 560 >> 2] = i2 ^ o4[B5 + 768 >> 2] ^ g6, o4[B5 + 572 >> 2] = F5 ^ o4[B5 + 780 >> 2] ^ w5, o4[B5 + 568 >> 2] = y5 ^ o4[B5 + 776 >> 2] ^ h5, o4[B5 + 532 >> 2] = o4[B5 + 580 >> 2] ^ o4[B5 + 756 >> 2], o4[B5 + 528 >> 2] = o4[B5 + 576 >> 2] ^ o4[B5 + 752 >> 2], g6 = o4[B5 + 760 >> 2], I6 = o4[B5 + 584 >> 2], o4[B5 + 540 >> 2] = o4[B5 + 588 >> 2] ^ o4[B5 + 764 >> 2], o4[B5 + 536 >> 2] = I6 ^ g6, I6 = o4[B5 + 572 >> 2], o4[B5 + 312 >> 2] = o4[B5 + 568 >> 2], o4[B5 + 316 >> 2] = I6, I6 = o4[B5 + 564 >> 2], o4[B5 + 304 >> 2] = o4[B5 + 560 >> 2], o4[B5 + 308 >> 2] = I6, I6 = o4[B5 + 540 >> 2], o4[B5 + 296 >> 2] = o4[B5 + 536 >> 2], o4[B5 + 300 >> 2] = I6, I6 = o4[B5 + 532 >> 2], o4[B5 + 288 >> 2] = o4[B5 + 528 >> 2], o4[B5 + 292 >> 2] = I6, NA(Q5 = B5 + 544 | 0, B5 + 304 | 0, B5 + 288 | 0), y5 = o4[B5 + 556 >> 2], g6 = o4[B5 + 552 >> 2], o4[B5 + 568 >> 2] = g6, o4[B5 + 572 >> 2] = y5, F5 = o4[B5 + 548 >> 2], I6 = o4[B5 + 544 >> 2], o4[B5 + 560 >> 2] = I6, o4[B5 + 564 >> 2] = F5, o4[B5 + 532 >> 2] = o4[B5 + 580 >> 2] ^ o4[B5 + 740 >> 2], o4[B5 + 528 >> 2] = o4[B5 + 576 >> 2] ^ o4[B5 + 736 >> 2], o4[B5 + 540 >> 2] = o4[B5 + 588 >> 2] ^ o4[B5 + 748 >> 2], o4[B5 + 536 >> 2] = o4[B5 + 584 >> 2] ^ o4[B5 + 744 >> 2], o4[B5 + 280 >> 2] = g6, o4[B5 + 284 >> 2] = y5, o4[B5 + 272 >> 2] = I6, o4[B5 + 276 >> 2] = F5, I6 = o4[B5 + 540 >> 2], o4[B5 + 264 >> 2] = o4[B5 + 536 >> 2], o4[B5 + 268 >> 2] = I6, I6 = o4[B5 + 532 >> 2], o4[B5 + 256 >> 2] = o4[B5 + 528 >> 2], o4[B5 + 260 >> 2] = I6, NA(Q5, B5 + 272 | 0, B5 + 256 | 0), y5 = o4[B5 + 556 >> 2], g6 = o4[B5 + 552 >> 2], o4[B5 + 568 >> 2] = g6, o4[B5 + 572 >> 2] = y5, F5 = o4[B5 + 548 >> 2], I6 = o4[B5 + 544 >> 2], o4[B5 + 560 >> 2] = I6, o4[B5 + 564 >> 2] = F5, o4[B5 + 532 >> 2] = o4[B5 + 580 >> 2] ^ o4[B5 + 724 >> 2], o4[B5 + 528 >> 2] = o4[B5 + 576 >> 2] ^ o4[B5 + 720 >> 2], o4[B5 + 540 >> 2] = o4[B5 + 588 >> 2] ^ o4[B5 + 732 >> 2], o4[B5 + 536 >> 2] = o4[B5 + 584 >> 2] ^ o4[B5 + 728 >> 2], o4[B5 + 248 >> 2] = g6, o4[B5 + 252 >> 2] = y5, o4[B5 + 240 >> 2] = I6, o4[B5 + 244 >> 2] = F5, I6 = o4[B5 + 540 >> 2], o4[B5 + 232 >> 2] = o4[B5 + 536 >> 2], o4[B5 + 236 >> 2] = I6, I6 = o4[B5 + 532 >> 2], o4[B5 + 224 >> 2] = o4[B5 + 528 >> 2], o4[B5 + 228 >> 2] = I6, NA(Q5, B5 + 240 | 0, B5 + 224 | 0), y5 = o4[B5 + 556 >> 2], g6 = o4[B5 + 552 >> 2], o4[B5 + 568 >> 2] = g6, o4[B5 + 572 >> 2] = y5, F5 = o4[B5 + 548 >> 2], I6 = o4[B5 + 544 >> 2], o4[B5 + 560 >> 2] = I6, o4[B5 + 564 >> 2] = F5, o4[B5 + 532 >> 2] = o4[B5 + 580 >> 2] ^ o4[B5 + 708 >> 2], o4[B5 + 528 >> 2] = o4[B5 + 576 >> 2] ^ o4[B5 + 704 >> 2], o4[B5 + 540 >> 2] = o4[B5 + 588 >> 2] ^ o4[B5 + 716 >> 2], o4[B5 + 536 >> 2] = o4[B5 + 584 >> 2] ^ o4[B5 + 712 >> 2], o4[B5 + 216 >> 2] = g6, o4[B5 + 220 >> 2] = y5, o4[B5 + 208 >> 2] = I6, o4[B5 + 212 >> 2] = F5, I6 = o4[B5 + 540 >> 2], o4[B5 + 200 >> 2] = o4[B5 + 536 >> 2], o4[B5 + 204 >> 2] = I6, I6 = o4[B5 + 532 >> 2], o4[B5 + 192 >> 2] = o4[B5 + 528 >> 2], o4[B5 + 196 >> 2] = I6, NA(Q5, B5 + 208 | 0, B5 + 192 | 0), y5 = o4[B5 + 556 >> 2], g6 = o4[B5 + 552 >> 2], o4[B5 + 568 >> 2] = g6, o4[B5 + 572 >> 2] = y5, F5 = o4[B5 + 548 >> 2], I6 = o4[B5 + 544 >> 2], o4[B5 + 560 >> 2] = I6, o4[B5 + 564 >> 2] = F5, o4[B5 + 532 >> 2] = o4[B5 + 580 >> 2] ^ o4[B5 + 692 >> 2], o4[B5 + 528 >> 2] = o4[B5 + 576 >> 2] ^ o4[B5 + 688 >> 2], o4[B5 + 540 >> 2] = o4[B5 + 588 >> 2] ^ o4[B5 + 700 >> 2], o4[B5 + 536 >> 2] = o4[B5 + 584 >> 2] ^ o4[B5 + 696 >> 2], o4[B5 + 184 >> 2] = g6, o4[B5 + 188 >> 2] = y5, o4[B5 + 176 >> 2] = I6, o4[B5 + 180 >> 2] = F5, I6 = o4[B5 + 540 >> 2], o4[B5 + 168 >> 2] = o4[B5 + 536 >> 2], o4[B5 + 172 >> 2] = I6, I6 = o4[B5 + 532 >> 2], o4[B5 + 160 >> 2] = o4[B5 + 528 >> 2], o4[B5 + 164 >> 2] = I6, NA(Q5, B5 + 176 | 0, B5 + 160 | 0), y5 = o4[B5 + 556 >> 2], g6 = o4[B5 + 552 >> 2], o4[B5 + 568 >> 2] = g6, o4[B5 + 572 >> 2] = y5, F5 = o4[B5 + 548 >> 2], I6 = o4[B5 + 544 >> 2], o4[B5 + 560 >> 2] = I6, o4[B5 + 564 >> 2] = F5, o4[B5 + 532 >> 2] = o4[B5 + 580 >> 2] ^ o4[B5 + 676 >> 2], o4[B5 + 528 >> 2] = o4[B5 + 576 >> 2] ^ o4[B5 + 672 >> 2], o4[B5 + 540 >> 2] = o4[B5 + 588 >> 2] ^ o4[B5 + 684 >> 2], o4[B5 + 536 >> 2] = o4[B5 + 584 >> 2] ^ o4[B5 + 680 >> 2], o4[B5 + 152 >> 2] = g6, o4[B5 + 156 >> 2] = y5, o4[B5 + 144 >> 2] = I6, o4[B5 + 148 >> 2] = F5, I6 = o4[B5 + 540 >> 2], o4[B5 + 136 >> 2] = o4[B5 + 536 >> 2], o4[B5 + 140 >> 2] = I6, I6 = o4[B5 + 532 >> 2], o4[B5 + 128 >> 2] = o4[B5 + 528 >> 2], o4[B5 + 132 >> 2] = I6, NA(Q5, B5 + 144 | 0, B5 + 128 | 0), y5 = o4[B5 + 556 >> 2], g6 = o4[B5 + 552 >> 2], o4[B5 + 568 >> 2] = g6, o4[B5 + 572 >> 2] = y5, F5 = o4[B5 + 548 >> 2], I6 = o4[B5 + 544 >> 2], o4[B5 + 560 >> 2] = I6, o4[B5 + 564 >> 2] = F5, o4[B5 + 532 >> 2] = o4[B5 + 580 >> 2] ^ o4[B5 + 660 >> 2], o4[B5 + 528 >> 2] = o4[B5 + 576 >> 2] ^ o4[B5 + 656 >> 2], o4[B5 + 540 >> 2] = o4[B5 + 588 >> 2] ^ o4[B5 + 668 >> 2], o4[B5 + 536 >> 2] = o4[B5 + 584 >> 2] ^ o4[B5 + 664 >> 2], o4[B5 + 120 >> 2] = g6, o4[B5 + 124 >> 2] = y5, o4[B5 + 112 >> 2] = I6, o4[B5 + 116 >> 2] = F5, I6 = o4[B5 + 540 >> 2], o4[B5 + 104 >> 2] = o4[B5 + 536 >> 2], o4[B5 + 108 >> 2] = I6, I6 = o4[B5 + 532 >> 2], o4[B5 + 96 >> 2] = o4[B5 + 528 >> 2], o4[B5 + 100 >> 2] = I6, NA(Q5, B5 + 112 | 0, B5 + 96 | 0), y5 = o4[B5 + 556 >> 2], g6 = o4[B5 + 552 >> 2], o4[B5 + 568 >> 2] = g6, o4[B5 + 572 >> 2] = y5, F5 = o4[B5 + 548 >> 2], I6 = o4[B5 + 544 >> 2], o4[B5 + 560 >> 2] = I6, o4[B5 + 564 >> 2] = F5, o4[B5 + 532 >> 2] = o4[B5 + 580 >> 2] ^ o4[B5 + 644 >> 2], o4[B5 + 528 >> 2] = o4[B5 + 576 >> 2] ^ o4[B5 + 640 >> 2], o4[B5 + 540 >> 2] = o4[B5 + 588 >> 2] ^ o4[B5 + 652 >> 2], o4[B5 + 536 >> 2] = o4[B5 + 584 >> 2] ^ o4[B5 + 648 >> 2], o4[B5 + 88 >> 2] = g6, o4[B5 + 92 >> 2] = y5, o4[B5 + 80 >> 2] = I6, o4[B5 + 84 >> 2] = F5, I6 = o4[B5 + 540 >> 2], o4[B5 + 72 >> 2] = o4[B5 + 536 >> 2], o4[B5 + 76 >> 2] = I6, I6 = o4[B5 + 532 >> 2], o4[B5 + 64 >> 2] = o4[B5 + 528 >> 2], o4[B5 + 68 >> 2] = I6, NA(Q5, B5 + 80 | 0, B5 - -64 | 0), y5 = o4[B5 + 556 >> 2], g6 = o4[B5 + 552 >> 2], o4[B5 + 568 >> 2] = g6, o4[B5 + 572 >> 2] = y5, F5 = o4[B5 + 548 >> 2], I6 = o4[B5 + 544 >> 2], o4[B5 + 560 >> 2] = I6, o4[B5 + 564 >> 2] = F5, o4[B5 + 532 >> 2] = o4[B5 + 580 >> 2] ^ o4[B5 + 628 >> 2], o4[B5 + 528 >> 2] = o4[B5 + 576 >> 2] ^ o4[B5 + 624 >> 2], o4[B5 + 540 >> 2] = o4[B5 + 588 >> 2] ^ o4[B5 + 636 >> 2], o4[B5 + 536 >> 2] = o4[B5 + 584 >> 2] ^ o4[B5 + 632 >> 2], o4[B5 + 56 >> 2] = g6, o4[B5 + 60 >> 2] = y5, o4[B5 + 48 >> 2] = I6, o4[B5 + 52 >> 2] = F5, I6 = o4[B5 + 540 >> 2], o4[B5 + 40 >> 2] = o4[B5 + 536 >> 2], o4[B5 + 44 >> 2] = I6, I6 = o4[B5 + 532 >> 2], o4[B5 + 32 >> 2] = o4[B5 + 528 >> 2], o4[B5 + 36 >> 2] = I6, NA(Q5, B5 + 48 | 0, B5 + 32 | 0), o4[B5 + 524 >> 2] = o4[B5 + 620 >> 2] ^ w5, o4[B5 + 520 >> 2] = o4[B5 + 616 >> 2] ^ h5, o4[B5 + 516 >> 2] = o4[B5 + 612 >> 2] ^ D5, o4[B5 + 512 >> 2] = i2 ^ o4[B5 + 608 >> 2], y5 = o4[B5 + 556 >> 2], I6 = o4[B5 + 552 >> 2], o4[B5 + 568 >> 2] = I6, o4[B5 + 572 >> 2] = y5, g6 = o4[B5 + 548 >> 2], F5 = o4[B5 + 544 >> 2], o4[B5 + 560 >> 2] = F5, o4[B5 + 564 >> 2] = g6, o4[B5 + 16 >> 2] = F5, o4[B5 + 20 >> 2] = g6, o4[B5 + 24 >> 2] = I6, o4[B5 + 28 >> 2] = y5, I6 = o4[B5 + 524 >> 2], o4[B5 + 8 >> 2] = o4[B5 + 520 >> 2], o4[B5 + 12 >> 2] = I6, I6 = o4[B5 + 516 >> 2], o4[B5 >> 2] = o4[B5 + 512 >> 2], o4[B5 + 4 >> 2] = I6, pA(Q5, B5 + 16 | 0, B5), F5 = o4[B5 + 556 >> 2], y5 = I6 = o4[B5 + 552 >> 2], o4[B5 + 568 >> 2] = I6, o4[B5 + 572 >> 2] = F5, g6 = o4[B5 + 548 >> 2], I6 = o4[B5 + 544 >> 2], o4[B5 + 560 >> 2] = I6, o4[B5 + 564 >> 2] = g6, C5[A7 + 8 | 0] = y5, C5[A7 + 9 | 0] = y5 >>> 8, C5[A7 + 10 | 0] = y5 >>> 16, C5[A7 + 11 | 0] = y5 >>> 24, C5[A7 + 12 | 0] = F5, C5[A7 + 13 | 0] = F5 >>> 8, C5[A7 + 14 | 0] = F5 >>> 16, C5[A7 + 15 | 0] = F5 >>> 24, C5[0 | A7] = I6, C5[A7 + 1 | 0] = I6 >>> 8, C5[A7 + 2 | 0] = I6 >>> 16, C5[A7 + 3 | 0] = I6 >>> 24, C5[A7 + 4 | 0] = g6, C5[A7 + 5 | 0] = g6 >>> 8, C5[A7 + 6 | 0] = g6 >>> 16, C5[A7 + 7 | 0] = g6 >>> 24, r4 = B5 + 784 | 0;
            }, function(A7, I6, g6, B5) {
              A7 |= 0, I6 |= 0, g6 |= 0;
              var Q5, i2, E5 = 0, D5 = 0, h5 = 0, w5 = 0, F5 = 0;
              r4 = Q5 = r4 - 752 | 0, wA(Q5 + 512 | 0, 16 + (B5 |= 0) | 0), wA(F5 = Q5 + 336 | 0, B5), E5 = o4[Q5 + 592 >> 2] ^ o4[Q5 + 416 >> 2], o4[Q5 + 320 >> 2] = E5, D5 = o4[Q5 + 596 >> 2] ^ o4[Q5 + 420 >> 2], o4[Q5 + 324 >> 2] = D5, h5 = o4[Q5 + 600 >> 2] ^ o4[Q5 + 424 >> 2], o4[Q5 + 328 >> 2] = h5, w5 = o4[Q5 + 604 >> 2] ^ o4[Q5 + 428 >> 2], o4[Q5 + 332 >> 2] = w5, 255 & (D5 | E5 | E5 >>> 8 | E5 >>> 16 | E5 >>> 24 | D5 >>> 8 | D5 >>> 16 | D5 >>> 24 | h5 >>> 8 | h5 >>> 16 | h5 >>> 24 | w5 >>> 8 | w5 >>> 16 | w5 >>> 24 | h5 | w5) || (C5[Q5 + 320 | 0] = 90 ^ c4[0 | B5], C5[Q5 + 321 | 0] = 90 ^ c4[B5 + 1 | 0], C5[Q5 + 322 | 0] = 90 ^ c4[B5 + 2 | 0], C5[Q5 + 323 | 0] = 90 ^ c4[B5 + 3 | 0], C5[Q5 + 324 | 0] = 90 ^ c4[B5 + 4 | 0], C5[Q5 + 325 | 0] = 90 ^ c4[B5 + 5 | 0], C5[Q5 + 326 | 0] = 90 ^ c4[B5 + 6 | 0], C5[Q5 + 327 | 0] = 90 ^ c4[B5 + 7 | 0], C5[Q5 + 328 | 0] = 90 ^ c4[B5 + 8 | 0], C5[Q5 + 329 | 0] = 90 ^ c4[B5 + 9 | 0], C5[Q5 + 330 | 0] = 90 ^ c4[B5 + 10 | 0], C5[Q5 + 331 | 0] = 90 ^ c4[B5 + 11 | 0], C5[Q5 + 332 | 0] = 90 ^ c4[B5 + 12 | 0], C5[Q5 + 333 | 0] = 90 ^ c4[B5 + 13 | 0], C5[Q5 + 334 | 0] = 90 ^ c4[B5 + 14 | 0], C5[Q5 + 335 | 0] = 90 ^ c4[B5 + 15 | 0], wA(F5, Q5 + 320 | 0)), B5 = c4[g6 + 12 | 0] | c4[g6 + 13 | 0] << 8 | c4[g6 + 14 | 0] << 16 | c4[g6 + 15 | 0] << 24, E5 = c4[g6 + 8 | 0] | c4[g6 + 9 | 0] << 8 | c4[g6 + 10 | 0] << 16 | c4[g6 + 11 | 0] << 24, C5[A7 + 8 | 0] = E5, C5[A7 + 9 | 0] = E5 >>> 8, C5[A7 + 10 | 0] = E5 >>> 16, C5[A7 + 11 | 0] = E5 >>> 24, C5[A7 + 12 | 0] = B5, C5[A7 + 13 | 0] = B5 >>> 8, C5[A7 + 14 | 0] = B5 >>> 16, C5[A7 + 15 | 0] = B5 >>> 24, B5 = c4[g6 + 4 | 0] | c4[g6 + 5 | 0] << 8 | c4[g6 + 6 | 0] << 16 | c4[g6 + 7 | 0] << 24, E5 = c4[0 | g6] | c4[g6 + 1 | 0] << 8 | c4[g6 + 2 | 0] << 16 | c4[g6 + 3 | 0] << 24, C5[0 | A7] = E5, C5[A7 + 1 | 0] = E5 >>> 8, C5[A7 + 2 | 0] = E5 >>> 16, C5[A7 + 3 | 0] = E5 >>> 24, C5[A7 + 4 | 0] = B5, C5[A7 + 5 | 0] = B5 >>> 8, C5[A7 + 6 | 0] = B5 >>> 16, C5[A7 + 7 | 0] = B5 >>> 24, q2(Q5 + 736 | 0, g6, Q5 + 512 | 0), g6 = c4[I6 + 8 | 0] | c4[I6 + 9 | 0] << 8 | c4[I6 + 10 | 0] << 16 | c4[I6 + 11 | 0] << 24, B5 = c4[I6 + 12 | 0] | c4[I6 + 13 | 0] << 8 | c4[I6 + 14 | 0] << 16 | c4[I6 + 15 | 0] << 24, E5 = c4[0 | I6] | c4[I6 + 1 | 0] << 8 | c4[I6 + 2 | 0] << 16 | c4[I6 + 3 | 0] << 24, h5 = o4[Q5 + 740 >> 2], o4[Q5 + 724 >> 2] = h5 ^ o4[Q5 + 340 >> 2] ^ (c4[I6 + 4 | 0] | c4[I6 + 5 | 0] << 8 | c4[I6 + 6 | 0] << 16 | c4[I6 + 7 | 0] << 24), w5 = o4[Q5 + 736 >> 2], o4[Q5 + 720 >> 2] = w5 ^ E5 ^ o4[Q5 + 336 >> 2], F5 = o4[Q5 + 748 >> 2], o4[Q5 + 732 >> 2] = F5 ^ B5 ^ o4[Q5 + 348 >> 2], i2 = o4[Q5 + 744 >> 2], o4[Q5 + 728 >> 2] = i2 ^ g6 ^ o4[Q5 + 344 >> 2], I6 = o4[Q5 + 724 >> 2], o4[Q5 + 304 >> 2] = o4[Q5 + 720 >> 2], o4[Q5 + 308 >> 2] = I6, I6 = o4[Q5 + 732 >> 2], o4[Q5 + 312 >> 2] = o4[Q5 + 728 >> 2], o4[Q5 + 316 >> 2] = I6, I6 = o4[Q5 + 364 >> 2], o4[Q5 + 296 >> 2] = o4[Q5 + 360 >> 2], o4[Q5 + 300 >> 2] = I6, I6 = o4[Q5 + 356 >> 2], o4[Q5 + 288 >> 2] = o4[Q5 + 352 >> 2], o4[Q5 + 292 >> 2] = I6, GA(g6 = Q5 + 704 | 0, Q5 + 304 | 0, Q5 + 288 | 0), B5 = o4[Q5 + 716 >> 2], I6 = o4[Q5 + 712 >> 2], o4[Q5 + 728 >> 2] = I6, o4[Q5 + 732 >> 2] = B5, D5 = o4[Q5 + 708 >> 2], E5 = o4[Q5 + 704 >> 2], o4[Q5 + 720 >> 2] = E5, o4[Q5 + 724 >> 2] = D5, o4[Q5 + 272 >> 2] = E5, o4[Q5 + 276 >> 2] = D5, o4[Q5 + 280 >> 2] = I6, o4[Q5 + 284 >> 2] = B5, I6 = o4[Q5 + 372 >> 2], o4[Q5 + 256 >> 2] = o4[Q5 + 368 >> 2], o4[Q5 + 260 >> 2] = I6, I6 = o4[Q5 + 380 >> 2], o4[Q5 + 264 >> 2] = o4[Q5 + 376 >> 2], o4[Q5 + 268 >> 2] = I6, GA(g6, Q5 + 272 | 0, Q5 + 256 | 0), B5 = o4[Q5 + 716 >> 2], I6 = o4[Q5 + 712 >> 2], o4[Q5 + 728 >> 2] = I6, o4[Q5 + 732 >> 2] = B5, D5 = o4[Q5 + 708 >> 2], E5 = o4[Q5 + 704 >> 2], o4[Q5 + 720 >> 2] = E5, o4[Q5 + 724 >> 2] = D5, o4[Q5 + 240 >> 2] = E5, o4[Q5 + 244 >> 2] = D5, o4[Q5 + 248 >> 2] = I6, o4[Q5 + 252 >> 2] = B5, I6 = o4[Q5 + 388 >> 2], o4[Q5 + 224 >> 2] = o4[Q5 + 384 >> 2], o4[Q5 + 228 >> 2] = I6, I6 = o4[Q5 + 396 >> 2], o4[Q5 + 232 >> 2] = o4[Q5 + 392 >> 2], o4[Q5 + 236 >> 2] = I6, GA(g6, Q5 + 240 | 0, Q5 + 224 | 0), B5 = o4[Q5 + 716 >> 2], I6 = o4[Q5 + 712 >> 2], o4[Q5 + 728 >> 2] = I6, o4[Q5 + 732 >> 2] = B5, D5 = o4[Q5 + 708 >> 2], E5 = o4[Q5 + 704 >> 2], o4[Q5 + 720 >> 2] = E5, o4[Q5 + 724 >> 2] = D5, o4[Q5 + 208 >> 2] = E5, o4[Q5 + 212 >> 2] = D5, o4[Q5 + 216 >> 2] = I6, o4[Q5 + 220 >> 2] = B5, I6 = o4[Q5 + 404 >> 2], o4[Q5 + 192 >> 2] = o4[Q5 + 400 >> 2], o4[Q5 + 196 >> 2] = I6, I6 = o4[Q5 + 412 >> 2], o4[Q5 + 200 >> 2] = o4[Q5 + 408 >> 2], o4[Q5 + 204 >> 2] = I6, GA(g6, Q5 + 208 | 0, Q5 + 192 | 0), B5 = o4[Q5 + 716 >> 2], I6 = o4[Q5 + 712 >> 2], o4[Q5 + 728 >> 2] = I6, o4[Q5 + 732 >> 2] = B5, D5 = o4[Q5 + 708 >> 2], E5 = o4[Q5 + 704 >> 2], o4[Q5 + 720 >> 2] = E5, o4[Q5 + 724 >> 2] = D5, o4[Q5 + 176 >> 2] = E5, o4[Q5 + 180 >> 2] = D5, o4[Q5 + 184 >> 2] = I6, o4[Q5 + 188 >> 2] = B5, I6 = o4[Q5 + 420 >> 2], o4[Q5 + 160 >> 2] = o4[Q5 + 416 >> 2], o4[Q5 + 164 >> 2] = I6, I6 = o4[Q5 + 428 >> 2], o4[Q5 + 168 >> 2] = o4[Q5 + 424 >> 2], o4[Q5 + 172 >> 2] = I6, GA(g6, Q5 + 176 | 0, Q5 + 160 | 0), B5 = o4[Q5 + 716 >> 2], I6 = o4[Q5 + 712 >> 2], o4[Q5 + 728 >> 2] = I6, o4[Q5 + 732 >> 2] = B5, D5 = o4[Q5 + 708 >> 2], E5 = o4[Q5 + 704 >> 2], o4[Q5 + 720 >> 2] = E5, o4[Q5 + 724 >> 2] = D5, o4[Q5 + 144 >> 2] = E5, o4[Q5 + 148 >> 2] = D5, o4[Q5 + 152 >> 2] = I6, o4[Q5 + 156 >> 2] = B5, I6 = o4[Q5 + 436 >> 2], o4[Q5 + 128 >> 2] = o4[Q5 + 432 >> 2], o4[Q5 + 132 >> 2] = I6, I6 = o4[Q5 + 444 >> 2], o4[Q5 + 136 >> 2] = o4[Q5 + 440 >> 2], o4[Q5 + 140 >> 2] = I6, GA(g6, Q5 + 144 | 0, Q5 + 128 | 0), B5 = o4[Q5 + 716 >> 2], I6 = o4[Q5 + 712 >> 2], o4[Q5 + 728 >> 2] = I6, o4[Q5 + 732 >> 2] = B5, D5 = o4[Q5 + 708 >> 2], E5 = o4[Q5 + 704 >> 2], o4[Q5 + 720 >> 2] = E5, o4[Q5 + 724 >> 2] = D5, o4[Q5 + 112 >> 2] = E5, o4[Q5 + 116 >> 2] = D5, o4[Q5 + 120 >> 2] = I6, o4[Q5 + 124 >> 2] = B5, I6 = o4[Q5 + 452 >> 2], o4[Q5 + 96 >> 2] = o4[Q5 + 448 >> 2], o4[Q5 + 100 >> 2] = I6, I6 = o4[Q5 + 460 >> 2], o4[Q5 + 104 >> 2] = o4[Q5 + 456 >> 2], o4[Q5 + 108 >> 2] = I6, GA(g6, Q5 + 112 | 0, Q5 + 96 | 0), B5 = o4[Q5 + 716 >> 2], I6 = o4[Q5 + 712 >> 2], o4[Q5 + 728 >> 2] = I6, o4[Q5 + 732 >> 2] = B5, D5 = o4[Q5 + 708 >> 2], E5 = o4[Q5 + 704 >> 2], o4[Q5 + 720 >> 2] = E5, o4[Q5 + 724 >> 2] = D5, o4[Q5 + 80 >> 2] = E5, o4[Q5 + 84 >> 2] = D5, o4[Q5 + 88 >> 2] = I6, o4[Q5 + 92 >> 2] = B5, I6 = o4[Q5 + 468 >> 2], o4[Q5 + 64 >> 2] = o4[Q5 + 464 >> 2], o4[Q5 + 68 >> 2] = I6, I6 = o4[Q5 + 476 >> 2], o4[Q5 + 72 >> 2] = o4[Q5 + 472 >> 2], o4[Q5 + 76 >> 2] = I6, GA(g6, Q5 + 80 | 0, Q5 - -64 | 0), B5 = o4[Q5 + 716 >> 2], I6 = o4[Q5 + 712 >> 2], o4[Q5 + 728 >> 2] = I6, o4[Q5 + 732 >> 2] = B5, D5 = o4[Q5 + 708 >> 2], E5 = o4[Q5 + 704 >> 2], o4[Q5 + 720 >> 2] = E5, o4[Q5 + 724 >> 2] = D5, o4[Q5 + 48 >> 2] = E5, o4[Q5 + 52 >> 2] = D5, o4[Q5 + 56 >> 2] = I6, o4[Q5 + 60 >> 2] = B5, I6 = o4[Q5 + 484 >> 2], o4[Q5 + 32 >> 2] = o4[Q5 + 480 >> 2], o4[Q5 + 36 >> 2] = I6, I6 = o4[Q5 + 492 >> 2], o4[Q5 + 40 >> 2] = o4[Q5 + 488 >> 2], o4[Q5 + 44 >> 2] = I6, GA(g6, Q5 + 48 | 0, Q5 + 32 | 0), o4[Q5 + 700 >> 2] = F5 ^ o4[Q5 + 508 >> 2], o4[Q5 + 696 >> 2] = i2 ^ o4[Q5 + 504 >> 2], o4[Q5 + 692 >> 2] = h5 ^ o4[Q5 + 500 >> 2], o4[Q5 + 688 >> 2] = w5 ^ o4[Q5 + 496 >> 2], B5 = o4[Q5 + 716 >> 2], I6 = o4[Q5 + 712 >> 2], o4[Q5 + 728 >> 2] = I6, o4[Q5 + 732 >> 2] = B5, D5 = o4[Q5 + 708 >> 2], E5 = o4[Q5 + 704 >> 2], o4[Q5 + 720 >> 2] = E5, o4[Q5 + 724 >> 2] = D5, o4[Q5 + 16 >> 2] = E5, o4[Q5 + 20 >> 2] = D5, o4[Q5 + 24 >> 2] = I6, o4[Q5 + 28 >> 2] = B5, I6 = o4[Q5 + 700 >> 2], o4[Q5 + 8 >> 2] = o4[Q5 + 696 >> 2], o4[Q5 + 12 >> 2] = I6, I6 = o4[Q5 + 692 >> 2], o4[Q5 >> 2] = o4[Q5 + 688 >> 2], o4[Q5 + 4 >> 2] = I6, sA(g6, Q5 + 16 | 0, Q5), B5 = o4[Q5 + 716 >> 2], I6 = o4[Q5 + 712 >> 2], o4[Q5 + 728 >> 2] = I6, o4[Q5 + 732 >> 2] = B5, E5 = o4[Q5 + 708 >> 2], g6 = o4[Q5 + 704 >> 2], o4[Q5 + 720 >> 2] = g6, o4[Q5 + 724 >> 2] = E5, C5[A7 + 24 | 0] = I6, C5[A7 + 25 | 0] = I6 >>> 8, C5[A7 + 26 | 0] = I6 >>> 16, C5[A7 + 27 | 0] = I6 >>> 24, I6 = B5, C5[A7 + 28 | 0] = I6, C5[A7 + 29 | 0] = I6 >>> 8, C5[A7 + 30 | 0] = I6 >>> 16, C5[A7 + 31 | 0] = I6 >>> 24, C5[A7 + 16 | 0] = g6, C5[A7 + 17 | 0] = g6 >>> 8, C5[A7 + 18 | 0] = g6 >>> 16, C5[A7 + 19 | 0] = g6 >>> 24, I6 = E5, C5[A7 + 20 | 0] = I6, C5[A7 + 21 | 0] = I6 >>> 8, C5[A7 + 22 | 0] = I6 >>> 16, C5[A7 + 23 | 0] = I6 >>> 24, r4 = Q5 + 752 | 0;
            }, function(A7, I6, g6) {
              A7 |= 0, I6 |= 0;
              var B5, Q5, i2 = 0, D5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0;
              r4 = B5 = r4 - 928 | 0, wA(B5 + 512 | 0, 16 + (g6 |= 0) | 0), wA(w5 = B5 + 336 | 0, g6), D5 = o4[B5 + 592 >> 2] ^ o4[B5 + 416 >> 2], o4[B5 + 320 >> 2] = D5, i2 = o4[B5 + 596 >> 2] ^ o4[B5 + 420 >> 2], o4[B5 + 324 >> 2] = i2, y5 = o4[B5 + 600 >> 2] ^ o4[B5 + 424 >> 2], o4[B5 + 328 >> 2] = y5, F5 = o4[B5 + 604 >> 2] ^ o4[B5 + 428 >> 2], o4[B5 + 332 >> 2] = F5, 255 & (y5 | i2 | D5 | D5 >>> 8 | D5 >>> 16 | D5 >>> 24 | i2 >>> 8 | i2 >>> 16 | i2 >>> 24 | y5 >>> 8 | y5 >>> 16 | y5 >>> 24 | F5 >>> 8 | F5 >>> 16 | F5 >>> 24 | F5) || (C5[B5 + 320 | 0] = 90 ^ c4[0 | g6], C5[B5 + 321 | 0] = 90 ^ c4[g6 + 1 | 0], C5[B5 + 322 | 0] = 90 ^ c4[g6 + 2 | 0], C5[B5 + 323 | 0] = 90 ^ c4[g6 + 3 | 0], C5[B5 + 324 | 0] = 90 ^ c4[g6 + 4 | 0], C5[B5 + 325 | 0] = 90 ^ c4[g6 + 5 | 0], C5[B5 + 326 | 0] = 90 ^ c4[g6 + 6 | 0], C5[B5 + 327 | 0] = 90 ^ c4[g6 + 7 | 0], C5[B5 + 328 | 0] = 90 ^ c4[g6 + 8 | 0], C5[B5 + 329 | 0] = 90 ^ c4[g6 + 9 | 0], C5[B5 + 330 | 0] = 90 ^ c4[g6 + 10 | 0], C5[B5 + 331 | 0] = 90 ^ c4[g6 + 11 | 0], C5[B5 + 332 | 0] = 90 ^ c4[g6 + 12 | 0], C5[B5 + 333 | 0] = 90 ^ c4[g6 + 13 | 0], C5[B5 + 334 | 0] = 90 ^ c4[g6 + 14 | 0], C5[B5 + 335 | 0] = 90 ^ c4[g6 + 15 | 0], wA(w5, B5 + 320 | 0)), q2(B5 + 736 | 0, I6, B5 + 512 | 0), E4(g6 = B5 + 752 | 0, B5 + 336 | 0, 176), aA(g6), i2 = c4[I6 + 24 | 0] | c4[I6 + 25 | 0] << 8 | c4[I6 + 26 | 0] << 16 | c4[I6 + 27 | 0] << 24, w5 = c4[I6 + 28 | 0] | c4[I6 + 29 | 0] << 8 | c4[I6 + 30 | 0] << 16 | c4[I6 + 31 | 0] << 24, g6 = c4[I6 + 16 | 0] | c4[I6 + 17 | 0] << 8 | c4[I6 + 18 | 0] << 16 | c4[I6 + 19 | 0] << 24, y5 = o4[B5 + 740 >> 2], o4[B5 + 724 >> 2] = y5 ^ o4[B5 + 916 >> 2] ^ (c4[I6 + 20 | 0] | c4[I6 + 21 | 0] << 8 | c4[I6 + 22 | 0] << 16 | c4[I6 + 23 | 0] << 24), F5 = o4[B5 + 736 >> 2], o4[B5 + 720 >> 2] = F5 ^ g6 ^ o4[B5 + 912 >> 2], I6 = w5 ^ o4[B5 + 924 >> 2], w5 = o4[B5 + 748 >> 2], o4[B5 + 732 >> 2] = I6 ^ w5, g6 = o4[B5 + 744 >> 2], o4[B5 + 728 >> 2] = g6 ^ i2 ^ o4[B5 + 920 >> 2], I6 = o4[B5 + 724 >> 2], o4[B5 + 304 >> 2] = o4[B5 + 720 >> 2], o4[B5 + 308 >> 2] = I6, I6 = o4[B5 + 732 >> 2], o4[B5 + 312 >> 2] = o4[B5 + 728 >> 2], o4[B5 + 316 >> 2] = I6, I6 = o4[B5 + 900 >> 2], o4[B5 + 288 >> 2] = o4[B5 + 896 >> 2], o4[B5 + 292 >> 2] = I6, I6 = o4[B5 + 908 >> 2], o4[B5 + 296 >> 2] = o4[B5 + 904 >> 2], o4[B5 + 300 >> 2] = I6, NA(Q5 = B5 + 704 | 0, B5 + 304 | 0, B5 + 288 | 0), h5 = o4[B5 + 716 >> 2], I6 = o4[B5 + 712 >> 2], o4[B5 + 728 >> 2] = I6, o4[B5 + 732 >> 2] = h5, i2 = o4[B5 + 708 >> 2], D5 = o4[B5 + 704 >> 2], o4[B5 + 720 >> 2] = D5, o4[B5 + 724 >> 2] = i2, o4[B5 + 272 >> 2] = D5, o4[B5 + 276 >> 2] = i2, o4[B5 + 280 >> 2] = I6, o4[B5 + 284 >> 2] = h5, I6 = o4[B5 + 884 >> 2], o4[B5 + 256 >> 2] = o4[B5 + 880 >> 2], o4[B5 + 260 >> 2] = I6, I6 = o4[B5 + 892 >> 2], o4[B5 + 264 >> 2] = o4[B5 + 888 >> 2], o4[B5 + 268 >> 2] = I6, NA(Q5, B5 + 272 | 0, B5 + 256 | 0), h5 = o4[B5 + 716 >> 2], I6 = o4[B5 + 712 >> 2], o4[B5 + 728 >> 2] = I6, o4[B5 + 732 >> 2] = h5, i2 = o4[B5 + 708 >> 2], D5 = o4[B5 + 704 >> 2], o4[B5 + 720 >> 2] = D5, o4[B5 + 724 >> 2] = i2, o4[B5 + 240 >> 2] = D5, o4[B5 + 244 >> 2] = i2, o4[B5 + 248 >> 2] = I6, o4[B5 + 252 >> 2] = h5, I6 = o4[B5 + 868 >> 2], o4[B5 + 224 >> 2] = o4[B5 + 864 >> 2], o4[B5 + 228 >> 2] = I6, I6 = o4[B5 + 876 >> 2], o4[B5 + 232 >> 2] = o4[B5 + 872 >> 2], o4[B5 + 236 >> 2] = I6, NA(Q5, B5 + 240 | 0, B5 + 224 | 0), h5 = o4[B5 + 716 >> 2], I6 = o4[B5 + 712 >> 2], o4[B5 + 728 >> 2] = I6, o4[B5 + 732 >> 2] = h5, i2 = o4[B5 + 708 >> 2], D5 = o4[B5 + 704 >> 2], o4[B5 + 720 >> 2] = D5, o4[B5 + 724 >> 2] = i2, o4[B5 + 208 >> 2] = D5, o4[B5 + 212 >> 2] = i2, o4[B5 + 216 >> 2] = I6, o4[B5 + 220 >> 2] = h5, I6 = o4[B5 + 852 >> 2], o4[B5 + 192 >> 2] = o4[B5 + 848 >> 2], o4[B5 + 196 >> 2] = I6, I6 = o4[B5 + 860 >> 2], o4[B5 + 200 >> 2] = o4[B5 + 856 >> 2], o4[B5 + 204 >> 2] = I6, NA(Q5, B5 + 208 | 0, B5 + 192 | 0), h5 = o4[B5 + 716 >> 2], I6 = o4[B5 + 712 >> 2], o4[B5 + 728 >> 2] = I6, o4[B5 + 732 >> 2] = h5, i2 = o4[B5 + 708 >> 2], D5 = o4[B5 + 704 >> 2], o4[B5 + 720 >> 2] = D5, o4[B5 + 724 >> 2] = i2, o4[B5 + 176 >> 2] = D5, o4[B5 + 180 >> 2] = i2, o4[B5 + 184 >> 2] = I6, o4[B5 + 188 >> 2] = h5, I6 = o4[B5 + 836 >> 2], o4[B5 + 160 >> 2] = o4[B5 + 832 >> 2], o4[B5 + 164 >> 2] = I6, I6 = o4[B5 + 844 >> 2], o4[B5 + 168 >> 2] = o4[B5 + 840 >> 2], o4[B5 + 172 >> 2] = I6, NA(Q5, B5 + 176 | 0, B5 + 160 | 0), h5 = o4[B5 + 716 >> 2], I6 = o4[B5 + 712 >> 2], o4[B5 + 728 >> 2] = I6, o4[B5 + 732 >> 2] = h5, i2 = o4[B5 + 708 >> 2], D5 = o4[B5 + 704 >> 2], o4[B5 + 720 >> 2] = D5, o4[B5 + 724 >> 2] = i2, o4[B5 + 144 >> 2] = D5, o4[B5 + 148 >> 2] = i2, o4[B5 + 152 >> 2] = I6, o4[B5 + 156 >> 2] = h5, I6 = o4[B5 + 820 >> 2], o4[B5 + 128 >> 2] = o4[B5 + 816 >> 2], o4[B5 + 132 >> 2] = I6, I6 = o4[B5 + 828 >> 2], o4[B5 + 136 >> 2] = o4[B5 + 824 >> 2], o4[B5 + 140 >> 2] = I6, NA(Q5, B5 + 144 | 0, B5 + 128 | 0), h5 = o4[B5 + 716 >> 2], I6 = o4[B5 + 712 >> 2], o4[B5 + 728 >> 2] = I6, o4[B5 + 732 >> 2] = h5, i2 = o4[B5 + 708 >> 2], D5 = o4[B5 + 704 >> 2], o4[B5 + 720 >> 2] = D5, o4[B5 + 724 >> 2] = i2, o4[B5 + 112 >> 2] = D5, o4[B5 + 116 >> 2] = i2, o4[B5 + 120 >> 2] = I6, o4[B5 + 124 >> 2] = h5, I6 = o4[B5 + 804 >> 2], o4[B5 + 96 >> 2] = o4[B5 + 800 >> 2], o4[B5 + 100 >> 2] = I6, I6 = o4[B5 + 812 >> 2], o4[B5 + 104 >> 2] = o4[B5 + 808 >> 2], o4[B5 + 108 >> 2] = I6, NA(Q5, B5 + 112 | 0, B5 + 96 | 0), h5 = o4[B5 + 716 >> 2], I6 = o4[B5 + 712 >> 2], o4[B5 + 728 >> 2] = I6, o4[B5 + 732 >> 2] = h5, i2 = o4[B5 + 708 >> 2], D5 = o4[B5 + 704 >> 2], o4[B5 + 720 >> 2] = D5, o4[B5 + 724 >> 2] = i2, o4[B5 + 80 >> 2] = D5, o4[B5 + 84 >> 2] = i2, o4[B5 + 88 >> 2] = I6, o4[B5 + 92 >> 2] = h5, I6 = o4[B5 + 788 >> 2], o4[B5 + 64 >> 2] = o4[B5 + 784 >> 2], o4[B5 + 68 >> 2] = I6, I6 = o4[B5 + 796 >> 2], o4[B5 + 72 >> 2] = o4[B5 + 792 >> 2], o4[B5 + 76 >> 2] = I6, NA(Q5, B5 + 80 | 0, B5 - -64 | 0), h5 = o4[B5 + 716 >> 2], I6 = o4[B5 + 712 >> 2], o4[B5 + 728 >> 2] = I6, o4[B5 + 732 >> 2] = h5, i2 = o4[B5 + 708 >> 2], D5 = o4[B5 + 704 >> 2], o4[B5 + 720 >> 2] = D5, o4[B5 + 724 >> 2] = i2, o4[B5 + 48 >> 2] = D5, o4[B5 + 52 >> 2] = i2, o4[B5 + 56 >> 2] = I6, o4[B5 + 60 >> 2] = h5, I6 = o4[B5 + 772 >> 2], o4[B5 + 32 >> 2] = o4[B5 + 768 >> 2], o4[B5 + 36 >> 2] = I6, I6 = o4[B5 + 780 >> 2], o4[B5 + 40 >> 2] = o4[B5 + 776 >> 2], o4[B5 + 44 >> 2] = I6, NA(Q5, B5 + 48 | 0, B5 + 32 | 0), o4[B5 + 700 >> 2] = w5 ^ o4[B5 + 764 >> 2], o4[B5 + 696 >> 2] = g6 ^ o4[B5 + 760 >> 2], o4[B5 + 692 >> 2] = y5 ^ o4[B5 + 756 >> 2], o4[B5 + 688 >> 2] = F5 ^ o4[B5 + 752 >> 2], F5 = o4[B5 + 716 >> 2], I6 = o4[B5 + 712 >> 2], o4[B5 + 728 >> 2] = I6, o4[B5 + 732 >> 2] = F5, g6 = o4[B5 + 708 >> 2], w5 = o4[B5 + 704 >> 2], o4[B5 + 720 >> 2] = w5, o4[B5 + 724 >> 2] = g6, o4[B5 + 16 >> 2] = w5, o4[B5 + 20 >> 2] = g6, o4[B5 + 24 >> 2] = I6, o4[B5 + 28 >> 2] = F5, I6 = o4[B5 + 700 >> 2], o4[B5 + 8 >> 2] = o4[B5 + 696 >> 2], o4[B5 + 12 >> 2] = I6, I6 = o4[B5 + 692 >> 2], o4[B5 >> 2] = o4[B5 + 688 >> 2], o4[B5 + 4 >> 2] = I6, pA(Q5, B5 + 16 | 0, B5), w5 = o4[B5 + 716 >> 2], F5 = I6 = o4[B5 + 712 >> 2], o4[B5 + 728 >> 2] = I6, o4[B5 + 732 >> 2] = w5, g6 = o4[B5 + 708 >> 2], I6 = o4[B5 + 704 >> 2], o4[B5 + 720 >> 2] = I6, o4[B5 + 724 >> 2] = g6, C5[A7 + 8 | 0] = F5, C5[A7 + 9 | 0] = F5 >>> 8, C5[A7 + 10 | 0] = F5 >>> 16, C5[A7 + 11 | 0] = F5 >>> 24, C5[A7 + 12 | 0] = w5, C5[A7 + 13 | 0] = w5 >>> 8, C5[A7 + 14 | 0] = w5 >>> 16, C5[A7 + 15 | 0] = w5 >>> 24, C5[0 | A7] = I6, C5[A7 + 1 | 0] = I6 >>> 8, C5[A7 + 2 | 0] = I6 >>> 16, C5[A7 + 3 | 0] = I6 >>> 24, C5[A7 + 4 | 0] = g6, C5[A7 + 5 | 0] = g6 >>> 8, C5[A7 + 6 | 0] = g6 >>> 16, C5[A7 + 7 | 0] = g6 >>> 24, r4 = B5 + 928 | 0;
            }, function(A7, I6, g6) {
              A7 |= 0, I6 |= 0;
              var B5, Q5 = 0, i2 = 0, E5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, n5 = 0, t5 = 0, U5 = 0, J5 = 0, K5 = 0, e4 = 0, Y5 = 0, N5 = 0, G5 = 0, H5 = 0, s5 = 0, p5 = 0;
              for (r4 = B5 = r4 - 1072 | 0, wA(B5 + 896 | 0, g6 |= 0), wA(w5 = B5 + 720 | 0, g6 + 16 | 0), i2 = o4[B5 + 976 >> 2] ^ o4[B5 + 800 >> 2], o4[B5 + 704 >> 2] = i2, Q5 = o4[B5 + 980 >> 2] ^ o4[B5 + 804 >> 2], o4[B5 + 708 >> 2] = Q5, h5 = o4[B5 + 984 >> 2] ^ o4[B5 + 808 >> 2], o4[B5 + 712 >> 2] = h5, E5 = o4[B5 + 988 >> 2] ^ o4[B5 + 812 >> 2], o4[B5 + 716 >> 2] = E5, 255 & (E5 | h5 | Q5 | i2 | i2 >>> 8 | i2 >>> 16 | i2 >>> 24 | Q5 >>> 8 | Q5 >>> 16 | Q5 >>> 24 | h5 >>> 8 | h5 >>> 16 | h5 >>> 24 | E5 >>> 8 | E5 >>> 16 | E5 >>> 24) || (C5[B5 + 704 | 0] = 90 ^ c4[0 | g6], C5[B5 + 705 | 0] = 90 ^ c4[g6 + 1 | 0], C5[B5 + 706 | 0] = 90 ^ c4[g6 + 2 | 0], C5[B5 + 707 | 0] = 90 ^ c4[g6 + 3 | 0], C5[B5 + 708 | 0] = 90 ^ c4[g6 + 4 | 0], C5[B5 + 709 | 0] = 90 ^ c4[g6 + 5 | 0], C5[B5 + 710 | 0] = 90 ^ c4[g6 + 6 | 0], C5[B5 + 711 | 0] = 90 ^ c4[g6 + 7 | 0], C5[B5 + 712 | 0] = 90 ^ c4[g6 + 8 | 0], C5[B5 + 713 | 0] = 90 ^ c4[g6 + 9 | 0], C5[B5 + 714 | 0] = 90 ^ c4[g6 + 10 | 0], C5[B5 + 715 | 0] = 90 ^ c4[g6 + 11 | 0], C5[B5 + 716 | 0] = 90 ^ c4[g6 + 12 | 0], C5[B5 + 717 | 0] = 90 ^ c4[g6 + 13 | 0], C5[B5 + 718 | 0] = 90 ^ c4[g6 + 14 | 0], C5[B5 + 719 | 0] = 90 ^ c4[g6 + 15 | 0], wA(w5, B5 + 704 | 0)), E5 = c4[I6 + 8 | 0] | c4[I6 + 9 | 0] << 8 | c4[I6 + 10 | 0] << 16 | c4[I6 + 11 | 0] << 24, w5 = c4[0 | I6] | c4[I6 + 1 | 0] << 8 | c4[I6 + 2 | 0] << 16 | c4[I6 + 3 | 0] << 24, g6 = c4[I6 + 4 | 0] | c4[I6 + 5 | 0] << 8 | c4[I6 + 6 | 0] << 16 | c4[I6 + 7 | 0] << 24, o4[B5 + 696 >> 2] = 0, o4[B5 + 700 >> 2] = 0, o4[B5 + 688 >> 2] = 0, o4[B5 + 692 >> 2] = 0, g6 | -65536 ^ E5 | w5 ? g6 = 16777216 : (D4[B5 + 698 >> 1] = 65535, f5 = 1, y5 = 96, g6 = -65536), h5 = B5 + 1040 | 0, E5 = B5 + 1024 | 0, w5 = B5 + 1056 | 0; o4[B5 + 684 >> 2] = o4[B5 + 908 >> 2] ^ g6, F5 = 255 & S4 | (Y5 = e4 << 24) | (255 & a5) << 16 | (255 & k5) << 8, o4[B5 + 680 >> 2] = F5 ^ o4[B5 + 904 >> 2], i2 = 255 & M5 | (G5 = N5 << 24) | (255 & n5) << 16 | (255 & t5) << 8, o4[B5 + 676 >> 2] = i2 ^ o4[B5 + 900 >> 2], Q5 = 255 & s5 | (H5 = f5 << 24) | (255 & U5) << 16 | (255 & J5) << 8, o4[B5 + 672 >> 2] = Q5 ^ o4[B5 + 896 >> 2], o4[B5 + 668 >> 2] = o4[B5 + 732 >> 2] ^ g6, o4[B5 + 664 >> 2] = F5 ^ o4[B5 + 728 >> 2], o4[B5 + 660 >> 2] = i2 ^ o4[B5 + 724 >> 2], o4[B5 + 656 >> 2] = Q5 ^ o4[B5 + 720 >> 2], Q5 = o4[B5 + 684 >> 2], o4[B5 + 632 >> 2] = o4[B5 + 680 >> 2], o4[B5 + 636 >> 2] = Q5, Q5 = o4[B5 + 676 >> 2], o4[B5 + 624 >> 2] = o4[B5 + 672 >> 2], o4[B5 + 628 >> 2] = Q5, Q5 = o4[B5 + 924 >> 2], o4[B5 + 616 >> 2] = o4[B5 + 920 >> 2], o4[B5 + 620 >> 2] = Q5, Q5 = o4[B5 + 916 >> 2], o4[B5 + 608 >> 2] = o4[B5 + 912 >> 2], o4[B5 + 612 >> 2] = Q5, GA(i2 = B5 + 640 | 0, B5 + 624 | 0, B5 + 608 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 680 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 684 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 672 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 676 >> 2] = Q5, Q5 = o4[B5 + 660 >> 2], o4[B5 + 592 >> 2] = o4[B5 + 656 >> 2], o4[B5 + 596 >> 2] = Q5, Q5 = o4[B5 + 668 >> 2], o4[B5 + 600 >> 2] = o4[B5 + 664 >> 2], o4[B5 + 604 >> 2] = Q5, Q5 = o4[B5 + 740 >> 2], o4[B5 + 576 >> 2] = o4[B5 + 736 >> 2], o4[B5 + 580 >> 2] = Q5, Q5 = o4[B5 + 748 >> 2], o4[B5 + 584 >> 2] = o4[B5 + 744 >> 2], o4[B5 + 588 >> 2] = Q5, GA(i2, B5 + 592 | 0, B5 + 576 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 664 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 668 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 656 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 660 >> 2] = Q5, Q5 = o4[B5 + 676 >> 2], o4[B5 + 560 >> 2] = o4[B5 + 672 >> 2], o4[B5 + 564 >> 2] = Q5, Q5 = o4[B5 + 684 >> 2], o4[B5 + 568 >> 2] = o4[B5 + 680 >> 2], o4[B5 + 572 >> 2] = Q5, Q5 = o4[B5 + 932 >> 2], o4[B5 + 544 >> 2] = o4[B5 + 928 >> 2], o4[B5 + 548 >> 2] = Q5, Q5 = o4[B5 + 940 >> 2], o4[B5 + 552 >> 2] = o4[B5 + 936 >> 2], o4[B5 + 556 >> 2] = Q5, GA(i2, B5 + 560 | 0, B5 + 544 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 680 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 684 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 672 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 676 >> 2] = Q5, Q5 = o4[B5 + 660 >> 2], o4[B5 + 528 >> 2] = o4[B5 + 656 >> 2], o4[B5 + 532 >> 2] = Q5, Q5 = o4[B5 + 668 >> 2], o4[B5 + 536 >> 2] = o4[B5 + 664 >> 2], o4[B5 + 540 >> 2] = Q5, Q5 = o4[B5 + 756 >> 2], o4[B5 + 512 >> 2] = o4[B5 + 752 >> 2], o4[B5 + 516 >> 2] = Q5, Q5 = o4[B5 + 764 >> 2], o4[B5 + 520 >> 2] = o4[B5 + 760 >> 2], o4[B5 + 524 >> 2] = Q5, GA(i2, B5 + 528 | 0, B5 + 512 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 664 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 668 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 656 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 660 >> 2] = Q5, Q5 = o4[B5 + 676 >> 2], o4[B5 + 496 >> 2] = o4[B5 + 672 >> 2], o4[B5 + 500 >> 2] = Q5, Q5 = o4[B5 + 684 >> 2], o4[B5 + 504 >> 2] = o4[B5 + 680 >> 2], o4[B5 + 508 >> 2] = Q5, Q5 = o4[B5 + 948 >> 2], o4[B5 + 480 >> 2] = o4[B5 + 944 >> 2], o4[B5 + 484 >> 2] = Q5, Q5 = o4[B5 + 956 >> 2], o4[B5 + 488 >> 2] = o4[B5 + 952 >> 2], o4[B5 + 492 >> 2] = Q5, GA(i2, B5 + 496 | 0, B5 + 480 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 680 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 684 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 672 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 676 >> 2] = Q5, Q5 = o4[B5 + 660 >> 2], o4[B5 + 464 >> 2] = o4[B5 + 656 >> 2], o4[B5 + 468 >> 2] = Q5, Q5 = o4[B5 + 668 >> 2], o4[B5 + 472 >> 2] = o4[B5 + 664 >> 2], o4[B5 + 476 >> 2] = Q5, Q5 = o4[B5 + 772 >> 2], o4[B5 + 448 >> 2] = o4[B5 + 768 >> 2], o4[B5 + 452 >> 2] = Q5, Q5 = o4[B5 + 780 >> 2], o4[B5 + 456 >> 2] = o4[B5 + 776 >> 2], o4[B5 + 460 >> 2] = Q5, GA(i2, B5 + 464 | 0, B5 + 448 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 664 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 668 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 656 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 660 >> 2] = Q5, Q5 = o4[B5 + 676 >> 2], o4[B5 + 432 >> 2] = o4[B5 + 672 >> 2], o4[B5 + 436 >> 2] = Q5, Q5 = o4[B5 + 684 >> 2], o4[B5 + 440 >> 2] = o4[B5 + 680 >> 2], o4[B5 + 444 >> 2] = Q5, Q5 = o4[B5 + 964 >> 2], o4[B5 + 416 >> 2] = o4[B5 + 960 >> 2], o4[B5 + 420 >> 2] = Q5, Q5 = o4[B5 + 972 >> 2], o4[B5 + 424 >> 2] = o4[B5 + 968 >> 2], o4[B5 + 428 >> 2] = Q5, GA(i2, B5 + 432 | 0, B5 + 416 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 680 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 684 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 672 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 676 >> 2] = Q5, Q5 = o4[B5 + 660 >> 2], o4[B5 + 400 >> 2] = o4[B5 + 656 >> 2], o4[B5 + 404 >> 2] = Q5, Q5 = o4[B5 + 668 >> 2], o4[B5 + 408 >> 2] = o4[B5 + 664 >> 2], o4[B5 + 412 >> 2] = Q5, Q5 = o4[B5 + 788 >> 2], o4[B5 + 384 >> 2] = o4[B5 + 784 >> 2], o4[B5 + 388 >> 2] = Q5, Q5 = o4[B5 + 796 >> 2], o4[B5 + 392 >> 2] = o4[B5 + 792 >> 2], o4[B5 + 396 >> 2] = Q5, GA(i2, B5 + 400 | 0, B5 + 384 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 664 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 668 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 656 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 660 >> 2] = Q5, Q5 = o4[B5 + 676 >> 2], o4[B5 + 368 >> 2] = o4[B5 + 672 >> 2], o4[B5 + 372 >> 2] = Q5, Q5 = o4[B5 + 684 >> 2], o4[B5 + 376 >> 2] = o4[B5 + 680 >> 2], o4[B5 + 380 >> 2] = Q5, Q5 = o4[B5 + 980 >> 2], o4[B5 + 352 >> 2] = o4[B5 + 976 >> 2], o4[B5 + 356 >> 2] = Q5, Q5 = o4[B5 + 988 >> 2], o4[B5 + 360 >> 2] = o4[B5 + 984 >> 2], o4[B5 + 364 >> 2] = Q5, GA(i2, B5 + 368 | 0, B5 + 352 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 680 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 684 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 672 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 676 >> 2] = Q5, Q5 = o4[B5 + 660 >> 2], o4[B5 + 336 >> 2] = o4[B5 + 656 >> 2], o4[B5 + 340 >> 2] = Q5, Q5 = o4[B5 + 668 >> 2], o4[B5 + 344 >> 2] = o4[B5 + 664 >> 2], o4[B5 + 348 >> 2] = Q5, Q5 = o4[B5 + 804 >> 2], o4[B5 + 320 >> 2] = o4[B5 + 800 >> 2], o4[B5 + 324 >> 2] = Q5, Q5 = o4[B5 + 812 >> 2], o4[B5 + 328 >> 2] = o4[B5 + 808 >> 2], o4[B5 + 332 >> 2] = Q5, GA(i2, B5 + 336 | 0, B5 + 320 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 664 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 668 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 656 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 660 >> 2] = Q5, Q5 = o4[B5 + 676 >> 2], o4[B5 + 304 >> 2] = o4[B5 + 672 >> 2], o4[B5 + 308 >> 2] = Q5, Q5 = o4[B5 + 684 >> 2], o4[B5 + 312 >> 2] = o4[B5 + 680 >> 2], o4[B5 + 316 >> 2] = Q5, Q5 = o4[B5 + 996 >> 2], o4[B5 + 288 >> 2] = o4[B5 + 992 >> 2], o4[B5 + 292 >> 2] = Q5, Q5 = o4[B5 + 1004 >> 2], o4[B5 + 296 >> 2] = o4[B5 + 1e3 >> 2], o4[B5 + 300 >> 2] = Q5, GA(i2, B5 + 304 | 0, B5 + 288 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 680 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 684 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 672 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 676 >> 2] = Q5, Q5 = o4[B5 + 660 >> 2], o4[B5 + 272 >> 2] = o4[B5 + 656 >> 2], o4[B5 + 276 >> 2] = Q5, Q5 = o4[B5 + 668 >> 2], o4[B5 + 280 >> 2] = o4[B5 + 664 >> 2], o4[B5 + 284 >> 2] = Q5, Q5 = o4[B5 + 820 >> 2], o4[B5 + 256 >> 2] = o4[B5 + 816 >> 2], o4[B5 + 260 >> 2] = Q5, Q5 = o4[B5 + 828 >> 2], o4[B5 + 264 >> 2] = o4[B5 + 824 >> 2], o4[B5 + 268 >> 2] = Q5, GA(i2, B5 + 272 | 0, B5 + 256 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 664 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 668 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 656 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 660 >> 2] = Q5, Q5 = o4[B5 + 676 >> 2], o4[B5 + 240 >> 2] = o4[B5 + 672 >> 2], o4[B5 + 244 >> 2] = Q5, Q5 = o4[B5 + 684 >> 2], o4[B5 + 248 >> 2] = o4[B5 + 680 >> 2], o4[B5 + 252 >> 2] = Q5, Q5 = o4[B5 + 1012 >> 2], o4[B5 + 224 >> 2] = o4[B5 + 1008 >> 2], o4[B5 + 228 >> 2] = Q5, Q5 = o4[B5 + 1020 >> 2], o4[B5 + 232 >> 2] = o4[B5 + 1016 >> 2], o4[B5 + 236 >> 2] = Q5, GA(i2, B5 + 240 | 0, B5 + 224 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 680 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 684 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 672 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 676 >> 2] = Q5, Q5 = o4[B5 + 660 >> 2], o4[B5 + 208 >> 2] = o4[B5 + 656 >> 2], o4[B5 + 212 >> 2] = Q5, Q5 = o4[B5 + 668 >> 2], o4[B5 + 216 >> 2] = o4[B5 + 664 >> 2], o4[B5 + 220 >> 2] = Q5, Q5 = o4[B5 + 836 >> 2], o4[B5 + 192 >> 2] = o4[B5 + 832 >> 2], o4[B5 + 196 >> 2] = Q5, Q5 = o4[B5 + 844 >> 2], o4[B5 + 200 >> 2] = o4[B5 + 840 >> 2], o4[B5 + 204 >> 2] = Q5, GA(i2, B5 + 208 | 0, B5 + 192 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 664 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 668 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 656 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 660 >> 2] = Q5, Q5 = o4[B5 + 676 >> 2], o4[B5 + 176 >> 2] = o4[B5 + 672 >> 2], o4[B5 + 180 >> 2] = Q5, Q5 = o4[B5 + 684 >> 2], o4[B5 + 184 >> 2] = o4[B5 + 680 >> 2], o4[B5 + 188 >> 2] = Q5, Q5 = o4[E5 + 4 >> 2], o4[B5 + 160 >> 2] = o4[E5 >> 2], o4[B5 + 164 >> 2] = Q5, Q5 = o4[E5 + 12 >> 2], o4[B5 + 168 >> 2] = o4[E5 + 8 >> 2], o4[B5 + 172 >> 2] = Q5, GA(i2, B5 + 176 | 0, B5 + 160 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 680 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 684 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 672 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 676 >> 2] = Q5, Q5 = o4[B5 + 660 >> 2], o4[B5 + 144 >> 2] = o4[B5 + 656 >> 2], o4[B5 + 148 >> 2] = Q5, Q5 = o4[B5 + 668 >> 2], o4[B5 + 152 >> 2] = o4[B5 + 664 >> 2], o4[B5 + 156 >> 2] = Q5, Q5 = o4[B5 + 852 >> 2], o4[B5 + 128 >> 2] = o4[B5 + 848 >> 2], o4[B5 + 132 >> 2] = Q5, Q5 = o4[B5 + 860 >> 2], o4[B5 + 136 >> 2] = o4[B5 + 856 >> 2], o4[B5 + 140 >> 2] = Q5, GA(i2, B5 + 144 | 0, B5 + 128 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 664 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 668 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 656 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 660 >> 2] = Q5, Q5 = o4[B5 + 676 >> 2], o4[B5 + 112 >> 2] = o4[B5 + 672 >> 2], o4[B5 + 116 >> 2] = Q5, Q5 = o4[B5 + 684 >> 2], o4[B5 + 120 >> 2] = o4[B5 + 680 >> 2], o4[B5 + 124 >> 2] = Q5, Q5 = o4[h5 + 4 >> 2], o4[B5 + 96 >> 2] = o4[h5 >> 2], o4[B5 + 100 >> 2] = Q5, Q5 = o4[h5 + 12 >> 2], o4[B5 + 104 >> 2] = o4[h5 + 8 >> 2], o4[B5 + 108 >> 2] = Q5, GA(i2, B5 + 112 | 0, B5 + 96 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 680 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 684 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 672 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 676 >> 2] = Q5, Q5 = o4[B5 + 660 >> 2], o4[B5 + 80 >> 2] = o4[B5 + 656 >> 2], o4[B5 + 84 >> 2] = Q5, Q5 = o4[B5 + 668 >> 2], o4[B5 + 88 >> 2] = o4[B5 + 664 >> 2], o4[B5 + 92 >> 2] = Q5, Q5 = o4[B5 + 868 >> 2], o4[B5 + 64 >> 2] = o4[B5 + 864 >> 2], o4[B5 + 68 >> 2] = Q5, Q5 = o4[B5 + 876 >> 2], o4[B5 + 72 >> 2] = o4[B5 + 872 >> 2], o4[B5 + 76 >> 2] = Q5, GA(i2, B5 + 80 | 0, B5 - -64 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 664 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 668 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 656 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 660 >> 2] = Q5, Q5 = o4[B5 + 676 >> 2], o4[B5 + 48 >> 2] = o4[B5 + 672 >> 2], o4[B5 + 52 >> 2] = Q5, Q5 = o4[B5 + 684 >> 2], o4[B5 + 56 >> 2] = o4[B5 + 680 >> 2], o4[B5 + 60 >> 2] = Q5, Q5 = o4[w5 + 4 >> 2], o4[B5 + 32 >> 2] = o4[w5 >> 2], o4[B5 + 36 >> 2] = Q5, Q5 = o4[w5 + 12 >> 2], o4[B5 + 40 >> 2] = o4[w5 + 8 >> 2], o4[B5 + 44 >> 2] = Q5, sA(i2, B5 + 48 | 0, B5 + 32 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 680 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 684 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 672 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 676 >> 2] = Q5, Q5 = o4[B5 + 660 >> 2], o4[B5 + 16 >> 2] = o4[B5 + 656 >> 2], o4[B5 + 20 >> 2] = Q5, Q5 = o4[B5 + 668 >> 2], o4[B5 + 24 >> 2] = o4[B5 + 664 >> 2], o4[B5 + 28 >> 2] = Q5, Q5 = o4[B5 + 884 >> 2], o4[B5 >> 2] = o4[B5 + 880 >> 2], o4[B5 + 4 >> 2] = Q5, Q5 = o4[B5 + 892 >> 2], o4[B5 + 8 >> 2] = o4[B5 + 888 >> 2], o4[B5 + 12 >> 2] = Q5, sA(i2, B5 + 16 | 0, B5), Q5 = o4[B5 + 652 >> 2], o4[B5 + 664 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 668 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 656 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 660 >> 2] = Q5, p5 = c4[0 | (Q5 = (i2 = (F5 = 127 - y5 | 0) >>> 3 ^ 15) | B5 + 688)], K5 = Q5, Q5 = 7 & F5, i2 = c4[I6 + i2 | 0] >>> Q5 | 0, C5[0 | K5] = p5 ^ (p5 ^ 0 - (1 & (i2 ^ (o4[B5 + 684 >> 2] ^ o4[B5 + 668 >> 2]) >>> 24))) & 1 << Q5, g6 = (K5 = -33554432 & (Q5 = g6 << 1) | (0 - (1 & i2) & 1) << 24) | (F5 = 255 & (Q5 | 1 & (i2 = g6 >>> 15 | 0))) | (254 & (Q5 = g6 >>> 7 | 0) | g6 >>> 23 & 1) << 8 | (254 & i2 | g6 >>> 31) << 16, e4 = 1 & Q5 | e4 << 1, N5 = S4 >>> 7 & 1 | N5 << 1, f5 = M5 >>> 7 & 1 | f5 << 1, s5 = J5 >>> 7 & 1 | s5 << 1, J5 = U5 >>> 7 & 1 | J5 << 1, U5 = U5 << 1 | H5 >>> 31, M5 = t5 >>> 7 & 1 | M5 << 1, t5 = n5 >>> 7 & 1 | t5 << 1, n5 = n5 << 1 | G5 >>> 31, S4 = k5 >>> 7 & 1 | S4 << 1, k5 = a5 >>> 7 & 1 | k5 << 1, a5 = a5 << 1 | Y5 >>> 31, 128 != (0 | (y5 = y5 + 1 | 0)); ) ;
              g6 = o4[B5 + 700 >> 2], I6 = o4[B5 + 696 >> 2], C5[A7 + 8 | 0] = I6, C5[A7 + 9 | 0] = I6 >>> 8, C5[A7 + 10 | 0] = I6 >>> 16, C5[A7 + 11 | 0] = I6 >>> 24, C5[A7 + 12 | 0] = g6, C5[A7 + 13 | 0] = g6 >>> 8, C5[A7 + 14 | 0] = g6 >>> 16, C5[A7 + 15 | 0] = g6 >>> 24, g6 = o4[B5 + 692 >> 2], I6 = o4[B5 + 688 >> 2], C5[0 | A7] = I6, C5[A7 + 1 | 0] = I6 >>> 8, C5[A7 + 2 | 0] = I6 >>> 16, C5[A7 + 3 | 0] = I6 >>> 24, C5[A7 + 4 | 0] = g6, C5[A7 + 5 | 0] = g6 >>> 8, C5[A7 + 6 | 0] = g6 >>> 16, C5[A7 + 7 | 0] = g6 >>> 24, r4 = B5 + 1072 | 0;
            }, function(A7, I6, g6) {
              A7 |= 0, I6 |= 0;
              var B5, Q5 = 0, i2 = 0, E5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, n5 = 0, t5 = 0, U5 = 0, J5 = 0, K5 = 0, e4 = 0, Y5 = 0, N5 = 0, G5 = 0, H5 = 0, s5 = 0, p5 = 0;
              for (r4 = B5 = r4 - 1072 | 0, wA(B5 + 896 | 0, g6 |= 0), wA(w5 = B5 + 720 | 0, g6 + 16 | 0), i2 = o4[B5 + 976 >> 2] ^ o4[B5 + 800 >> 2], o4[B5 + 704 >> 2] = i2, Q5 = o4[B5 + 980 >> 2] ^ o4[B5 + 804 >> 2], o4[B5 + 708 >> 2] = Q5, h5 = o4[B5 + 984 >> 2] ^ o4[B5 + 808 >> 2], o4[B5 + 712 >> 2] = h5, E5 = o4[B5 + 988 >> 2] ^ o4[B5 + 812 >> 2], o4[B5 + 716 >> 2] = E5, 255 & (E5 | h5 | Q5 | i2 | i2 >>> 8 | i2 >>> 16 | i2 >>> 24 | Q5 >>> 8 | Q5 >>> 16 | Q5 >>> 24 | h5 >>> 8 | h5 >>> 16 | h5 >>> 24 | E5 >>> 8 | E5 >>> 16 | E5 >>> 24) || (C5[B5 + 704 | 0] = 90 ^ c4[0 | g6], C5[B5 + 705 | 0] = 90 ^ c4[g6 + 1 | 0], C5[B5 + 706 | 0] = 90 ^ c4[g6 + 2 | 0], C5[B5 + 707 | 0] = 90 ^ c4[g6 + 3 | 0], C5[B5 + 708 | 0] = 90 ^ c4[g6 + 4 | 0], C5[B5 + 709 | 0] = 90 ^ c4[g6 + 5 | 0], C5[B5 + 710 | 0] = 90 ^ c4[g6 + 6 | 0], C5[B5 + 711 | 0] = 90 ^ c4[g6 + 7 | 0], C5[B5 + 712 | 0] = 90 ^ c4[g6 + 8 | 0], C5[B5 + 713 | 0] = 90 ^ c4[g6 + 9 | 0], C5[B5 + 714 | 0] = 90 ^ c4[g6 + 10 | 0], C5[B5 + 715 | 0] = 90 ^ c4[g6 + 11 | 0], C5[B5 + 716 | 0] = 90 ^ c4[g6 + 12 | 0], C5[B5 + 717 | 0] = 90 ^ c4[g6 + 13 | 0], C5[B5 + 718 | 0] = 90 ^ c4[g6 + 14 | 0], C5[B5 + 719 | 0] = 90 ^ c4[g6 + 15 | 0], wA(w5, B5 + 704 | 0)), E5 = c4[I6 + 8 | 0] | c4[I6 + 9 | 0] << 8 | c4[I6 + 10 | 0] << 16 | c4[I6 + 11 | 0] << 24, w5 = c4[0 | I6] | c4[I6 + 1 | 0] << 8 | c4[I6 + 2 | 0] << 16 | c4[I6 + 3 | 0] << 24, g6 = c4[I6 + 4 | 0] | c4[I6 + 5 | 0] << 8 | c4[I6 + 6 | 0] << 16 | c4[I6 + 7 | 0] << 24, o4[B5 + 696 >> 2] = 0, o4[B5 + 700 >> 2] = 0, o4[B5 + 688 >> 2] = 0, o4[B5 + 692 >> 2] = 0, g6 | -65536 ^ E5 | w5 ? g6 = 16777216 : (D4[B5 + 698 >> 1] = 65535, f5 = 1, y5 = 96, g6 = -65536), h5 = B5 + 1040 | 0, E5 = B5 + 1024 | 0, w5 = B5 + 1056 | 0; o4[B5 + 684 >> 2] = o4[B5 + 908 >> 2] ^ g6, F5 = 255 & S4 | (Y5 = e4 << 24) | (255 & a5) << 16 | (255 & k5) << 8, o4[B5 + 680 >> 2] = F5 ^ o4[B5 + 904 >> 2], i2 = 255 & M5 | (G5 = N5 << 24) | (255 & n5) << 16 | (255 & t5) << 8, o4[B5 + 676 >> 2] = i2 ^ o4[B5 + 900 >> 2], Q5 = 255 & s5 | (H5 = f5 << 24) | (255 & U5) << 16 | (255 & J5) << 8, o4[B5 + 672 >> 2] = Q5 ^ o4[B5 + 896 >> 2], o4[B5 + 668 >> 2] = o4[B5 + 732 >> 2] ^ g6, o4[B5 + 664 >> 2] = F5 ^ o4[B5 + 728 >> 2], o4[B5 + 660 >> 2] = i2 ^ o4[B5 + 724 >> 2], o4[B5 + 656 >> 2] = Q5 ^ o4[B5 + 720 >> 2], Q5 = o4[B5 + 684 >> 2], o4[B5 + 632 >> 2] = o4[B5 + 680 >> 2], o4[B5 + 636 >> 2] = Q5, Q5 = o4[B5 + 676 >> 2], o4[B5 + 624 >> 2] = o4[B5 + 672 >> 2], o4[B5 + 628 >> 2] = Q5, Q5 = o4[B5 + 924 >> 2], o4[B5 + 616 >> 2] = o4[B5 + 920 >> 2], o4[B5 + 620 >> 2] = Q5, Q5 = o4[B5 + 916 >> 2], o4[B5 + 608 >> 2] = o4[B5 + 912 >> 2], o4[B5 + 612 >> 2] = Q5, GA(i2 = B5 + 640 | 0, B5 + 624 | 0, B5 + 608 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 680 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 684 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 672 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 676 >> 2] = Q5, Q5 = o4[B5 + 660 >> 2], o4[B5 + 592 >> 2] = o4[B5 + 656 >> 2], o4[B5 + 596 >> 2] = Q5, Q5 = o4[B5 + 668 >> 2], o4[B5 + 600 >> 2] = o4[B5 + 664 >> 2], o4[B5 + 604 >> 2] = Q5, Q5 = o4[B5 + 740 >> 2], o4[B5 + 576 >> 2] = o4[B5 + 736 >> 2], o4[B5 + 580 >> 2] = Q5, Q5 = o4[B5 + 748 >> 2], o4[B5 + 584 >> 2] = o4[B5 + 744 >> 2], o4[B5 + 588 >> 2] = Q5, GA(i2, B5 + 592 | 0, B5 + 576 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 664 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 668 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 656 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 660 >> 2] = Q5, Q5 = o4[B5 + 676 >> 2], o4[B5 + 560 >> 2] = o4[B5 + 672 >> 2], o4[B5 + 564 >> 2] = Q5, Q5 = o4[B5 + 684 >> 2], o4[B5 + 568 >> 2] = o4[B5 + 680 >> 2], o4[B5 + 572 >> 2] = Q5, Q5 = o4[B5 + 932 >> 2], o4[B5 + 544 >> 2] = o4[B5 + 928 >> 2], o4[B5 + 548 >> 2] = Q5, Q5 = o4[B5 + 940 >> 2], o4[B5 + 552 >> 2] = o4[B5 + 936 >> 2], o4[B5 + 556 >> 2] = Q5, GA(i2, B5 + 560 | 0, B5 + 544 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 680 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 684 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 672 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 676 >> 2] = Q5, Q5 = o4[B5 + 660 >> 2], o4[B5 + 528 >> 2] = o4[B5 + 656 >> 2], o4[B5 + 532 >> 2] = Q5, Q5 = o4[B5 + 668 >> 2], o4[B5 + 536 >> 2] = o4[B5 + 664 >> 2], o4[B5 + 540 >> 2] = Q5, Q5 = o4[B5 + 756 >> 2], o4[B5 + 512 >> 2] = o4[B5 + 752 >> 2], o4[B5 + 516 >> 2] = Q5, Q5 = o4[B5 + 764 >> 2], o4[B5 + 520 >> 2] = o4[B5 + 760 >> 2], o4[B5 + 524 >> 2] = Q5, GA(i2, B5 + 528 | 0, B5 + 512 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 664 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 668 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 656 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 660 >> 2] = Q5, Q5 = o4[B5 + 676 >> 2], o4[B5 + 496 >> 2] = o4[B5 + 672 >> 2], o4[B5 + 500 >> 2] = Q5, Q5 = o4[B5 + 684 >> 2], o4[B5 + 504 >> 2] = o4[B5 + 680 >> 2], o4[B5 + 508 >> 2] = Q5, Q5 = o4[B5 + 948 >> 2], o4[B5 + 480 >> 2] = o4[B5 + 944 >> 2], o4[B5 + 484 >> 2] = Q5, Q5 = o4[B5 + 956 >> 2], o4[B5 + 488 >> 2] = o4[B5 + 952 >> 2], o4[B5 + 492 >> 2] = Q5, GA(i2, B5 + 496 | 0, B5 + 480 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 680 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 684 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 672 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 676 >> 2] = Q5, Q5 = o4[B5 + 660 >> 2], o4[B5 + 464 >> 2] = o4[B5 + 656 >> 2], o4[B5 + 468 >> 2] = Q5, Q5 = o4[B5 + 668 >> 2], o4[B5 + 472 >> 2] = o4[B5 + 664 >> 2], o4[B5 + 476 >> 2] = Q5, Q5 = o4[B5 + 772 >> 2], o4[B5 + 448 >> 2] = o4[B5 + 768 >> 2], o4[B5 + 452 >> 2] = Q5, Q5 = o4[B5 + 780 >> 2], o4[B5 + 456 >> 2] = o4[B5 + 776 >> 2], o4[B5 + 460 >> 2] = Q5, GA(i2, B5 + 464 | 0, B5 + 448 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 664 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 668 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 656 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 660 >> 2] = Q5, Q5 = o4[B5 + 676 >> 2], o4[B5 + 432 >> 2] = o4[B5 + 672 >> 2], o4[B5 + 436 >> 2] = Q5, Q5 = o4[B5 + 684 >> 2], o4[B5 + 440 >> 2] = o4[B5 + 680 >> 2], o4[B5 + 444 >> 2] = Q5, Q5 = o4[B5 + 964 >> 2], o4[B5 + 416 >> 2] = o4[B5 + 960 >> 2], o4[B5 + 420 >> 2] = Q5, Q5 = o4[B5 + 972 >> 2], o4[B5 + 424 >> 2] = o4[B5 + 968 >> 2], o4[B5 + 428 >> 2] = Q5, GA(i2, B5 + 432 | 0, B5 + 416 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 680 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 684 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 672 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 676 >> 2] = Q5, Q5 = o4[B5 + 660 >> 2], o4[B5 + 400 >> 2] = o4[B5 + 656 >> 2], o4[B5 + 404 >> 2] = Q5, Q5 = o4[B5 + 668 >> 2], o4[B5 + 408 >> 2] = o4[B5 + 664 >> 2], o4[B5 + 412 >> 2] = Q5, Q5 = o4[B5 + 788 >> 2], o4[B5 + 384 >> 2] = o4[B5 + 784 >> 2], o4[B5 + 388 >> 2] = Q5, Q5 = o4[B5 + 796 >> 2], o4[B5 + 392 >> 2] = o4[B5 + 792 >> 2], o4[B5 + 396 >> 2] = Q5, GA(i2, B5 + 400 | 0, B5 + 384 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 664 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 668 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 656 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 660 >> 2] = Q5, Q5 = o4[B5 + 676 >> 2], o4[B5 + 368 >> 2] = o4[B5 + 672 >> 2], o4[B5 + 372 >> 2] = Q5, Q5 = o4[B5 + 684 >> 2], o4[B5 + 376 >> 2] = o4[B5 + 680 >> 2], o4[B5 + 380 >> 2] = Q5, Q5 = o4[B5 + 980 >> 2], o4[B5 + 352 >> 2] = o4[B5 + 976 >> 2], o4[B5 + 356 >> 2] = Q5, Q5 = o4[B5 + 988 >> 2], o4[B5 + 360 >> 2] = o4[B5 + 984 >> 2], o4[B5 + 364 >> 2] = Q5, GA(i2, B5 + 368 | 0, B5 + 352 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 680 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 684 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 672 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 676 >> 2] = Q5, Q5 = o4[B5 + 660 >> 2], o4[B5 + 336 >> 2] = o4[B5 + 656 >> 2], o4[B5 + 340 >> 2] = Q5, Q5 = o4[B5 + 668 >> 2], o4[B5 + 344 >> 2] = o4[B5 + 664 >> 2], o4[B5 + 348 >> 2] = Q5, Q5 = o4[B5 + 804 >> 2], o4[B5 + 320 >> 2] = o4[B5 + 800 >> 2], o4[B5 + 324 >> 2] = Q5, Q5 = o4[B5 + 812 >> 2], o4[B5 + 328 >> 2] = o4[B5 + 808 >> 2], o4[B5 + 332 >> 2] = Q5, GA(i2, B5 + 336 | 0, B5 + 320 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 664 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 668 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 656 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 660 >> 2] = Q5, Q5 = o4[B5 + 676 >> 2], o4[B5 + 304 >> 2] = o4[B5 + 672 >> 2], o4[B5 + 308 >> 2] = Q5, Q5 = o4[B5 + 684 >> 2], o4[B5 + 312 >> 2] = o4[B5 + 680 >> 2], o4[B5 + 316 >> 2] = Q5, Q5 = o4[B5 + 996 >> 2], o4[B5 + 288 >> 2] = o4[B5 + 992 >> 2], o4[B5 + 292 >> 2] = Q5, Q5 = o4[B5 + 1004 >> 2], o4[B5 + 296 >> 2] = o4[B5 + 1e3 >> 2], o4[B5 + 300 >> 2] = Q5, GA(i2, B5 + 304 | 0, B5 + 288 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 680 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 684 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 672 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 676 >> 2] = Q5, Q5 = o4[B5 + 660 >> 2], o4[B5 + 272 >> 2] = o4[B5 + 656 >> 2], o4[B5 + 276 >> 2] = Q5, Q5 = o4[B5 + 668 >> 2], o4[B5 + 280 >> 2] = o4[B5 + 664 >> 2], o4[B5 + 284 >> 2] = Q5, Q5 = o4[B5 + 820 >> 2], o4[B5 + 256 >> 2] = o4[B5 + 816 >> 2], o4[B5 + 260 >> 2] = Q5, Q5 = o4[B5 + 828 >> 2], o4[B5 + 264 >> 2] = o4[B5 + 824 >> 2], o4[B5 + 268 >> 2] = Q5, GA(i2, B5 + 272 | 0, B5 + 256 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 664 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 668 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 656 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 660 >> 2] = Q5, Q5 = o4[B5 + 676 >> 2], o4[B5 + 240 >> 2] = o4[B5 + 672 >> 2], o4[B5 + 244 >> 2] = Q5, Q5 = o4[B5 + 684 >> 2], o4[B5 + 248 >> 2] = o4[B5 + 680 >> 2], o4[B5 + 252 >> 2] = Q5, Q5 = o4[B5 + 1012 >> 2], o4[B5 + 224 >> 2] = o4[B5 + 1008 >> 2], o4[B5 + 228 >> 2] = Q5, Q5 = o4[B5 + 1020 >> 2], o4[B5 + 232 >> 2] = o4[B5 + 1016 >> 2], o4[B5 + 236 >> 2] = Q5, GA(i2, B5 + 240 | 0, B5 + 224 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 680 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 684 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 672 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 676 >> 2] = Q5, Q5 = o4[B5 + 660 >> 2], o4[B5 + 208 >> 2] = o4[B5 + 656 >> 2], o4[B5 + 212 >> 2] = Q5, Q5 = o4[B5 + 668 >> 2], o4[B5 + 216 >> 2] = o4[B5 + 664 >> 2], o4[B5 + 220 >> 2] = Q5, Q5 = o4[B5 + 836 >> 2], o4[B5 + 192 >> 2] = o4[B5 + 832 >> 2], o4[B5 + 196 >> 2] = Q5, Q5 = o4[B5 + 844 >> 2], o4[B5 + 200 >> 2] = o4[B5 + 840 >> 2], o4[B5 + 204 >> 2] = Q5, GA(i2, B5 + 208 | 0, B5 + 192 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 664 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 668 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 656 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 660 >> 2] = Q5, Q5 = o4[B5 + 676 >> 2], o4[B5 + 176 >> 2] = o4[B5 + 672 >> 2], o4[B5 + 180 >> 2] = Q5, Q5 = o4[B5 + 684 >> 2], o4[B5 + 184 >> 2] = o4[B5 + 680 >> 2], o4[B5 + 188 >> 2] = Q5, Q5 = o4[E5 + 4 >> 2], o4[B5 + 160 >> 2] = o4[E5 >> 2], o4[B5 + 164 >> 2] = Q5, Q5 = o4[E5 + 12 >> 2], o4[B5 + 168 >> 2] = o4[E5 + 8 >> 2], o4[B5 + 172 >> 2] = Q5, GA(i2, B5 + 176 | 0, B5 + 160 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 680 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 684 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 672 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 676 >> 2] = Q5, Q5 = o4[B5 + 660 >> 2], o4[B5 + 144 >> 2] = o4[B5 + 656 >> 2], o4[B5 + 148 >> 2] = Q5, Q5 = o4[B5 + 668 >> 2], o4[B5 + 152 >> 2] = o4[B5 + 664 >> 2], o4[B5 + 156 >> 2] = Q5, Q5 = o4[B5 + 852 >> 2], o4[B5 + 128 >> 2] = o4[B5 + 848 >> 2], o4[B5 + 132 >> 2] = Q5, Q5 = o4[B5 + 860 >> 2], o4[B5 + 136 >> 2] = o4[B5 + 856 >> 2], o4[B5 + 140 >> 2] = Q5, GA(i2, B5 + 144 | 0, B5 + 128 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 664 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 668 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 656 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 660 >> 2] = Q5, Q5 = o4[B5 + 676 >> 2], o4[B5 + 112 >> 2] = o4[B5 + 672 >> 2], o4[B5 + 116 >> 2] = Q5, Q5 = o4[B5 + 684 >> 2], o4[B5 + 120 >> 2] = o4[B5 + 680 >> 2], o4[B5 + 124 >> 2] = Q5, Q5 = o4[h5 + 4 >> 2], o4[B5 + 96 >> 2] = o4[h5 >> 2], o4[B5 + 100 >> 2] = Q5, Q5 = o4[h5 + 12 >> 2], o4[B5 + 104 >> 2] = o4[h5 + 8 >> 2], o4[B5 + 108 >> 2] = Q5, GA(i2, B5 + 112 | 0, B5 + 96 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 680 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 684 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 672 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 676 >> 2] = Q5, Q5 = o4[B5 + 660 >> 2], o4[B5 + 80 >> 2] = o4[B5 + 656 >> 2], o4[B5 + 84 >> 2] = Q5, Q5 = o4[B5 + 668 >> 2], o4[B5 + 88 >> 2] = o4[B5 + 664 >> 2], o4[B5 + 92 >> 2] = Q5, Q5 = o4[B5 + 868 >> 2], o4[B5 + 64 >> 2] = o4[B5 + 864 >> 2], o4[B5 + 68 >> 2] = Q5, Q5 = o4[B5 + 876 >> 2], o4[B5 + 72 >> 2] = o4[B5 + 872 >> 2], o4[B5 + 76 >> 2] = Q5, GA(i2, B5 + 80 | 0, B5 - -64 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 664 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 668 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 656 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 660 >> 2] = Q5, Q5 = o4[B5 + 676 >> 2], o4[B5 + 48 >> 2] = o4[B5 + 672 >> 2], o4[B5 + 52 >> 2] = Q5, Q5 = o4[B5 + 684 >> 2], o4[B5 + 56 >> 2] = o4[B5 + 680 >> 2], o4[B5 + 60 >> 2] = Q5, Q5 = o4[w5 + 4 >> 2], o4[B5 + 32 >> 2] = o4[w5 >> 2], o4[B5 + 36 >> 2] = Q5, Q5 = o4[w5 + 12 >> 2], o4[B5 + 40 >> 2] = o4[w5 + 8 >> 2], o4[B5 + 44 >> 2] = Q5, sA(i2, B5 + 48 | 0, B5 + 32 | 0), Q5 = o4[B5 + 652 >> 2], o4[B5 + 680 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 684 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 672 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 676 >> 2] = Q5, Q5 = o4[B5 + 660 >> 2], o4[B5 + 16 >> 2] = o4[B5 + 656 >> 2], o4[B5 + 20 >> 2] = Q5, Q5 = o4[B5 + 668 >> 2], o4[B5 + 24 >> 2] = o4[B5 + 664 >> 2], o4[B5 + 28 >> 2] = Q5, Q5 = o4[B5 + 884 >> 2], o4[B5 >> 2] = o4[B5 + 880 >> 2], o4[B5 + 4 >> 2] = Q5, Q5 = o4[B5 + 892 >> 2], o4[B5 + 8 >> 2] = o4[B5 + 888 >> 2], o4[B5 + 12 >> 2] = Q5, sA(i2, B5 + 16 | 0, B5), Q5 = o4[B5 + 652 >> 2], o4[B5 + 664 >> 2] = o4[B5 + 648 >> 2], o4[B5 + 668 >> 2] = Q5, Q5 = o4[B5 + 644 >> 2], o4[B5 + 656 >> 2] = o4[B5 + 640 >> 2], o4[B5 + 660 >> 2] = Q5, p5 = c4[0 | (Q5 = (i2 = (F5 = 127 - y5 | 0) >>> 3 ^ 15) | B5 + 688)], K5 = Q5, Q5 = 7 & F5, i2 = 0 - (1 & (c4[I6 + i2 | 0] >>> Q5 ^ (o4[B5 + 684 >> 2] ^ o4[B5 + 668 >> 2]) >>> 24)) | 0, C5[0 | K5] = p5 ^ (p5 ^ i2) & 1 << Q5, g6 = (K5 = -33554432 & (Q5 = g6 << 1) | (1 & i2) << 24) | (F5 = 255 & (Q5 | 1 & (i2 = g6 >>> 15 | 0))) | (254 & (Q5 = g6 >>> 7 | 0) | g6 >>> 23 & 1) << 8 | (254 & i2 | g6 >>> 31) << 16, e4 = 1 & Q5 | e4 << 1, N5 = S4 >>> 7 & 1 | N5 << 1, f5 = M5 >>> 7 & 1 | f5 << 1, s5 = J5 >>> 7 & 1 | s5 << 1, J5 = U5 >>> 7 & 1 | J5 << 1, U5 = U5 << 1 | H5 >>> 31, M5 = t5 >>> 7 & 1 | M5 << 1, t5 = n5 >>> 7 & 1 | t5 << 1, n5 = n5 << 1 | G5 >>> 31, S4 = k5 >>> 7 & 1 | S4 << 1, k5 = a5 >>> 7 & 1 | k5 << 1, a5 = a5 << 1 | Y5 >>> 31, 128 != (0 | (y5 = y5 + 1 | 0)); ) ;
              g6 = o4[B5 + 700 >> 2], I6 = o4[B5 + 696 >> 2], C5[A7 + 8 | 0] = I6, C5[A7 + 9 | 0] = I6 >>> 8, C5[A7 + 10 | 0] = I6 >>> 16, C5[A7 + 11 | 0] = I6 >>> 24, C5[A7 + 12 | 0] = g6, C5[A7 + 13 | 0] = g6 >>> 8, C5[A7 + 14 | 0] = g6 >>> 16, C5[A7 + 15 | 0] = g6 >>> 24, g6 = o4[B5 + 692 >> 2], I6 = o4[B5 + 688 >> 2], C5[0 | A7] = I6, C5[A7 + 1 | 0] = I6 >>> 8, C5[A7 + 2 | 0] = I6 >>> 16, C5[A7 + 3 | 0] = I6 >>> 24, C5[A7 + 4 | 0] = g6, C5[A7 + 5 | 0] = g6 >>> 8, C5[A7 + 6 | 0] = g6 >>> 16, C5[A7 + 7 | 0] = g6 >>> 24, r4 = B5 + 1072 | 0;
            }];
            function cg() {
              return g5.byteLength / 65536 | 0;
            }
            return { e: Object.create(Object.prototype, { grow: { value: function(A7) {
              A7 |= 0;
              var B5 = 0 | cg(), Q5 = B5 + A7 | 0;
              if (B5 < Q5 && Q5 < 65536) {
                var i2 = new ArrayBuffer(F4(Q5, 65536));
                new Int8Array(i2).set(C5), C5 = new Int8Array(i2), D4 = new Int16Array(i2), o4 = new Int32Array(i2), c4 = new Uint8Array(i2), h4 = new Uint16Array(i2), w4 = new Uint32Array(i2), g5 = i2, I5 = c4;
              }
              return B5;
            } }, buffer: { get: function() {
              return g5;
            } } }), f: function() {
            }, g: $I, h: Qg, i: $I, j: Ag, k: gg, l: jI, m: function(A7, I6, g6, C6, B5, Q5, i2, E5, D5, o5, c5) {
              return 0 | $A(A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, B5 |= 0, Q5 |= 0, i2 |= 0, E5 |= 0, o5 |= 0, c5 |= 0, 39864);
            }, n: function(A7, I6, g6, C6, B5, Q5, i2, E5, D5, o5, c5, h5) {
              return 0 | iI(A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, B5 |= 0, Q5 |= 0, i2 |= 0, E5 |= 0, D5 |= 0, c5 |= 0, h5 |= 0, 39864);
            }, o: function(A7, I6, g6, C6, B5, Q5, i2, E5, D5, o5, c5) {
              return 0 | TA(A7 |= 0, I6 |= 0, C6 |= 0, B5 |= 0, Q5 |= 0, i2 |= 0, E5 |= 0, D5 |= 0, o5 |= 0, c5 |= 0, 39868);
            }, p: function(A7, I6, g6, C6, B5, Q5, i2, E5, D5, o5, c5) {
              return 0 | cI(A7 |= 0, g6 |= 0, C6 |= 0, B5 |= 0, Q5 |= 0, i2 |= 0, E5 |= 0, D5 |= 0, o5 |= 0, c5 |= 0, 39868);
            }, q: Ag, r: Qg, s: Ag, t: Ag, u: gg, v: VI, w: function(A7, I6, g6, C6, B5, Q5, i2, E5, D5, o5, c5) {
              return 0 | $A(A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, B5 |= 0, Q5 |= 0, i2 |= 0, E5 |= 0, o5 |= 0, c5 |= 0, 39872);
            }, x: function(A7, I6, g6, C6, B5, Q5, i2, E5, D5, o5, c5, h5) {
              return 0 | iI(A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, B5 |= 0, Q5 |= 0, i2 |= 0, E5 |= 0, D5 |= 0, c5 |= 0, h5 |= 0, 39872);
            }, y: function(A7, I6, g6, C6, B5, Q5, i2, E5, D5, o5, c5) {
              return 0 | TA(A7 |= 0, I6 |= 0, C6 |= 0, B5 |= 0, Q5 |= 0, i2 |= 0, E5 |= 0, D5 |= 0, o5 |= 0, c5 |= 0, 39876);
            }, z: function(A7, I6, g6, C6, B5, Q5, i2, E5, D5, o5, c5) {
              return 0 | cI(A7 |= 0, g6 |= 0, C6 |= 0, B5 |= 0, Q5 |= 0, i2 |= 0, E5 |= 0, D5 |= 0, o5 |= 0, c5 |= 0, 39876);
            }, A: Qg, B: function(A7, I6, g6, C6, B5, Q5, i2, E5, D5, o5, c5, h5) {
              return 0 | lA(A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, (A7 = 0) | (B5 |= 0), Q5 |= 0, i2 |= 0, A7 | (E5 |= 0), D5 |= 0, c5 |= 0, h5 |= 0);
            }, C: function(A7, I6, g6, C6, B5, Q5, E5, D5, c5, h5, w5) {
              return A7 |= 0, I6 |= 0, C6 |= 0, E5 |= 0, c5 |= 0, E5 |= c5 = 0, !(B5 |= 0) & (C6 |= c5) >>> 0 < 4294967280 ? (lA(A7, A7 + C6 | 0, 0, g6 |= 0, C6, B5, Q5 |= 0, E5, D5 |= 0, h5 |= 0, w5 |= 0), I6 && (B5 = (A7 = C6 + 16 | 0) >>> 0 < 16 ? B5 + 1 | 0 : B5, o4[I6 >> 2] = A7, o4[I6 + 4 >> 2] = B5)) : (KI(), i()), 0;
            }, D: function(A7, I6, g6, C6, B5, Q5, i2, E5, D5, o5, c5, h5) {
              return 0 | VA(A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, (A7 = 0) | (B5 |= 0), Q5 |= 0, i2 |= 0, A7 | (E5 |= 0), D5 |= 0, c5 |= 0, h5 |= 0);
            }, E: function(A7, I6, g6, C6, B5, Q5, E5, D5, c5, h5, w5) {
              return A7 |= 0, I6 |= 0, C6 |= 0, E5 |= 0, c5 |= 0, E5 |= c5 = 0, !(B5 |= 0) & (C6 |= c5) >>> 0 < 4294967280 ? (VA(A7, A7 + C6 | 0, 0, g6 |= 0, C6, B5, Q5 |= 0, E5, D5 |= 0, h5 |= 0, w5 |= 0), I6 && (B5 = (A7 = C6 + 16 | 0) >>> 0 < 16 ? B5 + 1 | 0 : B5, o4[I6 >> 2] = A7, o4[I6 + 4 >> 2] = B5)) : (KI(), i()), 0;
            }, F: function(A7, I6, g6, C6, B5, Q5, i2, E5, D5, o5, c5) {
              return 0 | jA(A7 |= 0, g6 |= 0, (A7 = 0) | (C6 |= 0), B5 |= 0, Q5 |= 0, i2 |= 0, A7 | (E5 |= 0), D5 |= 0, o5 |= 0, c5 |= 0);
            }, G: function(A7, I6, g6, C6, B5, Q5, i2, E5, D5, c5, h5) {
              return I6 |= 0, g6 |= 0, C6 |= 0, B5 |= 0, E5 |= 0, E5 |= 0, g6 = -1, !(Q5 |= 0) & (B5 |= 0) >>> 0 >= 16 | Q5 && (g6 = jA(A7 |= 0, C6, B5 - 16 | 0, Q5 - (B5 >>> 0 < 16) | 0, (C6 + B5 | 0) - 16 | 0, i2 |= 0, E5, D5 |= 0, c5 |= 0, h5 |= 0)), I6 && (o4[I6 >> 2] = g6 ? 0 : B5 - 16 | 0, o4[I6 + 4 >> 2] = g6 ? 0 : Q5 - (B5 >>> 0 < 16) | 0), 0 | g6;
            }, H: function(A7, I6, g6, C6, B5, Q5, i2, E5, D5, o5, c5) {
              return 0 | WA(A7 |= 0, g6 |= 0, (A7 = 0) | (C6 |= 0), B5 |= 0, Q5 |= 0, i2 |= 0, A7 | (E5 |= 0), D5 |= 0, o5 |= 0, c5 |= 0);
            }, I: function(A7, I6, g6, C6, B5, Q5, i2, E5, D5, c5, h5) {
              return I6 |= 0, g6 |= 0, C6 |= 0, B5 |= 0, E5 |= 0, E5 |= 0, g6 = -1, !(Q5 |= 0) & (B5 |= 0) >>> 0 >= 16 | Q5 && (g6 = WA(A7 |= 0, C6, B5 - 16 | 0, Q5 - (B5 >>> 0 < 16) | 0, (C6 + B5 | 0) - 16 | 0, i2 |= 0, E5, D5 |= 0, c5 |= 0, h5 |= 0)), I6 && (o4[I6 >> 2] = g6 ? 0 : B5 - 16 | 0, o4[I6 + 4 >> 2] = g6 ? 0 : Q5 - (B5 >>> 0 < 16) | 0), 0 | g6;
            }, J: Ag, K: function() {
              return 12;
            }, L: Qg, M: $I, N: Cg, O: VI, P: Ag, Q: ig, R: Qg, S: $I, T: Cg, U: VI, V: function(A7, I6, g6, C6, B5, Q5, i2, E5, D5, o5, c5, h5) {
              return 0 | LA(A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, (A7 = 0) | (B5 |= 0), Q5 |= 0, i2 |= 0, A7 | (E5 |= 0), D5 |= 0, c5 |= 0, h5 |= 0);
            }, W: function(A7, I6, g6, C6, B5, Q5, E5, D5, c5, h5, w5) {
              return A7 |= 0, I6 |= 0, C6 |= 0, E5 |= 0, c5 |= 0, E5 |= c5 = 0, !(B5 |= 0) & (C6 |= c5) >>> 0 < 4294967280 ? (LA(A7, A7 + C6 | 0, 0, g6 |= 0, C6, B5, Q5 |= 0, E5, D5 |= 0, h5 |= 0, w5 |= 0), I6 && (B5 = (A7 = C6 + 16 | 0) >>> 0 < 16 ? B5 + 1 | 0 : B5, o4[I6 >> 2] = A7, o4[I6 + 4 >> 2] = B5)) : (KI(), i()), 0;
            }, X: function(A7, I6, g6, C6, B5, Q5, i2, E5, D5, o5, c5) {
              return 0 | HA(A7 |= 0, g6 |= 0, (A7 = 0) | (C6 |= 0), B5 |= 0, Q5 |= 0, i2 |= 0, A7 | (E5 |= 0), D5 |= 0, o5 |= 0, c5 |= 0);
            }, Y: function(A7, I6, g6, C6, B5, Q5, i2, E5, D5, c5, h5) {
              return I6 |= 0, g6 |= 0, C6 |= 0, B5 |= 0, E5 |= 0, E5 |= 0, g6 = -1, !(Q5 |= 0) & (B5 |= 0) >>> 0 >= 16 | Q5 && (g6 = HA(A7 |= 0, C6, B5 - 16 | 0, Q5 - (B5 >>> 0 < 16) | 0, (C6 + B5 | 0) - 16 | 0, i2 |= 0, E5, D5 |= 0, c5 |= 0, h5 |= 0)), I6 && (o4[I6 >> 2] = g6 ? 0 : B5 - 16 | 0, o4[I6 + 4 >> 2] = g6 ? 0 : Q5 - (B5 >>> 0 < 16) | 0), 0 | g6;
            }, Z: Ag, _: Ig, $: Qg, aa: $I, ba: Cg, ca: VI, da: Ag, ea: Ag, fa: function(A7, I6, g6, B5, Q5) {
              var i2;
              return A7 |= 0, I6 |= 0, g6 |= 0, B5 |= 0, r4 = i2 = r4 - 480 | 0, UA(i2, Q5 |= 0, 32), vI(i2, I6, g6, B5), wI(i2, i2 + 416 | 0), I6 = o4[i2 + 444 >> 2], g6 = o4[i2 + 440 >> 2], C5[A7 + 24 | 0] = g6, C5[A7 + 25 | 0] = g6 >>> 8, C5[A7 + 26 | 0] = g6 >>> 16, C5[A7 + 27 | 0] = g6 >>> 24, C5[A7 + 28 | 0] = I6, C5[A7 + 29 | 0] = I6 >>> 8, C5[A7 + 30 | 0] = I6 >>> 16, C5[A7 + 31 | 0] = I6 >>> 24, I6 = o4[i2 + 436 >> 2], g6 = o4[i2 + 432 >> 2], C5[A7 + 16 | 0] = g6, C5[A7 + 17 | 0] = g6 >>> 8, C5[A7 + 18 | 0] = g6 >>> 16, C5[A7 + 19 | 0] = g6 >>> 24, C5[A7 + 20 | 0] = I6, C5[A7 + 21 | 0] = I6 >>> 8, C5[A7 + 22 | 0] = I6 >>> 16, C5[A7 + 23 | 0] = I6 >>> 24, I6 = o4[i2 + 428 >> 2], g6 = o4[i2 + 424 >> 2], C5[A7 + 8 | 0] = g6, C5[A7 + 9 | 0] = g6 >>> 8, C5[A7 + 10 | 0] = g6 >>> 16, C5[A7 + 11 | 0] = g6 >>> 24, C5[A7 + 12 | 0] = I6, C5[A7 + 13 | 0] = I6 >>> 8, C5[A7 + 14 | 0] = I6 >>> 16, C5[A7 + 15 | 0] = I6 >>> 24, I6 = o4[i2 + 420 >> 2], g6 = o4[i2 + 416 >> 2], C5[0 | A7] = g6, C5[A7 + 1 | 0] = g6 >>> 8, C5[A7 + 2 | 0] = g6 >>> 16, C5[A7 + 3 | 0] = g6 >>> 24, C5[A7 + 4 | 0] = I6, C5[A7 + 5 | 0] = I6 >>> 8, C5[A7 + 6 | 0] = I6 >>> 16, C5[A7 + 7 | 0] = I6 >>> 24, r4 = i2 + 480 | 0, 0;
            }, ga: function(A7, I6, g6, C6, B5) {
              var Q5, i2;
              return A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, r4 = Q5 = r4 - 512 | 0, UA(i2 = Q5 + 32 | 0, B5 |= 0, 32), vI(i2, I6, g6, C6), wI(i2, Q5 + 448 | 0), I6 = o4[Q5 + 476 >> 2], o4[Q5 + 24 >> 2] = o4[Q5 + 472 >> 2], o4[Q5 + 28 >> 2] = I6, I6 = o4[Q5 + 468 >> 2], o4[Q5 + 16 >> 2] = o4[Q5 + 464 >> 2], o4[Q5 + 20 >> 2] = I6, I6 = o4[Q5 + 460 >> 2], o4[Q5 + 8 >> 2] = o4[Q5 + 456 >> 2], o4[Q5 + 12 >> 2] = I6, I6 = o4[Q5 + 452 >> 2], o4[Q5 >> 2] = o4[Q5 + 448 >> 2], o4[Q5 + 4 >> 2] = I6, I6 = mA(A7, Q5), g6 = OA(Q5, A7, 32), r4 = Q5 + 512 | 0, ((0 | A7) == (0 | Q5) ? -1 : I6) | g6;
            }, ha: VI, ia: Ag, ja: Ag, ka: Ag, la: Ag, ma: Ig, na: $I, oa: Cg, pa: function(A7, I6, g6) {
              A7 |= 0, I6 |= 0;
              var B5, Q5 = 0;
              return r4 = B5 = r4 + -64 | 0, RA(B5, g6 |= 0, 32, 0), g6 = o4[B5 + 28 >> 2], Q5 = o4[B5 + 24 >> 2], C5[I6 + 24 | 0] = Q5, C5[I6 + 25 | 0] = Q5 >>> 8, C5[I6 + 26 | 0] = Q5 >>> 16, C5[I6 + 27 | 0] = Q5 >>> 24, C5[I6 + 28 | 0] = g6, C5[I6 + 29 | 0] = g6 >>> 8, C5[I6 + 30 | 0] = g6 >>> 16, C5[I6 + 31 | 0] = g6 >>> 24, g6 = o4[B5 + 20 >> 2], Q5 = o4[B5 + 16 >> 2], C5[I6 + 16 | 0] = Q5, C5[I6 + 17 | 0] = Q5 >>> 8, C5[I6 + 18 | 0] = Q5 >>> 16, C5[I6 + 19 | 0] = Q5 >>> 24, C5[I6 + 20 | 0] = g6, C5[I6 + 21 | 0] = g6 >>> 8, C5[I6 + 22 | 0] = g6 >>> 16, C5[I6 + 23 | 0] = g6 >>> 24, g6 = o4[B5 + 12 >> 2], Q5 = o4[B5 + 8 >> 2], C5[I6 + 8 | 0] = Q5, C5[I6 + 9 | 0] = Q5 >>> 8, C5[I6 + 10 | 0] = Q5 >>> 16, C5[I6 + 11 | 0] = Q5 >>> 24, C5[I6 + 12 | 0] = g6, C5[I6 + 13 | 0] = g6 >>> 8, C5[I6 + 14 | 0] = g6 >>> 16, C5[I6 + 15 | 0] = g6 >>> 24, g6 = o4[B5 + 4 >> 2], Q5 = o4[B5 >> 2], C5[0 | I6] = Q5, C5[I6 + 1 | 0] = Q5 >>> 8, C5[I6 + 2 | 0] = Q5 >>> 16, C5[I6 + 3 | 0] = Q5 >>> 24, C5[I6 + 4 | 0] = g6, C5[I6 + 5 | 0] = g6 >>> 8, C5[I6 + 6 | 0] = g6 >>> 16, C5[I6 + 7 | 0] = g6 >>> 24, xI(B5, 64), A7 = uI(A7, I6), r4 = B5 - -64 | 0, 0 | A7;
            }, qa: NI, ra: hI, sa: yI, ta: function(A7, I6, g6, C6, B5, Q5, i2, E5) {
              A7 |= 0, I6 |= 0, g6 |= 0, Q5 |= 0;
              var D5, o5 = 0;
              return o5 = C6 |= 0, C6 = B5 |= 0, D5 = 0 | o5, r4 = o5 = r4 - 32 | 0, B5 = -1, hI(o5, i2 |= 0, E5 |= 0) || (B5 = KA(A7, I6, g6, D5, C6, Q5, o5), xI(o5, 32)), r4 = o5 + 32 | 0, 0 | B5;
            }, ua: function(A7, I6, g6, C6, B5, Q5) {
              return A7 |= 0, I6 |= 0, B5 |= 0, Q5 |= 0, !(C6 |= 0) & (g6 |= 0) >>> 0 >= 4294967280 | C6 && (KI(), i()), 0 | KA(A7 + 16 | 0, A7, I6, g6, C6, B5, Q5);
            }, va: function(A7, I6, g6, C6, B5, Q5, i2) {
              return 0 | DI(A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, B5 |= 0, Q5 |= 0, i2 |= 0);
            }, wa: fI, xa: function(A7, I6, g6, C6, B5, Q5, i2, E5) {
              A7 |= 0, I6 |= 0, g6 |= 0, Q5 |= 0;
              var D5, o5 = 0;
              return o5 = C6 |= 0, C6 = B5 |= 0, D5 = 0 | o5, r4 = o5 = r4 - 32 | 0, B5 = -1, hI(o5, i2 |= 0, E5 |= 0) || (B5 = YA(A7, I6, g6, D5, C6, Q5, o5), xI(o5, 32)), r4 = o5 + 32 | 0, 0 | B5;
            }, ya: oI, za: function(A7, I6, g6, C6, B5, Q5, i2) {
              return 0 | BI(A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, B5 |= 0, Q5 |= 0, i2 |= 0);
            }, Aa: function(A7, I6, g6, B5, Q5) {
              A7 |= 0, I6 |= 0, Q5 |= 0;
              var i2, E5, D5, c5, h5 = 0, w5 = 0;
              return h5 = g6 |= 0, g6 = B5 |= 0, c5 = 0 | h5, h5 = B5 = r4, r4 = i2 = B5 - 512 & -64, B5 = -1, NI(E5 = i2 - -64 | 0, D5 = i2 + 32 | 0) || (IA(B5 = i2 + 128 | 0, 0, 0, 24), SA(B5, E5, 32, 0), SA(B5, Q5, 32, 0), FI(B5, w5 = i2 + 96 | 0, 24), B5 = DI(A7 + 32 | 0, I6, c5, g6, w5, Q5, D5), I6 = o4[i2 + 92 >> 2], g6 = o4[i2 + 88 >> 2], C5[A7 + 24 | 0] = g6, C5[A7 + 25 | 0] = g6 >>> 8, C5[A7 + 26 | 0] = g6 >>> 16, C5[A7 + 27 | 0] = g6 >>> 24, C5[A7 + 28 | 0] = I6, C5[A7 + 29 | 0] = I6 >>> 8, C5[A7 + 30 | 0] = I6 >>> 16, C5[A7 + 31 | 0] = I6 >>> 24, I6 = o4[i2 + 84 >> 2], g6 = o4[i2 + 80 >> 2], C5[A7 + 16 | 0] = g6, C5[A7 + 17 | 0] = g6 >>> 8, C5[A7 + 18 | 0] = g6 >>> 16, C5[A7 + 19 | 0] = g6 >>> 24, C5[A7 + 20 | 0] = I6, C5[A7 + 21 | 0] = I6 >>> 8, C5[A7 + 22 | 0] = I6 >>> 16, C5[A7 + 23 | 0] = I6 >>> 24, I6 = o4[i2 + 76 >> 2], g6 = o4[i2 + 72 >> 2], C5[A7 + 8 | 0] = g6, C5[A7 + 9 | 0] = g6 >>> 8, C5[A7 + 10 | 0] = g6 >>> 16, C5[A7 + 11 | 0] = g6 >>> 24, C5[A7 + 12 | 0] = I6, C5[A7 + 13 | 0] = I6 >>> 8, C5[A7 + 14 | 0] = I6 >>> 16, C5[A7 + 15 | 0] = I6 >>> 24, I6 = o4[i2 + 68 >> 2], g6 = o4[i2 + 64 >> 2], C5[0 | A7] = g6, C5[A7 + 1 | 0] = g6 >>> 8, C5[A7 + 2 | 0] = g6 >>> 16, C5[A7 + 3 | 0] = g6 >>> 24, C5[A7 + 4 | 0] = I6, C5[A7 + 5 | 0] = I6 >>> 8, C5[A7 + 6 | 0] = I6 >>> 16, C5[A7 + 7 | 0] = I6 >>> 24, xI(D5, 32), xI(E5, 32), xI(w5, 24)), r4 = h5, 0 | B5;
            }, Ba: function(A7, I6, g6, C6, B5, Q5) {
              A7 |= 0, I6 |= 0, B5 |= 0, Q5 |= 0;
              var i2, E5, D5 = 0;
              return E5 = D5 = r4, r4 = i2 = D5 - 448 & -64, D5 = -1, !(C6 |= 0) & (g6 |= 0) >>> 0 >= 48 | C6 && (IA(D5 = i2 - -64 | 0, 0, 0, 24), SA(D5, I6, 32, 0), SA(D5, B5, 32, 0), FI(D5, B5 = i2 + 32 | 0, 24), D5 = BI(A7, I6 + 32 | 0, g6 - 32 | 0, C6 - (g6 >>> 0 < 32) | 0, B5, I6, Q5)), r4 = E5, 0 | D5;
            }, Ca: function() {
              return 48;
            }, Da: $I, Ea: Bg, Fa: Ag, Ga: $I, Ha: Bg, Ia: Ag, Ja: function() {
              return 384;
            }, Ka: function(A7, I6, g6, C6, B5, Q5, i2) {
              return 0 | DA(A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, B5 |= 0, Q5 |= 0, i2 |= 0);
            }, La: function(A7, I6, g6, C6) {
              return 0 | IA(A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0);
            }, Ma: function(A7, I6, g6, C6) {
              return 0 | SA(A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0);
            }, Na: FI, Oa: VI, Pa: Bg, Qa: function(A7, I6, g6, C6) {
              return 0 | RA(A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0);
            }, Ra: $I, Sa: $I, Ta: $I, Ua: ig, Va: $I, Wa: Ig, Xa: Ag, Ya: $I, Za: $I, _a: Ag, $a: Ag, ab: $I, bb: jI, cb: jI, db: VI, eb: VI, fb: function(A7, I6, g6) {
              A7 |= 0, I6 |= 0, g6 |= 0, og[o4[9974]](A7, I6, g6);
            }, gb: function(A7, I6, g6) {
              A7 |= 0, I6 |= 0, g6 |= 0, og[o4[9975]](A7, I6, g6);
            }, hb: function(A7, I6, g6, C6) {
              A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, og[o4[9976]](A7, I6, g6, C6);
            }, ib: function(A7, I6, g6) {
              A7 |= 0, I6 |= 0, g6 |= 0, og[o4[9977]](A7, I6, g6);
            }, jb: function(A7, I6, g6, C6) {
              A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, og[o4[9978]](A7, I6, g6, C6);
            }, kb: function(A7, I6, g6) {
              A7 |= 0, I6 |= 0, g6 |= 0, og[o4[9979]](A7, I6, g6);
            }, lb: function(A7, I6, g6) {
              A7 |= 0, I6 |= 0, g6 |= 0, og[o4[9980]](A7, I6, g6);
            }, mb: function(A7, I6, g6) {
              A7 |= 0, I6 |= 0, g6 |= 0, og[o4[9981]](A7, I6, g6);
            }, nb: $I, ob: Bg, pb: ig, qb: Ag, rb: function(A7, I6, g6, C6, B5, D5) {
              A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, D5 |= 0;
              var h5, w5 = 0, F5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0;
              return r4 = h5 = r4 - 32 | 0, w5 = c4[0 | (B5 |= 0)] | c4[B5 + 1 | 0] << 8 | c4[B5 + 2 | 0] << 16 | c4[B5 + 3 | 0] << 24, B5 = c4[B5 + 4 | 0] | c4[B5 + 5 | 0] << 8 | c4[B5 + 6 | 0] << 16 | c4[B5 + 7 | 0] << 24, o4[h5 + 24 >> 2] = 0, o4[h5 + 28 >> 2] = 0, o4[h5 + 16 >> 2] = w5, o4[h5 + 20 >> 2] = B5, o4[h5 + 8 >> 2] = 0, o4[h5 + 12 >> 2] = 0, o4[(B5 = h5) >> 2] = g6, o4[B5 + 4 >> 2] = C6, I6 - 65 >>> 0 <= 4294967246 ? (o4[10188] = 28, A7 = -1) : I6 - 65 >>> 0 < 4294967232 ? A7 = -1 : (k5 = g6 = r4, r4 = w5 = g6 - 512 & -64, !D5 | !A7 | (I6 - 65 & 255) >>> 0 <= 191 ? (KI(), i()) : (B5 = h5 + 16 | 0, h5 ? (F5 = 725511199 ^ (c4[h5 + 8 | 0] | c4[h5 + 9 | 0] << 8 | c4[h5 + 10 | 0] << 16 | c4[h5 + 11 | 0] << 24), y5 = -1694144372 ^ (c4[h5 + 12 | 0] | c4[h5 + 13 | 0] << 8 | c4[h5 + 14 | 0] << 16 | c4[h5 + 15 | 0] << 24), C6 = -1377402159 ^ (c4[0 | h5] | c4[h5 + 1 | 0] << 8 | c4[h5 + 2 | 0] << 16 | c4[h5 + 3 | 0] << 24), g6 = 1359893119 ^ (c4[h5 + 4 | 0] | c4[h5 + 5 | 0] << 8 | c4[h5 + 6 | 0] << 16 | c4[h5 + 7 | 0] << 24)) : (F5 = 725511199, y5 = -1694144372, C6 = -1377402159, g6 = 1359893119), B5 ? (f5 = 327033209 ^ (c4[B5 + 8 | 0] | c4[B5 + 9 | 0] << 8 | c4[B5 + 10 | 0] << 16 | c4[B5 + 11 | 0] << 24), S4 = 1541459225 ^ (c4[B5 + 12 | 0] | c4[B5 + 13 | 0] << 8 | c4[B5 + 14 | 0] << 16 | c4[B5 + 15 | 0] << 24), a5 = -79577749 ^ (c4[0 | B5] | c4[B5 + 1 | 0] << 8 | c4[B5 + 2 | 0] << 16 | c4[B5 + 3 | 0] << 24), B5 = 528734635 ^ (c4[B5 + 4 | 0] | c4[B5 + 5 | 0] << 8 | c4[B5 + 6 | 0] << 16 | c4[B5 + 7 | 0] << 24)) : (f5 = 327033209, S4 = 1541459225, a5 = -79577749, B5 = 528734635), Q4(w5 - -64 | 0, 0, 293), o4[w5 + 56 >> 2] = f5, o4[w5 + 60 >> 2] = S4, o4[w5 + 48 >> 2] = a5, o4[w5 + 52 >> 2] = B5, o4[w5 + 40 >> 2] = F5, o4[w5 + 44 >> 2] = y5, o4[w5 + 32 >> 2] = C6, o4[w5 + 36 >> 2] = g6, o4[w5 + 24 >> 2] = 1595750129, o4[w5 + 28 >> 2] = -1521486534, o4[w5 + 16 >> 2] = -23791573, o4[w5 + 20 >> 2] = 1013904242, o4[w5 + 8 >> 2] = -2067093701, o4[w5 + 12 >> 2] = -1150833019, o4[w5 >> 2] = -222443256 ^ (8192 | I6), o4[w5 + 4 >> 2] = 1779033703, Q4(w5 + 416 | 0, 0, 96), E4(g6 = w5 + 384 | 0, D5, 32), E4(w5 + 96 | 0, g6, 128), o4[w5 + 352 >> 2] = 128, xI(g6, 128), j2(w5, A7, I6), r4 = k5), A7 = 0), r4 = h5 + 32 | 0, 0 | A7;
            }, sb: VI, tb: function(A7, I6, g6) {
              return 0 | EA(A7 |= 0, I6 |= 0, g6 |= 0);
            }, ub: function(A7, I6, g6) {
              return 0 | OI(A7 |= 0, I6 |= 0, g6 |= 0);
            }, vb: function(A7, I6) {
              return SI(A7 |= 0, I6 |= 0), xI(A7, 208), 0;
            }, wb: function(A7, I6, g6, C6, B5) {
              var Q5;
              return A7 |= 0, C6 |= 0, B5 |= 0, r4 = Q5 = r4 - 208 | 0, EA(Q5, I6 |= 0, g6 |= 0), OI(Q5, C6, B5), SI(Q5, A7), xI(Q5, 208), r4 = Q5 + 208 | 0, 0;
            }, xb: VI, yb: function(A7, I6, g6, B5, Q5) {
              A7 |= 0, I6 |= 0, g6 |= 0, B5 |= 0, Q5 |= 0;
              var i2, D5 = 0, h5 = 0, w5 = 0;
              if (r4 = i2 = r4 - 256 | 0, C5[i2 + 15 | 0] = 1, I6 >>> 0 <= 8160) {
                if (I6 >>> 0 >= 32) for (D5 = 32; w5 = D5, EA(D5 = i2 + 48 | 0, Q5, 32), h5 && OI(D5, (A7 + h5 | 0) - 32 | 0, 32), OI(D5 = i2 + 48 | 0, g6, B5), OI(D5, i2 + 15 | 0, 1), SI(D5, A7 + h5 | 0), C5[i2 + 15 | 0] = c4[i2 + 15 | 0] + 1, (D5 = (h5 = w5) + 32 | 0) >>> 0 <= I6 >>> 0; ) ;
                (I6 &= 31) && (EA(h5 = i2 + 48 | 0, Q5, 32), w5 && OI(h5, (A7 + w5 | 0) - 32 | 0, 32), OI(Q5 = i2 + 48 | 0, g6, B5), OI(Q5, i2 + 15 | 0, 1), SI(Q5, g6 = i2 + 16 | 0), I6 && E4(A7 + w5 | 0, g6, I6), xI(i2 + 16 | 0, 32)), xI(i2 + 48 | 0, 208), A7 = 0;
              } else o4[10188] = 28, A7 = -1;
              return r4 = i2 + 256 | 0, 0 | A7;
            }, zb: Ag, Ab: Qg, Bb: function() {
              return 8160;
            }, Cb: XI, Db: function(A7, I6, g6) {
              return 0 | UA(A7 |= 0, I6 |= 0, g6 |= 0);
            }, Eb: function(A7, I6, g6) {
              return 0 | vI(A7 |= 0, I6 |= 0, g6 |= 0, 0);
            }, Fb: function(A7, I6) {
              return wI(A7 |= 0, I6 |= 0), xI(A7, 416), 0;
            }, Gb: function(A7, I6, g6, C6, B5) {
              var Q5;
              return A7 |= 0, C6 |= 0, B5 |= 0, r4 = Q5 = r4 - 416 | 0, UA(Q5, I6 |= 0, g6 |= 0), vI(Q5, C6, B5, 0), wI(Q5, A7), xI(Q5, 416), r4 = Q5 + 416 | 0, 0;
            }, Hb: function(A7) {
              UI(A7 |= 0, 64);
            }, Ib: function(A7, I6, g6, B5, Q5) {
              A7 |= 0, I6 |= 0, g6 |= 0, B5 |= 0, Q5 |= 0;
              var i2, D5 = 0, h5 = 0, w5 = 0;
              if (r4 = i2 = r4 - 496 | 0, C5[i2 + 15 | 0] = 1, I6 >>> 0 <= 16320) {
                if (I6 >>> 0 >= 64) for (D5 = 64; w5 = D5, UA(D5 = i2 + 80 | 0, Q5, 64), h5 && vI(D5, (A7 + h5 | 0) - 64 | 0, 64, 0), vI(D5 = i2 + 80 | 0, g6, B5, 0), vI(D5, i2 + 15 | 0, 1, 0), wI(D5, A7 + h5 | 0), C5[i2 + 15 | 0] = c4[i2 + 15 | 0] + 1, (D5 = (h5 = w5) - -64 | 0) >>> 0 <= I6 >>> 0; ) ;
                (I6 &= 63) && (UA(h5 = i2 + 80 | 0, Q5, 64), w5 && vI(h5, (A7 + w5 | 0) - 64 | 0, 64, 0), vI(Q5 = i2 + 80 | 0, g6, B5, 0), vI(Q5, i2 + 15 | 0, 1, 0), wI(Q5, g6 = i2 + 16 | 0), I6 && E4(A7 + w5 | 0, g6, I6), xI(i2 + 16 | 0, 64)), xI(i2 + 80 | 0, 416), A7 = 0;
              } else o4[10188] = 28, A7 = -1;
              return r4 = i2 + 496 | 0, 0 | A7;
            }, Jb: Bg, Kb: Qg, Lb: function() {
              return 16320;
            }, Mb: function() {
              return 416;
            }, Nb: function(A7, I6, g6) {
              return A7 |= 0, DA(I6 |= 0, 32, g6 |= 0, 32, 0, 0, 0), 0 | uI(A7, I6);
            }, Ob: NI, Pb: function(A7, I6, g6, B5, Q5) {
              I6 |= 0, g6 |= 0, B5 |= 0, Q5 |= 0;
              var E5, D5, o5 = 0, h5 = 0, w5 = 0;
              if (D5 = o5 = r4, r4 = o5 = o5 - 512 & -64, E5 = (A7 |= 0) || I6) return w5 = -1, rA(h5 = o5 + 96 | 0, B5, Q5) || (IA(B5 = o5 + 128 | 0, 0, 0, 64), SA(B5, h5, 32, 0), xI(h5, 32), SA(B5, g6, 32, 0), SA(B5, Q5, 32, 0), FI(B5, g6 = o5 + 32 | 0, 64), xI(B5, 384), C5[0 | E5] = c4[o5 + 32 | 0], C5[0 | (A7 = I6 || A7)] = c4[o5 + 64 | 0], C5[E5 + 1 | 0] = c4[o5 + 33 | 0], C5[A7 + 1 | 0] = c4[o5 + 65 | 0], C5[E5 + 2 | 0] = c4[o5 + 34 | 0], C5[A7 + 2 | 0] = c4[o5 + 66 | 0], C5[E5 + 3 | 0] = c4[o5 + 35 | 0], C5[A7 + 3 | 0] = c4[o5 + 67 | 0], C5[E5 + 4 | 0] = c4[o5 + 36 | 0], C5[A7 + 4 | 0] = c4[o5 + 68 | 0], C5[E5 + 5 | 0] = c4[o5 + 37 | 0], C5[A7 + 5 | 0] = c4[o5 + 69 | 0], C5[E5 + 6 | 0] = c4[o5 + 38 | 0], C5[A7 + 6 | 0] = c4[o5 + 70 | 0], C5[E5 + 7 | 0] = c4[o5 + 39 | 0], C5[A7 + 7 | 0] = c4[o5 + 71 | 0], C5[E5 + 8 | 0] = c4[o5 + 40 | 0], C5[A7 + 8 | 0] = c4[o5 + 72 | 0], C5[E5 + 9 | 0] = c4[o5 + 41 | 0], C5[A7 + 9 | 0] = c4[o5 + 73 | 0], C5[E5 + 10 | 0] = c4[o5 + 42 | 0], C5[A7 + 10 | 0] = c4[o5 + 74 | 0], C5[E5 + 11 | 0] = c4[o5 + 43 | 0], C5[A7 + 11 | 0] = c4[o5 + 75 | 0], C5[E5 + 12 | 0] = c4[o5 + 44 | 0], C5[A7 + 12 | 0] = c4[o5 + 76 | 0], C5[E5 + 13 | 0] = c4[o5 + 45 | 0], C5[A7 + 13 | 0] = c4[o5 + 77 | 0], C5[E5 + 14 | 0] = c4[o5 + 46 | 0], C5[A7 + 14 | 0] = c4[o5 + 78 | 0], C5[E5 + 15 | 0] = c4[o5 + 47 | 0], C5[A7 + 15 | 0] = c4[o5 + 79 | 0], C5[E5 + 16 | 0] = c4[o5 + 48 | 0], C5[A7 + 16 | 0] = c4[o5 + 80 | 0], C5[E5 + 17 | 0] = c4[o5 + 49 | 0], C5[A7 + 17 | 0] = c4[o5 + 81 | 0], C5[E5 + 18 | 0] = c4[o5 + 50 | 0], C5[A7 + 18 | 0] = c4[o5 + 82 | 0], C5[E5 + 19 | 0] = c4[o5 + 51 | 0], C5[A7 + 19 | 0] = c4[o5 + 83 | 0], C5[E5 + 20 | 0] = c4[o5 + 52 | 0], C5[A7 + 20 | 0] = c4[o5 + 84 | 0], C5[E5 + 21 | 0] = c4[o5 + 53 | 0], C5[A7 + 21 | 0] = c4[o5 + 85 | 0], C5[E5 + 22 | 0] = c4[o5 + 54 | 0], C5[A7 + 22 | 0] = c4[o5 + 86 | 0], C5[E5 + 23 | 0] = c4[o5 + 55 | 0], C5[A7 + 23 | 0] = c4[o5 + 87 | 0], C5[E5 + 24 | 0] = c4[o5 + 56 | 0], C5[A7 + 24 | 0] = c4[o5 + 88 | 0], C5[E5 + 25 | 0] = c4[o5 + 57 | 0], C5[A7 + 25 | 0] = c4[o5 + 89 | 0], C5[E5 + 26 | 0] = c4[o5 + 58 | 0], C5[A7 + 26 | 0] = c4[o5 + 90 | 0], C5[E5 + 27 | 0] = c4[o5 + 59 | 0], C5[A7 + 27 | 0] = c4[o5 + 91 | 0], C5[E5 + 28 | 0] = c4[o5 + 60 | 0], C5[A7 + 28 | 0] = c4[o5 + 92 | 0], C5[E5 + 29 | 0] = c4[o5 + 61 | 0], C5[A7 + 29 | 0] = c4[o5 + 93 | 0], C5[E5 + 30 | 0] = c4[o5 + 62 | 0], C5[A7 + 30 | 0] = c4[o5 + 94 | 0], C5[E5 + 31 | 0] = c4[o5 + 63 | 0], C5[A7 + 31 | 0] = c4[o5 + 95 | 0], xI(g6, 64), w5 = 0), r4 = D5, 0 | w5;
              KI(), i();
            }, Qb: function(A7, I6, g6, B5, Q5) {
              I6 |= 0, g6 |= 0, B5 |= 0, Q5 |= 0;
              var E5, D5, o5 = 0, h5 = 0, w5 = 0;
              if (D5 = o5 = r4, r4 = o5 = o5 - 512 & -64, E5 = (A7 |= 0) || I6) return w5 = -1, rA(h5 = o5 + 96 | 0, B5, Q5) || (IA(B5 = o5 + 128 | 0, 0, 0, 64), SA(B5, h5, 32, 0), xI(h5, 32), SA(B5, Q5, 32, 0), SA(B5, g6, 32, 0), FI(B5, g6 = o5 + 32 | 0, 64), xI(B5, 384), C5[0 | (A7 = I6 || A7)] = c4[o5 + 32 | 0], C5[0 | E5] = c4[o5 + 64 | 0], C5[A7 + 1 | 0] = c4[o5 + 33 | 0], C5[E5 + 1 | 0] = c4[o5 + 65 | 0], C5[A7 + 2 | 0] = c4[o5 + 34 | 0], C5[E5 + 2 | 0] = c4[o5 + 66 | 0], C5[A7 + 3 | 0] = c4[o5 + 35 | 0], C5[E5 + 3 | 0] = c4[o5 + 67 | 0], C5[A7 + 4 | 0] = c4[o5 + 36 | 0], C5[E5 + 4 | 0] = c4[o5 + 68 | 0], C5[A7 + 5 | 0] = c4[o5 + 37 | 0], C5[E5 + 5 | 0] = c4[o5 + 69 | 0], C5[A7 + 6 | 0] = c4[o5 + 38 | 0], C5[E5 + 6 | 0] = c4[o5 + 70 | 0], C5[A7 + 7 | 0] = c4[o5 + 39 | 0], C5[E5 + 7 | 0] = c4[o5 + 71 | 0], C5[A7 + 8 | 0] = c4[o5 + 40 | 0], C5[E5 + 8 | 0] = c4[o5 + 72 | 0], C5[A7 + 9 | 0] = c4[o5 + 41 | 0], C5[E5 + 9 | 0] = c4[o5 + 73 | 0], C5[A7 + 10 | 0] = c4[o5 + 42 | 0], C5[E5 + 10 | 0] = c4[o5 + 74 | 0], C5[A7 + 11 | 0] = c4[o5 + 43 | 0], C5[E5 + 11 | 0] = c4[o5 + 75 | 0], C5[A7 + 12 | 0] = c4[o5 + 44 | 0], C5[E5 + 12 | 0] = c4[o5 + 76 | 0], C5[A7 + 13 | 0] = c4[o5 + 45 | 0], C5[E5 + 13 | 0] = c4[o5 + 77 | 0], C5[A7 + 14 | 0] = c4[o5 + 46 | 0], C5[E5 + 14 | 0] = c4[o5 + 78 | 0], C5[A7 + 15 | 0] = c4[o5 + 47 | 0], C5[E5 + 15 | 0] = c4[o5 + 79 | 0], C5[A7 + 16 | 0] = c4[o5 + 48 | 0], C5[E5 + 16 | 0] = c4[o5 + 80 | 0], C5[A7 + 17 | 0] = c4[o5 + 49 | 0], C5[E5 + 17 | 0] = c4[o5 + 81 | 0], C5[A7 + 18 | 0] = c4[o5 + 50 | 0], C5[E5 + 18 | 0] = c4[o5 + 82 | 0], C5[A7 + 19 | 0] = c4[o5 + 51 | 0], C5[E5 + 19 | 0] = c4[o5 + 83 | 0], C5[A7 + 20 | 0] = c4[o5 + 52 | 0], C5[E5 + 20 | 0] = c4[o5 + 84 | 0], C5[A7 + 21 | 0] = c4[o5 + 53 | 0], C5[E5 + 21 | 0] = c4[o5 + 85 | 0], C5[A7 + 22 | 0] = c4[o5 + 54 | 0], C5[E5 + 22 | 0] = c4[o5 + 86 | 0], C5[A7 + 23 | 0] = c4[o5 + 55 | 0], C5[E5 + 23 | 0] = c4[o5 + 87 | 0], C5[A7 + 24 | 0] = c4[o5 + 56 | 0], C5[E5 + 24 | 0] = c4[o5 + 88 | 0], C5[A7 + 25 | 0] = c4[o5 + 57 | 0], C5[E5 + 25 | 0] = c4[o5 + 89 | 0], C5[A7 + 26 | 0] = c4[o5 + 58 | 0], C5[E5 + 26 | 0] = c4[o5 + 90 | 0], C5[A7 + 27 | 0] = c4[o5 + 59 | 0], C5[E5 + 27 | 0] = c4[o5 + 91 | 0], C5[A7 + 28 | 0] = c4[o5 + 60 | 0], C5[E5 + 28 | 0] = c4[o5 + 92 | 0], C5[A7 + 29 | 0] = c4[o5 + 61 | 0], C5[E5 + 29 | 0] = c4[o5 + 93 | 0], C5[A7 + 30 | 0] = c4[o5 + 62 | 0], C5[E5 + 30 | 0] = c4[o5 + 94 | 0], C5[A7 + 31 | 0] = c4[o5 + 63 | 0], C5[E5 + 31 | 0] = c4[o5 + 95 | 0], xI(g6, 64), w5 = 0), r4 = D5, 0 | w5;
              KI(), i();
            }, Rb: Ag, Sb: Ag, Tb: Ag, Ub: Ag, Vb: function(A7, I6) {
              return 0 | uI(A7 |= 0, I6 |= 0);
            }, Wb: function(A7, I6, g6) {
              return 0 | rA(A7 |= 0, I6 |= 0, g6 |= 0);
            }, Xb: Ag, Yb: Ag, Zb: Ag, _b: Ig, $b: $I, ac: Cg, bc: VI, cc: yI, dc: function(A7, I6, g6, C6, B5, Q5) {
              return A7 |= 0, I6 |= 0, B5 |= 0, Q5 |= 0, !(C6 |= 0) & (g6 |= 0) >>> 0 >= 4294967280 | C6 && (KI(), i()), KA(A7 + 16 | 0, A7, I6, g6, C6, B5, Q5), 0;
            }, ec: fI, fc: oI, gc: VI, hc: function(A7, I6, g6) {
              return A7 |= 0, g6 |= 0, UI(I6 |= 0, 24), BA(A7, I6, g6), C5[A7 + 32 | 0] = 1, C5[A7 + 33 | 0] = 0, C5[A7 + 34 | 0] = 0, C5[A7 + 35 | 0] = 0, g6 = c4[I6 + 16 | 0] | c4[I6 + 17 | 0] << 8 | c4[I6 + 18 | 0] << 16 | c4[I6 + 19 | 0] << 24, I6 = c4[I6 + 20 | 0] | c4[I6 + 21 | 0] << 8 | c4[I6 + 22 | 0] << 16 | c4[I6 + 23 | 0] << 24, C5[A7 + 44 | 0] = 0, C5[A7 + 45 | 0] = 0, C5[A7 + 46 | 0] = 0, C5[A7 + 47 | 0] = 0, C5[A7 + 48 | 0] = 0, C5[A7 + 49 | 0] = 0, C5[A7 + 50 | 0] = 0, C5[A7 + 51 | 0] = 0, C5[A7 + 36 | 0] = g6, C5[A7 + 37 | 0] = g6 >>> 8, C5[A7 + 38 | 0] = g6 >>> 16, C5[A7 + 39 | 0] = g6 >>> 24, C5[A7 + 40 | 0] = I6, C5[A7 + 41 | 0] = I6 >>> 8, C5[A7 + 42 | 0] = I6 >>> 16, C5[A7 + 43 | 0] = I6 >>> 24, 0;
            }, ic: function(A7, I6, g6) {
              return BA(A7 |= 0, I6 |= 0, g6 |= 0), C5[A7 + 32 | 0] = 1, C5[A7 + 33 | 0] = 0, C5[A7 + 34 | 0] = 0, C5[A7 + 35 | 0] = 0, g6 = c4[I6 + 16 | 0] | c4[I6 + 17 | 0] << 8 | c4[I6 + 18 | 0] << 16 | c4[I6 + 19 | 0] << 24, I6 = c4[I6 + 20 | 0] | c4[I6 + 21 | 0] << 8 | c4[I6 + 22 | 0] << 16 | c4[I6 + 23 | 0] << 24, C5[A7 + 44 | 0] = 0, C5[A7 + 45 | 0] = 0, C5[A7 + 46 | 0] = 0, C5[A7 + 47 | 0] = 0, C5[A7 + 48 | 0] = 0, C5[A7 + 49 | 0] = 0, C5[A7 + 50 | 0] = 0, C5[A7 + 51 | 0] = 0, C5[A7 + 36 | 0] = g6, C5[A7 + 37 | 0] = g6 >>> 8, C5[A7 + 38 | 0] = g6 >>> 16, C5[A7 + 39 | 0] = g6 >>> 24, C5[A7 + 40 | 0] = I6, C5[A7 + 41 | 0] = I6 >>> 8, C5[A7 + 42 | 0] = I6 >>> 16, C5[A7 + 43 | 0] = I6 >>> 24, 0;
            }, jc: function(A7) {
              var I6, g6 = 0, B5 = 0;
              r4 = I6 = r4 - 48 | 0, g6 = c4[28 + (A7 |= 0) | 0] | c4[A7 + 29 | 0] << 8 | c4[A7 + 30 | 0] << 16 | c4[A7 + 31 | 0] << 24, o4[I6 + 24 >> 2] = c4[A7 + 24 | 0] | c4[A7 + 25 | 0] << 8 | c4[A7 + 26 | 0] << 16 | c4[A7 + 27 | 0] << 24, o4[I6 + 28 >> 2] = g6, g6 = c4[A7 + 20 | 0] | c4[A7 + 21 | 0] << 8 | c4[A7 + 22 | 0] << 16 | c4[A7 + 23 | 0] << 24, o4[I6 + 16 >> 2] = c4[A7 + 16 | 0] | c4[A7 + 17 | 0] << 8 | c4[A7 + 18 | 0] << 16 | c4[A7 + 19 | 0] << 24, o4[I6 + 20 >> 2] = g6, g6 = c4[A7 + 12 | 0] | c4[A7 + 13 | 0] << 8 | c4[A7 + 14 | 0] << 16 | c4[A7 + 15 | 0] << 24, o4[I6 + 8 >> 2] = c4[A7 + 8 | 0] | c4[A7 + 9 | 0] << 8 | c4[A7 + 10 | 0] << 16 | c4[A7 + 11 | 0] << 24, o4[I6 + 12 >> 2] = g6, g6 = c4[A7 + 4 | 0] | c4[A7 + 5 | 0] << 8 | c4[A7 + 6 | 0] << 16 | c4[A7 + 7 | 0] << 24, o4[I6 >> 2] = c4[0 | A7] | c4[A7 + 1 | 0] << 8 | c4[A7 + 2 | 0] << 16 | c4[A7 + 3 | 0] << 24, o4[I6 + 4 >> 2] = g6, g6 = c4[A7 + 40 | 0] | c4[A7 + 41 | 0] << 8 | c4[A7 + 42 | 0] << 16 | c4[A7 + 43 | 0] << 24, o4[I6 + 32 >> 2] = c4[A7 + 36 | 0] | c4[A7 + 37 | 0] << 8 | c4[A7 + 38 | 0] << 16 | c4[A7 + 39 | 0] << 24, o4[I6 + 36 >> 2] = g6, HI(I6, I6, A7 + 32 | 0, A7), g6 = o4[I6 + 28 >> 2], B5 = o4[I6 + 24 >> 2], C5[A7 + 24 | 0] = B5, C5[A7 + 25 | 0] = B5 >>> 8, C5[A7 + 26 | 0] = B5 >>> 16, C5[A7 + 27 | 0] = B5 >>> 24, C5[A7 + 28 | 0] = g6, C5[A7 + 29 | 0] = g6 >>> 8, C5[A7 + 30 | 0] = g6 >>> 16, C5[A7 + 31 | 0] = g6 >>> 24, g6 = o4[I6 + 20 >> 2], B5 = o4[I6 + 16 >> 2], C5[A7 + 16 | 0] = B5, C5[A7 + 17 | 0] = B5 >>> 8, C5[A7 + 18 | 0] = B5 >>> 16, C5[A7 + 19 | 0] = B5 >>> 24, C5[A7 + 20 | 0] = g6, C5[A7 + 21 | 0] = g6 >>> 8, C5[A7 + 22 | 0] = g6 >>> 16, C5[A7 + 23 | 0] = g6 >>> 24, g6 = o4[I6 + 12 >> 2], B5 = o4[I6 + 8 >> 2], C5[A7 + 8 | 0] = B5, C5[A7 + 9 | 0] = B5 >>> 8, C5[A7 + 10 | 0] = B5 >>> 16, C5[A7 + 11 | 0] = B5 >>> 24, C5[A7 + 12 | 0] = g6, C5[A7 + 13 | 0] = g6 >>> 8, C5[A7 + 14 | 0] = g6 >>> 16, C5[A7 + 15 | 0] = g6 >>> 24, g6 = o4[I6 + 4 >> 2], B5 = o4[I6 >> 2], C5[0 | A7] = B5, C5[A7 + 1 | 0] = B5 >>> 8, C5[A7 + 2 | 0] = B5 >>> 16, C5[A7 + 3 | 0] = B5 >>> 24, C5[A7 + 4 | 0] = g6, C5[A7 + 5 | 0] = g6 >>> 8, C5[A7 + 6 | 0] = g6 >>> 16, C5[A7 + 7 | 0] = g6 >>> 24, B5 = o4[I6 + 36 >> 2], g6 = o4[I6 + 32 >> 2], C5[A7 + 32 | 0] = 1, C5[A7 + 33 | 0] = 0, C5[A7 + 34 | 0] = 0, C5[A7 + 35 | 0] = 0, C5[A7 + 36 | 0] = g6, C5[A7 + 37 | 0] = g6 >>> 8, C5[A7 + 38 | 0] = g6 >>> 16, C5[A7 + 39 | 0] = g6 >>> 24, C5[A7 + 40 | 0] = B5, C5[A7 + 41 | 0] = B5 >>> 8, C5[A7 + 42 | 0] = B5 >>> 16, C5[A7 + 43 | 0] = B5 >>> 24, r4 = I6 + 48 | 0;
            }, kc: function(A7, I6, g6, B5, Q5, E5, D5, h5, w5, F5) {
              A7 |= 0, I6 |= 0, B5 |= 0, E5 |= 0, D5 |= 0, w5 |= 0, F5 |= 0;
              var y5, f5, S4 = 0, a5 = 0;
              return y5 = (S4 = Q5 |= 0) | (Q5 = 0), f5 = Q5 | (h5 |= 0), r4 = Q5 = r4 - 384 | 0, (g6 |= 0) && (o4[g6 >> 2] = 0, o4[g6 + 4 >> 2] = 0), !E5 & y5 >>> 0 < 4294967279 ? (sI(a5 = Q5 + 16 | 0, 64, h5 = A7 + 32 | 0, A7), qI(S4 = Q5 + 80 | 0, a5), xI(a5, 64), bI(S4, D5, f5, w5), bI(S4, 39360, 0 - f5 & 15, 0), o4[Q5 + 16 >> 2] = 0, o4[Q5 + 20 >> 2] = 0, o4[Q5 + 72 >> 2] = 0, o4[Q5 + 76 >> 2] = 0, o4[Q5 + 64 >> 2] = 0, o4[Q5 + 68 >> 2] = 0, o4[Q5 + 56 >> 2] = 0, o4[Q5 + 60 >> 2] = 0, o4[Q5 + 48 >> 2] = 0, o4[Q5 + 52 >> 2] = 0, o4[Q5 + 40 >> 2] = 0, o4[Q5 + 44 >> 2] = 0, o4[Q5 + 32 >> 2] = 0, o4[Q5 + 36 >> 2] = 0, o4[Q5 + 24 >> 2] = 0, o4[Q5 + 28 >> 2] = 0, C5[Q5 + 16 | 0] = F5, II(a5, a5, 64, 0, h5, 1, A7), bI(S4, a5, 64, 0), C5[0 | I6] = c4[Q5 + 16 | 0], II(I6 = I6 + 1 | 0, B5, y5, E5, h5, 2, A7), bI(S4, I6, y5, E5), bI(S4, 39360, 15 & y5, 0), o4[Q5 + 8 >> 2] = f5, o4[Q5 + 12 >> 2] = w5, bI(S4, B5 = Q5 + 8 | 0, 8, 0), o4[Q5 + 8 >> 2] = y5 - -64, o4[Q5 + 12 >> 2] = E5 - ((y5 >>> 0 < 4294967232) - 1 | 0), bI(S4, B5, 8, 0), WI(S4, I6 = I6 + y5 | 0), xI(S4, 256), C5[A7 + 36 | 0] = c4[A7 + 36 | 0] ^ c4[0 | I6], C5[A7 + 37 | 0] = c4[A7 + 37 | 0] ^ c4[I6 + 1 | 0], C5[A7 + 38 | 0] = c4[A7 + 38 | 0] ^ c4[I6 + 2 | 0], C5[A7 + 39 | 0] = c4[A7 + 39 | 0] ^ c4[I6 + 3 | 0], C5[A7 + 40 | 0] = c4[A7 + 40 | 0] ^ c4[I6 + 4 | 0], C5[A7 + 41 | 0] = c4[A7 + 41 | 0] ^ c4[I6 + 5 | 0], C5[A7 + 42 | 0] = c4[A7 + 42 | 0] ^ c4[I6 + 6 | 0], C5[A7 + 43 | 0] = c4[A7 + 43 | 0] ^ c4[I6 + 7 | 0], ZA(h5), (2 & F5 || vA(h5, 4)) && (I6 = c4[A7 + 28 | 0] | c4[A7 + 29 | 0] << 8 | c4[A7 + 30 | 0] << 16 | c4[A7 + 31 | 0] << 24, o4[Q5 + 360 >> 2] = c4[A7 + 24 | 0] | c4[A7 + 25 | 0] << 8 | c4[A7 + 26 | 0] << 16 | c4[A7 + 27 | 0] << 24, o4[Q5 + 364 >> 2] = I6, I6 = c4[A7 + 20 | 0] | c4[A7 + 21 | 0] << 8 | c4[A7 + 22 | 0] << 16 | c4[A7 + 23 | 0] << 24, o4[Q5 + 352 >> 2] = c4[A7 + 16 | 0] | c4[A7 + 17 | 0] << 8 | c4[A7 + 18 | 0] << 16 | c4[A7 + 19 | 0] << 24, o4[Q5 + 356 >> 2] = I6, I6 = c4[A7 + 12 | 0] | c4[A7 + 13 | 0] << 8 | c4[A7 + 14 | 0] << 16 | c4[A7 + 15 | 0] << 24, o4[Q5 + 344 >> 2] = c4[A7 + 8 | 0] | c4[A7 + 9 | 0] << 8 | c4[A7 + 10 | 0] << 16 | c4[A7 + 11 | 0] << 24, o4[Q5 + 348 >> 2] = I6, I6 = c4[A7 + 4 | 0] | c4[A7 + 5 | 0] << 8 | c4[A7 + 6 | 0] << 16 | c4[A7 + 7 | 0] << 24, o4[Q5 + 336 >> 2] = c4[0 | A7] | c4[A7 + 1 | 0] << 8 | c4[A7 + 2 | 0] << 16 | c4[A7 + 3 | 0] << 24, o4[Q5 + 340 >> 2] = I6, I6 = c4[A7 + 40 | 0] | c4[A7 + 41 | 0] << 8 | c4[A7 + 42 | 0] << 16 | c4[A7 + 43 | 0] << 24, o4[Q5 + 368 >> 2] = c4[A7 + 36 | 0] | c4[A7 + 37 | 0] << 8 | c4[A7 + 38 | 0] << 16 | c4[A7 + 39 | 0] << 24, o4[Q5 + 372 >> 2] = I6, HI(I6 = Q5 + 336 | 0, I6, h5, A7), I6 = o4[Q5 + 364 >> 2], B5 = o4[Q5 + 360 >> 2], C5[A7 + 24 | 0] = B5, C5[A7 + 25 | 0] = B5 >>> 8, C5[A7 + 26 | 0] = B5 >>> 16, C5[A7 + 27 | 0] = B5 >>> 24, C5[A7 + 28 | 0] = I6, C5[A7 + 29 | 0] = I6 >>> 8, C5[A7 + 30 | 0] = I6 >>> 16, C5[A7 + 31 | 0] = I6 >>> 24, I6 = o4[Q5 + 356 >> 2], B5 = o4[Q5 + 352 >> 2], C5[A7 + 16 | 0] = B5, C5[A7 + 17 | 0] = B5 >>> 8, C5[A7 + 18 | 0] = B5 >>> 16, C5[A7 + 19 | 0] = B5 >>> 24, C5[A7 + 20 | 0] = I6, C5[A7 + 21 | 0] = I6 >>> 8, C5[A7 + 22 | 0] = I6 >>> 16, C5[A7 + 23 | 0] = I6 >>> 24, I6 = o4[Q5 + 348 >> 2], B5 = o4[Q5 + 344 >> 2], C5[A7 + 8 | 0] = B5, C5[A7 + 9 | 0] = B5 >>> 8, C5[A7 + 10 | 0] = B5 >>> 16, C5[A7 + 11 | 0] = B5 >>> 24, C5[A7 + 12 | 0] = I6, C5[A7 + 13 | 0] = I6 >>> 8, C5[A7 + 14 | 0] = I6 >>> 16, C5[A7 + 15 | 0] = I6 >>> 24, I6 = o4[Q5 + 340 >> 2], B5 = o4[Q5 + 336 >> 2], C5[0 | A7] = B5, C5[A7 + 1 | 0] = B5 >>> 8, C5[A7 + 2 | 0] = B5 >>> 16, C5[A7 + 3 | 0] = B5 >>> 24, C5[A7 + 4 | 0] = I6, C5[A7 + 5 | 0] = I6 >>> 8, C5[A7 + 6 | 0] = I6 >>> 16, C5[A7 + 7 | 0] = I6 >>> 24, I6 = o4[Q5 + 368 >> 2], B5 = o4[Q5 + 372 >> 2], C5[0 | h5] = 1, C5[h5 + 1 | 0] = 0, C5[h5 + 2 | 0] = 0, C5[h5 + 3 | 0] = 0, C5[A7 + 36 | 0] = I6, C5[A7 + 37 | 0] = I6 >>> 8, C5[A7 + 38 | 0] = I6 >>> 16, C5[A7 + 39 | 0] = I6 >>> 24, C5[A7 + 40 | 0] = B5, C5[A7 + 41 | 0] = B5 >>> 8, C5[A7 + 42 | 0] = B5 >>> 16, C5[A7 + 43 | 0] = B5 >>> 24), g6 && (E5 = (A7 = y5 + 17 | 0) >>> 0 < 17 ? E5 + 1 | 0 : E5, o4[g6 >> 2] = A7, o4[g6 + 4 >> 2] = E5), r4 = Q5 + 384 | 0) : (KI(), i()), 0;
            }, lc: function(A7, I6, g6, B5, Q5, E5, D5, h5, w5, F5) {
              A7 |= 0, I6 |= 0, B5 |= 0, Q5 |= 0, h5 |= 0, F5 |= 0;
              var y5, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, n5 = 0;
              f5 = E5 |= 0, E5 = D5 |= 0, S4 = 0 | f5, y5 = w5 |= 0, r4 = D5 = r4 - 400 | 0, (g6 |= 0) && (o4[g6 >> 2] = 0, o4[g6 + 4 >> 2] = 0), B5 && (C5[0 | B5] = 255), n5 = -1;
              A: {
                I: {
                  if (!((w5 = S4 >>> 0 < 17) & !E5)) {
                    if (M5 = f5 = E5 - w5 | 0, !f5 & (w5 = S4 - 17 | 0) >>> 0 >= 4294967279 | f5) break I;
                    sI(a5 = D5 + 32 | 0, 64, k5 = A7 + 32 | 0, A7), qI(f5 = D5 + 96 | 0, a5), xI(a5, 64), bI(f5, h5, y5, F5), bI(f5, 39360, 0 - y5 & 15, 0), o4[D5 + 88 >> 2] = 0, o4[D5 + 92 >> 2] = 0, o4[D5 + 80 >> 2] = 0, o4[D5 + 84 >> 2] = 0, o4[D5 + 72 >> 2] = 0, o4[D5 + 76 >> 2] = 0, o4[D5 + 64 >> 2] = 0, o4[D5 + 68 >> 2] = 0, o4[D5 + 56 >> 2] = 0, o4[D5 + 60 >> 2] = 0, o4[D5 + 48 >> 2] = 0, o4[D5 + 52 >> 2] = 0, o4[D5 + 40 >> 2] = 0, o4[D5 + 44 >> 2] = 0, o4[D5 + 32 >> 2] = 0, o4[D5 + 36 >> 2] = 0, C5[D5 + 32 | 0] = c4[0 | Q5], II(a5, a5, 64, 0, k5, 1, A7), h5 = c4[D5 + 32 | 0], C5[D5 + 32 | 0] = c4[0 | Q5], bI(f5, a5, 64, 0), bI(f5, Q5 = Q5 + 1 | 0, w5, M5), bI(f5, 39360, S4 - 1 & 15, 0), o4[D5 + 24 >> 2] = y5, o4[D5 + 28 >> 2] = F5, bI(f5, F5 = D5 + 24 | 0, 8, 0), E5 = (S4 = S4 + 47 | 0) >>> 0 < 47 ? E5 + 1 | 0 : E5, o4[D5 + 24 >> 2] = S4, o4[D5 + 28 >> 2] = E5, bI(f5, F5, 8, 0), WI(f5, D5), xI(f5, 256), OA(D5, Q5 + w5 | 0, 16) ? xI(D5, 16) : (II(I6, Q5, w5, M5, k5, 2, A7), C5[A7 + 36 | 0] = c4[A7 + 36 | 0] ^ c4[0 | D5], C5[A7 + 37 | 0] = c4[A7 + 37 | 0] ^ c4[D5 + 1 | 0], C5[A7 + 38 | 0] = c4[A7 + 38 | 0] ^ c4[D5 + 2 | 0], C5[A7 + 39 | 0] = c4[A7 + 39 | 0] ^ c4[D5 + 3 | 0], C5[A7 + 40 | 0] = c4[A7 + 40 | 0] ^ c4[D5 + 4 | 0], C5[A7 + 41 | 0] = c4[A7 + 41 | 0] ^ c4[D5 + 5 | 0], C5[A7 + 42 | 0] = c4[A7 + 42 | 0] ^ c4[D5 + 6 | 0], C5[A7 + 43 | 0] = c4[A7 + 43 | 0] ^ c4[D5 + 7 | 0], ZA(k5), (2 & h5 || vA(k5, 4)) && (I6 = c4[A7 + 28 | 0] | c4[A7 + 29 | 0] << 8 | c4[A7 + 30 | 0] << 16 | c4[A7 + 31 | 0] << 24, o4[D5 + 376 >> 2] = c4[A7 + 24 | 0] | c4[A7 + 25 | 0] << 8 | c4[A7 + 26 | 0] << 16 | c4[A7 + 27 | 0] << 24, o4[D5 + 380 >> 2] = I6, I6 = c4[A7 + 20 | 0] | c4[A7 + 21 | 0] << 8 | c4[A7 + 22 | 0] << 16 | c4[A7 + 23 | 0] << 24, o4[D5 + 368 >> 2] = c4[A7 + 16 | 0] | c4[A7 + 17 | 0] << 8 | c4[A7 + 18 | 0] << 16 | c4[A7 + 19 | 0] << 24, o4[D5 + 372 >> 2] = I6, I6 = c4[A7 + 12 | 0] | c4[A7 + 13 | 0] << 8 | c4[A7 + 14 | 0] << 16 | c4[A7 + 15 | 0] << 24, o4[D5 + 360 >> 2] = c4[A7 + 8 | 0] | c4[A7 + 9 | 0] << 8 | c4[A7 + 10 | 0] << 16 | c4[A7 + 11 | 0] << 24, o4[D5 + 364 >> 2] = I6, I6 = c4[A7 + 4 | 0] | c4[A7 + 5 | 0] << 8 | c4[A7 + 6 | 0] << 16 | c4[A7 + 7 | 0] << 24, o4[D5 + 352 >> 2] = c4[0 | A7] | c4[A7 + 1 | 0] << 8 | c4[A7 + 2 | 0] << 16 | c4[A7 + 3 | 0] << 24, o4[D5 + 356 >> 2] = I6, I6 = c4[A7 + 40 | 0] | c4[A7 + 41 | 0] << 8 | c4[A7 + 42 | 0] << 16 | c4[A7 + 43 | 0] << 24, o4[D5 + 384 >> 2] = c4[A7 + 36 | 0] | c4[A7 + 37 | 0] << 8 | c4[A7 + 38 | 0] << 16 | c4[A7 + 39 | 0] << 24, o4[D5 + 388 >> 2] = I6, HI(I6 = D5 + 352 | 0, I6, k5, A7), I6 = o4[D5 + 380 >> 2], Q5 = o4[D5 + 376 >> 2], C5[A7 + 24 | 0] = Q5, C5[A7 + 25 | 0] = Q5 >>> 8, C5[A7 + 26 | 0] = Q5 >>> 16, C5[A7 + 27 | 0] = Q5 >>> 24, C5[A7 + 28 | 0] = I6, C5[A7 + 29 | 0] = I6 >>> 8, C5[A7 + 30 | 0] = I6 >>> 16, C5[A7 + 31 | 0] = I6 >>> 24, I6 = o4[D5 + 372 >> 2], Q5 = o4[D5 + 368 >> 2], C5[A7 + 16 | 0] = Q5, C5[A7 + 17 | 0] = Q5 >>> 8, C5[A7 + 18 | 0] = Q5 >>> 16, C5[A7 + 19 | 0] = Q5 >>> 24, C5[A7 + 20 | 0] = I6, C5[A7 + 21 | 0] = I6 >>> 8, C5[A7 + 22 | 0] = I6 >>> 16, C5[A7 + 23 | 0] = I6 >>> 24, I6 = o4[D5 + 364 >> 2], Q5 = o4[D5 + 360 >> 2], C5[A7 + 8 | 0] = Q5, C5[A7 + 9 | 0] = Q5 >>> 8, C5[A7 + 10 | 0] = Q5 >>> 16, C5[A7 + 11 | 0] = Q5 >>> 24, C5[A7 + 12 | 0] = I6, C5[A7 + 13 | 0] = I6 >>> 8, C5[A7 + 14 | 0] = I6 >>> 16, C5[A7 + 15 | 0] = I6 >>> 24, I6 = o4[D5 + 356 >> 2], Q5 = o4[D5 + 352 >> 2], C5[0 | A7] = Q5, C5[A7 + 1 | 0] = Q5 >>> 8, C5[A7 + 2 | 0] = Q5 >>> 16, C5[A7 + 3 | 0] = Q5 >>> 24, C5[A7 + 4 | 0] = I6, C5[A7 + 5 | 0] = I6 >>> 8, C5[A7 + 6 | 0] = I6 >>> 16, C5[A7 + 7 | 0] = I6 >>> 24, I6 = o4[D5 + 384 >> 2], Q5 = o4[D5 + 388 >> 2], C5[A7 + 32 | 0] = 1, C5[A7 + 33 | 0] = 0, C5[A7 + 34 | 0] = 0, C5[A7 + 35 | 0] = 0, C5[A7 + 36 | 0] = I6, C5[A7 + 37 | 0] = I6 >>> 8, C5[A7 + 38 | 0] = I6 >>> 16, C5[A7 + 39 | 0] = I6 >>> 24, C5[A7 + 40 | 0] = Q5, C5[A7 + 41 | 0] = Q5 >>> 8, C5[A7 + 42 | 0] = Q5 >>> 16, C5[A7 + 43 | 0] = Q5 >>> 24), g6 && (o4[g6 >> 2] = w5, o4[g6 + 4 >> 2] = M5), n5 = 0, B5 && (C5[0 | B5] = h5));
                  }
                  r4 = D5 + 400 | 0;
                  break A;
                }
                KI(), i();
              }
              return 0 | n5;
            }, mc: function() {
              return 52;
            }, nc: function() {
              return 17;
            }, oc: Ig, pc: Ag, qc: function() {
              return -18;
            }, rc: Qg, sc: Eg, tc: function() {
              return 2;
            }, uc: Dg, vc: ig, wc: $I, xc: function(A7, I6, g6, B5, Q5) {
              A7 |= 0, I6 |= 0, g6 |= 0, B5 |= 0;
              var i2, E5 = 0, D5 = 0, o5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, r5 = 0, t5 = 0, U5 = 0, J5 = 0;
              if (r5 = 1886610805 ^ (E5 = c4[0 | (Q5 |= 0)] | c4[Q5 + 1 | 0] << 8 | c4[Q5 + 2 | 0] << 16 | c4[Q5 + 3 | 0] << 24), t5 = 1936682341 ^ (D5 = c4[Q5 + 4 | 0] | c4[Q5 + 5 | 0] << 8 | c4[Q5 + 6 | 0] << 16 | c4[Q5 + 7 | 0] << 24), E5 ^= 1852142177, o5 = 1819895653 ^ D5, k5 = g6, i2 = 7 & g6, U5 = 1852075885 ^ (D5 = c4[Q5 + 8 | 0] | c4[Q5 + 9 | 0] << 8 | c4[Q5 + 10 | 0] << 16 | c4[Q5 + 11 | 0] << 24), J5 = 1685025377 ^ (g6 = c4[Q5 + 12 | 0] | c4[Q5 + 13 | 0] << 8 | c4[Q5 + 14 | 0] << 16 | c4[Q5 + 15 | 0] << 24), h5 = 2037671283 ^ D5, D5 = 1952801890 ^ g6, g6 = -8 & k5) {
                for (y5 = I6 + g6 | 0; g6 = (a5 = D5 ^ (M5 = c4[I6 + 4 | 0] | c4[I6 + 5 | 0] << 8 | c4[I6 + 6 | 0] << 16 | c4[I6 + 7 | 0] << 24)) + o5 | 0, h5 = Q5 = E5 + (B5 = h5 ^ (F5 = c4[0 | I6] | c4[I6 + 1 | 0] << 8 | c4[I6 + 2 | 0] << 16 | c4[I6 + 3 | 0] << 24)) | 0, f5 = g6 = Q5 >>> 0 < B5 >>> 0 ? g6 + 1 | 0 : g6, g6 = t5 + J5 | 0, g6 = (o5 = r5 + U5 | 0) >>> 0 < U5 >>> 0 ? g6 + 1 | 0 : g6, E5 = xA(U5, J5, 13) ^ o5, D5 = g6, g6 = f5 + (Q5 = g6 ^ n4) | 0, g6 = E5 >>> 0 > (S4 = h5 + E5 | 0) >>> 0 ? g6 + 1 | 0 : g6, E5 = xA(E5, Q5, 17) ^ S4, w5 = g6, r5 = xA(E5, Q5 = g6 ^ n4, 13), t5 = n4, g6 = xA(B5, a5, 16), B5 = f5 ^ n4, a5 = g6 ^ h5, D5 = xA(o5, D5, 32), g6 = n4 + B5 | 0, g6 = (D5 = D5 >>> 0 > (o5 = a5 + D5 | 0) >>> 0 ? g6 + 1 | 0 : g6) + Q5 | 0, f5 = g6 = (h5 = E5 + o5 | 0) >>> 0 < o5 >>> 0 ? g6 + 1 | 0 : g6, r5 = xA(E5 = h5 ^ r5, Q5 = g6 ^ t5, 17), t5 = n4, g6 = xA(a5, B5, 21), B5 = D5 ^ n4, a5 = g6 ^ o5, D5 = xA(S4, w5, 32), g6 = n4 + B5 | 0, g6 = (D5 = D5 >>> 0 > (o5 = a5 + D5 | 0) >>> 0 ? g6 + 1 | 0 : g6) + Q5 | 0, U5 = (E5 = E5 + o5 | 0) ^ r5, Q5 = g6 = E5 >>> 0 < o5 >>> 0 ? g6 + 1 | 0 : g6, J5 = g6 ^ t5, g6 = xA(a5, B5, 16), S4 = D5 ^= n4, w5 = xA(g6 ^= o5, D5, 21), o5 = n4, f5 = (D5 = xA(h5, f5, 32)) + g6 | 0, g6 = n4 + S4 | 0, h5 = w5 ^ f5, D5 = (g6 = D5 >>> 0 > f5 >>> 0 ? g6 + 1 | 0 : g6) ^ o5, E5 = xA(E5, Q5, 32), o5 = n4, r5 = f5 ^ F5, t5 = g6 ^ M5, (0 | y5) != (0 | (I6 = I6 + 8 | 0)); ) ;
                I6 = y5;
              }
              switch (M5 = 0, w5 = k5 << 24, i2 - 1 | 0) {
                case 6:
                  w5 |= c4[I6 + 6 | 0] << 16;
                case 5:
                  w5 |= c4[I6 + 5 | 0] << 8;
                case 4:
                  w5 |= c4[I6 + 4 | 0];
                case 3:
                  M5 |= (B5 = c4[I6 + 3 | 0]) << 24, w5 |= g6 = 0;
                case 2:
                  M5 |= (B5 = c4[I6 + 2 | 0]) << 16, w5 |= g6 = 0;
                case 1:
                  M5 |= (B5 = c4[I6 + 1 | 0]) << 8, w5 |= g6 = 0;
                case 0:
                  M5 = c4[0 | I6] | M5;
              }
              return B5 = I6 = D5 ^ w5, g6 = xA(Q5 = h5 ^ M5, I6, 16), B5 = B5 + o5 | 0, f5 = B5 = (h5 = Q5 + E5 | 0) >>> 0 < E5 >>> 0 ? B5 + 1 | 0 : B5, S4 = xA(Q5 = g6 ^ h5, B5 ^= I6 = n4, 21), D5 = n4, g6 = t5 + J5 | 0, I6 = g6 = (E5 = r5 + U5 | 0) >>> 0 < U5 >>> 0 ? g6 + 1 | 0 : g6, y5 = Q5, Q5 = xA(E5, g6, 32), g6 = n4 + B5 | 0, B5 = D5, D5 = g6 = Q5 >>> 0 > (o5 = y5 + Q5 | 0) >>> 0 ? g6 + 1 | 0 : g6, k5 = xA(Q5 = o5 ^ S4, B5 ^= g6, 16), S4 = n4, E5 = (g6 = h5) + (h5 = y5 = xA(U5, J5, 13) ^ E5) | 0, g6 = (F5 = n4 ^ I6) + f5 | 0, f5 = Q5, Q5 = xA(I6 = E5, g6 = I6 >>> 0 < h5 >>> 0 ? g6 + 1 | 0 : g6, 32), B5 = n4 + B5 | 0, a5 = xA(E5 = (h5 = f5 + Q5 | 0) ^ k5, Q5 = (f5 = Q5 >>> 0 > h5 >>> 0 ? B5 + 1 | 0 : B5) ^ S4, 21), S4 = n4, y5 = xA(y5, F5, 17) ^ I6, g6 = (F5 = n4 ^ g6) + D5 | 0, I6 = g6 = (I6 = y5) >>> 0 > (B5 = I6 + o5 | 0) >>> 0 ? g6 + 1 | 0 : g6, D5 = E5, E5 = xA(B5, g6, 32), g6 = n4 + Q5 | 0, k5 = g6 = (D5 = E5 >>> 0 > (o5 = D5 + E5 | 0) >>> 0 ? g6 + 1 | 0 : g6) ^ S4, S4 = xA(a5 ^= o5, g6, 16), E5 = n4, y5 = xA(y5, F5, 13) ^ B5, B5 = (F5 = I6 ^ n4) + f5 | 0, I6 = xA(Q5 = (g6 = y5) + h5 | 0, B5 = g6 >>> 0 > Q5 >>> 0 ? B5 + 1 | 0 : B5, 32), g6 = k5 + n4 | 0, k5 = g6 = (h5 = E5) ^ (E5 = (I6 = a5 + (255 ^ I6) | 0) >>> 0 < a5 >>> 0 ? g6 + 1 | 0 : g6), h5 = I6, S4 = xA(a5 = S4 ^ I6, g6, 21), f5 = n4, y5 = xA(y5, F5, 17) ^ Q5, g6 = (F5 = B5 ^ n4) + (D5 ^ w5) | 0, B5 = g6 = (I6 = o5 ^ M5) >>> 0 > (Q5 = y5 + I6 | 0) >>> 0 ? g6 + 1 | 0 : g6, I6 = xA(Q5, g6, 32), g6 = k5 + n4 | 0, g6 = (D5 = (I6 = I6 + a5 | 0) >>> 0 < a5 >>> 0 ? g6 + 1 | 0 : g6) ^ f5, f5 = I6, S4 = xA(w5 = S4 ^ I6, g6, 16), o5 = n4, y5 = xA(y5, F5, 13) ^ Q5, B5 = E5 + (F5 = n4 ^ B5) | 0, I6 = xA(Q5 = h5 + y5 | 0, B5 = Q5 >>> 0 < h5 >>> 0 ? B5 + 1 | 0 : B5, 32), g6 = g6 + n4 | 0, w5 = g6 = (E5 = (I6 = I6 + w5 | 0) >>> 0 < w5 >>> 0 ? g6 + 1 | 0 : g6) ^ o5, o5 = I6, S4 = xA(k5 = S4 ^ I6, g6, 21), h5 = n4, I6 = xA(y5, F5, 17), g6 = D5 + (F5 = B5 ^ n4) | 0, B5 = g6 = (Q5 = f5 + (D5 = I6 ^ Q5) | 0) >>> 0 < f5 >>> 0 ? g6 + 1 | 0 : g6, I6 = xA(Q5, g6, 32), g6 = w5 + n4 | 0, h5 = g6 = (f5 = (I6 = I6 + k5 | 0) >>> 0 < k5 >>> 0 ? g6 + 1 | 0 : g6) ^ h5, w5 = I6, k5 = xA(a5 = S4 ^ I6, g6, 16), S4 = n4, I6 = xA(D5, F5, 13), g6 = E5 + (y5 = B5 ^ n4) | 0, E5 = g6 = (D5 = o5 + (F5 = I6 ^ Q5) | 0) >>> 0 < o5 >>> 0 ? g6 + 1 | 0 : g6, I6 = xA(D5, g6, 32), g6 = h5 + n4 | 0, h5 = I6 = I6 + a5 | 0, o5 = g6 = I6 >>> 0 < a5 >>> 0 ? g6 + 1 | 0 : g6, k5 = xA(Q5 = k5 ^ I6, B5 = g6 ^ S4, 21), S4 = n4, I6 = xA(F5, y5, 17), g6 = f5 + (y5 = E5 ^ n4) | 0, E5 = Q5, Q5 = xA(I6 = w5 + (F5 = I6 ^ D5) | 0, g6 = I6 >>> 0 < w5 >>> 0 ? g6 + 1 | 0 : g6, 32), B5 = n4 + B5 | 0, S4 = xA(E5 = (f5 = E5 + Q5 | 0) ^ k5, Q5 = (D5 = Q5 >>> 0 > f5 >>> 0 ? B5 + 1 | 0 : B5) ^ S4, 16), w5 = n4, B5 = xA(F5, y5, 13), g6 = o5 + (y5 = g6 ^ n4) | 0, I6 = g6 = (B5 = h5 + (F5 = I6 ^ B5) | 0) >>> 0 < h5 >>> 0 ? g6 + 1 | 0 : g6, o5 = xA(B5, g6, 32), g6 = n4 + Q5 | 0, S4 = xA(S4 ^ (Q5 = E5 = o5 + E5 | 0), (g6 = Q5 >>> 0 < o5 >>> 0 ? g6 + 1 | 0 : g6) ^ w5, 21), w5 = n4, E5 = xA(F5, y5, 17), o5 = xA(E5 ^= B5, I6 ^= n4, 13), B5 = D5 + I6 | 0, D5 = I6 = n4 ^ ((E5 = E5 + f5 | 0) >>> 0 < f5 >>> 0 ? B5 + 1 | 0 : B5), B5 = xA(E5 ^= o5, I6, 17) ^ S4, I6 = n4 ^ w5, g6 = g6 + D5 | 0, h5 = Q5, B5 = xA(Q5 = Q5 + E5 | 0, g6 = h5 >>> 0 > Q5 >>> 0 ? g6 + 1 | 0 : g6, 32) ^ B5 ^ Q5, C5[0 | A7] = B5, C5[A7 + 1 | 0] = B5 >>> 8, C5[A7 + 2 | 0] = B5 >>> 16, C5[A7 + 3 | 0] = B5 >>> 24, I6 ^= g6 ^ n4, C5[A7 + 4 | 0] = I6, C5[A7 + 5 | 0] = I6 >>> 8, C5[A7 + 6 | 0] = I6 >>> 16, C5[A7 + 7 | 0] = I6 >>> 24, 0;
            }, yc: jI, zc: XI, Ac: Bg, Bc: Ag, Cc: Ag, Dc: Bg, Ec: function() {
              return -65;
            }, Fc: function(A7, I6, g6) {
              A7 |= 0;
              var B5, Q5, i2, E5, D5 = 0, o5 = 0, h5 = 0, w5 = 0, F5 = 0;
              return r4 = i2 = r4 - 160 | 0, RA(I6 |= 0, g6 |= 0, 32, 0), C5[0 | I6] = 248 & c4[0 | I6], C5[I6 + 31 | 0] = 63 & c4[I6 + 31 | 0] | 64, V2(i2, I6), QI(A7, i2), o5 = c4[0 | (Q5 = g6)] | c4[Q5 + 1 | 0] << 8 | c4[Q5 + 2 | 0] << 16 | c4[Q5 + 3 | 0] << 24, D5 = c4[Q5 + 4 | 0] | c4[Q5 + 5 | 0] << 8 | c4[Q5 + 6 | 0] << 16 | c4[Q5 + 7 | 0] << 24, h5 = c4[Q5 + 8 | 0] | c4[Q5 + 9 | 0] << 8 | c4[Q5 + 10 | 0] << 16 | c4[Q5 + 11 | 0] << 24, w5 = c4[Q5 + 12 | 0] | c4[Q5 + 13 | 0] << 8 | c4[Q5 + 14 | 0] << 16 | c4[Q5 + 15 | 0] << 24, F5 = c4[Q5 + 16 | 0] | c4[Q5 + 17 | 0] << 8 | c4[Q5 + 18 | 0] << 16 | c4[Q5 + 19 | 0] << 24, g6 = c4[Q5 + 20 | 0] | c4[Q5 + 21 | 0] << 8 | c4[Q5 + 22 | 0] << 16 | c4[Q5 + 23 | 0] << 24, E5 = c4[Q5 + 28 | 0] | c4[Q5 + 29 | 0] << 8 | c4[Q5 + 30 | 0] << 16 | c4[Q5 + 31 | 0] << 24, B5 = I6, I6 = c4[Q5 + 24 | 0] | c4[Q5 + 25 | 0] << 8 | c4[Q5 + 26 | 0] << 16 | c4[Q5 + 27 | 0] << 24, C5[B5 + 24 | 0] = I6, C5[B5 + 25 | 0] = I6 >>> 8, C5[B5 + 26 | 0] = I6 >>> 16, C5[B5 + 27 | 0] = I6 >>> 24, C5[B5 + 28 | 0] = E5, C5[B5 + 29 | 0] = E5 >>> 8, C5[B5 + 30 | 0] = E5 >>> 16, C5[B5 + 31 | 0] = E5 >>> 24, C5[B5 + 16 | 0] = F5, C5[B5 + 17 | 0] = F5 >>> 8, C5[B5 + 18 | 0] = F5 >>> 16, C5[B5 + 19 | 0] = F5 >>> 24, C5[B5 + 20 | 0] = g6, C5[B5 + 21 | 0] = g6 >>> 8, C5[B5 + 22 | 0] = g6 >>> 16, C5[B5 + 23 | 0] = g6 >>> 24, C5[B5 + 8 | 0] = h5, C5[B5 + 9 | 0] = h5 >>> 8, C5[B5 + 10 | 0] = h5 >>> 16, C5[B5 + 11 | 0] = h5 >>> 24, C5[B5 + 12 | 0] = w5, C5[B5 + 13 | 0] = w5 >>> 8, C5[B5 + 14 | 0] = w5 >>> 16, C5[B5 + 15 | 0] = w5 >>> 24, C5[0 | B5] = o5, C5[B5 + 1 | 0] = o5 >>> 8, C5[B5 + 2 | 0] = o5 >>> 16, C5[B5 + 3 | 0] = o5 >>> 24, C5[B5 + 4 | 0] = D5, C5[B5 + 5 | 0] = D5 >>> 8, C5[B5 + 6 | 0] = D5 >>> 16, C5[B5 + 7 | 0] = D5 >>> 24, h5 = c4[0 | (D5 = A7)] | c4[D5 + 1 | 0] << 8 | c4[D5 + 2 | 0] << 16 | c4[D5 + 3 | 0] << 24, w5 = c4[D5 + 4 | 0] | c4[D5 + 5 | 0] << 8 | c4[D5 + 6 | 0] << 16 | c4[D5 + 7 | 0] << 24, F5 = c4[D5 + 8 | 0] | c4[D5 + 9 | 0] << 8 | c4[D5 + 10 | 0] << 16 | c4[D5 + 11 | 0] << 24, g6 = c4[D5 + 12 | 0] | c4[D5 + 13 | 0] << 8 | c4[D5 + 14 | 0] << 16 | c4[D5 + 15 | 0] << 24, I6 = c4[D5 + 16 | 0] | c4[D5 + 17 | 0] << 8 | c4[D5 + 18 | 0] << 16 | c4[D5 + 19 | 0] << 24, A7 = c4[D5 + 20 | 0] | c4[D5 + 21 | 0] << 8 | c4[D5 + 22 | 0] << 16 | c4[D5 + 23 | 0] << 24, o5 = c4[D5 + 28 | 0] | c4[D5 + 29 | 0] << 8 | c4[D5 + 30 | 0] << 16 | c4[D5 + 31 | 0] << 24, D5 = c4[D5 + 24 | 0] | c4[D5 + 25 | 0] << 8 | c4[D5 + 26 | 0] << 16 | c4[D5 + 27 | 0] << 24, C5[B5 + 56 | 0] = D5, C5[B5 + 57 | 0] = D5 >>> 8, C5[B5 + 58 | 0] = D5 >>> 16, C5[B5 + 59 | 0] = D5 >>> 24, C5[B5 + 60 | 0] = o5, C5[B5 + 61 | 0] = o5 >>> 8, C5[B5 + 62 | 0] = o5 >>> 16, C5[B5 + 63 | 0] = o5 >>> 24, C5[B5 + 48 | 0] = I6, C5[B5 + 49 | 0] = I6 >>> 8, C5[B5 + 50 | 0] = I6 >>> 16, C5[B5 + 51 | 0] = I6 >>> 24, C5[B5 + 52 | 0] = A7, C5[B5 + 53 | 0] = A7 >>> 8, C5[B5 + 54 | 0] = A7 >>> 16, C5[B5 + 55 | 0] = A7 >>> 24, C5[B5 + 40 | 0] = F5, C5[B5 + 41 | 0] = F5 >>> 8, C5[B5 + 42 | 0] = F5 >>> 16, C5[B5 + 43 | 0] = F5 >>> 24, C5[B5 + 44 | 0] = g6, C5[B5 + 45 | 0] = g6 >>> 8, C5[B5 + 46 | 0] = g6 >>> 16, C5[B5 + 47 | 0] = g6 >>> 24, C5[B5 + 32 | 0] = h5, C5[B5 + 33 | 0] = h5 >>> 8, C5[B5 + 34 | 0] = h5 >>> 16, C5[B5 + 35 | 0] = h5 >>> 24, C5[B5 + 36 | 0] = w5, C5[B5 + 37 | 0] = w5 >>> 8, C5[B5 + 38 | 0] = w5 >>> 16, C5[B5 + 39 | 0] = w5 >>> 24, r4 = i2 + 160 | 0, 0;
            }, Gc: function(A7, I6) {
              A7 |= 0, I6 |= 0;
              var g6, B5, Q5, i2, E5, D5 = 0, h5 = 0, w5 = 0;
              return r4 = h5 = r4 - 192 | 0, UI(h5, 32), RA(I6, h5, 32, 0), C5[0 | I6] = 248 & c4[0 | I6], C5[I6 + 31 | 0] = 63 & c4[I6 + 31 | 0] | 64, V2(w5 = h5 + 32 | 0, I6), QI(A7, w5), g6 = h5, w5 = o4[h5 + 28 >> 2], h5 = o4[h5 + 24 >> 2], C5[I6 + 24 | 0] = h5, C5[I6 + 25 | 0] = h5 >>> 8, C5[I6 + 26 | 0] = h5 >>> 16, C5[I6 + 27 | 0] = h5 >>> 24, C5[I6 + 28 | 0] = w5, C5[I6 + 29 | 0] = w5 >>> 8, C5[I6 + 30 | 0] = w5 >>> 16, C5[I6 + 31 | 0] = w5 >>> 24, w5 = o4[g6 + 20 >> 2], h5 = o4[g6 + 16 >> 2], C5[I6 + 16 | 0] = h5, C5[I6 + 17 | 0] = h5 >>> 8, C5[I6 + 18 | 0] = h5 >>> 16, C5[I6 + 19 | 0] = h5 >>> 24, C5[I6 + 20 | 0] = w5, C5[I6 + 21 | 0] = w5 >>> 8, C5[I6 + 22 | 0] = w5 >>> 16, C5[I6 + 23 | 0] = w5 >>> 24, w5 = o4[g6 + 12 >> 2], h5 = o4[g6 + 8 >> 2], C5[I6 + 8 | 0] = h5, C5[I6 + 9 | 0] = h5 >>> 8, C5[I6 + 10 | 0] = h5 >>> 16, C5[I6 + 11 | 0] = h5 >>> 24, C5[I6 + 12 | 0] = w5, C5[I6 + 13 | 0] = w5 >>> 8, C5[I6 + 14 | 0] = w5 >>> 16, C5[I6 + 15 | 0] = w5 >>> 24, w5 = o4[g6 + 4 >> 2], h5 = o4[g6 >> 2], C5[0 | I6] = h5, C5[I6 + 1 | 0] = h5 >>> 8, C5[I6 + 2 | 0] = h5 >>> 16, C5[I6 + 3 | 0] = h5 >>> 24, C5[I6 + 4 | 0] = w5, C5[I6 + 5 | 0] = w5 >>> 8, C5[I6 + 6 | 0] = w5 >>> 16, C5[I6 + 7 | 0] = w5 >>> 24, B5 = c4[0 | (D5 = A7)] | c4[D5 + 1 | 0] << 8 | c4[D5 + 2 | 0] << 16 | c4[D5 + 3 | 0] << 24, Q5 = c4[D5 + 4 | 0] | c4[D5 + 5 | 0] << 8 | c4[D5 + 6 | 0] << 16 | c4[D5 + 7 | 0] << 24, i2 = c4[D5 + 8 | 0] | c4[D5 + 9 | 0] << 8 | c4[D5 + 10 | 0] << 16 | c4[D5 + 11 | 0] << 24, w5 = c4[D5 + 12 | 0] | c4[D5 + 13 | 0] << 8 | c4[D5 + 14 | 0] << 16 | c4[D5 + 15 | 0] << 24, h5 = c4[D5 + 16 | 0] | c4[D5 + 17 | 0] << 8 | c4[D5 + 18 | 0] << 16 | c4[D5 + 19 | 0] << 24, A7 = c4[D5 + 20 | 0] | c4[D5 + 21 | 0] << 8 | c4[D5 + 22 | 0] << 16 | c4[D5 + 23 | 0] << 24, E5 = c4[D5 + 28 | 0] | c4[D5 + 29 | 0] << 8 | c4[D5 + 30 | 0] << 16 | c4[D5 + 31 | 0] << 24, D5 = c4[D5 + 24 | 0] | c4[D5 + 25 | 0] << 8 | c4[D5 + 26 | 0] << 16 | c4[D5 + 27 | 0] << 24, C5[I6 + 56 | 0] = D5, C5[I6 + 57 | 0] = D5 >>> 8, C5[I6 + 58 | 0] = D5 >>> 16, C5[I6 + 59 | 0] = D5 >>> 24, C5[I6 + 60 | 0] = E5, C5[I6 + 61 | 0] = E5 >>> 8, C5[I6 + 62 | 0] = E5 >>> 16, C5[I6 + 63 | 0] = E5 >>> 24, C5[I6 + 48 | 0] = h5, C5[I6 + 49 | 0] = h5 >>> 8, C5[I6 + 50 | 0] = h5 >>> 16, C5[I6 + 51 | 0] = h5 >>> 24, C5[I6 + 52 | 0] = A7, C5[I6 + 53 | 0] = A7 >>> 8, C5[I6 + 54 | 0] = A7 >>> 16, C5[I6 + 55 | 0] = A7 >>> 24, C5[I6 + 40 | 0] = i2, C5[I6 + 41 | 0] = i2 >>> 8, C5[I6 + 42 | 0] = i2 >>> 16, C5[I6 + 43 | 0] = i2 >>> 24, C5[I6 + 44 | 0] = w5, C5[I6 + 45 | 0] = w5 >>> 8, C5[I6 + 46 | 0] = w5 >>> 16, C5[I6 + 47 | 0] = w5 >>> 24, C5[I6 + 32 | 0] = B5, C5[I6 + 33 | 0] = B5 >>> 8, C5[I6 + 34 | 0] = B5 >>> 16, C5[I6 + 35 | 0] = B5 >>> 24, C5[I6 + 36 | 0] = Q5, C5[I6 + 37 | 0] = Q5 >>> 8, C5[I6 + 38 | 0] = Q5 >>> 16, C5[I6 + 39 | 0] = Q5 >>> 24, xI(g6, 32), r4 = g6 + 192 | 0, 0;
            }, Hc: function(A7, I6, g6, C6, B5, i2) {
              var D5, c5;
              return I6 |= 0, g6 |= 0, B5 |= 0, i2 |= 0, r4 = D5 = r4 - 16 | 0, c5 = (A7 |= 0) - -64 | 0, (C6 |= 0) && E4(c5, g6, C6), g6 = 0, J4(A7, D5 + 8 | 0, c5, C6, B5, i2, 0), 64 != o4[D5 + 8 >> 2] | o4[D5 + 12 >> 2] ? (I6 && (o4[I6 >> 2] = 0, o4[I6 + 4 >> 2] = 0), (I6 = C6 - -64 | 0) && Q4(A7, 0, I6), g6 = -1) : I6 && (o4[I6 >> 2] = C6 - -64, o4[I6 + 4 >> 2] = B5 - ((C6 >>> 0 < 4294967232) - 1 | 0)), r4 = D5 + 16 | 0, 0 | g6;
            }, Ic: function(A7, I6, g6, C6, B5, i2) {
              A7 |= 0, I6 |= 0, g6 |= 0;
              var D5 = 0;
              A: {
                I: {
                  if (D5 = C6 |= 0, !(!(B5 |= 0) & C6 >>> 0 < 64 || (C6 = B5 - 1 | 0, !(C6 = (B5 = D5 + -64 | 0) >>> 0 < 4294967232 ? C6 + 1 | 0 : C6) & B5 >>> 0 > 4294967231 | C6))) {
                    if (!G4(g6, D5 = g6 - -64 | 0, B5, C6, i2 |= 0, 0)) break I;
                    !A7 | !B5 || Q4(A7, 0, B5);
                  }
                  if (g6 = -1, !I6) break A;
                  o4[I6 >> 2] = 0, o4[I6 + 4 >> 2] = 0;
                  break A;
                }
                I6 && (o4[I6 >> 2] = B5, o4[I6 + 4 >> 2] = C6), g6 = 0, !A7 | !B5 || E4(A7, D5, B5);
              }
              return 0 | g6;
            }, Jc: function(A7, I6, g6, C6, B5, Q5) {
              return J4(A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, B5 |= 0, Q5 |= 0, 0), 0;
            }, Kc: function(A7, I6, g6, C6, B5) {
              return 0 | G4(A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, B5 |= 0, 0);
            }, Lc: function(A7) {
              return uA(A7 |= 0), 0;
            }, Mc: function(A7, I6, g6, C6) {
              return 0 | CA(A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0);
            }, Nc: function(A7, I6, g6, C6) {
              var B5;
              return I6 |= 0, g6 |= 0, C6 |= 0, r4 = B5 = r4 + -64 | 0, W2(A7 |= 0, B5), A7 = J4(I6, g6, B5, 64, 0, C6, 1), r4 = B5 - -64 | 0, 0 | A7;
            }, Oc: function(A7, I6, g6) {
              var C6;
              return I6 |= 0, g6 |= 0, r4 = C6 = r4 + -64 | 0, W2(A7 |= 0, C6), A7 = G4(I6, C6, 64, 0, g6, 1), r4 = C6 - -64 | 0, 0 | A7;
            }, Pc: function(A7, I6) {
              A7 |= 0;
              var g6, B5 = 0, i2 = 0, E5 = 0, D5 = 0, c5 = 0, h5 = 0, w5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0, t5 = 0, U5 = 0, J5 = 0, K5 = 0, e4 = 0, Y5 = 0, N5 = 0, G5 = 0, p5 = 0, L5 = 0, d5 = 0, P5 = 0, R4 = 0, b4 = 0, v5 = 0, u4 = 0, z3 = 0, O3 = 0, q3 = 0, W3 = 0, x3 = 0, V3 = 0, j3 = 0, l3 = 0, _3 = 0, X3 = 0, T3 = 0, AA2 = 0, IA2 = 0, gA2 = 0, CA2 = 0, BA2 = 0, QA2 = 0, iA2 = 0, EA2 = 0, DA2 = 0, oA2 = 0, cA2 = 0, hA2 = 0, wA2 = 0, FA2 = 0, fA2 = 0, SA2 = 0, aA2 = 0, MA2 = 0, rA2 = 0, tA2 = 0, UA2 = 0, JA2 = 0, KA2 = 0, eA2 = 0, YA2 = 0, NA2 = 0, GA2 = 0, HA2 = 0, sA2 = 0, pA2 = 0, LA2 = 0, dA2 = 0, PA2 = 0, RA2 = 0, bA2 = 0, uA2 = 0, zA2 = 0, OA2 = 0, WA2 = 0, xA2 = 0;
              if (r4 = g6 = r4 - 256 | 0, dA2 = -1, !qA(I6 |= 0) && !m2(B5 = g6 + 96 | 0, I6)) {
                for (r4 = E5 = r4 - 2048 | 0, kA(D5 = E5 + 640 | 0, B5), B5 = o4[(I6 = B5) + 36 >> 2], o4[E5 + 352 >> 2] = o4[I6 + 32 >> 2], o4[E5 + 356 >> 2] = B5, B5 = o4[I6 + 28 >> 2], o4[E5 + 344 >> 2] = o4[I6 + 24 >> 2], o4[E5 + 348 >> 2] = B5, B5 = o4[I6 + 20 >> 2], o4[E5 + 336 >> 2] = o4[I6 + 16 >> 2], o4[E5 + 340 >> 2] = B5, B5 = o4[I6 + 12 >> 2], o4[E5 + 328 >> 2] = o4[I6 + 8 >> 2], o4[E5 + 332 >> 2] = B5, B5 = o4[I6 + 4 >> 2], o4[E5 + 320 >> 2] = o4[I6 >> 2], o4[E5 + 324 >> 2] = B5, B5 = o4[I6 + 44 >> 2], o4[E5 + 360 >> 2] = o4[I6 + 40 >> 2], o4[E5 + 364 >> 2] = B5, B5 = o4[I6 + 52 >> 2], o4[E5 + 368 >> 2] = o4[I6 + 48 >> 2], o4[E5 + 372 >> 2] = B5, B5 = o4[I6 + 60 >> 2], o4[E5 + 376 >> 2] = o4[I6 + 56 >> 2], o4[E5 + 380 >> 2] = B5, i2 = o4[4 + (B5 = I6 - -64 | 0) >> 2], o4[E5 + 384 >> 2] = o4[B5 >> 2], o4[E5 + 388 >> 2] = i2, B5 = o4[I6 + 76 >> 2], o4[E5 + 392 >> 2] = o4[I6 + 72 >> 2], o4[E5 + 396 >> 2] = B5, B5 = o4[I6 + 84 >> 2], o4[E5 + 400 >> 2] = o4[I6 + 80 >> 2], o4[E5 + 404 >> 2] = B5, B5 = o4[I6 + 92 >> 2], o4[E5 + 408 >> 2] = o4[I6 + 88 >> 2], o4[E5 + 412 >> 2] = B5, B5 = o4[I6 + 100 >> 2], o4[E5 + 416 >> 2] = o4[I6 + 96 >> 2], o4[E5 + 420 >> 2] = B5, B5 = o4[I6 + 108 >> 2], o4[E5 + 424 >> 2] = o4[I6 + 104 >> 2], o4[E5 + 428 >> 2] = B5, B5 = o4[I6 + 116 >> 2], o4[E5 + 432 >> 2] = o4[I6 + 112 >> 2], o4[E5 + 436 >> 2] = B5, s4(I6 = E5 + 480 | 0, B5 = E5 + 320 | 0), H4(i2 = E5 + 160 | 0, I6, h5 = E5 + 600 | 0), H4(E5 + 200 | 0, w5 = E5 + 520 | 0, y5 = E5 + 560 | 0), H4(E5 + 240 | 0, y5, h5), H4(E5 + 280 | 0, I6, w5), Z2(I6, i2, D5), H4(B5, I6, h5), H4(U5 = E5 + 360 | 0, w5, y5), H4(J5 = E5 + 400 | 0, y5, h5), H4(a5 = E5 + 440 | 0, I6, w5), kA(D5 = E5 + 800 | 0, B5), Z2(I6, i2, D5), H4(B5, I6, h5), H4(U5, w5, y5), H4(J5, y5, h5), H4(a5, I6, w5), kA(D5 = E5 + 960 | 0, B5), Z2(I6, i2, D5), H4(B5, I6, h5), H4(U5, w5, y5), H4(J5, y5, h5), H4(a5, I6, w5), kA(D5 = E5 + 1120 | 0, B5), Z2(I6, i2, D5), H4(B5, I6, h5), H4(U5, w5, y5), H4(J5, y5, h5), H4(a5, I6, w5), kA(D5 = E5 + 1280 | 0, B5), Z2(I6, i2, D5), H4(B5, I6, h5), H4(U5, w5, y5), H4(J5, y5, h5), H4(a5, I6, w5), kA(D5 = E5 + 1440 | 0, B5), Z2(I6, i2, D5), H4(B5, I6, h5), H4(U5, w5, y5), H4(J5, y5, h5), H4(a5, I6, w5), kA(D5 = E5 + 1600 | 0, B5), Z2(I6, i2, D5), H4(B5, I6, h5), H4(U5, w5, y5), H4(J5, y5, h5), H4(a5, I6, w5), kA(E5 + 1760 | 0, B5), o4[E5 + 32 >> 2] = 0, o4[E5 + 36 >> 2] = 0, o4[E5 + 24 >> 2] = 0, o4[E5 + 28 >> 2] = 0, o4[E5 + 16 >> 2] = 0, o4[E5 + 20 >> 2] = 0, o4[E5 + 8 >> 2] = 0, o4[E5 + 12 >> 2] = 0, o4[E5 >> 2] = 0, o4[E5 + 4 >> 2] = 0, o4[E5 + 44 >> 2] = 0, o4[E5 + 48 >> 2] = 0, o4[E5 + 40 >> 2] = 1, o4[E5 + 52 >> 2] = 0, o4[E5 + 56 >> 2] = 0, o4[E5 + 60 >> 2] = 0, o4[E5 + 64 >> 2] = 0, o4[E5 + 68 >> 2] = 0, o4[E5 + 72 >> 2] = 0, o4[E5 + 76 >> 2] = 0, o4[E5 + 80 >> 2] = 1, Q4(E5 + 84 | 0, 0, 76), S4 = E5 + 120 | 0, t5 = E5 + 2008 | 0, k5 = E5 + 1968 | 0, B5 = E5 + 80 | 0, i2 = E5 + 40 | 0, D5 = 252; I6 = o4[E5 + 36 >> 2], o4[E5 + 1960 >> 2] = o4[E5 + 32 >> 2], o4[E5 + 1964 >> 2] = I6, I6 = o4[E5 + 28 >> 2], o4[E5 + 1952 >> 2] = o4[E5 + 24 >> 2], o4[E5 + 1956 >> 2] = I6, I6 = o4[E5 + 20 >> 2], o4[E5 + 1944 >> 2] = o4[E5 + 16 >> 2], o4[E5 + 1948 >> 2] = I6, I6 = o4[E5 + 12 >> 2], o4[E5 + 1936 >> 2] = o4[E5 + 8 >> 2], o4[E5 + 1940 >> 2] = I6, I6 = o4[E5 + 4 >> 2], o4[E5 + 1928 >> 2] = o4[E5 >> 2], o4[E5 + 1932 >> 2] = I6, c5 = o4[(I6 = i2) + 36 >> 2], o4[k5 + 32 >> 2] = o4[I6 + 32 >> 2], o4[k5 + 36 >> 2] = c5, c5 = o4[I6 + 28 >> 2], o4[k5 + 24 >> 2] = o4[I6 + 24 >> 2], o4[k5 + 28 >> 2] = c5, c5 = o4[I6 + 20 >> 2], o4[k5 + 16 >> 2] = o4[I6 + 16 >> 2], o4[k5 + 20 >> 2] = c5, c5 = o4[I6 + 12 >> 2], o4[k5 + 8 >> 2] = o4[I6 + 8 >> 2], o4[k5 + 12 >> 2] = c5, c5 = o4[I6 + 4 >> 2], o4[k5 >> 2] = o4[I6 >> 2], o4[k5 + 4 >> 2] = c5, c5 = o4[(I6 = B5) + 36 >> 2], o4[t5 + 32 >> 2] = o4[I6 + 32 >> 2], o4[t5 + 36 >> 2] = c5, c5 = o4[I6 + 28 >> 2], o4[t5 + 24 >> 2] = o4[I6 + 24 >> 2], o4[t5 + 28 >> 2] = c5, c5 = o4[I6 + 20 >> 2], o4[t5 + 16 >> 2] = o4[I6 + 16 >> 2], o4[t5 + 20 >> 2] = c5, c5 = o4[I6 + 12 >> 2], o4[t5 + 8 >> 2] = o4[I6 + 8 >> 2], o4[t5 + 12 >> 2] = c5, c5 = o4[I6 + 4 >> 2], o4[t5 >> 2] = o4[I6 >> 2], o4[t5 + 4 >> 2] = c5, D5 = C5[(I6 = D5) + 33408 | 0], s4(c5 = E5 + 480 | 0, E5 + 1928 | 0), (0 | D5) > 0 ? (H4(K5 = E5 + 320 | 0, c5, h5), H4(U5, w5, y5), H4(J5, y5, h5), H4(a5, c5, w5), Z2(c5, K5, (E5 + 640 | 0) + F4((254 & D5) >>> 1 | 0, 160) | 0)) : (0 | D5) >= 0 || (H4(K5 = E5 + 320 | 0, c5 = E5 + 480 | 0, h5), H4(U5, w5, y5), H4(J5, y5, h5), H4(a5, c5, w5), $2(c5, K5, (E5 + 640 | 0) + F4((0 - D5 & 254) >>> 1 | 0, 160) | 0)), H4(E5, c5 = E5 + 480 | 0, h5), H4(i2, w5, y5), H4(B5, y5, h5), H4(S4, c5, w5), D5 = I6 - 1 | 0, I6; ) ;
                I6 = o4[E5 + 40 >> 2], B5 = o4[E5 + 80 >> 2], i2 = o4[E5 + 44 >> 2], D5 = o4[E5 + 84 >> 2], h5 = o4[E5 + 48 >> 2], w5 = o4[E5 + 88 >> 2], y5 = o4[E5 + 52 >> 2], t5 = o4[E5 + 92 >> 2], k5 = o4[E5 + 56 >> 2], U5 = o4[E5 + 96 >> 2], J5 = o4[E5 + 60 >> 2], a5 = o4[E5 + 100 >> 2], S4 = o4[E5 + 64 >> 2], K5 = o4[E5 + 104 >> 2], L5 = o4[E5 + 68 >> 2], Y5 = o4[E5 + 108 >> 2], p5 = o4[E5 + 72 >> 2], q3 = o4[E5 + 112 >> 2], o4[E5 + 676 >> 2] = o4[E5 + 76 >> 2] - o4[E5 + 116 >> 2], o4[E5 + 672 >> 2] = p5 - q3, o4[E5 + 668 >> 2] = L5 - Y5, o4[E5 + 664 >> 2] = S4 - K5, o4[E5 + 660 >> 2] = J5 - a5, o4[E5 + 656 >> 2] = k5 - U5, o4[E5 + 652 >> 2] = y5 - t5, o4[E5 + 648 >> 2] = h5 - w5, o4[E5 + 644 >> 2] = i2 - D5, o4[E5 + 640 >> 2] = I6 - B5, nA(c5, E5), I6 = vA(c5, 32), nA(c5, E5 + 640 | 0), B5 = vA(c5, 32), r4 = E5 + 2048 | 0, I6 & B5 && (dA2 = 0, W3 = o4[g6 + 172 >> 2], o4[g6 + 36 >> 2] = 0 - W3, U5 = o4[g6 + 168 >> 2], o4[g6 + 32 >> 2] = 0 - U5, x3 = o4[g6 + 164 >> 2], o4[g6 + 28 >> 2] = 0 - x3, w5 = o4[g6 + 160 >> 2], o4[g6 + 24 >> 2] = 0 - w5, V3 = o4[g6 + 156 >> 2], o4[g6 + 20 >> 2] = 0 - V3, y5 = o4[g6 + 152 >> 2], o4[g6 + 16 >> 2] = 0 - y5, j3 = o4[g6 + 148 >> 2], o4[g6 + 12 >> 2] = 0 - j3, t5 = o4[g6 + 144 >> 2], o4[g6 + 8 >> 2] = 0 - t5, l3 = o4[g6 + 140 >> 2], o4[g6 + 4 >> 2] = 0 - l3, E5 = o4[g6 + 136 >> 2], o4[g6 >> 2] = 1 - E5, yA(g6, g6), I6 = AI(J5 = o4[g6 + 4 >> 2], z3 = J5 >> 31, p5 = V3 << 1, DA2 = p5 >> 31), B5 = n4, i2 = AI(h5 = o4[g6 >> 2], d5 = h5 >> 31, w5, P5 = w5 >> 31), B5 = n4 + B5 | 0, B5 = (I6 = i2 + I6 | 0) >>> 0 < i2 >>> 0 ? B5 + 1 | 0 : B5, i2 = (D5 = AI(c5 = o4[g6 + 8 >> 2], _3 = c5 >> 31, y5, R4 = y5 >> 31)) + I6 | 0, I6 = n4 + B5 | 0, I6 = i2 >>> 0 < D5 >>> 0 ? I6 + 1 | 0 : I6, B5 = i2, i2 = AI(L5 = o4[g6 + 12 >> 2], AA2 = L5 >> 31, q3 = j3 << 1, oA2 = q3 >> 31), I6 = n4 + I6 | 0, I6 = (B5 = B5 + i2 | 0) >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, i2 = AI(X3 = o4[g6 + 16 >> 2], CA2 = X3 >> 31, t5, b4 = t5 >> 31), I6 = n4 + I6 | 0, I6 = (B5 = i2 + B5 | 0) >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, NA2 = D5 = o4[g6 + 20 >> 2], k5 = AI(D5, cA2 = D5 >> 31, BA2 = l3 << 1, hA2 = BA2 >> 31), i2 = n4 + I6 | 0, i2 = (B5 = k5 + B5 | 0) >>> 0 < k5 >>> 0 ? i2 + 1 | 0 : i2, GA2 = Y5 = o4[g6 + 24 >> 2], I6 = (E5 = AI(Y5, KA2 = Y5 >> 31, k5 = E5 + 1 | 0, v5 = k5 >> 31)) + B5 | 0, B5 = n4 + i2 | 0, B5 = I6 >>> 0 < E5 >>> 0 ? B5 + 1 | 0 : B5, wA2 = o4[g6 + 28 >> 2], i2 = (E5 = AI(K5 = F4(wA2, 19), IA2 = K5 >> 31, QA2 = W3 << 1, FA2 = QA2 >> 31)) + I6 | 0, I6 = n4 + B5 | 0, I6 = i2 >>> 0 < E5 >>> 0 ? I6 + 1 | 0 : I6, B5 = i2, PA2 = o4[g6 + 32 >> 2], i2 = AI(S4 = F4(PA2, 19), T3 = S4 >> 31, U5, u4 = U5 >> 31), I6 = n4 + I6 | 0, I6 = (B5 = B5 + i2 | 0) >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, RA2 = o4[g6 + 36 >> 2], i2 = AI(a5 = F4(RA2, 19), O3 = a5 >> 31, iA2 = x3 << 1, fA2 = iA2 >> 31), I6 = n4 + I6 | 0, M5 = B5 = i2 + B5 | 0, E5 = B5 >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, I6 = AI(y5, R4, J5, z3), B5 = n4, f5 = AI(h5, d5, V3, SA2 = V3 >> 31), i2 = n4 + B5 | 0, i2 = (I6 = f5 + I6 | 0) >>> 0 < f5 >>> 0 ? i2 + 1 | 0 : i2, f5 = AI(c5, _3, j3, aA2 = j3 >> 31), B5 = n4 + i2 | 0, B5 = (I6 = f5 + I6 | 0) >>> 0 < f5 >>> 0 ? B5 + 1 | 0 : B5, i2 = (f5 = AI(t5, b4, L5, AA2)) + I6 | 0, I6 = n4 + B5 | 0, I6 = i2 >>> 0 < f5 >>> 0 ? I6 + 1 | 0 : I6, B5 = i2, i2 = AI(X3, CA2, l3, MA2 = l3 >> 31), I6 = n4 + I6 | 0, I6 = (B5 = B5 + i2 | 0) >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, i2 = AI(k5, v5, D5, cA2), I6 = n4 + I6 | 0, I6 = (B5 = i2 + B5 | 0) >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, f5 = AI(Y5 = F4(Y5, 19), EA2 = Y5 >> 31, W3, rA2 = W3 >> 31), i2 = n4 + I6 | 0, i2 = (B5 = f5 + B5 | 0) >>> 0 < f5 >>> 0 ? i2 + 1 | 0 : i2, I6 = (f5 = AI(U5, u4, K5, IA2)) + B5 | 0, B5 = n4 + i2 | 0, B5 = I6 >>> 0 < f5 >>> 0 ? B5 + 1 | 0 : B5, i2 = (f5 = AI(S4, T3, x3, tA2 = x3 >> 31)) + I6 | 0, I6 = n4 + B5 | 0, I6 = i2 >>> 0 < f5 >>> 0 ? I6 + 1 | 0 : I6, B5 = i2, i2 = AI(w5, P5, a5, O3), I6 = n4 + I6 | 0, HA2 = B5 = B5 + i2 | 0, gA2 = B5 >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, I6 = AI(J5, z3, q3, oA2), i2 = n4, B5 = (f5 = AI(h5, d5, y5, R4)) + I6 | 0, I6 = n4 + i2 | 0, I6 = B5 >>> 0 < f5 >>> 0 ? I6 + 1 | 0 : I6, f5 = AI(t5, b4, c5, _3), i2 = n4 + I6 | 0, i2 = (B5 = f5 + B5 | 0) >>> 0 < f5 >>> 0 ? i2 + 1 | 0 : i2, I6 = (f5 = AI(L5, AA2, BA2, hA2)) + B5 | 0, B5 = n4 + i2 | 0, B5 = I6 >>> 0 < f5 >>> 0 ? B5 + 1 | 0 : B5, i2 = (f5 = AI(k5, v5, X3, CA2)) + I6 | 0, I6 = n4 + B5 | 0, I6 = i2 >>> 0 < f5 >>> 0 ? I6 + 1 | 0 : I6, B5 = i2, i2 = AI(f5 = F4(D5, 19), UA2 = f5 >> 31, QA2, FA2), I6 = n4 + I6 | 0, I6 = (B5 = B5 + i2 | 0) >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, i2 = AI(U5, u4, Y5, EA2), I6 = n4 + I6 | 0, I6 = (B5 = i2 + B5 | 0) >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, D5 = AI(K5, IA2, iA2, fA2), i2 = n4 + I6 | 0, i2 = (B5 = D5 + B5 | 0) >>> 0 < D5 >>> 0 ? i2 + 1 | 0 : i2, I6 = (D5 = AI(w5, P5, S4, T3)) + B5 | 0, B5 = n4 + i2 | 0, B5 = I6 >>> 0 < D5 >>> 0 ? B5 + 1 | 0 : B5, i2 = (D5 = AI(a5, O3, p5, DA2)) + I6 | 0, I6 = n4 + B5 | 0, bA2 = i2, uA2 = I6 = i2 >>> 0 < D5 >>> 0 ? I6 + 1 | 0 : I6, zA2 = i2 = i2 + 33554432 | 0, OA2 = I6 = i2 >>> 0 < 33554432 ? I6 + 1 | 0 : I6, i2 = (67108863 & I6) << 6 | i2 >>> 26, I6 = (I6 >> 26) + gA2 | 0, HA2 = D5 = i2 + HA2 | 0, I6 = i2 >>> 0 > D5 >>> 0 ? I6 + 1 | 0 : I6, WA2 = D5 = D5 + 16777216 | 0, I6 = (B5 = (i2 = D5 >>> 0 < 16777216 ? I6 + 1 | 0 : I6) >> 25) + E5 | 0, I6 = (i2 = (D5 = (33554431 & i2) << 7 | D5 >>> 25) + M5 | 0) >>> 0 < D5 >>> 0 ? I6 + 1 | 0 : I6, G5 = B5 = i2 + 33554432 | 0, D5 = I6 = B5 >>> 0 < 33554432 ? I6 + 1 | 0 : I6, o4[g6 + 72 >> 2] = i2 - (-67108864 & B5), I6 = AI(J5, z3, BA2, hA2), B5 = n4, E5 = AI(h5, d5, t5, b4), i2 = n4 + B5 | 0, i2 = (I6 = E5 + I6 | 0) >>> 0 < E5 >>> 0 ? i2 + 1 | 0 : i2, B5 = (E5 = AI(k5, v5, c5, _3)) + I6 | 0, I6 = n4 + i2 | 0, I6 = B5 >>> 0 < E5 >>> 0 ? I6 + 1 | 0 : I6, i2 = AI(E5 = F4(L5, 19), JA2 = E5 >> 31, QA2, FA2), I6 = n4 + I6 | 0, I6 = (B5 = i2 + B5 | 0) >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, i2 = (M5 = AI(gA2 = F4(X3, 19), eA2 = gA2 >> 31, U5, u4)) + B5 | 0, B5 = n4 + I6 | 0, B5 = i2 >>> 0 < M5 >>> 0 ? B5 + 1 | 0 : B5, M5 = AI(iA2, fA2, f5, UA2), I6 = n4 + B5 | 0, I6 = (i2 = M5 + i2 | 0) >>> 0 < M5 >>> 0 ? I6 + 1 | 0 : I6, B5 = (M5 = AI(w5, P5, Y5, EA2)) + i2 | 0, i2 = n4 + I6 | 0, i2 = B5 >>> 0 < M5 >>> 0 ? i2 + 1 | 0 : i2, M5 = AI(K5, IA2, p5, DA2), I6 = n4 + i2 | 0, I6 = (B5 = M5 + B5 | 0) >>> 0 < M5 >>> 0 ? I6 + 1 | 0 : I6, i2 = AI(y5, R4, S4, T3), I6 = n4 + I6 | 0, I6 = (B5 = i2 + B5 | 0) >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, i2 = (M5 = AI(a5, O3, q3, oA2)) + B5 | 0, B5 = n4 + I6 | 0, N5 = i2, sA2 = i2 >>> 0 < M5 >>> 0 ? B5 + 1 | 0 : B5, I6 = AI(k5, v5, J5, z3), B5 = n4, i2 = (M5 = AI(h5, d5, l3, MA2)) + I6 | 0, I6 = n4 + B5 | 0, I6 = i2 >>> 0 < M5 >>> 0 ? I6 + 1 | 0 : I6, M5 = B5 = F4(c5, 19), B5 = (e4 = AI(B5, YA2 = B5 >> 31, W3, rA2)) + i2 | 0, i2 = n4 + I6 | 0, i2 = B5 >>> 0 < e4 >>> 0 ? i2 + 1 | 0 : i2, e4 = AI(E5, JA2, U5, u4), I6 = n4 + i2 | 0, I6 = (B5 = e4 + B5 | 0) >>> 0 < e4 >>> 0 ? I6 + 1 | 0 : I6, i2 = AI(gA2, eA2, x3, tA2), I6 = n4 + I6 | 0, I6 = (B5 = i2 + B5 | 0) >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, i2 = (e4 = AI(w5, P5, f5, UA2)) + B5 | 0, B5 = n4 + I6 | 0, B5 = i2 >>> 0 < e4 >>> 0 ? B5 + 1 | 0 : B5, e4 = AI(Y5, EA2, V3, SA2), I6 = n4 + B5 | 0, I6 = (i2 = e4 + i2 | 0) >>> 0 < e4 >>> 0 ? I6 + 1 | 0 : I6, B5 = (e4 = AI(y5, R4, K5, IA2)) + i2 | 0, i2 = n4 + I6 | 0, i2 = B5 >>> 0 < e4 >>> 0 ? i2 + 1 | 0 : i2, e4 = AI(S4, T3, j3, aA2), I6 = n4 + i2 | 0, I6 = (B5 = e4 + B5 | 0) >>> 0 < e4 >>> 0 ? I6 + 1 | 0 : I6, i2 = AI(t5, b4, a5, O3), I6 = n4 + I6 | 0, pA2 = B5 = i2 + B5 | 0, e4 = B5 >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, I6 = AI(I6 = F4(J5, 19), I6 >> 31, QA2, FA2), B5 = n4, i2 = AI(h5, d5, k5, v5), B5 = n4 + B5 | 0, B5 = (I6 = i2 + I6 | 0) >>> 0 < i2 >>> 0 ? B5 + 1 | 0 : B5, i2 = (M5 = AI(M5, YA2, U5, u4)) + I6 | 0, I6 = n4 + B5 | 0, B5 = (E5 = AI(E5, JA2, iA2, fA2)) + i2 | 0, i2 = n4 + (i2 >>> 0 < M5 >>> 0 ? I6 + 1 | 0 : I6) | 0, i2 = B5 >>> 0 < E5 >>> 0 ? i2 + 1 | 0 : i2, E5 = AI(w5, P5, gA2, eA2), I6 = n4 + i2 | 0, I6 = (B5 = E5 + B5 | 0) >>> 0 < E5 >>> 0 ? I6 + 1 | 0 : I6, i2 = AI(p5, DA2, f5, UA2), I6 = n4 + I6 | 0, I6 = (B5 = i2 + B5 | 0) >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, i2 = (E5 = AI(y5, R4, Y5, EA2)) + B5 | 0, B5 = n4 + I6 | 0, B5 = i2 >>> 0 < E5 >>> 0 ? B5 + 1 | 0 : B5, E5 = AI(K5, IA2, q3, oA2), I6 = n4 + B5 | 0, I6 = (i2 = E5 + i2 | 0) >>> 0 < E5 >>> 0 ? I6 + 1 | 0 : I6, B5 = (E5 = AI(t5, b4, S4, T3)) + i2 | 0, i2 = n4 + I6 | 0, i2 = B5 >>> 0 < E5 >>> 0 ? i2 + 1 | 0 : i2, E5 = AI(a5, O3, BA2, hA2), I6 = n4 + i2 | 0, M5 = B5 = E5 + B5 | 0, JA2 = I6 = B5 >>> 0 < E5 >>> 0 ? I6 + 1 | 0 : I6, YA2 = B5 = B5 + 33554432 | 0, xA2 = I6 = B5 >>> 0 < 33554432 ? I6 + 1 | 0 : I6, i2 = I6 >> 26, I6 = (67108863 & I6) << 6 | B5 >>> 26, B5 = i2 + e4 | 0, e4 = E5 = I6 + pA2 | 0, I6 = B5 = I6 >>> 0 > E5 >>> 0 ? B5 + 1 | 0 : B5, pA2 = E5 = E5 + 16777216 | 0, E5 = (33554431 & (I6 = E5 >>> 0 < 16777216 ? I6 + 1 | 0 : I6)) << 7 | E5 >>> 25, I6 = (I6 >> 25) + sA2 | 0, I6 = (B5 = E5 + N5 | 0) >>> 0 < E5 >>> 0 ? I6 + 1 | 0 : I6, i2 = B5, sA2 = B5 = B5 + 33554432 | 0, E5 = I6 = B5 >>> 0 < 33554432 ? I6 + 1 | 0 : I6, o4[g6 + 56 >> 2] = i2 - (-67108864 & B5), I6 = AI(w5, P5, J5, z3), i2 = n4, B5 = (N5 = AI(h5, d5, x3, tA2)) + I6 | 0, I6 = n4 + i2 | 0, I6 = B5 >>> 0 < N5 >>> 0 ? I6 + 1 | 0 : I6, i2 = AI(c5, _3, V3, SA2), I6 = n4 + I6 | 0, I6 = (B5 = i2 + B5 | 0) >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, i2 = AI(y5, R4, L5, AA2), I6 = n4 + I6 | 0, I6 = (B5 = i2 + B5 | 0) >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, N5 = AI(X3, CA2, j3, aA2), i2 = n4 + I6 | 0, i2 = (B5 = N5 + B5 | 0) >>> 0 < N5 >>> 0 ? i2 + 1 | 0 : i2, I6 = (N5 = AI(t5, b4, NA2, cA2)) + B5 | 0, B5 = n4 + i2 | 0, B5 = I6 >>> 0 < N5 >>> 0 ? B5 + 1 | 0 : B5, i2 = (N5 = AI(l3, MA2, GA2, KA2)) + I6 | 0, I6 = n4 + B5 | 0, I6 = i2 >>> 0 < N5 >>> 0 ? I6 + 1 | 0 : I6, B5 = i2, i2 = AI(wA2, LA2 = wA2 >> 31, k5, v5), I6 = n4 + I6 | 0, I6 = (B5 = B5 + i2 | 0) >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, i2 = AI(S4, T3, W3, rA2), I6 = n4 + I6 | 0, I6 = (B5 = i2 + B5 | 0) >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, N5 = (i2 = B5) + (B5 = AI(U5, u4, a5, O3)) | 0, i2 = n4 + I6 | 0, B5 = (I6 = D5 >> 26) + (B5 = B5 >>> 0 > N5 >>> 0 ? i2 + 1 | 0 : i2) | 0, G5 = i2 = (D5 = (67108863 & D5) << 6 | G5 >>> 26) + N5 | 0, I6 = B5 = i2 >>> 0 < D5 >>> 0 ? B5 + 1 | 0 : B5, N5 = i2 = i2 + 16777216 | 0, D5 = I6 = i2 >>> 0 < 16777216 ? I6 + 1 | 0 : I6, o4[g6 + 76 >> 2] = G5 - (-33554432 & i2), I6 = AI(t5, b4, J5, z3), B5 = n4, G5 = AI(h5, d5, j3, aA2), i2 = n4 + B5 | 0, i2 = (I6 = G5 + I6 | 0) >>> 0 < G5 >>> 0 ? i2 + 1 | 0 : i2, G5 = AI(c5, _3, l3, MA2), B5 = n4 + i2 | 0, B5 = (I6 = G5 + I6 | 0) >>> 0 < G5 >>> 0 ? B5 + 1 | 0 : B5, i2 = (G5 = AI(k5, v5, L5, AA2)) + I6 | 0, I6 = n4 + B5 | 0, I6 = i2 >>> 0 < G5 >>> 0 ? I6 + 1 | 0 : I6, B5 = i2, i2 = AI(gA2, eA2, W3, rA2), I6 = n4 + I6 | 0, I6 = (B5 = B5 + i2 | 0) >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, i2 = AI(U5, u4, f5, UA2), I6 = n4 + I6 | 0, I6 = (B5 = i2 + B5 | 0) >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, B5 = (Y5 = AI(Y5, EA2, x3, tA2)) + B5 | 0, i2 = n4 + I6 | 0, I6 = (K5 = AI(w5, P5, K5, IA2)) + B5 | 0, B5 = n4 + (B5 >>> 0 < Y5 >>> 0 ? i2 + 1 | 0 : i2) | 0, i2 = (S4 = AI(S4, T3, V3, SA2)) + I6 | 0, I6 = n4 + (I6 >>> 0 < K5 >>> 0 ? B5 + 1 | 0 : B5) | 0, I6 = i2 >>> 0 < S4 >>> 0 ? I6 + 1 | 0 : I6, B5 = i2, i2 = AI(y5, R4, a5, O3), I6 = n4 + I6 | 0, G5 = B5 = B5 + i2 | 0, I6 = (I6 = B5 >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6) + (B5 = E5 >> 26) | 0, S4 = E5 = G5 + (i2 = (67108863 & E5) << 6 | sA2 >>> 26) | 0, I6 = i2 >>> 0 > E5 >>> 0 ? I6 + 1 | 0 : I6, K5 = B5 = E5 + 16777216 | 0, E5 = i2 = B5 >>> 0 < 16777216 ? I6 + 1 | 0 : I6, o4[g6 + 60 >> 2] = S4 - (-33554432 & B5), I6 = AI(J5, z3, iA2, fA2), i2 = n4, B5 = (S4 = AI(h5, d5, U5, u4)) + I6 | 0, I6 = n4 + i2 | 0, I6 = B5 >>> 0 < S4 >>> 0 ? I6 + 1 | 0 : I6, i2 = AI(w5, P5, c5, _3), I6 = n4 + I6 | 0, I6 = (B5 = i2 + B5 | 0) >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, S4 = AI(L5, AA2, p5, DA2), i2 = n4 + I6 | 0, i2 = (B5 = S4 + B5 | 0) >>> 0 < S4 >>> 0 ? i2 + 1 | 0 : i2, I6 = (S4 = AI(y5, R4, X3, CA2)) + B5 | 0, B5 = n4 + i2 | 0, B5 = I6 >>> 0 < S4 >>> 0 ? B5 + 1 | 0 : B5, i2 = (S4 = AI(q3, oA2, NA2, cA2)) + I6 | 0, I6 = n4 + B5 | 0, I6 = i2 >>> 0 < S4 >>> 0 ? I6 + 1 | 0 : I6, B5 = i2, i2 = AI(t5, b4, GA2, KA2), I6 = n4 + I6 | 0, I6 = (B5 = B5 + i2 | 0) >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, i2 = B5, B5 = AI(BA2, hA2, wA2, LA2), I6 = n4 + I6 | 0, I6 = B5 >>> 0 > (i2 = i2 + B5 | 0) >>> 0 ? I6 + 1 | 0 : I6, S4 = B5 = PA2, B5 = (p5 = AI(B5, Y5 = B5 >> 31, k5, v5)) + i2 | 0, i2 = n4 + I6 | 0, I6 = (a5 = AI(a5, O3, QA2, FA2)) + B5 | 0, B5 = n4 + (B5 >>> 0 < p5 >>> 0 ? i2 + 1 | 0 : i2) | 0, i2 = I6 >>> 0 < a5 >>> 0 ? B5 + 1 | 0 : B5, B5 = I6, I6 = (I6 = D5 >> 25) + i2 | 0, I6 = (B5 = B5 + (D5 = (33554431 & D5) << 7 | N5 >>> 25) | 0) >>> 0 < D5 >>> 0 ? I6 + 1 | 0 : I6, i2 = B5, a5 = B5 = B5 + 33554432 | 0, D5 = I6 = B5 >>> 0 < 33554432 ? I6 + 1 | 0 : I6, o4[g6 + 80 >> 2] = i2 - (-67108864 & B5), B5 = E5 >> 25, i2 = (E5 = (33554431 & E5) << 7 | K5 >>> 25) + (bA2 - (I6 = -67108864 & zA2) | 0) | 0, I6 = B5 + (uA2 - ((I6 >>> 0 > bA2 >>> 0) + OA2 | 0) | 0) | 0, I6 = i2 >>> 0 < E5 >>> 0 ? I6 + 1 | 0 : I6, I6 = ((67108863 & (I6 = (B5 = i2 + 33554432 | 0) >>> 0 < 33554432 ? I6 + 1 | 0 : I6)) << 6 | B5 >>> 26) + (p5 = HA2 - (-33554432 & WA2) | 0) | 0, o4[g6 + 68 >> 2] = I6, o4[g6 + 64 >> 2] = i2 - (-67108864 & B5), I6 = AI(U5, u4, J5, z3), i2 = n4, B5 = (E5 = AI(h5, d5, W3, rA2)) + I6 | 0, I6 = n4 + i2 | 0, I6 = B5 >>> 0 < E5 >>> 0 ? I6 + 1 | 0 : I6, i2 = (E5 = AI(c5, _3, x3, tA2)) + B5 | 0, B5 = n4 + I6 | 0, B5 = i2 >>> 0 < E5 >>> 0 ? B5 + 1 | 0 : B5, I6 = (E5 = AI(w5, P5, L5, AA2)) + i2 | 0, i2 = n4 + B5 | 0, i2 = I6 >>> 0 < E5 >>> 0 ? i2 + 1 | 0 : i2, B5 = (E5 = AI(X3, CA2, V3, SA2)) + I6 | 0, I6 = n4 + i2 | 0, I6 = B5 >>> 0 < E5 >>> 0 ? I6 + 1 | 0 : I6, i2 = AI(y5, R4, NA2, cA2), I6 = n4 + I6 | 0, I6 = (B5 = i2 + B5 | 0) >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, i2 = AI(j3, aA2, GA2, KA2), I6 = n4 + I6 | 0, I6 = (B5 = i2 + B5 | 0) >>> 0 < i2 >>> 0 ? I6 + 1 | 0 : I6, i2 = (E5 = AI(t5, b4, wA2, LA2)) + B5 | 0, B5 = n4 + I6 | 0, B5 = i2 >>> 0 < E5 >>> 0 ? B5 + 1 | 0 : B5, E5 = (I6 = AI(S4, Y5, l3, MA2)) + i2 | 0, i2 = n4 + B5 | 0, i2 = I6 >>> 0 > E5 >>> 0 ? i2 + 1 | 0 : i2, B5 = E5, E5 = AI(I6 = RA2, I6 >> 31, k5, v5), I6 = n4 + i2 | 0, i2 = B5 = B5 + E5 | 0, I6 = (I6 = B5 >>> 0 < E5 >>> 0 ? I6 + 1 | 0 : I6) + (B5 = D5 >> 26) | 0, I6 = (i2 = i2 + (D5 = (67108863 & D5) << 6 | a5 >>> 26) | 0) >>> 0 < D5 >>> 0 ? I6 + 1 | 0 : I6, I6 = (B5 = i2 + 16777216 | 0) >>> 0 < 16777216 ? I6 + 1 | 0 : I6, o4[g6 + 84 >> 2] = i2 - (-33554432 & B5), D5 = e4 - (-33554432 & pA2) | 0, E5 = M5 - (i2 = -67108864 & YA2) | 0, h5 = JA2 - ((i2 >>> 0 > M5 >>> 0) + xA2 | 0) | 0, I6 = AI((33554431 & (i2 = I6)) << 7 | B5 >>> 25, I6 >>= 25, 19, 0), B5 = n4 + h5 | 0, I6 = I6 >>> 0 > (i2 = I6 + E5 | 0) >>> 0 ? B5 + 1 | 0 : B5, I6 = ((67108863 & (I6 = (B5 = i2 + 33554432 | 0) >>> 0 < 33554432 ? I6 + 1 | 0 : I6)) << 6 | B5 >>> 26) + D5 | 0, o4[g6 + 52 >> 2] = I6, o4[g6 + 48 >> 2] = i2 - (-67108864 & B5), nA(A7, g6 + 48 | 0));
              }
              return r4 = g6 + 256 | 0, 0 | dA2;
            }, Qc: function(A7, I6) {
              A7 |= 0;
              var g6, B5 = 0;
              return r4 = g6 = r4 + -64 | 0, RA(g6, I6 |= 0, 32, 0), C5[0 | g6] = 248 & c4[0 | g6], C5[g6 + 31 | 0] = 63 & c4[g6 + 31 | 0] | 64, I6 = o4[g6 + 20 >> 2], B5 = o4[g6 + 16 >> 2], C5[A7 + 16 | 0] = B5, C5[A7 + 17 | 0] = B5 >>> 8, C5[A7 + 18 | 0] = B5 >>> 16, C5[A7 + 19 | 0] = B5 >>> 24, C5[A7 + 20 | 0] = I6, C5[A7 + 21 | 0] = I6 >>> 8, C5[A7 + 22 | 0] = I6 >>> 16, C5[A7 + 23 | 0] = I6 >>> 24, I6 = o4[g6 + 12 >> 2], B5 = o4[g6 + 8 >> 2], C5[A7 + 8 | 0] = B5, C5[A7 + 9 | 0] = B5 >>> 8, C5[A7 + 10 | 0] = B5 >>> 16, C5[A7 + 11 | 0] = B5 >>> 24, C5[A7 + 12 | 0] = I6, C5[A7 + 13 | 0] = I6 >>> 8, C5[A7 + 14 | 0] = I6 >>> 16, C5[A7 + 15 | 0] = I6 >>> 24, I6 = o4[g6 + 4 >> 2], B5 = o4[g6 >> 2], C5[0 | A7] = B5, C5[A7 + 1 | 0] = B5 >>> 8, C5[A7 + 2 | 0] = B5 >>> 16, C5[A7 + 3 | 0] = B5 >>> 24, C5[A7 + 4 | 0] = I6, C5[A7 + 5 | 0] = I6 >>> 8, C5[A7 + 6 | 0] = I6 >>> 16, C5[A7 + 7 | 0] = I6 >>> 24, I6 = o4[g6 + 28 >> 2], B5 = o4[g6 + 24 >> 2], C5[A7 + 24 | 0] = B5, C5[A7 + 25 | 0] = B5 >>> 8, C5[A7 + 26 | 0] = B5 >>> 16, C5[A7 + 27 | 0] = B5 >>> 24, C5[A7 + 28 | 0] = I6, C5[A7 + 29 | 0] = I6 >>> 8, C5[A7 + 30 | 0] = I6 >>> 16, C5[A7 + 31 | 0] = I6 >>> 24, xI(g6, 64), r4 = g6 - -64 | 0, 0;
            }, Rc: _I, Sc: lI, Tc: ZI, Uc: function(A7, I6, g6, C6, B5) {
              A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, B5 |= 0;
              var Q5 = 0, i2 = 0, E5 = 0;
              if (r4 = B5 = r4 - 240 | 0, mI(B5), D4[B5 + 228 >> 1] = 7936, o4[B5 + 224 >> 2] = 0, C6) for (; 168 == (0 | Q5) && (t4(B5), o4[B5 + 224 >> 2] = 0, Q5 = 0), zA(B5, g6 + E5 | 0, Q5, i2 = (Q5 = 168 - Q5 | 0) >>> 0 < (i2 = C6 - E5 | 0) >>> 0 ? Q5 : i2), Q5 = i2 + o4[B5 + 224 >> 2] | 0, o4[B5 + 224 >> 2] = Q5, C6 >>> 0 > (E5 = i2 + E5 | 0) >>> 0; ) ;
              return PI(B5, A7, I6), r4 = B5 + 240 | 0, 0;
            }, Vc: tI, Wc: rI, Xc: function(A7, I6, g6, C6) {
              return 0 | _A(A7 |= 0, I6 |= 0, g6 |= 0, 168);
            }, Yc: function(A7, I6, g6) {
              return 0 | PI(A7 |= 0, I6 |= 0, g6 |= 0);
            }, Zc: TI, _c: lI, $c: ZI, ad: function(A7, I6, g6, C6, B5) {
              A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, B5 |= 0;
              var Q5 = 0, i2 = 0, E5 = 0;
              if (r4 = B5 = r4 - 240 | 0, mI(B5), D4[B5 + 228 >> 1] = 7936, o4[B5 + 224 >> 2] = 0, C6) for (; 136 == (0 | Q5) && (t4(B5), o4[B5 + 224 >> 2] = 0, Q5 = 0), zA(B5, g6 + E5 | 0, Q5, i2 = (Q5 = 136 - Q5 | 0) >>> 0 < (i2 = C6 - E5 | 0) >>> 0 ? Q5 : i2), Q5 = i2 + o4[B5 + 224 >> 2] | 0, o4[B5 + 224 >> 2] = Q5, C6 >>> 0 > (E5 = i2 + E5 | 0) >>> 0; ) ;
              return LI(B5, A7, I6), r4 = B5 + 240 | 0, 0;
            }, bd: tI, cd: rI, dd: function(A7, I6, g6, C6) {
              return 0 | _A(A7 |= 0, I6 |= 0, g6 |= 0, 136);
            }, ed: function(A7, I6, g6) {
              return 0 | LI(A7 |= 0, I6 |= 0, g6 |= 0);
            }, fd: _I, gd: lI, hd: ZI, id: function(A7, I6, g6, C6, B5) {
              A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, B5 |= 0;
              var Q5 = 0, i2 = 0, E5 = 0;
              if (r4 = B5 = r4 - 240 | 0, mI(B5), D4[B5 + 228 >> 1] = 7936, o4[B5 + 224 >> 2] = 0, C6) for (; 168 == (0 | Q5) && (K4(B5), o4[B5 + 224 >> 2] = 0, Q5 = 0), zA(B5, g6 + E5 | 0, Q5, i2 = (Q5 = 168 - Q5 | 0) >>> 0 < (i2 = C6 - E5 | 0) >>> 0 ? Q5 : i2), Q5 = i2 + o4[B5 + 224 >> 2] | 0, o4[B5 + 224 >> 2] = Q5, C6 >>> 0 > (E5 = i2 + E5 | 0) >>> 0; ) ;
              return pI(B5, A7, I6), r4 = B5 + 240 | 0, 0;
            }, jd: tI, kd: rI, ld: function(A7, I6, g6, C6) {
              return 0 | XA(A7 |= 0, I6 |= 0, g6 |= 0, 168);
            }, md: function(A7, I6, g6) {
              return 0 | pI(A7 |= 0, I6 |= 0, g6 |= 0);
            }, nd: TI, od: lI, pd: ZI, qd: function(A7, I6, g6, C6, B5) {
              A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0, B5 |= 0;
              var Q5 = 0, i2 = 0, E5 = 0;
              if (r4 = B5 = r4 - 240 | 0, mI(B5), D4[B5 + 228 >> 1] = 7936, o4[B5 + 224 >> 2] = 0, C6) for (; 136 == (0 | Q5) && (K4(B5), o4[B5 + 224 >> 2] = 0, Q5 = 0), zA(B5, g6 + E5 | 0, Q5, i2 = (Q5 = 136 - Q5 | 0) >>> 0 < (i2 = C6 - E5 | 0) >>> 0 ? Q5 : i2), Q5 = i2 + o4[B5 + 224 >> 2] | 0, o4[B5 + 224 >> 2] = Q5, C6 >>> 0 > (E5 = i2 + E5 | 0) >>> 0; ) ;
              return RI(B5, A7, I6), r4 = B5 + 240 | 0, 0;
            }, rd: tI, sd: rI, td: function(A7, I6, g6, C6) {
              return 0 | XA(A7 |= 0, I6 |= 0, g6 |= 0, 136);
            }, ud: function(A7, I6, g6) {
              return 0 | RI(A7 |= 0, I6 |= 0, g6 |= 0);
            }, vd: function() {
              return EI(), 0 | og[o4[o4[10323] + 4 >> 2]]();
            }, wd: JI, xd: function(A7) {
              A7 |= 0;
              var I6 = 0, g6 = 0;
              if (EI(), I6 = o4[o4[10323] + 12 >> 2]) return 0 | og[0 | I6](A7);
              if (A7 >>> 0 >= 2) {
                for (I6 = (0 - A7 >>> 0) % (A7 >>> 0) | 0; EI(), I6 >>> 0 > (g6 = 0 | og[o4[o4[10323] + 4 >> 2]]()) >>> 0; ) ;
                A7 = (g6 >>> 0) % (A7 >>> 0) | 0;
              } else A7 = 0;
              return 0 | A7;
            }, yd: UI, zd: function(A7, I6, g6) {
              sI(A7 |= 0, I6 |= 0, 38512, g6 |= 0);
            }, Ad: Ag, Bd: function() {
              var A7 = 0, I6 = 0;
              return (A7 = o4[10323]) && (A7 = o4[A7 + 20 >> 2]) && (I6 = 0 | og[0 | A7]()), 0 | I6;
            }, Cd: function(A7, I6, g6) {
              A7 |= 0, I6 |= 0, (g6 |= 0) ? (S3(1231, 1091, 214, 1027), i()) : (EI(), I6 | g6 && og[o4[o4[10323] + 16 >> 2]](A7, I6));
            }, Dd: function(A7, I6, g6, B5) {
              A7 |= 0, g6 |= 0;
              var Q5 = 0, E5 = 0, D5 = 0;
              if (!((B5 |= 0) >>> 0 > 2147483646 | B5 << 1 >>> 0 >= (I6 |= 0) >>> 0)) {
                if (I6 = 0, B5) {
                  for (; Q5 = (I6 << 1) + A7 | 0, E5 = 15 & (D5 = c4[I6 + g6 | 0]), C5[Q5 + 1 | 0] = 22272 + ((E5 << 8) + (E5 + 65526 & 55552) | 0) >>> 8, E5 = Q5, Q5 = D5 >>> 4 | 0, C5[0 | E5] = 87 + ((Q5 + 65526 >>> 8 & 217) + Q5 | 0), (0 | B5) != (0 | (I6 = I6 + 1 | 0)); ) ;
                  I6 = B5 << 1;
                } else I6 = 0;
                return C5[I6 + A7 | 0] = 0, 0 | A7;
              }
              KI(), i();
            }, Ed: function(A7, I6, g6, B5, Q5, i2, E5) {
              A7 |= 0, I6 |= 0, g6 |= 0, Q5 |= 0, i2 |= 0, E5 |= 0;
              var D5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0;
              A: {
                I: {
                  g: {
                    C: {
                      B: {
                        Q: {
                          i: {
                            E: {
                              D: {
                                if (B5 |= 0) {
                                  if (Q5) break D;
                                  for (h5 = 1, Q5 = 0; ; ) {
                                    if (!(255 & ((S4 = (65526 + (w5 = (223 & (y5 = c4[g6 + D5 | 0])) - 55 & 255) ^ w5 + 65520) >>> 8 | 0) | (a5 = 65526 + (y5 ^= 48) >>> 8 | 0)))) break i;
                                    if (I6 >>> 0 <= f5 >>> 0) break E;
                                    if (w5 = w5 & S4 | y5 & a5, 255 & F5 ? (C5[A7 + f5 | 0] = Q5 | w5, f5 = f5 + 1 | 0) : Q5 = w5 << 4, F5 ^= -1, (0 | (D5 = D5 + 1 | 0)) == (0 | B5)) break;
                                  }
                                  D5 = B5;
                                  break i;
                                }
                                if (A7 = 0, !E5) break A;
                                break g;
                              }
                              for (; ; ) {
                                D: {
                                  o: {
                                    c: {
                                      h: {
                                        w: {
                                          if (!(255 & ((y5 = (65526 + (h5 = (223 & (w5 = c4[g6 + D5 | 0])) - 55 & 255) ^ h5 + 65520) >>> 8 | 0) | (a5 = 65526 + (S4 = 48 ^ w5) >>> 8 | 0)))) {
                                            if (255 & F5) break Q;
                                            if (h5 = 0, !eA(Q5, w5)) break C;
                                            if ((D5 = F5 = D5 + 1 | 0) >>> 0 < B5 >>> 0) break w;
                                            break C;
                                          }
                                          if (I6 >>> 0 <= f5 >>> 0) break E;
                                          if (h5 = h5 & y5 | S4 & a5, !(255 & F5)) break h;
                                          C5[A7 + f5 | 0] = h5 | k5, F5 ^= -1, f5 = f5 + 1 | 0;
                                          break D;
                                        }
                                        for (; ; ) {
                                          if (!(255 & ((S4 = (65526 + (y5 = (223 & (w5 = c4[g6 + D5 | 0])) - 55 & 255) ^ y5 + 65520) >>> 8 | 0) | (k5 = 65526 + (a5 = 48 ^ w5) >>> 8 | 0)))) {
                                            if (!eA(Q5, w5)) break C;
                                            if ((D5 = D5 + 1 | 0) >>> 0 < B5 >>> 0) continue;
                                            break c;
                                          }
                                          break;
                                        }
                                        if (I6 >>> 0 <= f5 >>> 0) break o;
                                        h5 = y5 & S4 | a5 & k5;
                                      }
                                      k5 = h5 << 4, F5 = 255;
                                      break D;
                                    }
                                    D5 = B5 >>> 0 > F5 >>> 0 ? B5 : F5;
                                    break C;
                                  }
                                  F5 = 0;
                                  break E;
                                }
                                if (h5 = 1, !((D5 = D5 + 1 | 0) >>> 0 < B5 >>> 0)) break;
                              }
                              break i;
                            }
                            o4[10188] = 68, h5 = 0;
                          }
                          if (!(255 & F5)) break B;
                        }
                        o4[10188] = 28, h5 = -1, D5 = D5 - 1 | 0, f5 = 0;
                        break C;
                      }
                      f5 = h5 ? f5 : 0, h5 = h5 - 1 | 0;
                    }
                    if (!E5) {
                      if ((0 | B5) != (0 | D5)) break I;
                      A7 = h5;
                      break A;
                    }
                  }
                  o4[E5 >> 2] = g6 + D5, A7 = h5;
                  break A;
                }
                o4[10188] = 28, A7 = -1;
              }
              return i2 && (o4[i2 >> 2] = f5), 0 | A7;
            }, Fd: function(A7, I6) {
              A7 |= 0;
              var g6 = 0;
              return 1 != (-7 & (I6 |= 0)) && (KI(), i()), 1 + ((3 & (g6 = (g6 = A7) + F4(A7 = (A7 >>> 0) / 3 | 0, -3) | 0) ? 2 & I6 ? g6 + 1 | 0 : 4 : 0) + (A7 << 2) | 0) | 0;
            }, Gd: function(A7, I6, g6, B5, E5) {
              A7 |= 0, I6 |= 0, g6 |= 0, B5 |= 0;
              var D5 = 0, o5 = 0, h5 = 0, w5 = 0, y5 = 0, f5 = 0, a5 = 0;
              A: {
                I: {
                  g: {
                    C: {
                      B: {
                        if (1 == (-7 & (E5 |= 0)) && (h5 = (D5 = (B5 >>> 0) / 3 | 0) << 2, (D5 = F4(D5, -3) + B5 | 0) && (h5 = 2 & E5 ? 2 + ((D5 >>> 1 | 0) + h5 | 0) | 0 : h5 + 4 | 0), !(I6 >>> 0 <= h5 >>> 0))) {
                          if (!(E5 >>> 0 >= 4)) {
                            if (!B5) {
                              E5 = 0;
                              break I;
                            }
                            D5 = 0, E5 = 0;
                            break B;
                          }
                          if (!B5) {
                            E5 = 0;
                            break I;
                          }
                          for (D5 = 0, E5 = 0; ; ) {
                            for (y5 = c4[g6 + w5 | 0] | y5 << 8, D5 |= 8; f5 = 65510 + (o5 = y5 >>> (D5 = D5 - 6 | 0) & 63) >>> 8 | 0, a5 = o5 + 65484 >>> 8 | 0, C5[A7 + E5 | 0] = (1 + (16321 ^ o5) ^ -1) >>> 8 & 45 | (o5 + 32705 ^ -1) >>> 8 & 95 | a5 & o5 + 71 & (-1 ^ f5) | f5 & o5 + 65 | o5 + 252 & o5 + 65474 >>> 8 & ~a5, E5 = E5 + 1 | 0, D5 >>> 0 > 5; ) ;
                            if ((0 | (w5 = w5 + 1 | 0)) == (0 | B5)) break;
                          }
                          if (!D5) break g;
                          w5 = 45, o5 = 95, B5 = 32705;
                          break C;
                        }
                        KI(), i();
                      }
                      for (; ; ) {
                        for (y5 = c4[g6 + w5 | 0] | y5 << 8, D5 |= 8; f5 = 65510 + (o5 = y5 >>> (D5 = D5 - 6 | 0) & 63) >>> 8 | 0, a5 = o5 + 65484 >>> 8 | 0, C5[A7 + E5 | 0] = (1 + (16321 ^ o5) ^ -1) >>> 8 & 43 | (o5 + 16321 ^ -1) >>> 8 & 47 | a5 & o5 + 71 & (-1 ^ f5) | f5 & o5 + 65 | o5 + 252 & o5 + 65474 >>> 8 & ~a5, E5 = E5 + 1 | 0, D5 >>> 0 > 5; ) ;
                        if ((0 | (w5 = w5 + 1 | 0)) == (0 | B5)) break;
                      }
                      if (!D5) break g;
                      w5 = 43, o5 = 47, B5 = 16321;
                    }
                    D5 = 65510 + (g6 = y5 << 6 - D5 & 63) >>> 8 | 0, y5 = g6 + 65484 >>> 8 | 0, C5[A7 + E5 | 0] = (1 + (16321 ^ g6) ^ -1) >>> 8 & w5 | o5 & (g6 + B5 ^ -1) >>> 8 | y5 & g6 + 71 & (-1 ^ D5) | D5 & g6 + 65 | g6 + 252 & g6 + 65474 >>> 8 & ~y5, E5 = E5 + 1 | 0;
                  }
                  if (E5 >>> 0 > h5 >>> 0) break A;
                }
                return E5 >>> 0 >= h5 >>> 0 ? h5 = E5 : (g6 = h5 - E5 | 0) && Q4(A7 + E5 | 0, 61, g6), (I6 = (I6 >>> 0 > (g6 = h5 + 1 | 0) >>> 0 ? I6 : g6) - h5 | 0) && Q4(A7 + h5 | 0, 0, I6), 0 | A7;
              }
              S3(1039, 1117, 232, 1303), i();
            }, Hd: function(A7, I6, g6, B5, Q5, E5, D5, h5) {
              A7 |= 0, I6 |= 0, g6 |= 0, B5 |= 0, Q5 |= 0, E5 |= 0, D5 |= 0;
              var w5 = 0, F5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0, M5 = 0;
              if (1 == (-7 & (h5 |= 0))) {
                A: {
                  I: {
                    g: {
                      C: {
                        B: {
                          Q: {
                            i: {
                              if (B5) {
                                E: {
                                  D: {
                                    if (h5 >>> 0 <= 3) {
                                      for (; ; ) {
                                        f5 = w5;
                                        o: {
                                          c: {
                                            h: {
                                              w: {
                                                for (; ; ) {
                                                  if (F5 = (F5 = (y5 = C5[g6 + f5 | 0]) - 65 | 0) & (y5 - 91 & ~F5) >>> 8 & 255 | y5 + 4 & (y5 - 58 & ~(y5 + 65488)) >>> 8 & 255 | y5 + 185 & (y5 - 123 & ~(y5 + 65439)) >>> 8 & 255 | (1 + (16336 ^ y5) ^ -1) >>> 8 & 63 | (1 + (16340 ^ y5) ^ -1) >>> 8 & 62, 255 != (0 | (F5 |= (F5 - 1 & 1 + (65470 ^ y5)) >>> 8 & 255))) break w;
                                                  if (F5 = 0, !Q5) break E;
                                                  if (!eA(Q5, y5)) break;
                                                  if ((f5 = f5 + 1 | 0) >>> 0 >= B5 >>> 0) break h;
                                                }
                                                w5 = f5;
                                                break E;
                                              }
                                              if (k5 = F5 + (k5 << 6) | 0, S4 >>> 0 > 1) break c;
                                              S4 = S4 + 6 | 0;
                                              break o;
                                            }
                                            w5 = (A7 = w5 + 1 | 0) >>> 0 < B5 >>> 0 ? B5 : A7;
                                            break E;
                                          }
                                          if (S4 = S4 - 2 | 0, I6 >>> 0 <= a5 >>> 0) break D;
                                          C5[A7 + a5 | 0] = k5 >>> S4, a5 = a5 + 1 | 0;
                                        }
                                        if (F5 = 0, !((w5 = f5 + 1 | 0) >>> 0 < B5 >>> 0)) break;
                                      }
                                      break E;
                                    }
                                    for (; ; ) {
                                      o: {
                                        if (F5 = (F5 = (y5 = C5[g6 + f5 | 0]) - 65 | 0) & (y5 - 91 & ~F5) >>> 8 & 255 | y5 + 4 & (y5 - 58 & ~(y5 + 65488)) >>> 8 & 255 | y5 + 185 & (y5 - 123 & ~(y5 + 65439)) >>> 8 & 255 | (1 + (16288 ^ y5) ^ -1) >>> 8 & 63 | (1 + (16338 ^ y5) ^ -1) >>> 8 & 62, 255 == (0 | (F5 |= (F5 - 1 & 1 + (65470 ^ y5)) >>> 8 & 255))) {
                                          if (F5 = 0, !Q5) break E;
                                          if (eA(Q5, y5)) {
                                            if ((f5 = f5 + 1 | 0) >>> 0 >= B5 >>> 0) break o;
                                            continue;
                                          }
                                          w5 = f5;
                                          break E;
                                        }
                                        if (k5 = F5 + (k5 << 6) | 0, S4 >>> 0 < 2) S4 = S4 + 6 | 0;
                                        else {
                                          if (S4 = S4 - 2 | 0, I6 >>> 0 <= a5 >>> 0) break D;
                                          C5[A7 + a5 | 0] = k5 >>> S4, a5 = a5 + 1 | 0;
                                        }
                                        if (F5 = 0, (w5 = f5 + 1 | 0) >>> 0 >= B5 >>> 0) break E;
                                        f5 = w5;
                                        continue;
                                      }
                                      break;
                                    }
                                    w5 = (A7 = w5 + 1 | 0) >>> 0 < B5 >>> 0 ? B5 : A7;
                                    break E;
                                  }
                                  w5 = f5, o4[10188] = 68, F5 = 1;
                                }
                                if (S4 >>> 0 > 4) break i;
                                A7 = w5;
                              } else A7 = 0;
                              if (f5 = -1, F5) {
                                w5 = A7;
                                break A;
                              }
                              if (~(-1 << S4) & k5) {
                                w5 = A7;
                                break A;
                              }
                              if (!(2 & h5) && (F5 = S4 >>> 1 | 0)) {
                                if (!Q5) break B;
                                for (w5 = A7 >>> 0 > B5 >>> 0 ? A7 : B5; ; ) {
                                  if ((0 | A7) == (0 | w5)) {
                                    Q5 = 68;
                                    break C;
                                  }
                                  if (61 != (0 | (I6 = C5[A7 + g6 | 0]))) {
                                    if (!eA(Q5, I6)) {
                                      Q5 = 28, w5 = A7;
                                      break C;
                                    }
                                  } else F5 = F5 - 1 | 0;
                                  if (A7 = A7 + 1 | 0, !F5) break;
                                }
                              }
                              if (f5 = 0, !Q5 | A7 >>> 0 >= B5 >>> 0) break Q;
                              for (; ; ) {
                                if (!eA(Q5, C5[A7 + g6 | 0])) break Q;
                                if ((0 | B5) == (0 | (A7 = A7 + 1 | 0))) break;
                              }
                              w5 = B5;
                              break I;
                            }
                            f5 = -1;
                            break A;
                          }
                          w5 = A7;
                          break I;
                        }
                        if (Q5 = 68, A7 >>> 0 >= B5 >>> 0) w5 = A7;
                        else if (Q5 = 28, 61 == c4[A7 + g6 | 0]) {
                          if (w5 = A7 + 1 | 0, 1 == (0 | F5)) {
                            f5 = 0;
                            break I;
                          }
                          if ((0 | B5) != (0 | w5)) {
                            if (61 == c4[g6 + w5 | 0]) break g;
                          } else w5 = A7 >>> 0 > B5 >>> 0 ? A7 : B5, Q5 = 68;
                        } else w5 = A7;
                      }
                      o4[10188] = Q5;
                      break A;
                    }
                    w5 = A7 + 2 | 0, f5 = 0;
                  }
                  M5 = a5;
                }
                return D5 ? o4[D5 >> 2] = g6 + w5 : (0 | B5) != (0 | w5) && (o4[10188] = 28, f5 = -1), E5 && (o4[E5 >> 2] = M5), 0 | f5;
              }
              KI(), i();
            }, Id: function(A7, I6, g6) {
              A7 |= 0;
              var B5, i2 = 0, D5 = 0, h5 = 0, w5 = 0, F5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0;
              r4 = B5 = r4 - 16 | 0, D5 = I6 |= 0;
              A: {
                I: {
                  g: {
                    C: {
                      B: {
                        Q: {
                          if ((g6 = I6 + (g6 |= 0) | 0) >>> 0 > I6 >>> 0) {
                            for (; ; ) {
                              if (!(f5 = c4[0 | D5])) break B;
                              if (37 == (0 | f5)) break Q;
                              if ((0 | g6) == (0 | (D5 = D5 + 1 | 0))) break;
                            }
                            D5 = g6;
                          }
                          if (!bA(I6, D5 - I6 | 0)) break g;
                          break C;
                        }
                        if (F5 = -1, (h5 = D5 + 1 | 0) >>> 0 >= g6 >>> 0) break A;
                        i2 = h5;
                        Q: {
                          for (; ; ) {
                            switch (c4[0 | i2]) {
                              case 9:
                              case 10:
                              case 11:
                              case 12:
                              case 13:
                              case 32:
                                break A;
                              case 0:
                                break Q;
                            }
                            if ((0 | g6) == (0 | (i2 = i2 + 1 | 0))) break;
                          }
                          i2 = g6;
                        }
                        if ((0 | i2) == (0 | h5)) break A;
                        if (bA(I6, D5 - I6 | 0)) break C;
                        if (37 == (0 | f5)) break A;
                        break g;
                      }
                      if (!bA(I6, D5 - I6 | 0)) break g;
                    }
                    if (o4[B5 + 8 >> 2] = 0, o4[B5 + 12 >> 2] = 0, o4[B5 >> 2] = 0, o4[B5 + 4 >> 2] = 0, F5 = -1, I6 >>> 0 >= D5 >>> 0) break A;
                    if (58 != c4[0 | I6]) g6 = 0;
                    else {
                      if (58 != c4[I6 + 1 | 0] | I6 + 1 >>> 0 >= D5 >>> 0) break A;
                      I6 = I6 + 2 | 0, g6 = B5;
                    }
                    S4 = B5 + 16 | 0, h5 = B5;
                    C: for (; ; ) {
                      for (f5 = g6; ; ) {
                        B: {
                          Q: if (I6 >>> 0 >= D5 >>> 0) i2 = h5;
                          else {
                            i: if (i2 = (g6 = c4[0 | I6]) - 46 | 0) {
                              E: {
                                if (12 == (0 | i2)) {
                                  if (I6 = I6 + 1 | 0, g6 = h5, !f5) continue C;
                                  break A;
                                }
                                if ((g6 = (i2 = g6 << 24 >> 24) - 48 | 0) >>> 0 >= 10) {
                                  if ((g6 = 32 | i2) - 103 >>> 0 < 4294967290) break E;
                                  g6 = g6 - 87 | 0;
                                }
                                if (1 != (0 | (k5 = D5 - I6 | 0))) {
                                  if (i2 = I6, !(w5 = (F5 = c4[0 | (y5 = I6 + 1 | 0)]) - 46 | 0)) break i;
                                  if (12 == (0 | w5)) break B;
                                  if ((i2 = (F5 = F5 << 24 >> 24) - 48 | 0) >>> 0 >= 10 && (i2 = (i2 = 32 | F5) - 97 >>> 0 >= 6 ? -1 : i2 - 87 | 0), F5 = -1, (0 | i2) < 0) break A;
                                  if (g6 = g6 << 4 | i2, 2 != (0 | k5)) {
                                    if (i2 = y5, !(a5 = (w5 = c4[0 | (y5 = I6 + 2 | 0)]) - 46 | 0)) break i;
                                    if (12 == (0 | a5)) break B;
                                    if ((i2 = (w5 = w5 << 24 >> 24) - 48 | 0) >>> 0 >= 10 && (i2 = (i2 = 32 | w5) - 97 >>> 0 >= 6 ? -1 : i2 - 87 | 0), (0 | i2) < 0) break A;
                                    if (g6 = g6 << 4 | i2, 3 != (0 | k5)) {
                                      if (i2 = y5, !(a5 = (w5 = c4[0 | (y5 = I6 + 3 | 0)]) - 46 | 0)) break i;
                                      if (12 == (0 | a5)) break B;
                                      if ((i2 = (w5 = w5 << 24 >> 24) - 48 | 0) >>> 0 >= 10 && (i2 = (i2 = 32 | w5) - 97 >>> 0 >= 6 ? -1 : i2 - 87 | 0), (0 | i2) < 0) break A;
                                      if (g6 = g6 << 4 | i2, 4 != (0 | k5)) {
                                        if (i2 = y5, 58 == (0 | (y5 = c4[I6 + 4 | 0]))) break B;
                                        if (46 == (0 | y5)) break i;
                                        break A;
                                      }
                                    }
                                  }
                                }
                                if (S4 >>> 0 < (i2 = h5 + 2 | 0) >>> 0) break A;
                                I6 = g6 << 8 | (65280 & g6) >>> 8, C5[0 | h5] = I6, C5[h5 + 1 | 0] = I6 >>> 8;
                                break Q;
                              }
                              break A;
                            }
                            if (F5 = -1, S4 >>> 0 < (i2 = h5 + 4 | 0) >>> 0) break A;
                            if (!QA(I6, D5, h5)) break A;
                          }
                          Q: if (f5) {
                            if ((0 | i2) == (0 | S4)) break A;
                            if ((I6 = i2 - f5 | 0) && E4(S4 - I6 | 0, f5, I6), !(I6 = S4 - i2 | 0)) break Q;
                            Q4(f5, 0, I6);
                          } else if ((0 | i2) != (0 | S4)) break A;
                          I6 = o4[B5 + 12 >> 2], g6 = o4[B5 + 8 >> 2], C5[A7 + 8 | 0] = g6, C5[A7 + 9 | 0] = g6 >>> 8, C5[A7 + 10 | 0] = g6 >>> 16, C5[A7 + 11 | 0] = g6 >>> 24, C5[A7 + 12 | 0] = I6, C5[A7 + 13 | 0] = I6 >>> 8, C5[A7 + 14 | 0] = I6 >>> 16, C5[A7 + 15 | 0] = I6 >>> 24, I6 = o4[B5 + 4 >> 2], g6 = o4[B5 >> 2], C5[0 | A7] = g6, C5[A7 + 1 | 0] = g6 >>> 8, C5[A7 + 2 | 0] = g6 >>> 16, C5[A7 + 3 | 0] = g6 >>> 24, C5[A7 + 4 | 0] = I6, C5[A7 + 5 | 0] = I6 >>> 8, C5[A7 + 6 | 0] = I6 >>> 16, C5[A7 + 7 | 0] = I6 >>> 24;
                          break I;
                        }
                        if (F5 = -1, (I6 = h5 + 2 | 0) >>> 0 > S4 >>> 0) break A;
                        if (g6 = g6 << 8 | (65280 & g6) >>> 8, C5[0 | h5] = g6, C5[h5 + 1 | 0] = g6 >>> 8, h5 = I6, !(D5 >>> 0 > (I6 = i2 + 2 | 0) >>> 0)) break;
                      }
                      break;
                    }
                    break A;
                  }
                  if (!QA(I6, D5, B5)) {
                    F5 = -1;
                    break A;
                  }
                  C5[0 | A7] = 0, C5[A7 + 1 | 0] = 0, C5[A7 + 2 | 0] = 0, C5[A7 + 3 | 0] = 0, C5[A7 + 4 | 0] = 0, C5[A7 + 5 | 0] = 0, C5[A7 + 6 | 0] = 0, C5[A7 + 7 | 0] = 0, C5[A7 + 8 | 0] = 0, C5[A7 + 9 | 0] = 0, C5[A7 + 10 | 0] = 255, C5[A7 + 11 | 0] = 255, I6 = o4[B5 >> 2], C5[A7 + 12 | 0] = I6, C5[A7 + 13 | 0] = I6 >>> 8, C5[A7 + 14 | 0] = I6 >>> 16, C5[A7 + 15 | 0] = I6 >>> 24;
                }
                F5 = 0;
              }
              return r4 = B5 + 16 | 0, 0 | F5;
            }, Jd: function(A7, I6, g6) {
              A7 |= 0;
              var B5, Q5 = 0, i2 = 0, D5 = 0, o5 = 0, h5 = 0, w5 = 0, y5 = 0, f5 = 0, S4 = 0, a5 = 0, k5 = 0;
              if ((I6 |= 0) >>> 0 < 3) return 0;
              B5 = r4 + -64 | 0;
              A: {
                I: {
                  g: {
                    C: {
                      if (c4[0 | (g6 |= 0)] | c4[g6 + 1 | 0] << 8 | c4[g6 + 2 | 0] << 16 | c4[g6 + 3 | 0] << 24 | -65536 ^ (c4[g6 + 8 | 0] | c4[g6 + 9 | 0] << 8 | c4[g6 + 10 | 0] << 16 | c4[g6 + 11 | 0] << 24) | c4[g6 + 4 | 0] | c4[g6 + 5 | 0] << 8 | c4[g6 + 6 | 0] << 16 | c4[g6 + 7 | 0] << 24) {
                        if (Q5 = c4[g6 + 1 | 0] | c4[0 | g6], !(c4[g6 + 3 | 0] | c4[g6 + 2 | 0])) break C;
                        i2 = -1, D5 = Q5 ? -1 : 0, Q5 = !Q5;
                        break g;
                      }
                      for (Q5 = c4[g6 + 12 | 0], h5 = B5; i2 = (Q5 >>> 0) / 10 | 0, C5[(o5 = D5) + (B5 + 60 | 0) | 0] = Q5 - F4(i2, 10) | 48, y5 = h5, h5 = h5 + 1 | 0, D5 = o5 + 1 | 0, w5 = Q5 >>> 0 > 9, Q5 = i2, w5; ) ;
                      if (h5 = B5, !(o5 >>> 0 > 2147483646)) {
                        if (3 & ~y5) for (i2 = y5 + 1 & 3, Q5 = 0; D5 = D5 - 1 | 0, C5[0 | h5] = c4[D5 + (B5 + 60 | 0) | 0], h5 = h5 + 1 | 0, (0 | i2) != (0 | (Q5 = Q5 + 1 | 0)); ) ;
                        if (!(o5 >>> 0 < 3)) for (; Q5 = (i2 = B5 + 60 | 0) + D5 | 0, C5[0 | h5] = c4[Q5 - 1 | 0], C5[h5 + 1 | 0] = c4[Q5 - 2 | 0], C5[h5 + 2 | 0] = c4[Q5 - 3 | 0], D5 = D5 - 4 | 0, C5[0 | (Q5 = h5 + 3 | 0)] = c4[i2 + D5 | 0], h5 = h5 + 4 | 0, (0 | Q5) != (0 | y5); ) ;
                      }
                      for (C5[0 | h5] = 46, Q5 = c4[g6 + 13 | 0], D5 = 0, i2 = o5 = h5 + 1 | 0; f5 = D5, y5 = (Q5 >>> 0) / 10 | 0, C5[(B5 + 60 | 0) + D5 | 0] = Q5 - F4(y5, 10) | 48, w5 = i2, i2 = i2 + 1 | 0, D5 = D5 + 1 | 0, S4 = Q5 >>> 0 > 9, Q5 = y5, S4; ) ;
                      if (!(f5 >>> 0 > 2147483646)) {
                        if (i2 = w5 - h5 & 3) for (Q5 = 0; D5 = D5 - 1 | 0, C5[0 | o5] = c4[D5 + (B5 + 60 | 0) | 0], o5 = o5 + 1 | 0, (0 | i2) != (0 | (Q5 = Q5 + 1 | 0)); ) ;
                        if (!(f5 >>> 0 < 3)) for (; Q5 = (i2 = B5 + 60 | 0) + D5 | 0, C5[0 | o5] = c4[Q5 - 1 | 0], C5[o5 + 1 | 0] = c4[Q5 - 2 | 0], C5[o5 + 2 | 0] = c4[Q5 - 3 | 0], D5 = D5 - 4 | 0, C5[0 | (Q5 = o5 + 3 | 0)] = c4[i2 + D5 | 0], o5 = o5 + 4 | 0, (0 | Q5) != (0 | w5); ) ;
                      }
                      for (C5[0 | o5] = 46, Q5 = c4[g6 + 14 | 0], D5 = 0, i2 = h5 = o5 + 1 | 0; f5 = D5, y5 = (Q5 >>> 0) / 10 | 0, C5[(B5 + 60 | 0) + D5 | 0] = Q5 - F4(y5, 10) | 48, w5 = i2, i2 = i2 + 1 | 0, D5 = D5 + 1 | 0, S4 = Q5 >>> 0 > 9, Q5 = y5, S4; ) ;
                      if (!(f5 >>> 0 > 2147483646)) {
                        if (i2 = w5 - o5 & 3) for (Q5 = 0; D5 = D5 - 1 | 0, C5[0 | h5] = c4[D5 + (B5 + 60 | 0) | 0], h5 = h5 + 1 | 0, (0 | i2) != (0 | (Q5 = Q5 + 1 | 0)); ) ;
                        if (!(f5 >>> 0 < 3)) for (; Q5 = (i2 = B5 + 60 | 0) + D5 | 0, C5[0 | h5] = c4[Q5 - 1 | 0], C5[h5 + 1 | 0] = c4[Q5 - 2 | 0], C5[h5 + 2 | 0] = c4[Q5 - 3 | 0], D5 = D5 - 4 | 0, C5[0 | (Q5 = h5 + 3 | 0)] = c4[i2 + D5 | 0], h5 = h5 + 4 | 0, (0 | Q5) != (0 | w5); ) ;
                      }
                      for (C5[0 | h5] = 46, Q5 = c4[g6 + 15 | 0], D5 = 0, i2 = o5 = h5 + 1 | 0; w5 = D5, g6 = (Q5 >>> 0) / 10 | 0, C5[(B5 + 60 | 0) + D5 | 0] = Q5 - F4(g6, 10) | 48, y5 = i2, i2 = i2 + 1 | 0, D5 = D5 + 1 | 0, f5 = Q5 >>> 0 > 9, Q5 = g6, f5; ) ;
                      if (!(w5 >>> 0 > 2147483646)) {
                        if (g6 = y5 - h5 & 3) for (Q5 = 0; D5 = D5 - 1 | 0, C5[0 | o5] = c4[D5 + (B5 + 60 | 0) | 0], o5 = o5 + 1 | 0, (0 | g6) != (0 | (Q5 = Q5 + 1 | 0)); ) ;
                        if (!(w5 >>> 0 < 3)) for (; g6 = (Q5 = B5 + 60 | 0) + D5 | 0, C5[0 | o5] = c4[g6 - 1 | 0], C5[o5 + 1 | 0] = c4[g6 - 2 | 0], C5[o5 + 2 | 0] = c4[g6 - 3 | 0], D5 = D5 - 4 | 0, C5[0 | (g6 = o5 + 3 | 0)] = c4[Q5 + D5 | 0], o5 = o5 + 4 | 0, (0 | g6) != (0 | y5); ) ;
                      }
                      if ((D5 = o5 - B5 | 0) >>> 0 < I6 >>> 0) break I;
                      return 0;
                    }
                    h5 = Q5 ? 1 : 2, i2 = !!(0 | Q5), D5 = -1, Q5 = 0;
                  }
                  if (c4[g6 + 5 | 0] | c4[g6 + 4 | 0] ? (y5 = h5, Q5 = (h5 = Q5 >>> 0 < h5 >>> 0) ? y5 : Q5, D5 = h5 ? i2 : D5, i2 = -1) : (o5 = h5 + 1 | 0, i2 = (0 | i2) < 0 ? 2 : i2), c4[g6 + 7 | 0] | c4[g6 + 6 | 0] ? (Q5 = (h5 = Q5 >>> 0 < o5 >>> 0) ? o5 : Q5, D5 = h5 ? i2 : D5, o5 = 0, i2 = -1) : (o5 = o5 + 1 | 0, i2 = (0 | i2) < 0 ? 3 : i2), c4[g6 + 9 | 0] | c4[g6 + 8 | 0] ? (Q5 = (h5 = Q5 >>> 0 < o5 >>> 0) ? o5 : Q5, D5 = h5 ? i2 : D5, o5 = 0, i2 = -1) : (o5 = o5 + 1 | 0, i2 = (0 | i2) < 0 ? 4 : i2), c4[g6 + 11 | 0] | c4[g6 + 10 | 0] ? (Q5 = (h5 = Q5 >>> 0 < o5 >>> 0) ? o5 : Q5, D5 = h5 ? i2 : D5, o5 = 0, i2 = -1) : (o5 = o5 + 1 | 0, i2 = (0 | i2) < 0 ? 5 : i2), c4[g6 + 13 | 0] | c4[g6 + 12 | 0] ? (Q5 = (h5 = Q5 >>> 0 < o5 >>> 0) ? o5 : Q5, D5 = h5 ? i2 : D5, o5 = 0, i2 = -1) : (o5 = o5 + 1 | 0, i2 = (0 | i2) < 0 ? 6 : i2), c4[g6 + 15 | 0] | c4[g6 + 14 | 0] ? (Q5 = (h5 = Q5 >>> 0 < o5 >>> 0) ? o5 : Q5, D5 = h5 ? i2 : D5, o5 = 0, i2 = -1) : (o5 = o5 + 1 | 0, i2 = (0 | i2) < 0 ? 7 : i2), h5 = Q5, (0 | (a5 = (h5 = (Q5 = Q5 >>> 0 < o5 >>> 0) ? o5 : h5) >>> 0 < 2 ? -1 : Q5 ? i2 : D5)) < 0) for (y5 = h5 - 2 | 0, Q5 = B5, h5 = 0; ; ) {
                    g: {
                      switch (h5 + 1 | 0) {
                        default:
                          C5[0 | Q5] = 58, Q5 = Q5 + 1 | 0;
                        case 1:
                          for (D5 = c4[0 | (i2 = (h5 << 1) + g6 | 0)] << 8 | c4[i2 + 1 | 0], o5 = 0, i2 = Q5; w5 = 15 & D5, C5[(B5 + 60 | 0) + o5 | 0] = w5 >>> 0 < 10 ? 48 | w5 : w5 + 87 | 0, f5 = i2, i2 = i2 + 1 | 0, w5 = o5, o5 = o5 + 1 | 0, S4 = D5 >>> 0 > 15, D5 = D5 >>> 4 | 0, S4; ) ;
                          if (2147483647 == (0 | w5)) break g;
                          if (3 & ~(i2 = f5 - Q5 | 0)) for (i2 = i2 + 1 & 3, D5 = 0; o5 = o5 - 1 | 0, C5[0 | Q5] = c4[o5 + (B5 + 60 | 0) | 0], Q5 = Q5 + 1 | 0, (0 | i2) != (0 | (D5 = D5 + 1 | 0)); ) ;
                          if (w5 >>> 0 < 3) break g;
                          for (; i2 = (D5 = B5 + 60 | 0) + o5 | 0, C5[0 | Q5] = c4[i2 - 1 | 0], C5[Q5 + 1 | 0] = c4[i2 - 2 | 0], C5[Q5 + 2 | 0] = c4[i2 - 3 | 0], o5 = o5 - 4 | 0, C5[0 | (i2 = Q5 + 3 | 0)] = c4[D5 + o5 | 0], Q5 = Q5 + 4 | 0, (0 | i2) != (0 | f5); ) ;
                          break g;
                        case 0:
                      }
                      C5[0 | Q5] = 58, C5[Q5 + 1 | 0] = 58, Q5 = Q5 + 2 | 0, h5 = y5;
                    }
                    if (i2 = (0 | h5) < 7, h5 = h5 + 1 | 0, !i2) break;
                  }
                  else for (y5 = (k5 = h5 + a5 | 0) - 1 | 0, Q5 = B5, h5 = 0; ; ) {
                    if ((0 | h5) != (0 | a5)) {
                      for (!h5 | (0 | h5) == (0 | k5) || (C5[0 | Q5] = 58, Q5 = Q5 + 1 | 0), D5 = c4[0 | (i2 = (h5 << 1) + g6 | 0)] << 8 | c4[i2 + 1 | 0], o5 = 0, i2 = Q5; w5 = 15 & D5, C5[(B5 + 60 | 0) + o5 | 0] = w5 >>> 0 < 10 ? 48 | w5 : w5 + 87 | 0, f5 = i2, i2 = i2 + 1 | 0, w5 = o5, o5 = o5 + 1 | 0, S4 = D5 >>> 0 > 15, D5 = D5 >>> 4 | 0, S4; ) ;
                      if (2147483647 != (0 | w5)) {
                        if (3 & ~(i2 = f5 - Q5 | 0)) for (i2 = i2 + 1 & 3, D5 = 0; o5 = o5 - 1 | 0, C5[0 | Q5] = c4[o5 + (B5 + 60 | 0) | 0], Q5 = Q5 + 1 | 0, (0 | i2) != (0 | (D5 = D5 + 1 | 0)); ) ;
                        if (!(w5 >>> 0 < 3)) for (; i2 = (D5 = B5 + 60 | 0) + o5 | 0, C5[0 | Q5] = c4[i2 - 1 | 0], C5[Q5 + 1 | 0] = c4[i2 - 2 | 0], C5[Q5 + 2 | 0] = c4[i2 - 3 | 0], o5 = o5 - 4 | 0, C5[0 | (i2 = Q5 + 3 | 0)] = c4[D5 + o5 | 0], Q5 = Q5 + 4 | 0, (0 | i2) != (0 | f5); ) ;
                      }
                    } else C5[0 | Q5] = 58, C5[Q5 + 1 | 0] = 58, Q5 = Q5 + 2 | 0, h5 = y5;
                    if (i2 = (0 | h5) < 7, h5 = h5 + 1 | 0, !i2) break;
                  }
                  if (D5 = Q5 = Q5 - B5 | 0, I6 >>> 0 > Q5 >>> 0) break A;
                  return 0;
                }
                Q5 = D5 + 1 | 0;
              }
              return Q5 && E4(A7, B5, Q5), C5[A7 + D5 | 0] = 0, 0 | A7;
            }, Kd: function() {
              var A7 = 0;
              return o4[10321] ? A7 = 1 : (JI(), UI(41264, 16), o4[10321] = 1, A7 = 0), 0 | A7;
            }, Ld: function(A7, I6, g6, B5, Q5) {
              A7 |= 0, I6 |= 0, g6 |= 0, Q5 |= 0;
              var E5, D5 = 0, h5 = 0, w5 = 0;
              r4 = E5 = r4 - 16 | 0;
              A: {
                if (B5 |= 0) {
                  if ((D5 = B5 - 1 | 0) & B5 ? (h5 = -1 ^ g6, D5 = D5 - ((g6 >>> 0) % (B5 >>> 0) | 0) | 0) : D5 &= h5 = -1 ^ g6, D5 >>> 0 >= h5 >>> 0) break A;
                  if ((g6 = g6 + D5 | 0) >>> 0 >= Q5 >>> 0) I6 = -1;
                  else for (A7 && (o4[A7 >> 2] = g6 + 1), A7 = I6 + g6 | 0, I6 = 0, C5[E5 + 15 | 0] = 0, g6 = 0; h5 = Q5 = A7 - g6 | 0, w5 = c4[0 | Q5] & c4[E5 + 15 | 0], Q5 = (g6 ^ D5) - 1 >>> 24 | 0, C5[0 | h5] = w5 | 128 & Q5, C5[E5 + 15 | 0] = Q5 | c4[E5 + 15 | 0], (0 | B5) != (0 | (g6 = g6 + 1 | 0)); ) ;
                } else I6 = -1;
                return r4 = E5 + 16 | 0, 0 | I6;
              }
              KI(), i();
            }, Md: function(A7, I6, g6, C6) {
              A7 |= 0, I6 |= 0, g6 |= 0, C6 |= 0;
              var B5, Q5 = 0, i2 = 0, E5 = 0, D5 = 0, h5 = 0;
              if (o4[12 + (B5 = r4 - 16 | 0) >> 2] = 0, C6 - 1 >>> 0 < g6 >>> 0) {
                for (h5 = (Q5 = g6 - 1 | 0) + I6 | 0, g6 = 0, I6 = 0; D5 = ((128 ^ (i2 = c4[h5 - g6 | 0])) - 1 & o4[B5 + 12 >> 2] - 1 & E5 - 1) >>> 8 & 1, o4[B5 + 12 >> 2] = o4[B5 + 12 >> 2] | 0 - D5 & g6, I6 |= D5, E5 |= i2, (0 | C6) != (0 | (g6 = g6 + 1 | 0)); ) ;
                o4[A7 >> 2] = Q5 - o4[B5 + 12 >> 2], A7 = (255 & I6) - 1 | 0;
              } else A7 = -1;
              return 0 | A7;
            }, Nd: function() {
              return 1321;
            }, Od: function() {
              return 26;
            }, Pd: Dg, Qd: Eg, Rd: function(A7) {
              var I6, g6 = 0, C6 = 0, B5 = 0, Q5 = 0, i2 = 0, E5 = 0, D5 = 0, h5 = 0, F5 = 0, f5 = 0, S4 = 0, a5 = 0;
              r4 = I6 = r4 - 16 | 0;
              A: {
                I: {
                  g: {
                    C: {
                      B: {
                        Q: {
                          i: {
                            E: {
                              D: {
                                o: {
                                  if ((A7 |= 0) >>> 0 <= 244) {
                                    if (3 & (g6 = (i2 = o4[10189]) >>> (A7 = (E5 = A7 >>> 0 < 11 ? 16 : A7 + 11 & 504) >>> 3 | 0) | 0)) {
                                      A7 = 40796 + (g6 = (Q5 = A7 + (1 & ~g6) | 0) << 3) | 0, C6 = o4[g6 + 40804 >> 2], (0 | A7) != (0 | (B5 = o4[C6 + 8 >> 2])) ? (o4[B5 + 12 >> 2] = A7, o4[A7 + 8 >> 2] = B5) : (S4 = 40756, a5 = kI(-2, Q5) & i2, o4[S4 >> 2] = a5), A7 = C6 + 8 | 0, o4[C6 + 4 >> 2] = 3 | g6, o4[4 + (g6 = g6 + C6 | 0) >> 2] = 1 | o4[g6 + 4 >> 2];
                                      break A;
                                    }
                                    if ((h5 = o4[10191]) >>> 0 >= E5 >>> 0) break o;
                                    if (g6) {
                                      g6 = 40796 + (A7 = (Q5 = GI((0 - (C6 = 2 << A7) | C6) & g6 << A7)) << 3) | 0, C6 = o4[A7 + 40804 >> 2], (0 | g6) != (0 | (B5 = o4[C6 + 8 >> 2])) ? (o4[B5 + 12 >> 2] = g6, o4[g6 + 8 >> 2] = B5) : (i2 = kI(-2, Q5) & i2, o4[10189] = i2), o4[C6 + 4 >> 2] = 3 | E5, Q5 = A7 - E5 | 0, o4[4 + (D5 = C6 + E5 | 0) >> 2] = 1 | Q5, o4[A7 + C6 >> 2] = Q5, h5 && (A7 = 40796 + (-8 & h5) | 0, B5 = o4[10194], (g6 = 1 << (h5 >>> 3)) & i2 ? g6 = o4[A7 + 8 >> 2] : (o4[10189] = g6 | i2, g6 = A7), o4[A7 + 8 >> 2] = B5, o4[g6 + 12 >> 2] = B5, o4[B5 + 12 >> 2] = A7, o4[B5 + 8 >> 2] = g6), A7 = C6 + 8 | 0, o4[10194] = D5, o4[10191] = Q5;
                                      break A;
                                    }
                                    if (!(f5 = o4[10190])) break o;
                                    for (g6 = o4[41060 + (GI(f5) << 2) >> 2], Q5 = (-8 & o4[g6 + 4 >> 2]) - E5 | 0, C6 = g6; (A7 = o4[g6 + 16 >> 2]) || (A7 = o4[g6 + 20 >> 2]); ) Q5 = (g6 = (B5 = (-8 & o4[A7 + 4 >> 2]) - E5 | 0) >>> 0 < Q5 >>> 0) ? B5 : Q5, C6 = g6 ? A7 : C6, g6 = A7;
                                    if (F5 = o4[C6 + 24 >> 2], (0 | C6) != (0 | (A7 = o4[C6 + 12 >> 2]))) {
                                      g6 = o4[C6 + 8 >> 2], o4[g6 + 12 >> 2] = A7, o4[A7 + 8 >> 2] = g6;
                                      break I;
                                    }
                                    if (g6 = o4[C6 + 20 >> 2]) B5 = C6 + 20 | 0;
                                    else {
                                      if (!(g6 = o4[C6 + 16 >> 2])) break D;
                                      B5 = C6 + 16 | 0;
                                    }
                                    for (; D5 = B5, B5 = (A7 = g6) + 20 | 0, (g6 = o4[A7 + 20 >> 2]) || (B5 = A7 + 16 | 0, g6 = o4[A7 + 16 >> 2]); ) ;
                                    o4[D5 >> 2] = 0;
                                    break I;
                                  }
                                  if (E5 = -1, !(A7 >>> 0 > 4294967231) && (E5 = -8 & (g6 = A7 + 11 | 0), D5 = o4[10190])) {
                                    h5 = 31, Q5 = 0 - E5 | 0, A7 >>> 0 <= 16777204 && (h5 = 62 + ((E5 >>> 38 - (A7 = y4(g6 >>> 8 | 0)) & 1) - (A7 << 1) | 0) | 0);
                                    c: {
                                      h: {
                                        if (g6 = o4[41060 + (h5 << 2) >> 2]) for (A7 = 0, C6 = E5 << (31 != (0 | h5) ? 25 - (h5 >>> 1 | 0) | 0 : 0); ; ) {
                                          if (!((i2 = (-8 & o4[g6 + 4 >> 2]) - E5 | 0) >>> 0 >= Q5 >>> 0 || (B5 = g6, Q5 = i2))) {
                                            Q5 = 0, A7 = g6;
                                            break h;
                                          }
                                          if (i2 = o4[g6 + 20 >> 2], g6 = o4[16 + ((C6 >>> 29 & 4) + g6 | 0) >> 2], A7 = i2 ? (0 | i2) == (0 | g6) ? A7 : i2 : A7, C6 <<= 1, !g6) break;
                                        }
                                        else A7 = 0;
                                        if (!(A7 | B5)) {
                                          if (B5 = 0, !(A7 = (0 - (A7 = 2 << h5) | A7) & D5)) break o;
                                          A7 = o4[41060 + (GI(A7) << 2) >> 2];
                                        }
                                        if (!A7) break c;
                                      }
                                      for (; Q5 = (g6 = (C6 = (-8 & o4[A7 + 4 >> 2]) - E5 | 0) >>> 0 < Q5 >>> 0) ? C6 : Q5, B5 = g6 ? A7 : B5, A7 = (g6 = o4[A7 + 16 >> 2]) || o4[A7 + 20 >> 2]; ) ;
                                    }
                                    if (!(!B5 | o4[10191] - E5 >>> 0 <= Q5 >>> 0)) {
                                      if (h5 = o4[B5 + 24 >> 2], (0 | B5) != (0 | (A7 = o4[B5 + 12 >> 2]))) {
                                        g6 = o4[B5 + 8 >> 2], o4[g6 + 12 >> 2] = A7, o4[A7 + 8 >> 2] = g6;
                                        break g;
                                      }
                                      if (g6 = o4[B5 + 20 >> 2]) C6 = B5 + 20 | 0;
                                      else {
                                        if (!(g6 = o4[B5 + 16 >> 2])) break E;
                                        C6 = B5 + 16 | 0;
                                      }
                                      for (; i2 = C6, C6 = (A7 = g6) + 20 | 0, (g6 = o4[A7 + 20 >> 2]) || (C6 = A7 + 16 | 0, g6 = o4[A7 + 16 >> 2]); ) ;
                                      o4[i2 >> 2] = 0;
                                      break g;
                                    }
                                  }
                                }
                                if ((B5 = o4[10191]) >>> 0 >= E5 >>> 0) {
                                  A7 = o4[10194], (g6 = B5 - E5 | 0) >>> 0 >= 16 ? (o4[4 + (C6 = A7 + E5 | 0) >> 2] = 1 | g6, o4[A7 + B5 >> 2] = g6, o4[A7 + 4 >> 2] = 3 | E5) : (o4[A7 + 4 >> 2] = 3 | B5, o4[4 + (g6 = A7 + B5 | 0) >> 2] = 1 | o4[g6 + 4 >> 2], g6 = 0, C6 = 0), o4[10191] = g6, o4[10194] = C6, A7 = A7 + 8 | 0;
                                  break A;
                                }
                                if ((C6 = o4[10192]) >>> 0 > E5 >>> 0) {
                                  g6 = C6 - E5 | 0, o4[10192] = g6, C6 = (A7 = o4[10195]) + E5 | 0, o4[10195] = C6, o4[C6 + 4 >> 2] = 1 | g6, o4[A7 + 4 >> 2] = 3 | E5, A7 = A7 + 8 | 0;
                                  break A;
                                }
                                if (A7 = 0, Q5 = E5 + 47 | 0, o4[10307] ? g6 = o4[10309] : (o4[10310] = -1, o4[10311] = -1, o4[10308] = 4096, o4[10309] = 4096, o4[10307] = I6 + 12 & -16 ^ 1431655768, o4[10312] = 0, o4[10300] = 0, g6 = 4096), (g6 = (i2 = Q5 + g6 | 0) & (D5 = 0 - g6 | 0)) >>> 0 <= E5 >>> 0) break A;
                                if ((h5 = o4[10299]) && (B5 = (F5 = o4[10297]) + g6 | 0) >>> 0 <= F5 >>> 0 | B5 >>> 0 > h5 >>> 0) break A;
                                o: {
                                  if (!(4 & c4[41200])) {
                                    c: {
                                      h: {
                                        w: {
                                          F: {
                                            if (B5 = o4[10195]) for (A7 = 41204; ; ) {
                                              if ((h5 = o4[A7 >> 2]) >>> 0 <= B5 >>> 0 & B5 >>> 0 < h5 + o4[A7 + 4 >> 2] >>> 0) break F;
                                              if (!(A7 = o4[A7 + 8 >> 2])) break;
                                            }
                                            if (-1 == (0 | (C6 = CI(0)))) break c;
                                            if (i2 = g6, (B5 = (A7 = o4[10308]) - 1 | 0) & C6 && (i2 = (g6 - C6 | 0) + (C6 + B5 & 0 - A7) | 0), i2 >>> 0 <= E5 >>> 0) break c;
                                            if ((B5 = o4[10299]) && (A7 = (D5 = o4[10297]) + i2 | 0) >>> 0 <= D5 >>> 0 | A7 >>> 0 > B5 >>> 0) break c;
                                            if ((0 | C6) != (0 | (A7 = CI(i2)))) break w;
                                            break o;
                                          }
                                          if ((0 | (C6 = CI(i2 = D5 & i2 - C6))) == (o4[A7 >> 2] + o4[A7 + 4 >> 2] | 0)) break h;
                                          A7 = C6;
                                        }
                                        if (-1 == (0 | A7)) break c;
                                        if (E5 + 48 >>> 0 <= i2 >>> 0) {
                                          C6 = A7;
                                          break o;
                                        }
                                        if (-1 == (0 | CI(C6 = (C6 = o4[10309]) + (Q5 - i2 | 0) & 0 - C6))) break c;
                                        i2 = C6 + i2 | 0, C6 = A7;
                                        break o;
                                      }
                                      if (-1 != (0 | C6)) break o;
                                    }
                                    o4[10300] = 4 | o4[10300];
                                  }
                                  if (-1 == (0 | (C6 = CI(g6))) | -1 == (0 | (A7 = CI(0))) | A7 >>> 0 <= C6 >>> 0) break B;
                                  if ((i2 = A7 - C6 | 0) >>> 0 <= E5 + 40 >>> 0) break B;
                                }
                                A7 = o4[10297] + i2 | 0, o4[10297] = A7, A7 >>> 0 > w4[10298] && (o4[10298] = A7);
                                o: {
                                  if (Q5 = o4[10195]) {
                                    for (A7 = 41204; ; ) {
                                      if (((g6 = o4[A7 >> 2]) + (B5 = o4[A7 + 4 >> 2]) | 0) == (0 | C6)) break o;
                                      if (!(A7 = o4[A7 + 8 >> 2])) break;
                                    }
                                    break i;
                                  }
                                  for ((A7 = o4[10193]) >>> 0 <= C6 >>> 0 && A7 || (o4[10193] = C6), A7 = 0, o4[10302] = i2, o4[10301] = C6, o4[10197] = -1, o4[10198] = o4[10307], o4[10304] = 0; B5 = 40796 + (g6 = A7 << 3) | 0, o4[g6 + 40804 >> 2] = B5, o4[g6 + 40808 >> 2] = B5, 32 != (0 | (A7 = A7 + 1 | 0)); ) ;
                                  B5 = (A7 = i2 - 40 | 0) - (g6 = -8 - C6 & 7) | 0, o4[10192] = B5, g6 = g6 + C6 | 0, o4[10195] = g6, o4[g6 + 4 >> 2] = 1 | B5, o4[4 + (A7 + C6 | 0) >> 2] = 40, o4[10196] = o4[10311];
                                  break Q;
                                }
                                if (8 & o4[A7 + 12 >> 2] | C6 >>> 0 <= Q5 >>> 0 | g6 >>> 0 > Q5 >>> 0) break i;
                                o4[A7 + 4 >> 2] = B5 + i2, g6 = (A7 = -8 - Q5 & 7) + Q5 | 0, o4[10195] = g6, A7 = (C6 = o4[10192] + i2 | 0) - A7 | 0, o4[10192] = A7, o4[g6 + 4 >> 2] = 1 | A7, o4[4 + (C6 + Q5 | 0) >> 2] = 40, o4[10196] = o4[10311];
                                break Q;
                              }
                              A7 = 0;
                              break I;
                            }
                            A7 = 0;
                            break g;
                          }
                          w4[10193] > C6 >>> 0 && (o4[10193] = C6), B5 = C6 + i2 | 0, A7 = 41204;
                          i: {
                            for (; ; ) {
                              if ((0 | (g6 = o4[A7 >> 2])) != (0 | B5)) {
                                if (A7 = o4[A7 + 8 >> 2]) continue;
                                break i;
                              }
                              break;
                            }
                            if (!(8 & c4[A7 + 12 | 0])) break C;
                          }
                          for (A7 = 41204; !((g6 = o4[A7 >> 2]) >>> 0 <= Q5 >>> 0 && (B5 = g6 + o4[A7 + 4 >> 2] | 0) >>> 0 > Q5 >>> 0); ) A7 = o4[A7 + 8 >> 2];
                          for (D5 = (A7 = i2 - 40 | 0) - (g6 = -8 - C6 & 7) | 0, o4[10192] = D5, g6 = g6 + C6 | 0, o4[10195] = g6, o4[g6 + 4 >> 2] = 1 | D5, o4[4 + (A7 + C6 | 0) >> 2] = 40, o4[10196] = o4[10311], o4[(g6 = (A7 = (B5 + (39 - B5 & 7) | 0) - 47 | 0) >>> 0 < Q5 + 16 >>> 0 ? Q5 : A7) + 4 >> 2] = 27, A7 = o4[10304], o4[g6 + 16 >> 2] = o4[10303], o4[g6 + 20 >> 2] = A7, A7 = o4[10302], o4[g6 + 8 >> 2] = o4[10301], o4[g6 + 12 >> 2] = A7, o4[10303] = g6 + 8, o4[10302] = i2, o4[10301] = C6, o4[10304] = 0, A7 = g6 + 24 | 0; o4[A7 + 4 >> 2] = 7, C6 = A7 + 8 | 0, A7 = A7 + 4 | 0, C6 >>> 0 < B5 >>> 0; ) ;
                          if ((0 | g6) != (0 | Q5)) {
                            o4[g6 + 4 >> 2] = -2 & o4[g6 + 4 >> 2], C6 = g6 - Q5 | 0, o4[Q5 + 4 >> 2] = 1 | C6, o4[g6 >> 2] = C6;
                            i: if (C6 >>> 0 <= 255) A7 = 40796 + (248 & C6) | 0, (g6 = o4[10189]) & (C6 = 1 << (C6 >>> 3)) ? g6 = o4[A7 + 8 >> 2] : (o4[10189] = g6 | C6, g6 = A7), o4[A7 + 8 >> 2] = Q5, o4[g6 + 12 >> 2] = Q5, B5 = 8, C6 = 12;
                            else {
                              A7 = 31, C6 >>> 0 <= 16777215 && (A7 = 62 ^ (C6 >>> 38 - (A7 = y4(C6 >>> 8 | 0)) & 1 | A7 << 1)), o4[Q5 + 28 >> 2] = A7, o4[Q5 + 16 >> 2] = 0, o4[Q5 + 20 >> 2] = 0, g6 = 41060 + (A7 << 2) | 0;
                              E: {
                                if ((B5 = o4[10190]) & (i2 = 1 << A7)) {
                                  for (A7 = C6 << (31 != (0 | A7) ? 25 - (A7 >>> 1 | 0) | 0 : 0), B5 = o4[g6 >> 2]; ; ) {
                                    if ((0 | C6) == (-8 & o4[(g6 = B5) + 4 >> 2])) break E;
                                    if (B5 = A7 >>> 29 | 0, A7 <<= 1, !(B5 = o4[16 + (i2 = (4 & B5) + g6 | 0) >> 2])) break;
                                  }
                                  o4[i2 + 16 >> 2] = Q5;
                                } else o4[10190] = B5 | i2, o4[g6 >> 2] = Q5;
                                o4[Q5 + 24 >> 2] = g6, A7 = g6 = Q5, B5 = 12, C6 = 8;
                                break i;
                              }
                              A7 = o4[g6 + 8 >> 2], o4[A7 + 12 >> 2] = Q5, o4[g6 + 8 >> 2] = Q5, o4[Q5 + 8 >> 2] = A7, A7 = 0, B5 = 12, C6 = 24;
                            }
                            o4[Q5 + B5 >> 2] = g6, o4[C6 + Q5 >> 2] = A7;
                          }
                        }
                        if (!((A7 = o4[10192]) >>> 0 <= E5 >>> 0)) {
                          g6 = A7 - E5 | 0, o4[10192] = g6, C6 = (A7 = o4[10195]) + E5 | 0, o4[10195] = C6, o4[C6 + 4 >> 2] = 1 | g6, o4[A7 + 4 >> 2] = 3 | E5, A7 = A7 + 8 | 0;
                          break A;
                        }
                      }
                      o4[10188] = 48, A7 = 0;
                      break A;
                    }
                    o4[A7 >> 2] = C6, o4[A7 + 4 >> 2] = o4[A7 + 4 >> 2] + i2, o4[4 + (h5 = (-8 - C6 & 7) + C6 | 0) >> 2] = 3 | E5, D5 = (i2 = g6 + (-8 - g6 & 7) | 0) - (Q5 = E5 + h5 | 0) | 0;
                    C: if (o4[10195] != (0 | i2)) if (o4[10194] != (0 | i2)) {
                      if (1 == (3 & (A7 = o4[i2 + 4 >> 2]))) {
                        F5 = -8 & A7, C6 = o4[i2 + 12 >> 2];
                        B: if (A7 >>> 0 <= 255) {
                          if ((0 | (g6 = o4[i2 + 8 >> 2])) == (0 | C6)) {
                            S4 = 40756, a5 = o4[10189] & kI(-2, A7 >>> 3 | 0), o4[S4 >> 2] = a5;
                            break B;
                          }
                          o4[g6 + 12 >> 2] = C6, o4[C6 + 8 >> 2] = g6;
                        } else {
                          E5 = o4[i2 + 24 >> 2];
                          Q: if ((0 | C6) == (0 | i2)) {
                            i: {
                              if (A7 = o4[i2 + 20 >> 2]) g6 = i2 + 20 | 0;
                              else {
                                if (!(A7 = o4[i2 + 16 >> 2])) break i;
                                g6 = i2 + 16 | 0;
                              }
                              for (; B5 = g6, C6 = A7, g6 = A7 + 20 | 0, (A7 = o4[A7 + 20 >> 2]) || (g6 = C6 + 16 | 0, A7 = o4[C6 + 16 >> 2]); ) ;
                              o4[B5 >> 2] = 0;
                              break Q;
                            }
                            C6 = 0;
                          } else A7 = o4[i2 + 8 >> 2], o4[A7 + 12 >> 2] = C6, o4[C6 + 8 >> 2] = A7;
                          if (E5) {
                            A7 = o4[i2 + 28 >> 2];
                            Q: {
                              if (o4[41060 + (g6 = A7 << 2) >> 2] == (0 | i2)) {
                                if (o4[g6 + 41060 >> 2] = C6, C6) break Q;
                                S4 = 40760, a5 = o4[10190] & kI(-2, A7), o4[S4 >> 2] = a5;
                                break B;
                              }
                              if (o4[E5 + 16 >> 2] != (0 | i2) ? o4[E5 + 20 >> 2] = C6 : o4[E5 + 16 >> 2] = C6, !C6) break B;
                            }
                            o4[C6 + 24 >> 2] = E5, (A7 = o4[i2 + 16 >> 2]) && (o4[C6 + 16 >> 2] = A7, o4[A7 + 24 >> 2] = C6), (A7 = o4[i2 + 20 >> 2]) && (o4[C6 + 20 >> 2] = A7, o4[A7 + 24 >> 2] = C6);
                          }
                        }
                        D5 = D5 + F5 | 0, A7 = o4[4 + (i2 = i2 + F5 | 0) >> 2];
                      }
                      if (o4[i2 + 4 >> 2] = -2 & A7, o4[Q5 + 4 >> 2] = 1 | D5, o4[Q5 + D5 >> 2] = D5, D5 >>> 0 <= 255) A7 = 40796 + (248 & D5) | 0, (g6 = o4[10189]) & (C6 = 1 << (D5 >>> 3)) ? g6 = o4[A7 + 8 >> 2] : (o4[10189] = g6 | C6, g6 = A7), o4[A7 + 8 >> 2] = Q5, o4[g6 + 12 >> 2] = Q5, o4[Q5 + 12 >> 2] = A7, o4[Q5 + 8 >> 2] = g6;
                      else {
                        C6 = 31, D5 >>> 0 <= 16777215 && (C6 = 62 ^ (D5 >>> 38 - (A7 = y4(D5 >>> 8 | 0)) & 1 | A7 << 1)), o4[Q5 + 28 >> 2] = C6, o4[Q5 + 16 >> 2] = 0, o4[Q5 + 20 >> 2] = 0, A7 = 41060 + (C6 << 2) | 0;
                        B: {
                          if ((g6 = o4[10190]) & (B5 = 1 << C6)) {
                            for (C6 = D5 << (31 != (0 | C6) ? 25 - (C6 >>> 1 | 0) | 0 : 0), g6 = o4[A7 >> 2]; ; ) {
                              if ((-8 & o4[(A7 = g6) + 4 >> 2]) == (0 | D5)) break B;
                              if (g6 = C6 >>> 29 | 0, C6 <<= 1, !(g6 = o4[16 + (B5 = (4 & g6) + A7 | 0) >> 2])) break;
                            }
                            o4[B5 + 16 >> 2] = Q5;
                          } else o4[10190] = g6 | B5, o4[A7 >> 2] = Q5;
                          o4[Q5 + 24 >> 2] = A7, o4[Q5 + 12 >> 2] = Q5, o4[Q5 + 8 >> 2] = Q5;
                          break C;
                        }
                        g6 = o4[A7 + 8 >> 2], o4[g6 + 12 >> 2] = Q5, o4[A7 + 8 >> 2] = Q5, o4[Q5 + 24 >> 2] = 0, o4[Q5 + 12 >> 2] = A7, o4[Q5 + 8 >> 2] = g6;
                      }
                    } else o4[10194] = Q5, A7 = o4[10191] + D5 | 0, o4[10191] = A7, o4[Q5 + 4 >> 2] = 1 | A7, o4[A7 + Q5 >> 2] = A7;
                    else o4[10195] = Q5, A7 = o4[10192] + D5 | 0, o4[10192] = A7, o4[Q5 + 4 >> 2] = 1 | A7;
                    A7 = h5 + 8 | 0;
                    break A;
                  }
                  g: if (h5) {
                    g6 = o4[B5 + 28 >> 2];
                    C: {
                      if (o4[41060 + (C6 = g6 << 2) >> 2] == (0 | B5)) {
                        if (o4[C6 + 41060 >> 2] = A7, A7) break C;
                        D5 = kI(-2, g6) & D5, o4[10190] = D5;
                        break g;
                      }
                      if (o4[h5 + 16 >> 2] != (0 | B5) ? o4[h5 + 20 >> 2] = A7 : o4[h5 + 16 >> 2] = A7, !A7) break g;
                    }
                    o4[A7 + 24 >> 2] = h5, (g6 = o4[B5 + 16 >> 2]) && (o4[A7 + 16 >> 2] = g6, o4[g6 + 24 >> 2] = A7), (g6 = o4[B5 + 20 >> 2]) && (o4[A7 + 20 >> 2] = g6, o4[g6 + 24 >> 2] = A7);
                  }
                  g: if (Q5 >>> 0 <= 15) A7 = Q5 + E5 | 0, o4[B5 + 4 >> 2] = 3 | A7, o4[4 + (A7 = A7 + B5 | 0) >> 2] = 1 | o4[A7 + 4 >> 2];
                  else if (o4[B5 + 4 >> 2] = 3 | E5, o4[4 + (i2 = B5 + E5 | 0) >> 2] = 1 | Q5, o4[Q5 + i2 >> 2] = Q5, Q5 >>> 0 <= 255) A7 = 40796 + (248 & Q5) | 0, (g6 = o4[10189]) & (C6 = 1 << (Q5 >>> 3)) ? g6 = o4[A7 + 8 >> 2] : (o4[10189] = g6 | C6, g6 = A7), o4[A7 + 8 >> 2] = i2, o4[g6 + 12 >> 2] = i2, o4[i2 + 12 >> 2] = A7, o4[i2 + 8 >> 2] = g6;
                  else {
                    A7 = 31, Q5 >>> 0 <= 16777215 && (A7 = 62 ^ (Q5 >>> 38 - (A7 = y4(Q5 >>> 8 | 0)) & 1 | A7 << 1)), o4[i2 + 28 >> 2] = A7, o4[i2 + 16 >> 2] = 0, o4[i2 + 20 >> 2] = 0, g6 = 41060 + (A7 << 2) | 0;
                    C: {
                      if ((C6 = 1 << A7) & D5) {
                        for (A7 = Q5 << (31 != (0 | A7) ? 25 - (A7 >>> 1 | 0) | 0 : 0), g6 = o4[g6 >> 2]; ; ) {
                          if (C6 = g6, (-8 & o4[g6 + 4 >> 2]) == (0 | Q5)) break C;
                          if (D5 = A7 >>> 29 | 0, A7 <<= 1, !(g6 = o4[16 + (D5 = g6 + (4 & D5) | 0) >> 2])) break;
                        }
                        o4[D5 + 16 >> 2] = i2, o4[i2 + 24 >> 2] = C6;
                      } else o4[10190] = C6 | D5, o4[g6 >> 2] = i2, o4[i2 + 24 >> 2] = g6;
                      o4[i2 + 12 >> 2] = i2, o4[i2 + 8 >> 2] = i2;
                      break g;
                    }
                    A7 = o4[C6 + 8 >> 2], o4[A7 + 12 >> 2] = i2, o4[C6 + 8 >> 2] = i2, o4[i2 + 24 >> 2] = 0, o4[i2 + 12 >> 2] = C6, o4[i2 + 8 >> 2] = A7;
                  }
                  A7 = B5 + 8 | 0;
                  break A;
                }
                I: if (F5) {
                  g6 = o4[C6 + 28 >> 2];
                  g: {
                    if (o4[41060 + (B5 = g6 << 2) >> 2] == (0 | C6)) {
                      if (o4[B5 + 41060 >> 2] = A7, A7) break g;
                      S4 = 40760, a5 = kI(-2, g6) & f5, o4[S4 >> 2] = a5;
                      break I;
                    }
                    if (o4[F5 + 16 >> 2] != (0 | C6) ? o4[F5 + 20 >> 2] = A7 : o4[F5 + 16 >> 2] = A7, !A7) break I;
                  }
                  o4[A7 + 24 >> 2] = F5, (g6 = o4[C6 + 16 >> 2]) && (o4[A7 + 16 >> 2] = g6, o4[g6 + 24 >> 2] = A7), (g6 = o4[C6 + 20 >> 2]) && (o4[A7 + 20 >> 2] = g6, o4[g6 + 24 >> 2] = A7);
                }
                Q5 >>> 0 <= 15 ? (A7 = Q5 + E5 | 0, o4[C6 + 4 >> 2] = 3 | A7, o4[4 + (A7 = A7 + C6 | 0) >> 2] = 1 | o4[A7 + 4 >> 2]) : (o4[C6 + 4 >> 2] = 3 | E5, o4[4 + (D5 = C6 + E5 | 0) >> 2] = 1 | Q5, o4[Q5 + D5 >> 2] = Q5, h5 && (A7 = 40796 + (-8 & h5) | 0, B5 = o4[10194], (g6 = 1 << (h5 >>> 3)) & i2 ? g6 = o4[A7 + 8 >> 2] : (o4[10189] = g6 | i2, g6 = A7), o4[A7 + 8 >> 2] = B5, o4[g6 + 12 >> 2] = B5, o4[B5 + 12 >> 2] = A7, o4[B5 + 8 >> 2] = g6), o4[10194] = D5, o4[10191] = Q5), A7 = C6 + 8 | 0;
              }
              return r4 = I6 + 16 | 0, 0 | A7;
            }, Sd: function(A7) {
              var I6 = 0, g6 = 0, C6 = 0, B5 = 0, Q5 = 0, i2 = 0, E5 = 0, D5 = 0, c5 = 0, h5 = 0;
              A: if (A7 |= 0) {
                Q5 = (C6 = A7 - 8 | 0) + (A7 = -8 & (I6 = o4[A7 - 4 >> 2])) | 0;
                I: if (!(1 & I6)) {
                  if (!(2 & I6)) break A;
                  if ((C6 = C6 - (I6 = o4[C6 >> 2]) | 0) >>> 0 < w4[10193]) break A;
                  A7 = A7 + I6 | 0;
                  g: {
                    C: {
                      B: {
                        if (o4[10194] != (0 | C6)) {
                          if (g6 = o4[C6 + 12 >> 2], I6 >>> 0 <= 255) {
                            if ((0 | (B5 = o4[C6 + 8 >> 2])) != (0 | g6)) break B;
                            c5 = 40756, h5 = o4[10189] & kI(-2, I6 >>> 3 | 0), o4[c5 >> 2] = h5;
                            break I;
                          }
                          if (E5 = o4[C6 + 24 >> 2], (0 | g6) != (0 | C6)) {
                            I6 = o4[C6 + 8 >> 2], o4[I6 + 12 >> 2] = g6, o4[g6 + 8 >> 2] = I6;
                            break g;
                          }
                          if (B5 = o4[C6 + 20 >> 2]) I6 = C6 + 20 | 0;
                          else {
                            if (!(B5 = o4[C6 + 16 >> 2])) break C;
                            I6 = C6 + 16 | 0;
                          }
                          for (; i2 = I6, I6 = (g6 = B5) + 20 | 0, (B5 = o4[g6 + 20 >> 2]) || (I6 = g6 + 16 | 0, B5 = o4[g6 + 16 >> 2]); ) ;
                          o4[i2 >> 2] = 0;
                          break g;
                        }
                        if (3 & ~(I6 = o4[Q5 + 4 >> 2])) break I;
                        return o4[10191] = A7, o4[Q5 + 4 >> 2] = -2 & I6, o4[C6 + 4 >> 2] = 1 | A7, void (o4[Q5 >> 2] = A7);
                      }
                      o4[B5 + 12 >> 2] = g6, o4[g6 + 8 >> 2] = B5;
                      break I;
                    }
                    g6 = 0;
                  }
                  if (E5) {
                    I6 = o4[C6 + 28 >> 2];
                    g: {
                      if (o4[41060 + (B5 = I6 << 2) >> 2] == (0 | C6)) {
                        if (o4[B5 + 41060 >> 2] = g6, g6) break g;
                        c5 = 40760, h5 = o4[10190] & kI(-2, I6), o4[c5 >> 2] = h5;
                        break I;
                      }
                      if (o4[E5 + 16 >> 2] != (0 | C6) ? o4[E5 + 20 >> 2] = g6 : o4[E5 + 16 >> 2] = g6, !g6) break I;
                    }
                    o4[g6 + 24 >> 2] = E5, (I6 = o4[C6 + 16 >> 2]) && (o4[g6 + 16 >> 2] = I6, o4[I6 + 24 >> 2] = g6), (I6 = o4[C6 + 20 >> 2]) && (o4[g6 + 20 >> 2] = I6, o4[I6 + 24 >> 2] = g6);
                  }
                }
                if (!(C6 >>> 0 >= Q5 >>> 0) && 1 & (I6 = o4[Q5 + 4 >> 2])) {
                  I: {
                    g: {
                      C: {
                        B: {
                          if (!(2 & I6)) {
                            if (o4[10195] == (0 | Q5)) {
                              if (o4[10195] = C6, A7 = o4[10192] + A7 | 0, o4[10192] = A7, o4[C6 + 4 >> 2] = 1 | A7, o4[10194] != (0 | C6)) break A;
                              return o4[10191] = 0, void (o4[10194] = 0);
                            }
                            if ((0 | (D5 = o4[10194])) == (0 | Q5)) return o4[10194] = C6, A7 = o4[10191] + A7 | 0, o4[10191] = A7, o4[C6 + 4 >> 2] = 1 | A7, void (o4[A7 + C6 >> 2] = A7);
                            if (A7 = (-8 & I6) + A7 | 0, g6 = o4[Q5 + 12 >> 2], I6 >>> 0 <= 255) {
                              if ((0 | (B5 = o4[Q5 + 8 >> 2])) == (0 | g6)) {
                                c5 = 40756, h5 = o4[10189] & kI(-2, I6 >>> 3 | 0), o4[c5 >> 2] = h5;
                                break g;
                              }
                              o4[B5 + 12 >> 2] = g6, o4[g6 + 8 >> 2] = B5;
                              break g;
                            }
                            if (E5 = o4[Q5 + 24 >> 2], (0 | g6) != (0 | Q5)) {
                              I6 = o4[Q5 + 8 >> 2], o4[I6 + 12 >> 2] = g6, o4[g6 + 8 >> 2] = I6;
                              break C;
                            }
                            if (B5 = o4[Q5 + 20 >> 2]) I6 = Q5 + 20 | 0;
                            else {
                              if (!(B5 = o4[Q5 + 16 >> 2])) break B;
                              I6 = Q5 + 16 | 0;
                            }
                            for (; i2 = I6, I6 = (g6 = B5) + 20 | 0, (B5 = o4[g6 + 20 >> 2]) || (I6 = g6 + 16 | 0, B5 = o4[g6 + 16 >> 2]); ) ;
                            o4[i2 >> 2] = 0;
                            break C;
                          }
                          o4[Q5 + 4 >> 2] = -2 & I6, o4[C6 + 4 >> 2] = 1 | A7, o4[A7 + C6 >> 2] = A7;
                          break I;
                        }
                        g6 = 0;
                      }
                      if (E5) {
                        I6 = o4[Q5 + 28 >> 2];
                        C: {
                          if (o4[41060 + (B5 = I6 << 2) >> 2] == (0 | Q5)) {
                            if (o4[B5 + 41060 >> 2] = g6, g6) break C;
                            c5 = 40760, h5 = o4[10190] & kI(-2, I6), o4[c5 >> 2] = h5;
                            break g;
                          }
                          if (o4[E5 + 16 >> 2] != (0 | Q5) ? o4[E5 + 20 >> 2] = g6 : o4[E5 + 16 >> 2] = g6, !g6) break g;
                        }
                        o4[g6 + 24 >> 2] = E5, (I6 = o4[Q5 + 16 >> 2]) && (o4[g6 + 16 >> 2] = I6, o4[I6 + 24 >> 2] = g6), (I6 = o4[Q5 + 20 >> 2]) && (o4[g6 + 20 >> 2] = I6, o4[I6 + 24 >> 2] = g6);
                      }
                    }
                    if (o4[C6 + 4 >> 2] = 1 | A7, o4[A7 + C6 >> 2] = A7, (0 | C6) == (0 | D5)) return void (o4[10191] = A7);
                  }
                  if (A7 >>> 0 <= 255) return I6 = 40796 + (248 & A7) | 0, (B5 = o4[10189]) & (A7 = 1 << (A7 >>> 3)) ? A7 = o4[I6 + 8 >> 2] : (o4[10189] = A7 | B5, A7 = I6), o4[I6 + 8 >> 2] = C6, o4[A7 + 12 >> 2] = C6, o4[C6 + 12 >> 2] = I6, void (o4[C6 + 8 >> 2] = A7);
                  g6 = 31, A7 >>> 0 <= 16777215 && (g6 = 62 ^ (A7 >>> 38 - (I6 = y4(A7 >>> 8 | 0)) & 1 | I6 << 1)), o4[C6 + 28 >> 2] = g6, o4[C6 + 16 >> 2] = 0, o4[C6 + 20 >> 2] = 0, I6 = 41060 + (g6 << 2) | 0;
                  I: {
                    g: {
                      if ((B5 = o4[10190]) & (i2 = 1 << g6)) {
                        for (g6 = A7 << (31 != (0 | g6) ? 25 - (g6 >>> 1 | 0) | 0 : 0), I6 = o4[I6 >> 2]; ; ) {
                          if (B5 = I6, (-8 & o4[I6 + 4 >> 2]) == (0 | A7)) break g;
                          if (I6 = g6 >>> 29 | 0, g6 <<= 1, !(I6 = o4[16 + (i2 = (4 & I6) + B5 | 0) >> 2])) break;
                        }
                        o4[i2 + 16 >> 2] = C6, I6 = B5, g6 = 24;
                      } else o4[10190] = B5 | i2, o4[I6 >> 2] = C6, g6 = 24;
                      B5 = C6, i2 = C6, A7 = 8;
                      break I;
                    }
                    I6 = o4[B5 + 8 >> 2], o4[I6 + 12 >> 2] = C6, o4[B5 + 8 >> 2] = C6, g6 = 8, i2 = 0, A7 = 24;
                  }
                  o4[g6 + C6 >> 2] = I6, o4[C6 + 12 >> 2] = B5, o4[A7 + C6 >> 2] = i2, A7 = o4[10197] - 1 | 0, o4[10197] = A7 || -1;
                }
              }
            } };
          })(A5);
        })(I4);
      }, instantiate: function(A4, I4) {
        return { then: function(g4) {
          var C4 = new D3.Module(A4);
          g4({ instance: new D3.Instance(C4, I4) });
        } };
      }, RuntimeError: Error, isWasm2js: true };
      var o3, c3, h3, w3, F3, y3, f3, a3 = false;
      function k3() {
        var A4 = p3.buffer;
        o3 = new Int8Array(A4), h3 = new Int16Array(A4), g3.HEAPU8 = c3 = new Uint8Array(A4), w3 = new Int32Array(A4), F3 = new Uint32Array(A4), y3 = new Float32Array(A4), f3 = new Float64Array(A4);
      }
      function M3(A4) {
        throw g3.onAbort?.(A4), E3(A4 = "Aborted(" + A4 + ")"), a3 = true, A4 += ". Build with -sASSERTIONS for more info.", new D3.RuntimeError(A4);
      }
      var r3 = (A4) => {
        for (; A4.length > 0; ) A4.shift()(g3);
      }, n3 = [], t3 = (A4) => n3.push(A4), U3 = [], J3 = (A4) => U3.push(A4), K3 = 0, e2 = null, Y3 = new TextDecoder(), N3 = (A4, I4, g4) => {
        if (!A4) return "";
        var C4 = ((A5, I5, g5, C5) => {
          var B4 = I5 + g5;
          if (C5) return B4;
          for (; A5[I5] && !(I5 >= B4); ) ++I5;
          return I5;
        })(c3, A4, I4, g4);
        return Y3.decode(c3.subarray(A4, C4));
      }, G3 = [], H3 = (A4, I4) => Math.ceil(A4 / I4) * I4, s3 = (A4) => {
        var I4 = (A4 - p3.buffer.byteLength + 65535) / 65536 | 0;
        try {
          return p3.grow(I4), k3(), 1;
        } catch (A5) {
        }
      };
      if (g3.noExitRuntime && g3.noExitRuntime, g3.print && g3.print, g3.printErr && (E3 = g3.printErr), g3.wasmBinary && g3.wasmBinary, g3.arguments && g3.arguments, g3.thisProgram && g3.thisProgram, g3.preInit) for ("function" == typeof g3.preInit && (g3.preInit = [g3.preInit]); g3.preInit.length > 0; ) g3.preInit.shift()();
      g3.setValue = function(A4, I4, g4 = "i8") {
        switch (g4.endsWith("*") && (g4 = "*"), g4) {
          case "i1":
          case "i8":
            o3[A4] = I4;
            break;
          case "i16":
            h3[A4 >> 1] = I4;
            break;
          case "i32":
            w3[A4 >> 2] = I4;
            break;
          case "i64":
            M3("to do setValue(i64) use WASM_BIGINT");
          case "float":
            y3[A4 >> 2] = I4;
            break;
          case "double":
            f3[A4 >> 3] = I4;
            break;
          case "*":
            F3[A4 >> 2] = I4;
            break;
          default:
            M3(`invalid type for setValue: ${g4}`);
        }
      }, g3.getValue = function(A4, I4 = "i8") {
        switch (I4.endsWith("*") && (I4 = "*"), I4) {
          case "i1":
          case "i8":
            return o3[A4];
          case "i16":
            return h3[A4 >> 1];
          case "i32":
            return w3[A4 >> 2];
          case "i64":
            M3("to do getValue(i64) use WASM_BIGINT");
          case "float":
            return y3[A4 >> 2];
          case "double":
            return f3[A4 >> 3];
          case "*":
            return F3[A4 >> 2];
          default:
            M3(`invalid type for getValue: ${I4}`);
        }
      }, g3.UTF8ToString = N3;
      var p3, L3, d3 = { 39928: () => g3.getRandomValue(), 39964: () => {
        if (void 0 === g3.getRandomValue) try {
          var A4 = "object" == typeof window ? window : self, I4 = void 0 !== A4.crypto ? A4.crypto : A4.msCrypto;
          I4 = void 0 === I4 ? B4 : I4;
          var C4 = function() {
            var A5 = new Uint32Array(1);
            return I4.getRandomValues(A5), A5[0] >>> 0;
          };
          C4(), g3.getRandomValue = C4;
        } catch (A5) {
          try {
            var B4 = null, Q4 = function() {
              var A6 = B4.randomBytes(4);
              return (A6[0] << 24 | A6[1] << 16 | A6[2] << 8 | A6[3]) >>> 0;
            };
            Q4(), g3.getRandomValue = Q4;
          } catch (A6) {
            throw "No secure random number generator found";
          }
        }
      } }, P3 = { a: (A4, I4, g4, C4) => M3(`Assertion failed: ${N3(A4)}, at: ` + [I4 ? N3(I4) : "unknown filename", g4, C4 ? N3(C4) : "unknown function"]), c: () => M3(""), b: (A4, I4, g4) => ((A5, I5, g5) => {
        var C4 = ((A6, I6) => {
          var g6;
          for (G3.length = 0; g6 = c3[A6++]; ) {
            var C5 = 105 != g6;
            I6 += (C5 &= 112 != g6) && I6 % 8 ? 4 : 0, G3.push(112 == g6 ? F3[I6 >> 2] : 105 == g6 ? w3[I6 >> 2] : f3[I6 >> 3]), I6 += C5 ? 8 : 4;
          }
          return G3;
        })(I5, g5);
        return d3[A5](...C4);
      })(A4, I4, g4), d: (A4) => {
        var I4 = c3.length, g4 = 2147483648;
        if ((A4 >>>= 0) > g4) return false;
        for (var C4 = 1; C4 <= 4; C4 *= 2) {
          var B4 = I4 * (1 + 0.2 / C4);
          B4 = Math.min(B4, A4 + 100663296);
          var Q4 = Math.min(g4, H3(Math.max(A4, B4), 65536));
          if (s3(Q4)) return true;
        }
        return false;
      } };
      !(async function() {
        function A4(A5, I5) {
          return (function(A6) {
            g3._crypto_aead_aegis128l_keybytes = A6.g, g3._crypto_aead_aegis128l_nsecbytes = A6.h, g3._crypto_aead_aegis128l_npubbytes = A6.i, g3._crypto_aead_aegis128l_abytes = A6.j, g3._crypto_aead_aegis128l_messagebytes_max = A6.k, g3._crypto_aead_aegis128l_keygen = A6.l, g3._crypto_aead_aegis128l_encrypt = A6.m, g3._crypto_aead_aegis128l_encrypt_detached = A6.n, g3._crypto_aead_aegis128l_decrypt = A6.o, g3._crypto_aead_aegis128l_decrypt_detached = A6.p, g3._crypto_aead_aegis256_keybytes = A6.q, g3._crypto_aead_aegis256_nsecbytes = A6.r, g3._crypto_aead_aegis256_npubbytes = A6.s, g3._crypto_aead_aegis256_abytes = A6.t, g3._crypto_aead_aegis256_messagebytes_max = A6.u, g3._crypto_aead_aegis256_keygen = A6.v, g3._crypto_aead_aegis256_encrypt = A6.w, g3._crypto_aead_aegis256_encrypt_detached = A6.x, g3._crypto_aead_aegis256_decrypt = A6.y, g3._crypto_aead_aegis256_decrypt_detached = A6.z, g3._crypto_aead_aes256gcm_is_available = A6.A, g3._crypto_aead_chacha20poly1305_encrypt_detached = A6.B, g3._crypto_aead_chacha20poly1305_encrypt = A6.C, g3._crypto_aead_chacha20poly1305_ietf_encrypt_detached = A6.D, g3._crypto_aead_chacha20poly1305_ietf_encrypt = A6.E, g3._crypto_aead_chacha20poly1305_decrypt_detached = A6.F, g3._crypto_aead_chacha20poly1305_decrypt = A6.G, g3._crypto_aead_chacha20poly1305_ietf_decrypt_detached = A6.H, g3._crypto_aead_chacha20poly1305_ietf_decrypt = A6.I, g3._crypto_aead_chacha20poly1305_ietf_keybytes = A6.J, g3._crypto_aead_chacha20poly1305_ietf_npubbytes = A6.K, g3._crypto_aead_chacha20poly1305_ietf_nsecbytes = A6.L, g3._crypto_aead_chacha20poly1305_ietf_abytes = A6.M, g3._crypto_aead_chacha20poly1305_ietf_messagebytes_max = A6.N, g3._crypto_aead_chacha20poly1305_ietf_keygen = A6.O, g3._crypto_aead_chacha20poly1305_keybytes = A6.P, g3._crypto_aead_chacha20poly1305_npubbytes = A6.Q, g3._crypto_aead_chacha20poly1305_nsecbytes = A6.R, g3._crypto_aead_chacha20poly1305_abytes = A6.S, g3._crypto_aead_chacha20poly1305_messagebytes_max = A6.T, g3._crypto_aead_chacha20poly1305_keygen = A6.U, g3._crypto_aead_xchacha20poly1305_ietf_encrypt_detached = A6.V, g3._crypto_aead_xchacha20poly1305_ietf_encrypt = A6.W, g3._crypto_aead_xchacha20poly1305_ietf_decrypt_detached = A6.X, g3._crypto_aead_xchacha20poly1305_ietf_decrypt = A6.Y, g3._crypto_aead_xchacha20poly1305_ietf_keybytes = A6.Z, g3._crypto_aead_xchacha20poly1305_ietf_npubbytes = A6._, g3._crypto_aead_xchacha20poly1305_ietf_nsecbytes = A6.$, g3._crypto_aead_xchacha20poly1305_ietf_abytes = A6.aa, g3._crypto_aead_xchacha20poly1305_ietf_messagebytes_max = A6.ba, g3._crypto_aead_xchacha20poly1305_ietf_keygen = A6.ca, g3._crypto_auth_bytes = A6.da, g3._crypto_auth_keybytes = A6.ea, g3._crypto_auth = A6.fa, g3._crypto_auth_verify = A6.ga, g3._crypto_auth_keygen = A6.ha, g3._crypto_box_seedbytes = A6.ia, g3._crypto_box_publickeybytes = A6.ja, g3._crypto_box_secretkeybytes = A6.ka, g3._crypto_box_beforenmbytes = A6.la, g3._crypto_box_noncebytes = A6.ma, g3._crypto_box_macbytes = A6.na, g3._crypto_box_messagebytes_max = A6.oa, g3._crypto_box_seed_keypair = A6.pa, g3._crypto_box_keypair = A6.qa, g3._crypto_box_beforenm = A6.ra, g3._crypto_box_detached_afternm = A6.sa, g3._crypto_box_detached = A6.ta, g3._crypto_box_easy_afternm = A6.ua, g3._crypto_box_easy = A6.va, g3._crypto_box_open_detached_afternm = A6.wa, g3._crypto_box_open_detached = A6.xa, g3._crypto_box_open_easy_afternm = A6.ya, g3._crypto_box_open_easy = A6.za, g3._crypto_box_seal = A6.Aa, g3._crypto_box_seal_open = A6.Ba, g3._crypto_box_sealbytes = A6.Ca, g3._crypto_generichash_bytes_min = A6.Da, g3._crypto_generichash_bytes_max = A6.Ea, g3._crypto_generichash_bytes = A6.Fa, g3._crypto_generichash_keybytes_min = A6.Ga, g3._crypto_generichash_keybytes_max = A6.Ha, g3._crypto_generichash_keybytes = A6.Ia, g3._crypto_generichash_statebytes = A6.Ja, g3._crypto_generichash = A6.Ka, g3._crypto_generichash_init = A6.La, g3._crypto_generichash_update = A6.Ma, g3._crypto_generichash_final = A6.Na, g3._crypto_generichash_keygen = A6.Oa, g3._crypto_hash_bytes = A6.Pa, g3._crypto_hash = A6.Qa, g3._crypto_ipcrypt_bytes = A6.Ra, g3._crypto_ipcrypt_keybytes = A6.Sa, g3._crypto_ipcrypt_nd_keybytes = A6.Ta, g3._crypto_ipcrypt_nd_tweakbytes = A6.Ua, g3._crypto_ipcrypt_nd_inputbytes = A6.Va, g3._crypto_ipcrypt_nd_outputbytes = A6.Wa, g3._crypto_ipcrypt_ndx_keybytes = A6.Xa, g3._crypto_ipcrypt_ndx_tweakbytes = A6.Ya, g3._crypto_ipcrypt_ndx_inputbytes = A6.Za, g3._crypto_ipcrypt_ndx_outputbytes = A6._a, g3._crypto_ipcrypt_pfx_keybytes = A6.$a, g3._crypto_ipcrypt_pfx_bytes = A6.ab, g3._crypto_ipcrypt_keygen = A6.bb, g3._crypto_ipcrypt_nd_keygen = A6.cb, g3._crypto_ipcrypt_ndx_keygen = A6.db, g3._crypto_ipcrypt_pfx_keygen = A6.eb, g3._crypto_ipcrypt_encrypt = A6.fb, g3._crypto_ipcrypt_decrypt = A6.gb, g3._crypto_ipcrypt_nd_encrypt = A6.hb, g3._crypto_ipcrypt_nd_decrypt = A6.ib, g3._crypto_ipcrypt_ndx_encrypt = A6.jb, g3._crypto_ipcrypt_ndx_decrypt = A6.kb, g3._crypto_ipcrypt_pfx_encrypt = A6.lb, g3._crypto_ipcrypt_pfx_decrypt = A6.mb, g3._crypto_kdf_bytes_min = A6.nb, g3._crypto_kdf_bytes_max = A6.ob, g3._crypto_kdf_contextbytes = A6.pb, g3._crypto_kdf_keybytes = A6.qb, g3._crypto_kdf_derive_from_key = A6.rb, g3._crypto_kdf_keygen = A6.sb, g3._crypto_kdf_hkdf_sha256_extract_init = A6.tb, g3._crypto_kdf_hkdf_sha256_extract_update = A6.ub, g3._crypto_kdf_hkdf_sha256_extract_final = A6.vb, g3._crypto_kdf_hkdf_sha256_extract = A6.wb, g3._crypto_kdf_hkdf_sha256_keygen = A6.xb, g3._crypto_kdf_hkdf_sha256_expand = A6.yb, g3._crypto_kdf_hkdf_sha256_keybytes = A6.zb, g3._crypto_kdf_hkdf_sha256_bytes_min = A6.Ab, g3._crypto_kdf_hkdf_sha256_bytes_max = A6.Bb, g3._crypto_kdf_hkdf_sha256_statebytes = A6.Cb, g3._crypto_kdf_hkdf_sha512_extract_init = A6.Db, g3._crypto_kdf_hkdf_sha512_extract_update = A6.Eb, g3._crypto_kdf_hkdf_sha512_extract_final = A6.Fb, g3._crypto_kdf_hkdf_sha512_extract = A6.Gb, g3._crypto_kdf_hkdf_sha512_keygen = A6.Hb, g3._crypto_kdf_hkdf_sha512_expand = A6.Ib, g3._crypto_kdf_hkdf_sha512_keybytes = A6.Jb, g3._crypto_kdf_hkdf_sha512_bytes_min = A6.Kb, g3._crypto_kdf_hkdf_sha512_bytes_max = A6.Lb, g3._crypto_kdf_hkdf_sha512_statebytes = A6.Mb, g3._crypto_kx_seed_keypair = A6.Nb, g3._crypto_kx_keypair = A6.Ob, g3._crypto_kx_client_session_keys = A6.Pb, g3._crypto_kx_server_session_keys = A6.Qb, g3._crypto_kx_publickeybytes = A6.Rb, g3._crypto_kx_secretkeybytes = A6.Sb, g3._crypto_kx_seedbytes = A6.Tb, g3._crypto_kx_sessionkeybytes = A6.Ub, g3._crypto_scalarmult_base = A6.Vb, g3._crypto_scalarmult = A6.Wb, g3._crypto_scalarmult_bytes = A6.Xb, g3._crypto_scalarmult_scalarbytes = A6.Yb, g3._crypto_secretbox_keybytes = A6.Zb, g3._crypto_secretbox_noncebytes = A6._b, g3._crypto_secretbox_macbytes = A6.$b, g3._crypto_secretbox_messagebytes_max = A6.ac, g3._crypto_secretbox_keygen = A6.bc, g3._crypto_secretbox_detached = A6.cc, g3._crypto_secretbox_easy = A6.dc, g3._crypto_secretbox_open_detached = A6.ec, g3._crypto_secretbox_open_easy = A6.fc, g3._crypto_secretstream_xchacha20poly1305_keygen = A6.gc, g3._crypto_secretstream_xchacha20poly1305_init_push = A6.hc, g3._crypto_secretstream_xchacha20poly1305_init_pull = A6.ic, g3._crypto_secretstream_xchacha20poly1305_rekey = A6.jc, g3._crypto_secretstream_xchacha20poly1305_push = A6.kc, g3._crypto_secretstream_xchacha20poly1305_pull = A6.lc, g3._crypto_secretstream_xchacha20poly1305_statebytes = A6.mc, g3._crypto_secretstream_xchacha20poly1305_abytes = A6.nc, g3._crypto_secretstream_xchacha20poly1305_headerbytes = A6.oc, g3._crypto_secretstream_xchacha20poly1305_keybytes = A6.pc, g3._crypto_secretstream_xchacha20poly1305_messagebytes_max = A6.qc, g3._crypto_secretstream_xchacha20poly1305_tag_message = A6.rc, g3._crypto_secretstream_xchacha20poly1305_tag_push = A6.sc, g3._crypto_secretstream_xchacha20poly1305_tag_rekey = A6.tc, g3._crypto_secretstream_xchacha20poly1305_tag_final = A6.uc, g3._crypto_shorthash_bytes = A6.vc, g3._crypto_shorthash_keybytes = A6.wc, g3._crypto_shorthash = A6.xc, g3._crypto_shorthash_keygen = A6.yc, g3._crypto_sign_statebytes = A6.zc, g3._crypto_sign_bytes = A6.Ac, g3._crypto_sign_seedbytes = A6.Bc, g3._crypto_sign_publickeybytes = A6.Cc, g3._crypto_sign_secretkeybytes = A6.Dc, g3._crypto_sign_messagebytes_max = A6.Ec, g3._crypto_sign_seed_keypair = A6.Fc, g3._crypto_sign_keypair = A6.Gc, g3._crypto_sign = A6.Hc, g3._crypto_sign_open = A6.Ic, g3._crypto_sign_detached = A6.Jc, g3._crypto_sign_verify_detached = A6.Kc, g3._crypto_sign_init = A6.Lc, g3._crypto_sign_update = A6.Mc, g3._crypto_sign_final_create = A6.Nc, g3._crypto_sign_final_verify = A6.Oc, g3._crypto_sign_ed25519_pk_to_curve25519 = A6.Pc, g3._crypto_sign_ed25519_sk_to_curve25519 = A6.Qc, g3._crypto_xof_shake128_blockbytes = A6.Rc, g3._crypto_xof_shake128_statebytes = A6.Sc, g3._crypto_xof_shake128_domain_standard = A6.Tc, g3._crypto_xof_shake128 = A6.Uc, g3._crypto_xof_shake128_init = A6.Vc, g3._crypto_xof_shake128_init_with_domain = A6.Wc, g3._crypto_xof_shake128_update = A6.Xc, g3._crypto_xof_shake128_squeeze = A6.Yc, g3._crypto_xof_shake256_blockbytes = A6.Zc, g3._crypto_xof_shake256_statebytes = A6._c, g3._crypto_xof_shake256_domain_standard = A6.$c, g3._crypto_xof_shake256 = A6.ad, g3._crypto_xof_shake256_init = A6.bd, g3._crypto_xof_shake256_init_with_domain = A6.cd, g3._crypto_xof_shake256_update = A6.dd, g3._crypto_xof_shake256_squeeze = A6.ed, g3._crypto_xof_turboshake128_blockbytes = A6.fd, g3._crypto_xof_turboshake128_statebytes = A6.gd, g3._crypto_xof_turboshake128_domain_standard = A6.hd, g3._crypto_xof_turboshake128 = A6.id, g3._crypto_xof_turboshake128_init = A6.jd, g3._crypto_xof_turboshake128_init_with_domain = A6.kd, g3._crypto_xof_turboshake128_update = A6.ld, g3._crypto_xof_turboshake128_squeeze = A6.md, g3._crypto_xof_turboshake256_blockbytes = A6.nd, g3._crypto_xof_turboshake256_statebytes = A6.od, g3._crypto_xof_turboshake256_domain_standard = A6.pd, g3._crypto_xof_turboshake256 = A6.qd, g3._crypto_xof_turboshake256_init = A6.rd, g3._crypto_xof_turboshake256_init_with_domain = A6.sd, g3._crypto_xof_turboshake256_update = A6.td, g3._crypto_xof_turboshake256_squeeze = A6.ud, g3._randombytes_random = A6.vd, g3._randombytes_stir = A6.wd, g3._randombytes_uniform = A6.xd, g3._randombytes_buf = A6.yd, g3._randombytes_buf_deterministic = A6.zd, g3._randombytes_seedbytes = A6.Ad, g3._randombytes_close = A6.Bd, g3._randombytes = A6.Cd, g3._sodium_bin2hex = A6.Dd, g3._sodium_hex2bin = A6.Ed, g3._sodium_base64_encoded_len = A6.Fd, g3._sodium_bin2base64 = A6.Gd, g3._sodium_base642bin = A6.Hd, g3._sodium_ip2bin = A6.Id, g3._sodium_bin2ip = A6.Jd, g3._sodium_init = A6.Kd, g3._sodium_pad = A6.Ld, g3._sodium_unpad = A6.Md, g3._sodium_version_string = A6.Nd, g3._sodium_library_version_major = A6.Od, g3._sodium_library_version_minor = A6.Pd, g3._sodium_library_minimal = A6.Qd, g3._malloc = A6.Rd, g3._free = A6.Sd, A6.dynCall_iiiji, A6.dynCall_iiij, A6.dynCall_iijii, A6.dynCall_iiijiji, A6.dynCall_iiijiii, p3 = A6.e, A6.__indirect_function_table;
          })(L3 = A5.exports), k3(), (() => {
            if (K3--, g3.monitorRunDependencies?.(K3), 0 == K3 && e2) {
              var A6 = e2;
              e2 = null, A6();
            }
          })(), L3;
        }
        K3++, g3.monitorRunDependencies?.(K3);
        var I4 = { a: P3 };
        g3.instantiateWasm ? new Promise((C4, B4) => {
          g3.instantiateWasm(I4, (I5, g4) => {
            C4(A4(I5));
          });
        }) : A4((await (async function(A5, I5, g4) {
          return (async function(A6, I6) {
            try {
              var g5 = await void 0;
              return await D3.instantiate(g5, I6);
            } catch (A7) {
              E3(`failed to asynchronously prepare wasm: ${A7}`), M3(A7);
            }
          })(0, g4);
        })(0, 0, I4)).instance);
      })(), (function A4() {
        function I4() {
          g3.calledRun = true, a3 || (L3.f(), g3.onRuntimeInitialized?.(), (function() {
            if (g3.postRun) for ("function" == typeof g3.postRun && (g3.postRun = [g3.postRun]); g3.postRun.length; ) t3(g3.postRun.shift());
            r3(n3);
          })());
        }
        K3 > 0 ? e2 = A4 : ((function() {
          if (g3.preRun) for ("function" == typeof g3.preRun && (g3.preRun = [g3.preRun]); g3.preRun.length; ) J3(g3.preRun.shift());
          r3(U3);
        })(), K3 > 0 ? e2 = A4 : g3.setStatus ? (g3.setStatus("Running..."), setTimeout(() => {
          setTimeout(() => g3.setStatus(""), 1), I4();
        }, 1)) : I4());
      })();
    });
  };
  var g2, C2 = void 0 !== C2 ? C2 : {}, B2 = !!globalThis.window, Q2 = !!globalThis.WorkerGlobalScope, E2 = globalThis.process?.versions?.node && "renderer" != globalThis.process?.type;
  if (E2) g2 = (A3) => (A3 = M2(A3) ? new URL(A3) : A3, null.readFileSync(A3)), process.argv.length > 1 && process.argv[1].replace(/\\/g, "/"), process.argv.slice(2), "undefined" != typeof module && (module.exports = C2);
  else if (B2 || Q2) {
    try {
      new URL(".", "").href;
    } catch {
    }
    Q2 && (g2 = (A3) => {
      var I3 = new XMLHttpRequest();
      return I3.open("GET", A3, false), I3.responseType = "arraybuffer", I3.send(null), new Uint8Array(I3.response);
    });
  }
  (function() {
  }).bind();
  var D2, o2, c2, h2, w2, F2, y2, f2, S2, a2 = function() {
  }.bind(), k2 = false, M2 = (A3) => A3.startsWith("file://");
  function r2() {
    var A3 = R2.buffer;
    o2 = new Int8Array(A3), h2 = new Int16Array(A3), C2.HEAPU8 = c2 = new Uint8Array(A3), w2 = new Int32Array(A3), F2 = new Uint32Array(A3), y2 = new Float32Array(A3), f2 = new Float64Array(A3);
  }
  function n2(A3) {
    throw C2.onAbort?.(A3), a2(A3 = "Aborted(" + A3 + ")"), k2 = true, A3 += ". Build with -sASSERTIONS for more info.", new WebAssembly.RuntimeError(A3);
  }
  for (var t2 = (A3) => {
    for (; A3.length > 0; ) A3.shift()(C2);
  }, U2 = [], J2 = (A3) => U2.push(A3), K2 = [], e = (A3) => K2.push(A3), Y2 = 0, N2 = null, G2 = globalThis.TextDecoder && new TextDecoder(), H2 = (A3, I3, g3) => A3 ? ((A4, I4 = 0, g4, C3) => {
    var B3 = ((A5, I5, g5, C4) => {
      var B4 = I5 + g5;
      if (C4) return B4;
      for (; A5[I5] && !(I5 >= B4); ) ++I5;
      return I5;
    })(A4, I4, g4, C3);
    if (B3 - I4 > 16 && A4.buffer && G2) return G2.decode(A4.subarray(I4, B3));
    for (var Q3 = ""; I4 < B3; ) {
      var i = A4[I4++];
      if (128 & i) {
        var E3 = 63 & A4[I4++];
        if (192 != (224 & i)) {
          var D3 = 63 & A4[I4++];
          if ((i = 224 == (240 & i) ? (15 & i) << 12 | E3 << 6 | D3 : (7 & i) << 18 | E3 << 12 | D3 << 6 | 63 & A4[I4++]) < 65536) Q3 += String.fromCharCode(i);
          else {
            var o3 = i - 65536;
            Q3 += String.fromCharCode(55296 | o3 >> 10, 56320 | 1023 & o3);
          }
        } else Q3 += String.fromCharCode((31 & i) << 6 | E3);
      } else Q3 += String.fromCharCode(i);
    }
    return Q3;
  })(c2, A3, I3, g3) : "", s2 = [], p2 = (A3, I3) => Math.ceil(A3 / I3) * I3, L2 = (A3) => {
    var I3 = (A3 - R2.buffer.byteLength + 65535) / 65536 | 0;
    try {
      return R2.grow(I3), r2(), 1;
    } catch (A4) {
    }
  }, d2 = new Uint8Array(123), P2 = 25; P2 >= 0; --P2) d2[48 + P2] = 52 + P2, d2[65 + P2] = P2, d2[97 + P2] = 26 + P2;
  if (d2[43] = 62, d2[47] = 63, C2.noExitRuntime && C2.noExitRuntime, C2.print && C2.print, C2.printErr && (a2 = C2.printErr), C2.wasmBinary && (D2 = C2.wasmBinary), C2.arguments && C2.arguments, C2.thisProgram && C2.thisProgram, C2.preInit) for ("function" == typeof C2.preInit && (C2.preInit = [C2.preInit]); C2.preInit.length > 0; ) C2.preInit.shift()();
  C2.setValue = function(A3, I3, g3 = "i8") {
    switch (g3.endsWith("*") && (g3 = "*"), g3) {
      case "i1":
      case "i8":
        o2[A3] = I3;
        break;
      case "i16":
        h2[A3 >> 1] = I3;
        break;
      case "i32":
        w2[A3 >> 2] = I3;
        break;
      case "i64":
        n2("to do setValue(i64) use WASM_BIGINT");
      case "float":
        y2[A3 >> 2] = I3;
        break;
      case "double":
        f2[A3 >> 3] = I3;
        break;
      case "*":
        F2[A3 >> 2] = I3;
        break;
      default:
        n2(`invalid type for setValue: ${g3}`);
    }
  }, C2.getValue = function(A3, I3 = "i8") {
    switch (I3.endsWith("*") && (I3 = "*"), I3) {
      case "i1":
      case "i8":
        return o2[A3];
      case "i16":
        return h2[A3 >> 1];
      case "i32":
        return w2[A3 >> 2];
      case "i64":
        n2("to do getValue(i64) use WASM_BIGINT");
      case "float":
        return y2[A3 >> 2];
      case "double":
        return f2[A3 >> 3];
      case "*":
        return F2[A3 >> 2];
      default:
        n2(`invalid type for getValue: ${I3}`);
    }
  }, C2.UTF8ToString = H2;
  var R2, b2, v2 = { 39928: () => C2.getRandomValue(), 39964: () => {
    if (void 0 === C2.getRandomValue) try {
      var A3 = "object" == typeof window ? window : self, I3 = void 0 !== A3.crypto ? A3.crypto : A3.msCrypto;
      I3 = void 0 === I3 ? B3 : I3;
      var g3 = function() {
        var A4 = new Uint32Array(1);
        return I3.getRandomValues(A4), A4[0] >>> 0;
      };
      g3(), C2.getRandomValue = g3;
    } catch (A4) {
      try {
        var B3 = null, Q3 = function() {
          var A5 = B3.randomBytes(4);
          return (A5[0] << 24 | A5[1] << 16 | A5[2] << 8 | A5[3]) >>> 0;
        };
        Q3(), C2.getRandomValue = Q3;
      } catch (A5) {
        throw "No secure random number generator found";
      }
    }
  } }, u2 = { a: (A3, I3, g3, C3) => n2(`Assertion failed: ${H2(A3)}, at: ` + [I3 ? H2(I3) : "unknown filename", g3, C3 ? H2(C3) : "unknown function"]), c: () => n2(""), b: (A3, I3, g3) => ((A4, I4, g4) => {
    var C3 = ((A5, I5) => {
      var g5;
      for (s2.length = 0; g5 = c2[A5++]; ) {
        var C4 = 105 != g5;
        I5 += (C4 &= 112 != g5) && I5 % 8 ? 4 : 0, s2.push(112 == g5 ? F2[I5 >> 2] : 105 == g5 ? w2[I5 >> 2] : f2[I5 >> 3]), I5 += C4 ? 8 : 4;
      }
      return s2;
    })(I4, g4);
    return v2[A4](...C3);
  })(A3, I3, g3), d: (A3) => {
    var I3 = c2.length, g3 = 2147483648;
    if ((A3 >>>= 0) > g3) return false;
    for (var C3 = 1; C3 <= 4; C3 *= 2) {
      var B3 = I3 * (1 + 0.2 / C3);
      B3 = Math.min(B3, A3 + 100663296);
      var Q3 = Math.min(g3, p2(Math.max(A3, B3), 65536));
      if (L2(Q3)) return true;
    }
    return false;
  } };
  !(async function() {
    function A3(A4, I4) {
      return (function(A5) {
        C2._crypto_aead_aegis128l_keybytes = A5.f, C2._crypto_aead_aegis128l_nsecbytes = A5.g, C2._crypto_aead_aegis128l_npubbytes = A5.h, C2._crypto_aead_aegis128l_abytes = A5.i, C2._crypto_aead_aegis128l_messagebytes_max = A5.j, C2._crypto_aead_aegis128l_keygen = A5.k, C2._crypto_aead_aegis128l_encrypt = A5.l, C2._crypto_aead_aegis128l_encrypt_detached = A5.m, C2._crypto_aead_aegis128l_decrypt = A5.n, C2._crypto_aead_aegis128l_decrypt_detached = A5.o, C2._crypto_aead_aegis256_keybytes = A5.p, C2._crypto_aead_aegis256_nsecbytes = A5.q, C2._crypto_aead_aegis256_npubbytes = A5.r, C2._crypto_aead_aegis256_abytes = A5.s, C2._crypto_aead_aegis256_messagebytes_max = A5.t, C2._crypto_aead_aegis256_keygen = A5.u, C2._crypto_aead_aegis256_encrypt = A5.v, C2._crypto_aead_aegis256_encrypt_detached = A5.w, C2._crypto_aead_aegis256_decrypt = A5.x, C2._crypto_aead_aegis256_decrypt_detached = A5.y, C2._crypto_aead_aes256gcm_is_available = A5.z, C2._crypto_aead_chacha20poly1305_encrypt_detached = A5.A, C2._crypto_aead_chacha20poly1305_encrypt = A5.B, C2._crypto_aead_chacha20poly1305_ietf_encrypt_detached = A5.C, C2._crypto_aead_chacha20poly1305_ietf_encrypt = A5.D, C2._crypto_aead_chacha20poly1305_decrypt_detached = A5.E, C2._crypto_aead_chacha20poly1305_decrypt = A5.F, C2._crypto_aead_chacha20poly1305_ietf_decrypt_detached = A5.G, C2._crypto_aead_chacha20poly1305_ietf_decrypt = A5.H, C2._crypto_aead_chacha20poly1305_ietf_keybytes = A5.I, C2._crypto_aead_chacha20poly1305_ietf_npubbytes = A5.J, C2._crypto_aead_chacha20poly1305_ietf_nsecbytes = A5.K, C2._crypto_aead_chacha20poly1305_ietf_abytes = A5.L, C2._crypto_aead_chacha20poly1305_ietf_messagebytes_max = A5.M, C2._crypto_aead_chacha20poly1305_ietf_keygen = A5.N, C2._crypto_aead_chacha20poly1305_keybytes = A5.O, C2._crypto_aead_chacha20poly1305_npubbytes = A5.P, C2._crypto_aead_chacha20poly1305_nsecbytes = A5.Q, C2._crypto_aead_chacha20poly1305_abytes = A5.R, C2._crypto_aead_chacha20poly1305_messagebytes_max = A5.S, C2._crypto_aead_chacha20poly1305_keygen = A5.T, C2._crypto_aead_xchacha20poly1305_ietf_encrypt_detached = A5.U, C2._crypto_aead_xchacha20poly1305_ietf_encrypt = A5.V, C2._crypto_aead_xchacha20poly1305_ietf_decrypt_detached = A5.W, C2._crypto_aead_xchacha20poly1305_ietf_decrypt = A5.X, C2._crypto_aead_xchacha20poly1305_ietf_keybytes = A5.Y, C2._crypto_aead_xchacha20poly1305_ietf_npubbytes = A5.Z, C2._crypto_aead_xchacha20poly1305_ietf_nsecbytes = A5._, C2._crypto_aead_xchacha20poly1305_ietf_abytes = A5.$, C2._crypto_aead_xchacha20poly1305_ietf_messagebytes_max = A5.aa, C2._crypto_aead_xchacha20poly1305_ietf_keygen = A5.ba, C2._crypto_auth_bytes = A5.ca, C2._crypto_auth_keybytes = A5.da, C2._crypto_auth = A5.ea, C2._crypto_auth_verify = A5.fa, C2._crypto_auth_keygen = A5.ga, C2._crypto_box_seedbytes = A5.ha, C2._crypto_box_publickeybytes = A5.ia, C2._crypto_box_secretkeybytes = A5.ja, C2._crypto_box_beforenmbytes = A5.ka, C2._crypto_box_noncebytes = A5.la, C2._crypto_box_macbytes = A5.ma, C2._crypto_box_messagebytes_max = A5.na, C2._crypto_box_seed_keypair = A5.oa, C2._crypto_box_keypair = A5.pa, C2._crypto_box_beforenm = A5.qa, C2._crypto_box_detached_afternm = A5.ra, C2._crypto_box_detached = A5.sa, C2._crypto_box_easy_afternm = A5.ta, C2._crypto_box_easy = A5.ua, C2._crypto_box_open_detached_afternm = A5.va, C2._crypto_box_open_detached = A5.wa, C2._crypto_box_open_easy_afternm = A5.xa, C2._crypto_box_open_easy = A5.ya, C2._crypto_box_seal = A5.za, C2._crypto_box_seal_open = A5.Aa, C2._crypto_box_sealbytes = A5.Ba, C2._crypto_generichash_bytes_min = A5.Ca, C2._crypto_generichash_bytes_max = A5.Da, C2._crypto_generichash_bytes = A5.Ea, C2._crypto_generichash_keybytes_min = A5.Fa, C2._crypto_generichash_keybytes_max = A5.Ga, C2._crypto_generichash_keybytes = A5.Ha, C2._crypto_generichash_statebytes = A5.Ia, C2._crypto_generichash = A5.Ja, C2._crypto_generichash_init = A5.Ka, C2._crypto_generichash_update = A5.La, C2._crypto_generichash_final = A5.Ma, C2._crypto_generichash_keygen = A5.Na, C2._crypto_hash_bytes = A5.Oa, C2._crypto_hash = A5.Pa, C2._crypto_ipcrypt_bytes = A5.Qa, C2._crypto_ipcrypt_keybytes = A5.Ra, C2._crypto_ipcrypt_nd_keybytes = A5.Sa, C2._crypto_ipcrypt_nd_tweakbytes = A5.Ta, C2._crypto_ipcrypt_nd_inputbytes = A5.Ua, C2._crypto_ipcrypt_nd_outputbytes = A5.Va, C2._crypto_ipcrypt_ndx_keybytes = A5.Wa, C2._crypto_ipcrypt_ndx_tweakbytes = A5.Xa, C2._crypto_ipcrypt_ndx_inputbytes = A5.Ya, C2._crypto_ipcrypt_ndx_outputbytes = A5.Za, C2._crypto_ipcrypt_pfx_keybytes = A5._a, C2._crypto_ipcrypt_pfx_bytes = A5.$a, C2._crypto_ipcrypt_keygen = A5.ab, C2._crypto_ipcrypt_nd_keygen = A5.bb, C2._crypto_ipcrypt_ndx_keygen = A5.cb, C2._crypto_ipcrypt_pfx_keygen = A5.db, C2._crypto_ipcrypt_encrypt = A5.eb, C2._crypto_ipcrypt_decrypt = A5.fb, C2._crypto_ipcrypt_nd_encrypt = A5.gb, C2._crypto_ipcrypt_nd_decrypt = A5.hb, C2._crypto_ipcrypt_ndx_encrypt = A5.ib, C2._crypto_ipcrypt_ndx_decrypt = A5.jb, C2._crypto_ipcrypt_pfx_encrypt = A5.kb, C2._crypto_ipcrypt_pfx_decrypt = A5.lb, C2._crypto_kdf_bytes_min = A5.mb, C2._crypto_kdf_bytes_max = A5.nb, C2._crypto_kdf_contextbytes = A5.ob, C2._crypto_kdf_keybytes = A5.pb, C2._crypto_kdf_derive_from_key = A5.qb, C2._crypto_kdf_keygen = A5.rb, C2._crypto_kdf_hkdf_sha256_extract_init = A5.sb, C2._crypto_kdf_hkdf_sha256_extract_update = A5.tb, C2._crypto_kdf_hkdf_sha256_extract_final = A5.ub, C2._crypto_kdf_hkdf_sha256_extract = A5.vb, C2._crypto_kdf_hkdf_sha256_keygen = A5.wb, C2._crypto_kdf_hkdf_sha256_expand = A5.xb, C2._crypto_kdf_hkdf_sha256_keybytes = A5.yb, C2._crypto_kdf_hkdf_sha256_bytes_min = A5.zb, C2._crypto_kdf_hkdf_sha256_bytes_max = A5.Ab, C2._crypto_kdf_hkdf_sha256_statebytes = A5.Bb, C2._crypto_kdf_hkdf_sha512_extract_init = A5.Cb, C2._crypto_kdf_hkdf_sha512_extract_update = A5.Db, C2._crypto_kdf_hkdf_sha512_extract_final = A5.Eb, C2._crypto_kdf_hkdf_sha512_extract = A5.Fb, C2._crypto_kdf_hkdf_sha512_keygen = A5.Gb, C2._crypto_kdf_hkdf_sha512_expand = A5.Hb, C2._crypto_kdf_hkdf_sha512_keybytes = A5.Ib, C2._crypto_kdf_hkdf_sha512_bytes_min = A5.Jb, C2._crypto_kdf_hkdf_sha512_bytes_max = A5.Kb, C2._crypto_kdf_hkdf_sha512_statebytes = A5.Lb, C2._crypto_kx_seed_keypair = A5.Mb, C2._crypto_kx_keypair = A5.Nb, C2._crypto_kx_client_session_keys = A5.Ob, C2._crypto_kx_server_session_keys = A5.Pb, C2._crypto_kx_publickeybytes = A5.Qb, C2._crypto_kx_secretkeybytes = A5.Rb, C2._crypto_kx_seedbytes = A5.Sb, C2._crypto_kx_sessionkeybytes = A5.Tb, C2._crypto_scalarmult_base = A5.Ub, C2._crypto_scalarmult = A5.Vb, C2._crypto_scalarmult_bytes = A5.Wb, C2._crypto_scalarmult_scalarbytes = A5.Xb, C2._crypto_secretbox_keybytes = A5.Yb, C2._crypto_secretbox_noncebytes = A5.Zb, C2._crypto_secretbox_macbytes = A5._b, C2._crypto_secretbox_messagebytes_max = A5.$b, C2._crypto_secretbox_keygen = A5.ac, C2._crypto_secretbox_detached = A5.bc, C2._crypto_secretbox_easy = A5.cc, C2._crypto_secretbox_open_detached = A5.dc, C2._crypto_secretbox_open_easy = A5.ec, C2._crypto_secretstream_xchacha20poly1305_keygen = A5.fc, C2._crypto_secretstream_xchacha20poly1305_init_push = A5.gc, C2._crypto_secretstream_xchacha20poly1305_init_pull = A5.hc, C2._crypto_secretstream_xchacha20poly1305_rekey = A5.ic, C2._crypto_secretstream_xchacha20poly1305_push = A5.jc, C2._crypto_secretstream_xchacha20poly1305_pull = A5.kc, C2._crypto_secretstream_xchacha20poly1305_statebytes = A5.lc, C2._crypto_secretstream_xchacha20poly1305_abytes = A5.mc, C2._crypto_secretstream_xchacha20poly1305_headerbytes = A5.nc, C2._crypto_secretstream_xchacha20poly1305_keybytes = A5.oc, C2._crypto_secretstream_xchacha20poly1305_messagebytes_max = A5.pc, C2._crypto_secretstream_xchacha20poly1305_tag_message = A5.qc, C2._crypto_secretstream_xchacha20poly1305_tag_push = A5.rc, C2._crypto_secretstream_xchacha20poly1305_tag_rekey = A5.sc, C2._crypto_secretstream_xchacha20poly1305_tag_final = A5.tc, C2._crypto_shorthash_bytes = A5.uc, C2._crypto_shorthash_keybytes = A5.vc, C2._crypto_shorthash = A5.wc, C2._crypto_shorthash_keygen = A5.xc, C2._crypto_sign_statebytes = A5.yc, C2._crypto_sign_bytes = A5.zc, C2._crypto_sign_seedbytes = A5.Ac, C2._crypto_sign_publickeybytes = A5.Bc, C2._crypto_sign_secretkeybytes = A5.Cc, C2._crypto_sign_messagebytes_max = A5.Dc, C2._crypto_sign_seed_keypair = A5.Ec, C2._crypto_sign_keypair = A5.Fc, C2._crypto_sign = A5.Gc, C2._crypto_sign_open = A5.Hc, C2._crypto_sign_detached = A5.Ic, C2._crypto_sign_verify_detached = A5.Jc, C2._crypto_sign_init = A5.Kc, C2._crypto_sign_update = A5.Lc, C2._crypto_sign_final_create = A5.Mc, C2._crypto_sign_final_verify = A5.Nc, C2._crypto_sign_ed25519_pk_to_curve25519 = A5.Oc, C2._crypto_sign_ed25519_sk_to_curve25519 = A5.Pc, C2._crypto_xof_shake128_blockbytes = A5.Qc, C2._crypto_xof_shake128_statebytes = A5.Rc, C2._crypto_xof_shake128_domain_standard = A5.Sc, C2._crypto_xof_shake128 = A5.Tc, C2._crypto_xof_shake128_init = A5.Uc, C2._crypto_xof_shake128_init_with_domain = A5.Vc, C2._crypto_xof_shake128_update = A5.Wc, C2._crypto_xof_shake128_squeeze = A5.Xc, C2._crypto_xof_shake256_blockbytes = A5.Yc, C2._crypto_xof_shake256_statebytes = A5.Zc, C2._crypto_xof_shake256_domain_standard = A5._c, C2._crypto_xof_shake256 = A5.$c, C2._crypto_xof_shake256_init = A5.ad, C2._crypto_xof_shake256_init_with_domain = A5.bd, C2._crypto_xof_shake256_update = A5.cd, C2._crypto_xof_shake256_squeeze = A5.dd, C2._crypto_xof_turboshake128_blockbytes = A5.ed, C2._crypto_xof_turboshake128_statebytes = A5.fd, C2._crypto_xof_turboshake128_domain_standard = A5.gd, C2._crypto_xof_turboshake128 = A5.hd, C2._crypto_xof_turboshake128_init = A5.id, C2._crypto_xof_turboshake128_init_with_domain = A5.jd, C2._crypto_xof_turboshake128_update = A5.kd, C2._crypto_xof_turboshake128_squeeze = A5.ld, C2._crypto_xof_turboshake256_blockbytes = A5.md, C2._crypto_xof_turboshake256_statebytes = A5.nd, C2._crypto_xof_turboshake256_domain_standard = A5.od, C2._crypto_xof_turboshake256 = A5.pd, C2._crypto_xof_turboshake256_init = A5.qd, C2._crypto_xof_turboshake256_init_with_domain = A5.rd, C2._crypto_xof_turboshake256_update = A5.sd, C2._crypto_xof_turboshake256_squeeze = A5.td, C2._randombytes_random = A5.ud, C2._randombytes_stir = A5.vd, C2._randombytes_uniform = A5.wd, C2._randombytes_buf = A5.xd, C2._randombytes_buf_deterministic = A5.yd, C2._randombytes_seedbytes = A5.zd, C2._randombytes_close = A5.Ad, C2._randombytes = A5.Bd, C2._sodium_bin2hex = A5.Cd, C2._sodium_hex2bin = A5.Dd, C2._sodium_base64_encoded_len = A5.Ed, C2._sodium_bin2base64 = A5.Fd, C2._sodium_base642bin = A5.Gd, C2._sodium_ip2bin = A5.Hd, C2._sodium_bin2ip = A5.Id, C2._sodium_init = A5.Jd, C2._sodium_pad = A5.Kd, C2._sodium_unpad = A5.Ld, C2._sodium_version_string = A5.Md, C2._sodium_library_version_major = A5.Nd, C2._sodium_library_version_minor = A5.Od, C2._sodium_library_minimal = A5.Pd, C2._malloc = A5.Qd, C2._free = A5.Rd, A5.dynCall_iiiji, A5.dynCall_iiij, A5.dynCall_iijii, A5.dynCall_iiijiji, A5.dynCall_iiijiii, R2 = A5.e, A5.__indirect_function_table;
      })(b2 = A4.exports), r2(), (() => {
        if (Y2--, C2.monitorRunDependencies?.(Y2), 0 == Y2 && N2) {
          var A5 = N2;
          N2 = null, A5();
        }
      })(), b2;
    }
    Y2++, C2.monitorRunDependencies?.(Y2);
    var I3 = { a: u2 };
    C2.instantiateWasm ? new Promise((g3, B3) => {
      C2.instantiateWasm(I3, (I4, C3) => {
        g3(A3(I4));
      });
    }) : (S2 ??= ((A4) => {
      if (E2) {
        var I4 = Buffer.from(A4, "base64");
        return new Uint8Array(I4.buffer, I4.byteOffset, I4.length);
      }
      for (var g3, C3, B3 = 0, Q3 = 0, i = 261636, D3 = new Uint8Array(196227 - ("=" == A4[261634]) - ("=" == A4[261635])); B3 < i; B3 += 4, Q3 += 3) g3 = d2[A4.charCodeAt(B3 + 1)], C3 = d2[A4.charCodeAt(B3 + 2)], D3[Q3] = d2[A4.charCodeAt(B3)] << 2 | g3 >> 4, D3[Q3 + 1] = g3 << 4 | C3 >> 2, D3[Q3 + 2] = C3 << 6 | d2[A4.charCodeAt(B3 + 3)];
      return D3;
    })(" "), A3((await (async function(A4, I4, C3) {
      return (async function(A5, I5) {
        try {
          var C4 = await (async function(A6) {
            return (function(A7) {
              if (ArrayBuffer.isView(A7)) return A7;
              if (A7 == S2 && D2) return new Uint8Array(D2);
              if (g2) return g2(A7);
              throw "both async and sync fetching of the wasm failed";
            })(A6);
          })(A5);
          return await WebAssembly.instantiate(C4, I5);
        } catch (A6) {
          a2(`failed to asynchronously prepare wasm: ${A6}`), n2(A6);
        }
      })(I4, C3);
    })(0, S2, I3)).instance));
  })(), (function A3() {
    function I3() {
      C2.calledRun = true, k2 || (C2.onRuntimeInitialized?.(), (function() {
        if (C2.postRun) for ("function" == typeof C2.postRun && (C2.postRun = [C2.postRun]); C2.postRun.length; ) J2(C2.postRun.shift());
        t2(U2);
      })());
    }
    Y2 > 0 ? N2 = A3 : ((function() {
      if (C2.preRun) for ("function" == typeof C2.preRun && (C2.preRun = [C2.preRun]); C2.preRun.length; ) e(C2.preRun.shift());
      t2(K2);
    })(), Y2 > 0 ? N2 = A3 : C2.setStatus ? (C2.setStatus("Running..."), setTimeout(() => {
      setTimeout(() => C2.setStatus(""), 1), I3();
    }, 1)) : I3());
  })();
}).catch(function() {
  return i$2.useBackupModule();
});
let r$1;
const t = {}, a = A$1.ready.then(function() {
  function a2() {
    if (r$1._sodium_init() < 0) throw new Error("libsodium was not correctly initialized.");
    for (var e = ["crypto_aead_aegis128l_decrypt", "crypto_aead_aegis128l_decrypt_detached", "crypto_aead_aegis128l_encrypt", "crypto_aead_aegis128l_encrypt_detached", "crypto_aead_aegis128l_keygen", "crypto_aead_aegis256_decrypt", "crypto_aead_aegis256_decrypt_detached", "crypto_aead_aegis256_encrypt", "crypto_aead_aegis256_encrypt_detached", "crypto_aead_aegis256_keygen", "crypto_aead_chacha20poly1305_decrypt", "crypto_aead_chacha20poly1305_decrypt_detached", "crypto_aead_chacha20poly1305_encrypt", "crypto_aead_chacha20poly1305_encrypt_detached", "crypto_aead_chacha20poly1305_ietf_decrypt", "crypto_aead_chacha20poly1305_ietf_decrypt_detached", "crypto_aead_chacha20poly1305_ietf_encrypt", "crypto_aead_chacha20poly1305_ietf_encrypt_detached", "crypto_aead_chacha20poly1305_ietf_keygen", "crypto_aead_chacha20poly1305_keygen", "crypto_aead_xchacha20poly1305_ietf_decrypt", "crypto_aead_xchacha20poly1305_ietf_decrypt_detached", "crypto_aead_xchacha20poly1305_ietf_encrypt", "crypto_aead_xchacha20poly1305_ietf_encrypt_detached", "crypto_aead_xchacha20poly1305_ietf_keygen", "crypto_auth", "crypto_auth_hmacsha256", "crypto_auth_hmacsha256_final", "crypto_auth_hmacsha256_init", "crypto_auth_hmacsha256_keygen", "crypto_auth_hmacsha256_update", "crypto_auth_hmacsha256_verify", "crypto_auth_hmacsha512", "crypto_auth_hmacsha512256", "crypto_auth_hmacsha512256_final", "crypto_auth_hmacsha512256_init", "crypto_auth_hmacsha512256_keygen", "crypto_auth_hmacsha512256_update", "crypto_auth_hmacsha512256_verify", "crypto_auth_hmacsha512_final", "crypto_auth_hmacsha512_init", "crypto_auth_hmacsha512_keygen", "crypto_auth_hmacsha512_update", "crypto_auth_hmacsha512_verify", "crypto_auth_keygen", "crypto_auth_verify", "crypto_box_beforenm", "crypto_box_curve25519xchacha20poly1305_beforenm", "crypto_box_curve25519xchacha20poly1305_detached", "crypto_box_curve25519xchacha20poly1305_detached_afternm", "crypto_box_curve25519xchacha20poly1305_easy", "crypto_box_curve25519xchacha20poly1305_easy_afternm", "crypto_box_curve25519xchacha20poly1305_keypair", "crypto_box_curve25519xchacha20poly1305_open_detached", "crypto_box_curve25519xchacha20poly1305_open_detached_afternm", "crypto_box_curve25519xchacha20poly1305_open_easy", "crypto_box_curve25519xchacha20poly1305_open_easy_afternm", "crypto_box_curve25519xchacha20poly1305_seal", "crypto_box_curve25519xchacha20poly1305_seal_open", "crypto_box_curve25519xchacha20poly1305_seed_keypair", "crypto_box_detached", "crypto_box_easy", "crypto_box_easy_afternm", "crypto_box_keypair", "crypto_box_open_detached", "crypto_box_open_easy", "crypto_box_open_easy_afternm", "crypto_box_seal", "crypto_box_seal_open", "crypto_box_seed_keypair", "crypto_core_ed25519_add", "crypto_core_ed25519_from_hash", "crypto_core_ed25519_from_uniform", "crypto_core_ed25519_is_valid_point", "crypto_core_ed25519_random", "crypto_core_ed25519_scalar_add", "crypto_core_ed25519_scalar_complement", "crypto_core_ed25519_scalar_invert", "crypto_core_ed25519_scalar_mul", "crypto_core_ed25519_scalar_negate", "crypto_core_ed25519_scalar_random", "crypto_core_ed25519_scalar_reduce", "crypto_core_ed25519_scalar_sub", "crypto_core_ed25519_sub", "crypto_core_hchacha20", "crypto_core_hsalsa20", "crypto_core_ristretto255_add", "crypto_core_ristretto255_from_hash", "crypto_core_ristretto255_is_valid_point", "crypto_core_ristretto255_random", "crypto_core_ristretto255_scalar_add", "crypto_core_ristretto255_scalar_complement", "crypto_core_ristretto255_scalar_invert", "crypto_core_ristretto255_scalar_mul", "crypto_core_ristretto255_scalar_negate", "crypto_core_ristretto255_scalar_random", "crypto_core_ristretto255_scalar_reduce", "crypto_core_ristretto255_scalar_sub", "crypto_core_ristretto255_sub", "crypto_generichash", "crypto_generichash_blake2b_salt_personal", "crypto_generichash_final", "crypto_generichash_init", "crypto_generichash_keygen", "crypto_generichash_update", "crypto_hash", "crypto_hash_sha256", "crypto_hash_sha256_final", "crypto_hash_sha256_init", "crypto_hash_sha256_update", "crypto_hash_sha512", "crypto_hash_sha512_final", "crypto_hash_sha512_init", "crypto_hash_sha512_update", "crypto_ipcrypt_decrypt", "crypto_ipcrypt_encrypt", "crypto_ipcrypt_keygen", "crypto_ipcrypt_nd_decrypt", "crypto_ipcrypt_nd_encrypt", "crypto_ipcrypt_nd_keygen", "crypto_ipcrypt_ndx_decrypt", "crypto_ipcrypt_ndx_encrypt", "crypto_ipcrypt_ndx_keygen", "crypto_ipcrypt_pfx_decrypt", "crypto_ipcrypt_pfx_encrypt", "crypto_ipcrypt_pfx_keygen", "crypto_kdf_derive_from_key", "crypto_kdf_keygen", "crypto_kx_client_session_keys", "crypto_kx_keypair", "crypto_kx_seed_keypair", "crypto_kx_server_session_keys", "crypto_onetimeauth", "crypto_onetimeauth_final", "crypto_onetimeauth_init", "crypto_onetimeauth_keygen", "crypto_onetimeauth_update", "crypto_onetimeauth_verify", "crypto_pwhash", "crypto_pwhash_scryptsalsa208sha256", "crypto_pwhash_scryptsalsa208sha256_ll", "crypto_pwhash_scryptsalsa208sha256_str", "crypto_pwhash_scryptsalsa208sha256_str_verify", "crypto_pwhash_str", "crypto_pwhash_str_needs_rehash", "crypto_pwhash_str_verify", "crypto_scalarmult", "crypto_scalarmult_base", "crypto_scalarmult_ed25519", "crypto_scalarmult_ed25519_base", "crypto_scalarmult_ed25519_base_noclamp", "crypto_scalarmult_ed25519_noclamp", "crypto_scalarmult_ristretto255", "crypto_scalarmult_ristretto255_base", "crypto_secretbox_detached", "crypto_secretbox_easy", "crypto_secretbox_keygen", "crypto_secretbox_open_detached", "crypto_secretbox_open_easy", "crypto_secretstream_xchacha20poly1305_init_pull", "crypto_secretstream_xchacha20poly1305_init_push", "crypto_secretstream_xchacha20poly1305_keygen", "crypto_secretstream_xchacha20poly1305_pull", "crypto_secretstream_xchacha20poly1305_push", "crypto_secretstream_xchacha20poly1305_rekey", "crypto_shorthash", "crypto_shorthash_keygen", "crypto_shorthash_siphashx24", "crypto_sign", "crypto_sign_detached", "crypto_sign_ed25519_pk_to_curve25519", "crypto_sign_ed25519_sk_to_curve25519", "crypto_sign_ed25519_sk_to_pk", "crypto_sign_ed25519_sk_to_seed", "crypto_sign_final_create", "crypto_sign_final_verify", "crypto_sign_init", "crypto_sign_keypair", "crypto_sign_open", "crypto_sign_seed_keypair", "crypto_sign_update", "crypto_sign_verify_detached", "crypto_stream_chacha20", "crypto_stream_chacha20_ietf_xor", "crypto_stream_chacha20_ietf_xor_ic", "crypto_stream_chacha20_keygen", "crypto_stream_chacha20_xor", "crypto_stream_chacha20_xor_ic", "crypto_stream_keygen", "crypto_stream_xchacha20_keygen", "crypto_stream_xchacha20_xor", "crypto_stream_xchacha20_xor_ic", "crypto_xof_shake128", "crypto_xof_shake128_init", "crypto_xof_shake128_init_with_domain", "crypto_xof_shake128_squeeze", "crypto_xof_shake128_update", "crypto_xof_shake256", "crypto_xof_shake256_init", "crypto_xof_shake256_init_with_domain", "crypto_xof_shake256_squeeze", "crypto_xof_shake256_update", "crypto_xof_turboshake128", "crypto_xof_turboshake128_init", "crypto_xof_turboshake128_init_with_domain", "crypto_xof_turboshake128_squeeze", "crypto_xof_turboshake128_update", "crypto_xof_turboshake256", "crypto_xof_turboshake256_init", "crypto_xof_turboshake256_init_with_domain", "crypto_xof_turboshake256_squeeze", "crypto_xof_turboshake256_update", "randombytes_buf", "randombytes_buf_deterministic", "randombytes_close", "randombytes_random", "randombytes_set_implementation", "randombytes_stir", "randombytes_uniform", "sodium_bin2ip", "sodium_ip2bin", "sodium_version_string"], a3 = [L, O, U, P, C, R$1, X$1, D, G, F, V$1, q$1, z, W$1, H$1, j, J, Q$1, Z$1, $, ee, re, te, ae, _e, ne, se, ce, oe, pe, he, ye, ie$2, le, ue, de, ve, ge, be, fe, me, xe, Ee, ke, Se, Te, we, Ye, Be, Ae, Me, Ie, Ke, Ne, Le, Oe, Ue, Pe, Ce, Re, Xe, De, Ge, Fe, Ve, qe, ze, We, He, je, Je, Qe, Ze, $e, er, rr, tr$1, ar, _r, nr, sr, cr, or, pr, hr, yr, ir, lr, ur, dr, vr, gr, br, fr, mr, xr, Er, kr, Sr, Tr, wr, Yr, Br, Ar, Mr, Ir, Kr, Nr, Lr, Or, Ur, Pr, Cr, Rr, Xr, Dr, Gr, Fr, Vr, qr, zr, Wr, Hr, jr, Jr, Qr, Zr, $r, et, rt, tt$1, at, _t, nt, st, ct, ot, pt, ht, yt, it, lt, ut, dt, vt, gt, bt, ft, mt, xt, Et, kt, St, Tt, wt, Yt, Bt, At, Mt, It, Kt, Nt, Lt, Ot, Ut, Pt, Ct, Rt, Xt, Dt, Gt, Ft, Vt, qt, zt, Wt, Ht, jt, Jt, Qt, Zt, $t, ea$1, ra$1, ta$2, aa$1, _a, na$1, sa$1, ca$1, oa$1, pa, ha$1, ya, ia$1, la$1, ua$1, da, va$1, ga, ba$1, fa$1, ma$1, xa$1, Ea$1, ka$1, Sa$1, Ta$1, wa$1, Ya$1, Ba$1, Aa$1, Ma$1, Ia$1, Ka$1, Na$1, La$1, Oa, Ua$1, Pa, Ca$1, Ra$1], _3 = 0; _3 < a3.length; _3++) "function" == typeof r$1["_" + e[_3]] && (t[e[_3]] = a3[_3]);
    var n3 = ["SODIUM_LIBRARY_VERSION_MAJOR", "SODIUM_LIBRARY_VERSION_MINOR", "crypto_aead_aegis128l_ABYTES", "crypto_aead_aegis128l_KEYBYTES", "crypto_aead_aegis128l_MESSAGEBYTES_MAX", "crypto_aead_aegis128l_NPUBBYTES", "crypto_aead_aegis128l_NSECBYTES", "crypto_aead_aegis256_ABYTES", "crypto_aead_aegis256_KEYBYTES", "crypto_aead_aegis256_MESSAGEBYTES_MAX", "crypto_aead_aegis256_NPUBBYTES", "crypto_aead_aegis256_NSECBYTES", "crypto_aead_aes256gcm_ABYTES", "crypto_aead_aes256gcm_KEYBYTES", "crypto_aead_aes256gcm_MESSAGEBYTES_MAX", "crypto_aead_aes256gcm_NPUBBYTES", "crypto_aead_aes256gcm_NSECBYTES", "crypto_aead_chacha20poly1305_ABYTES", "crypto_aead_chacha20poly1305_IETF_ABYTES", "crypto_aead_chacha20poly1305_IETF_KEYBYTES", "crypto_aead_chacha20poly1305_IETF_MESSAGEBYTES_MAX", "crypto_aead_chacha20poly1305_IETF_NPUBBYTES", "crypto_aead_chacha20poly1305_IETF_NSECBYTES", "crypto_aead_chacha20poly1305_KEYBYTES", "crypto_aead_chacha20poly1305_MESSAGEBYTES_MAX", "crypto_aead_chacha20poly1305_NPUBBYTES", "crypto_aead_chacha20poly1305_NSECBYTES", "crypto_aead_chacha20poly1305_ietf_ABYTES", "crypto_aead_chacha20poly1305_ietf_KEYBYTES", "crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX", "crypto_aead_chacha20poly1305_ietf_NPUBBYTES", "crypto_aead_chacha20poly1305_ietf_NSECBYTES", "crypto_aead_xchacha20poly1305_IETF_ABYTES", "crypto_aead_xchacha20poly1305_IETF_KEYBYTES", "crypto_aead_xchacha20poly1305_IETF_MESSAGEBYTES_MAX", "crypto_aead_xchacha20poly1305_IETF_NPUBBYTES", "crypto_aead_xchacha20poly1305_IETF_NSECBYTES", "crypto_aead_xchacha20poly1305_ietf_ABYTES", "crypto_aead_xchacha20poly1305_ietf_KEYBYTES", "crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX", "crypto_aead_xchacha20poly1305_ietf_NPUBBYTES", "crypto_aead_xchacha20poly1305_ietf_NSECBYTES", "crypto_auth_BYTES", "crypto_auth_KEYBYTES", "crypto_auth_hmacsha256_BYTES", "crypto_auth_hmacsha256_KEYBYTES", "crypto_auth_hmacsha512256_BYTES", "crypto_auth_hmacsha512256_KEYBYTES", "crypto_auth_hmacsha512_BYTES", "crypto_auth_hmacsha512_KEYBYTES", "crypto_box_BEFORENMBYTES", "crypto_box_MACBYTES", "crypto_box_MESSAGEBYTES_MAX", "crypto_box_NONCEBYTES", "crypto_box_PUBLICKEYBYTES", "crypto_box_SEALBYTES", "crypto_box_SECRETKEYBYTES", "crypto_box_SEEDBYTES", "crypto_box_curve25519xchacha20poly1305_BEFORENMBYTES", "crypto_box_curve25519xchacha20poly1305_MACBYTES", "crypto_box_curve25519xchacha20poly1305_MESSAGEBYTES_MAX", "crypto_box_curve25519xchacha20poly1305_NONCEBYTES", "crypto_box_curve25519xchacha20poly1305_PUBLICKEYBYTES", "crypto_box_curve25519xchacha20poly1305_SEALBYTES", "crypto_box_curve25519xchacha20poly1305_SECRETKEYBYTES", "crypto_box_curve25519xchacha20poly1305_SEEDBYTES", "crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES", "crypto_box_curve25519xsalsa20poly1305_MACBYTES", "crypto_box_curve25519xsalsa20poly1305_MESSAGEBYTES_MAX", "crypto_box_curve25519xsalsa20poly1305_NONCEBYTES", "crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES", "crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES", "crypto_box_curve25519xsalsa20poly1305_SEEDBYTES", "crypto_core_ed25519_BYTES", "crypto_core_ed25519_HASHBYTES", "crypto_core_ed25519_NONREDUCEDSCALARBYTES", "crypto_core_ed25519_SCALARBYTES", "crypto_core_ed25519_UNIFORMBYTES", "crypto_core_hchacha20_CONSTBYTES", "crypto_core_hchacha20_INPUTBYTES", "crypto_core_hchacha20_KEYBYTES", "crypto_core_hchacha20_OUTPUTBYTES", "crypto_core_hsalsa20_CONSTBYTES", "crypto_core_hsalsa20_INPUTBYTES", "crypto_core_hsalsa20_KEYBYTES", "crypto_core_hsalsa20_OUTPUTBYTES", "crypto_core_ristretto255_BYTES", "crypto_core_ristretto255_HASHBYTES", "crypto_core_ristretto255_NONREDUCEDSCALARBYTES", "crypto_core_ristretto255_SCALARBYTES", "crypto_core_salsa2012_CONSTBYTES", "crypto_core_salsa2012_INPUTBYTES", "crypto_core_salsa2012_KEYBYTES", "crypto_core_salsa2012_OUTPUTBYTES", "crypto_core_salsa208_CONSTBYTES", "crypto_core_salsa208_INPUTBYTES", "crypto_core_salsa208_KEYBYTES", "crypto_core_salsa208_OUTPUTBYTES", "crypto_core_salsa20_CONSTBYTES", "crypto_core_salsa20_INPUTBYTES", "crypto_core_salsa20_KEYBYTES", "crypto_core_salsa20_OUTPUTBYTES", "crypto_generichash_BYTES", "crypto_generichash_BYTES_MAX", "crypto_generichash_BYTES_MIN", "crypto_generichash_KEYBYTES", "crypto_generichash_KEYBYTES_MAX", "crypto_generichash_KEYBYTES_MIN", "crypto_generichash_blake2b_BYTES", "crypto_generichash_blake2b_BYTES_MAX", "crypto_generichash_blake2b_BYTES_MIN", "crypto_generichash_blake2b_KEYBYTES", "crypto_generichash_blake2b_KEYBYTES_MAX", "crypto_generichash_blake2b_KEYBYTES_MIN", "crypto_generichash_blake2b_PERSONALBYTES", "crypto_generichash_blake2b_SALTBYTES", "crypto_hash_BYTES", "crypto_hash_sha256_BYTES", "crypto_hash_sha512_BYTES", "crypto_ipcrypt_BYTES", "crypto_ipcrypt_KEYBYTES", "crypto_ipcrypt_NDX_INPUTBYTES", "crypto_ipcrypt_NDX_KEYBYTES", "crypto_ipcrypt_NDX_OUTPUTBYTES", "crypto_ipcrypt_NDX_TWEAKBYTES", "crypto_ipcrypt_ND_INPUTBYTES", "crypto_ipcrypt_ND_KEYBYTES", "crypto_ipcrypt_ND_OUTPUTBYTES", "crypto_ipcrypt_ND_TWEAKBYTES", "crypto_ipcrypt_PFX_BYTES", "crypto_ipcrypt_PFX_KEYBYTES", "crypto_kdf_BYTES_MAX", "crypto_kdf_BYTES_MIN", "crypto_kdf_CONTEXTBYTES", "crypto_kdf_KEYBYTES", "crypto_kdf_blake2b_BYTES_MAX", "crypto_kdf_blake2b_BYTES_MIN", "crypto_kdf_blake2b_CONTEXTBYTES", "crypto_kdf_blake2b_KEYBYTES", "crypto_kdf_hkdf_sha256_BYTES_MAX", "crypto_kdf_hkdf_sha256_BYTES_MIN", "crypto_kdf_hkdf_sha256_KEYBYTES", "crypto_kdf_hkdf_sha512_BYTES_MAX", "crypto_kdf_hkdf_sha512_BYTES_MIN", "crypto_kdf_hkdf_sha512_KEYBYTES", "crypto_kx_PUBLICKEYBYTES", "crypto_kx_SECRETKEYBYTES", "crypto_kx_SEEDBYTES", "crypto_kx_SESSIONKEYBYTES", "crypto_onetimeauth_BYTES", "crypto_onetimeauth_KEYBYTES", "crypto_onetimeauth_poly1305_BYTES", "crypto_onetimeauth_poly1305_KEYBYTES", "crypto_pwhash_ALG_ARGON2I13", "crypto_pwhash_ALG_ARGON2ID13", "crypto_pwhash_ALG_DEFAULT", "crypto_pwhash_BYTES_MAX", "crypto_pwhash_BYTES_MIN", "crypto_pwhash_MEMLIMIT_INTERACTIVE", "crypto_pwhash_MEMLIMIT_MAX", "crypto_pwhash_MEMLIMIT_MIN", "crypto_pwhash_MEMLIMIT_MODERATE", "crypto_pwhash_MEMLIMIT_SENSITIVE", "crypto_pwhash_OPSLIMIT_INTERACTIVE", "crypto_pwhash_OPSLIMIT_MAX", "crypto_pwhash_OPSLIMIT_MIN", "crypto_pwhash_OPSLIMIT_MODERATE", "crypto_pwhash_OPSLIMIT_SENSITIVE", "crypto_pwhash_PASSWD_MAX", "crypto_pwhash_PASSWD_MIN", "crypto_pwhash_SALTBYTES", "crypto_pwhash_STRBYTES", "crypto_pwhash_argon2i_BYTES_MAX", "crypto_pwhash_argon2i_BYTES_MIN", "crypto_pwhash_argon2i_MEMLIMIT_INTERACTIVE", "crypto_pwhash_argon2i_MEMLIMIT_MAX", "crypto_pwhash_argon2i_MEMLIMIT_MIN", "crypto_pwhash_argon2i_MEMLIMIT_MODERATE", "crypto_pwhash_argon2i_MEMLIMIT_SENSITIVE", "crypto_pwhash_argon2i_OPSLIMIT_INTERACTIVE", "crypto_pwhash_argon2i_OPSLIMIT_MAX", "crypto_pwhash_argon2i_OPSLIMIT_MIN", "crypto_pwhash_argon2i_OPSLIMIT_MODERATE", "crypto_pwhash_argon2i_OPSLIMIT_SENSITIVE", "crypto_pwhash_argon2i_PASSWD_MAX", "crypto_pwhash_argon2i_PASSWD_MIN", "crypto_pwhash_argon2i_SALTBYTES", "crypto_pwhash_argon2i_STRBYTES", "crypto_pwhash_argon2id_BYTES_MAX", "crypto_pwhash_argon2id_BYTES_MIN", "crypto_pwhash_argon2id_MEMLIMIT_INTERACTIVE", "crypto_pwhash_argon2id_MEMLIMIT_MAX", "crypto_pwhash_argon2id_MEMLIMIT_MIN", "crypto_pwhash_argon2id_MEMLIMIT_MODERATE", "crypto_pwhash_argon2id_MEMLIMIT_SENSITIVE", "crypto_pwhash_argon2id_OPSLIMIT_INTERACTIVE", "crypto_pwhash_argon2id_OPSLIMIT_MAX", "crypto_pwhash_argon2id_OPSLIMIT_MIN", "crypto_pwhash_argon2id_OPSLIMIT_MODERATE", "crypto_pwhash_argon2id_OPSLIMIT_SENSITIVE", "crypto_pwhash_argon2id_PASSWD_MAX", "crypto_pwhash_argon2id_PASSWD_MIN", "crypto_pwhash_argon2id_SALTBYTES", "crypto_pwhash_argon2id_STRBYTES", "crypto_pwhash_scryptsalsa208sha256_BYTES_MAX", "crypto_pwhash_scryptsalsa208sha256_BYTES_MIN", "crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_INTERACTIVE", "crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MAX", "crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MIN", "crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_SENSITIVE", "crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_INTERACTIVE", "crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MAX", "crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MIN", "crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_SENSITIVE", "crypto_pwhash_scryptsalsa208sha256_PASSWD_MAX", "crypto_pwhash_scryptsalsa208sha256_PASSWD_MIN", "crypto_pwhash_scryptsalsa208sha256_SALTBYTES", "crypto_pwhash_scryptsalsa208sha256_STRBYTES", "crypto_scalarmult_BYTES", "crypto_scalarmult_SCALARBYTES", "crypto_scalarmult_curve25519_BYTES", "crypto_scalarmult_curve25519_SCALARBYTES", "crypto_scalarmult_ed25519_BYTES", "crypto_scalarmult_ed25519_SCALARBYTES", "crypto_scalarmult_ristretto255_BYTES", "crypto_scalarmult_ristretto255_SCALARBYTES", "crypto_secretbox_KEYBYTES", "crypto_secretbox_MACBYTES", "crypto_secretbox_MESSAGEBYTES_MAX", "crypto_secretbox_NONCEBYTES", "crypto_secretbox_xchacha20poly1305_KEYBYTES", "crypto_secretbox_xchacha20poly1305_MACBYTES", "crypto_secretbox_xchacha20poly1305_MESSAGEBYTES_MAX", "crypto_secretbox_xchacha20poly1305_NONCEBYTES", "crypto_secretbox_xsalsa20poly1305_KEYBYTES", "crypto_secretbox_xsalsa20poly1305_MACBYTES", "crypto_secretbox_xsalsa20poly1305_MESSAGEBYTES_MAX", "crypto_secretbox_xsalsa20poly1305_NONCEBYTES", "crypto_secretstream_xchacha20poly1305_ABYTES", "crypto_secretstream_xchacha20poly1305_HEADERBYTES", "crypto_secretstream_xchacha20poly1305_KEYBYTES", "crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX", "crypto_secretstream_xchacha20poly1305_TAG_FINAL", "crypto_secretstream_xchacha20poly1305_TAG_MESSAGE", "crypto_secretstream_xchacha20poly1305_TAG_PUSH", "crypto_secretstream_xchacha20poly1305_TAG_REKEY", "crypto_shorthash_BYTES", "crypto_shorthash_KEYBYTES", "crypto_shorthash_siphash24_BYTES", "crypto_shorthash_siphash24_KEYBYTES", "crypto_shorthash_siphashx24_BYTES", "crypto_shorthash_siphashx24_KEYBYTES", "crypto_sign_BYTES", "crypto_sign_MESSAGEBYTES_MAX", "crypto_sign_PUBLICKEYBYTES", "crypto_sign_SECRETKEYBYTES", "crypto_sign_SEEDBYTES", "crypto_sign_ed25519_BYTES", "crypto_sign_ed25519_MESSAGEBYTES_MAX", "crypto_sign_ed25519_PUBLICKEYBYTES", "crypto_sign_ed25519_SECRETKEYBYTES", "crypto_sign_ed25519_SEEDBYTES", "crypto_stream_KEYBYTES", "crypto_stream_MESSAGEBYTES_MAX", "crypto_stream_NONCEBYTES", "crypto_stream_chacha20_IETF_KEYBYTES", "crypto_stream_chacha20_IETF_MESSAGEBYTES_MAX", "crypto_stream_chacha20_IETF_NONCEBYTES", "crypto_stream_chacha20_KEYBYTES", "crypto_stream_chacha20_MESSAGEBYTES_MAX", "crypto_stream_chacha20_NONCEBYTES", "crypto_stream_chacha20_ietf_KEYBYTES", "crypto_stream_chacha20_ietf_MESSAGEBYTES_MAX", "crypto_stream_chacha20_ietf_NONCEBYTES", "crypto_stream_salsa2012_KEYBYTES", "crypto_stream_salsa2012_MESSAGEBYTES_MAX", "crypto_stream_salsa2012_NONCEBYTES", "crypto_stream_salsa208_KEYBYTES", "crypto_stream_salsa208_MESSAGEBYTES_MAX", "crypto_stream_salsa208_NONCEBYTES", "crypto_stream_salsa20_KEYBYTES", "crypto_stream_salsa20_MESSAGEBYTES_MAX", "crypto_stream_salsa20_NONCEBYTES", "crypto_stream_xchacha20_KEYBYTES", "crypto_stream_xchacha20_MESSAGEBYTES_MAX", "crypto_stream_xchacha20_NONCEBYTES", "crypto_stream_xsalsa20_KEYBYTES", "crypto_stream_xsalsa20_MESSAGEBYTES_MAX", "crypto_stream_xsalsa20_NONCEBYTES", "crypto_verify_16_BYTES", "crypto_verify_32_BYTES", "crypto_verify_64_BYTES", "crypto_xof_shake128_BLOCKBYTES", "crypto_xof_shake128_STATEBYTES", "crypto_xof_shake256_BLOCKBYTES", "crypto_xof_shake256_STATEBYTES", "crypto_xof_turboshake128_BLOCKBYTES", "crypto_xof_turboshake128_STATEBYTES", "crypto_xof_turboshake256_BLOCKBYTES", "crypto_xof_turboshake256_STATEBYTES"];
    for (_3 = 0; _3 < n3.length; _3++) "function" == typeof (c3 = r$1["_" + n3[_3].toLowerCase()]) && (t[n3[_3]] = c3());
    var s3 = ["SODIUM_VERSION_STRING", "crypto_pwhash_STRPREFIX", "crypto_pwhash_argon2i_STRPREFIX", "crypto_pwhash_argon2id_STRPREFIX", "crypto_pwhash_scryptsalsa208sha256_STRPREFIX"];
    for (_3 = 0; _3 < s3.length; _3++) {
      var c3;
      "function" == typeof (c3 = r$1["_" + s3[_3].toLowerCase()]) && (t[s3[_3]] = r$1.UTF8ToString(c3()));
    }
  }
  r$1 = A$1;
  try {
    a2();
    var _2 = new Uint8Array([98, 97, 108, 108, 115]), n2 = t.randombytes_buf(t.crypto_secretbox_NONCEBYTES), s2 = t.randombytes_buf(t.crypto_secretbox_KEYBYTES), c2 = t.crypto_secretbox_easy(_2, n2, s2), o2 = t.crypto_secretbox_open_easy(c2, n2, s2);
    if (t.memcmp(_2, o2)) return;
  } catch (e) {
    if (null == r$1.useBackupModule) throw new Error("Both wasm and asm failed to load" + e);
  }
  return r$1.useBackupModule().then(function() {
    a2();
  });
});
function _() {
  return Object.keys(t).sort();
}
function n(e) {
  if (!(e instanceof Uint8Array)) throw new TypeError("Only Uint8Array instances can be incremented");
  for (var r2 = 256, t2 = 0, a2 = e.length; t2 < a2; t2++) r2 >>= 8, r2 += e[t2], e[t2] = 255 & r2;
}
function s(e, r2) {
  if (!(e instanceof Uint8Array && r2 instanceof Uint8Array)) throw new TypeError("Only Uint8Array instances can be added");
  var t2 = e.length, a2 = 0, _2 = 0;
  if (r2.length !== e.length) throw new TypeError("Arguments must have the same length");
  for (_2 = 0; _2 < t2; _2++) a2 >>= 8, a2 += e[_2] + r2[_2], e[_2] = 255 & a2;
}
function c$1(e) {
  if (!(e instanceof Uint8Array)) throw new TypeError("Only Uint8Array instances can be checked");
  for (var r2 = 0, t2 = 0, a2 = e.length; t2 < a2; t2++) r2 |= e[t2];
  return 0 === r2;
}
function o(e) {
  if (!(e instanceof Uint8Array)) throw new TypeError("Only Uint8Array instances can be wiped");
  for (var r2 = 0, t2 = e.length; r2 < t2; r2++) e[r2] = 0;
}
function p(e, r2) {
  if (!(e instanceof Uint8Array && r2 instanceof Uint8Array)) throw new TypeError("Only Uint8Array instances can be compared");
  if (e.length !== r2.length) throw new TypeError("Only instances of identical length can be compared");
  for (var t2 = 0, a2 = 0, _2 = e.length; a2 < _2; a2++) t2 |= e[a2] ^ r2[a2];
  return 0 === t2;
}
function h$1(e, r2) {
  if (!(e instanceof Uint8Array && r2 instanceof Uint8Array)) throw new TypeError("Only Uint8Array instances can be compared");
  if (e.length !== r2.length) throw new TypeError("Only instances of identical length can be compared");
  for (var t2 = 0, a2 = 1, _2 = e.length; _2-- > 0; ) t2 |= r2[_2] - e[_2] >> 8 & a2, a2 &= (r2[_2] ^ e[_2]) - 1 >> 8;
  return t2 + t2 + a2 - 1;
}
function y(e, t2) {
  if (!(e instanceof Uint8Array)) throw new TypeError("buffer must be a Uint8Array");
  if ((t2 |= 0) <= 0) throw new Error("block size must be > 0");
  var a2, _2 = [], n2 = Y$1(4), s2 = 1, c2 = 0, o2 = 0 | e.length, p2 = new T$1(o2 + t2);
  _2.push(n2), _2.push(p2.address);
  for (var h2 = p2.address, y2 = p2.address + o2 + t2; h2 < y2; h2++) r$1.HEAPU8[h2] = e[c2], c2 += s2 = 1 & ~((65535 & ((o2 -= s2) >>> 48 | o2 >>> 32 | o2 >>> 16 | o2)) - 1 >> 16);
  return 0 !== r$1._sodium_pad(n2, p2.address, e.length, t2, p2.length) && M$1(_2, "internal error"), p2.length = r$1.getValue(n2, "i32"), a2 = p2.to_Uint8Array(), A(_2), a2;
}
function i$1(e, t2) {
  if (!(e instanceof Uint8Array)) throw new TypeError("buffer must be a Uint8Array");
  if ((t2 |= 0) <= 0) throw new Error("block size must be > 0");
  var a2 = [], _2 = w$1(e), n2 = Y$1(4);
  return a2.push(_2), a2.push(n2), 0 !== r$1._sodium_unpad(n2, _2, e.length, t2) && M$1(a2, "unsupported/invalid padding"), e = (e = new Uint8Array(e)).subarray(0, r$1.getValue(n2, "i32")), A(a2), e;
}
function l(e) {
  if ("function" == typeof TextEncoder) return new TextEncoder().encode(e);
  e = unescape(encodeURIComponent(e));
  for (var r2 = new Uint8Array(e.length), t2 = 0, a2 = e.length; t2 < a2; t2++) r2[t2] = e.charCodeAt(t2);
  return r2;
}
function u(e) {
  if ("function" == typeof TextDecoder) return new TextDecoder("utf-8", { fatal: true }).decode(e);
  var r2 = 8192, t2 = Math.ceil(e.length / r2);
  if (t2 <= 1) try {
    return decodeURIComponent(escape(String.fromCharCode.apply(null, e)));
  } catch (e2) {
    throw new TypeError("The encoded data was not valid.");
  }
  for (var a2 = "", _2 = 0, n2 = 0; n2 < t2; n2++) {
    var s2 = Array.prototype.slice.call(e, n2 * r2 + _2, (n2 + 1) * r2 + _2);
    if (0 !== s2.length) {
      var c2, o2 = s2.length, p2 = 0;
      do {
        var h2 = s2[--o2];
        h2 >= 240 ? (p2 = 4, c2 = true) : h2 >= 224 ? (p2 = 3, c2 = true) : h2 >= 192 ? (p2 = 2, c2 = true) : h2 < 128 && (p2 = 1, c2 = true);
      } while (!c2);
      for (var y2 = p2 - (s2.length - o2), i = 0; i < y2; i++) _2--, s2.pop();
      a2 += u(s2);
    }
  }
  return a2;
}
function d$1(e) {
  var t2, a2 = [], _2 = new T$1((e = N(a2, e, "input")).length / 2), n2 = w$1(e), s2 = Y$1(4);
  return a2.push(n2), a2.push(_2.address), a2.push(s2), 0 !== r$1._sodium_hex2bin(_2.address, _2.length, n2, e.length, 0, 0, s2) && M$1(a2, "invalid input"), r$1.getValue(s2, "i32") - n2 !== e.length && M$1(a2, "incomplete input"), t2 = _2.to_Uint8Array(), A(a2), t2;
}
function v(e) {
  e = N(null, e, "input");
  for (var r2, t2, a2, _2 = "", n2 = 0; n2 < e.length; n2++) a2 = 87 + (t2 = 15 & e[n2]) + (t2 - 10 >> 8 & -39) << 8 | 87 + (r2 = e[n2] >>> 4) + (r2 - 10 >> 8 & -39), _2 += String.fromCharCode(255 & a2) + String.fromCharCode(a2 >>> 8);
  return _2;
}
var g = { ORIGINAL: 1, ORIGINAL_NO_PADDING: 3, URLSAFE: 5, URLSAFE_NO_PADDING: 7 };
function b(e) {
  if (void 0 === e) return g.URLSAFE_NO_PADDING;
  if (e !== g.ORIGINAL && e !== g.ORIGINAL_NO_PADDING && e !== g.URLSAFE && e !== g.URLSAFE_NO_PADDING) throw new Error("unsupported base64 variant");
  return e;
}
function f(e, t2) {
  t2 = b(t2);
  var a2, _2 = [], n2 = new T$1(3 * (e = N(_2, e, "input")).length / 4), s2 = w$1(e), c2 = Y$1(4), o2 = Y$1(4);
  return _2.push(s2), _2.push(n2.address), _2.push(c2), _2.push(o2), 0 !== r$1._sodium_base642bin(n2.address, n2.length, s2, e.length, 0, c2, o2, t2) && M$1(_2, "invalid input"), r$1.getValue(o2, "i32") - s2 !== e.length && M$1(_2, "incomplete input"), n2.length = r$1.getValue(c2, "i32"), a2 = n2.to_Uint8Array(), A(_2), a2;
}
function m(e, t2) {
  t2 = b(t2);
  var a2 = [];
  e = N(a2, e, "input");
  var _2, n2 = 0 | Math.floor(e.length / 3), s2 = e.length - 3 * n2, c2 = 4 * n2 + (0 !== s2 ? 2 & t2 ? 2 + (s2 >>> 1) : 4 : 0), o2 = new T$1(c2 + 1), p2 = w$1(e);
  return a2.push(p2), a2.push(o2.address), 0 === r$1._sodium_bin2base64(o2.address, o2.length, p2, e.length, t2) && M$1(a2, "conversion failed"), o2.length = c2, _2 = u(o2.to_Uint8Array()), A(a2), _2;
}
function x() {
  return ["uint8array", "text", "hex", "base64"];
}
function E(e, r2) {
  var t2 = r2 || "uint8array";
  if (!k(t2)) throw new Error(t2 + " output format is not available");
  if (e instanceof T$1) {
    if ("uint8array" === t2) return e.to_Uint8Array();
    if ("text" === t2) return u(e.to_Uint8Array());
    if ("hex" === t2) return v(e.to_Uint8Array());
    if ("base64" === t2) return m(e.to_Uint8Array(), g.URLSAFE_NO_PADDING);
    throw new Error('What is output format "' + t2 + '"?');
  }
  if ("object" == typeof e) {
    for (var a2 = Object.keys(e), _2 = {}, n2 = 0; n2 < a2.length; n2++) _2[a2[n2]] = E(e[a2[n2]], t2);
    return _2;
  }
  if ("string" == typeof e) return e;
  throw new TypeError("Cannot format output");
}
function k(e) {
  for (var r2 = ["uint8array", "text", "hex", "base64"], t2 = 0; t2 < r2.length; t2++) if (r2[t2] === e) return true;
  return false;
}
function S$1(e) {
  if (e) {
    if ("string" != typeof e) throw new TypeError("When defined, the output format must be a string");
    if (!k(e)) throw new Error(e + " is not a supported output format");
  }
}
function T$1(e) {
  this.length = e, this.address = Y$1(e);
}
function w$1(e) {
  var t2 = Y$1(e.length);
  return r$1.HEAPU8.set(e, t2), t2;
}
function Y$1(e) {
  var t2 = r$1._malloc(e);
  if (0 === t2) throw { message: "_malloc() failed", length: e };
  return t2;
}
function B(e) {
  r$1._free(e);
}
function A(e) {
  if (e) for (var r2 = 0; r2 < e.length; r2++) B(e[r2]);
}
function M$1(e, r2) {
  throw A(e), new Error(r2);
}
function I$1(e, r2) {
  throw A(e), new TypeError(r2);
}
function K(e, r2, t2) {
  null == r2 && I$1(e, t2 + " cannot be null or undefined");
}
function N(e, r2, t2) {
  return K(e, r2, t2), r2 instanceof Uint8Array ? r2 : "string" == typeof r2 ? l(r2) : void I$1(e, "unsupported input type for " + t2);
}
function L(e, t2, a2, _2, n2, s2) {
  var c2 = [];
  S$1(s2);
  var o2 = null;
  null != e && (o2 = w$1(e = N(c2, e, "secret_nonce")), e.length, c2.push(o2)), t2 = N(c2, t2, "ciphertext");
  var p2, h2 = r$1._crypto_aead_aegis128l_abytes(), y2 = t2.length;
  y2 < h2 && I$1(c2, "ciphertext is too short"), p2 = w$1(t2), c2.push(p2);
  var i = null, l2 = 0;
  null != a2 && (i = w$1(a2 = N(c2, a2, "additional_data")), l2 = a2.length, c2.push(i)), _2 = N(c2, _2, "public_nonce");
  var u2, d2 = 0 | r$1._crypto_aead_aegis128l_npubbytes();
  _2.length !== d2 && I$1(c2, "invalid public_nonce length"), u2 = w$1(_2), c2.push(u2), n2 = N(c2, n2, "key");
  var v2, g2 = 0 | r$1._crypto_aead_aegis128l_keybytes();
  n2.length !== g2 && I$1(c2, "invalid key length"), v2 = w$1(n2), c2.push(v2);
  var b2 = new T$1(y2 - r$1._crypto_aead_aegis128l_abytes() | 0), f2 = b2.address;
  if (c2.push(f2), 0 === r$1._crypto_aead_aegis128l_decrypt(f2, null, o2, p2, y2, 0, i, l2, 0, u2, v2)) {
    var m2 = E(b2, s2);
    return A(c2), m2;
  }
  M$1(c2, "ciphertext cannot be decrypted using that key");
}
function O(e, t2, a2, _2, n2, s2, c2) {
  var o2 = [];
  S$1(c2);
  var p2 = null;
  null != e && (p2 = w$1(e = N(o2, e, "secret_nonce")), e.length, o2.push(p2));
  var h2 = w$1(t2 = N(o2, t2, "ciphertext")), y2 = t2.length;
  o2.push(h2), a2 = N(o2, a2, "mac");
  var i, l2 = 0 | r$1._crypto_aead_aegis128l_abytes();
  a2.length !== l2 && I$1(o2, "invalid mac length"), i = w$1(a2), o2.push(i);
  var u2 = null, d2 = 0;
  null != _2 && (u2 = w$1(_2 = N(o2, _2, "additional_data")), d2 = _2.length, o2.push(u2)), n2 = N(o2, n2, "public_nonce");
  var v2, g2 = 0 | r$1._crypto_aead_aegis128l_npubbytes();
  n2.length !== g2 && I$1(o2, "invalid public_nonce length"), v2 = w$1(n2), o2.push(v2), s2 = N(o2, s2, "key");
  var b2, f2 = 0 | r$1._crypto_aead_aegis128l_keybytes();
  s2.length !== f2 && I$1(o2, "invalid key length"), b2 = w$1(s2), o2.push(b2);
  var m2 = new T$1(0 | y2), x2 = m2.address;
  if (o2.push(x2), 0 === r$1._crypto_aead_aegis128l_decrypt_detached(x2, p2, h2, y2, 0, i, u2, d2, 0, v2, b2)) {
    var k2 = E(m2, c2);
    return A(o2), k2;
  }
  M$1(o2, "ciphertext cannot be decrypted using that key");
}
function U(e, t2, a2, _2, n2, s2) {
  var c2 = [];
  S$1(s2);
  var o2 = w$1(e = N(c2, e, "message")), p2 = e.length;
  c2.push(o2);
  var h2 = null, y2 = 0;
  null != t2 && (h2 = w$1(t2 = N(c2, t2, "additional_data")), y2 = t2.length, c2.push(h2));
  var i = null;
  null != a2 && (i = w$1(a2 = N(c2, a2, "secret_nonce")), a2.length, c2.push(i)), _2 = N(c2, _2, "public_nonce");
  var l2, u2 = 0 | r$1._crypto_aead_aegis128l_npubbytes();
  _2.length !== u2 && I$1(c2, "invalid public_nonce length"), l2 = w$1(_2), c2.push(l2), n2 = N(c2, n2, "key");
  var d2, v2 = 0 | r$1._crypto_aead_aegis128l_keybytes();
  n2.length !== v2 && I$1(c2, "invalid key length"), d2 = w$1(n2), c2.push(d2);
  var g2 = new T$1(p2 + r$1._crypto_aead_aegis128l_abytes() | 0), b2 = g2.address;
  if (c2.push(b2), 0 === r$1._crypto_aead_aegis128l_encrypt(b2, null, o2, p2, 0, h2, y2, 0, i, l2, d2)) {
    var f2 = E(g2, s2);
    return A(c2), f2;
  }
  M$1(c2, "invalid usage");
}
function P(e, t2, a2, _2, n2, s2) {
  var c2 = [];
  S$1(s2);
  var o2 = w$1(e = N(c2, e, "message")), p2 = e.length;
  c2.push(o2);
  var h2 = null, y2 = 0;
  null != t2 && (h2 = w$1(t2 = N(c2, t2, "additional_data")), y2 = t2.length, c2.push(h2));
  var i = null;
  null != a2 && (i = w$1(a2 = N(c2, a2, "secret_nonce")), a2.length, c2.push(i)), _2 = N(c2, _2, "public_nonce");
  var l2, u2 = 0 | r$1._crypto_aead_aegis128l_npubbytes();
  _2.length !== u2 && I$1(c2, "invalid public_nonce length"), l2 = w$1(_2), c2.push(l2), n2 = N(c2, n2, "key");
  var d2, v2 = 0 | r$1._crypto_aead_aegis128l_keybytes();
  n2.length !== v2 && I$1(c2, "invalid key length"), d2 = w$1(n2), c2.push(d2);
  var g2 = new T$1(0 | p2), b2 = g2.address;
  c2.push(b2);
  var f2 = new T$1(0 | r$1._crypto_aead_aegis128l_abytes()), m2 = f2.address;
  if (c2.push(m2), 0 === r$1._crypto_aead_aegis128l_encrypt_detached(b2, m2, null, o2, p2, 0, h2, y2, 0, i, l2, d2)) {
    var x2 = E({ ciphertext: g2, mac: f2 }, s2);
    return A(c2), x2;
  }
  M$1(c2, "invalid usage");
}
function C(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_aead_aegis128l_keybytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_aead_aegis128l_keygen(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function R$1(e, t2, a2, _2, n2, s2) {
  var c2 = [];
  S$1(s2);
  var o2 = null;
  null != e && (o2 = w$1(e = N(c2, e, "secret_nonce")), e.length, c2.push(o2)), t2 = N(c2, t2, "ciphertext");
  var p2, h2 = r$1._crypto_aead_aegis256_abytes(), y2 = t2.length;
  y2 < h2 && I$1(c2, "ciphertext is too short"), p2 = w$1(t2), c2.push(p2);
  var i = null, l2 = 0;
  null != a2 && (i = w$1(a2 = N(c2, a2, "additional_data")), l2 = a2.length, c2.push(i)), _2 = N(c2, _2, "public_nonce");
  var u2, d2 = 0 | r$1._crypto_aead_aegis256_npubbytes();
  _2.length !== d2 && I$1(c2, "invalid public_nonce length"), u2 = w$1(_2), c2.push(u2), n2 = N(c2, n2, "key");
  var v2, g2 = 0 | r$1._crypto_aead_aegis256_keybytes();
  n2.length !== g2 && I$1(c2, "invalid key length"), v2 = w$1(n2), c2.push(v2);
  var b2 = new T$1(y2 - r$1._crypto_aead_aegis256_abytes() | 0), f2 = b2.address;
  if (c2.push(f2), 0 === r$1._crypto_aead_aegis256_decrypt(f2, null, o2, p2, y2, 0, i, l2, 0, u2, v2)) {
    var m2 = E(b2, s2);
    return A(c2), m2;
  }
  M$1(c2, "ciphertext cannot be decrypted using that key");
}
function X$1(e, t2, a2, _2, n2, s2, c2) {
  var o2 = [];
  S$1(c2);
  var p2 = null;
  null != e && (p2 = w$1(e = N(o2, e, "secret_nonce")), e.length, o2.push(p2));
  var h2 = w$1(t2 = N(o2, t2, "ciphertext")), y2 = t2.length;
  o2.push(h2), a2 = N(o2, a2, "mac");
  var i, l2 = 0 | r$1._crypto_aead_aegis256_abytes();
  a2.length !== l2 && I$1(o2, "invalid mac length"), i = w$1(a2), o2.push(i);
  var u2 = null, d2 = 0;
  null != _2 && (u2 = w$1(_2 = N(o2, _2, "additional_data")), d2 = _2.length, o2.push(u2)), n2 = N(o2, n2, "public_nonce");
  var v2, g2 = 0 | r$1._crypto_aead_aegis256_npubbytes();
  n2.length !== g2 && I$1(o2, "invalid public_nonce length"), v2 = w$1(n2), o2.push(v2), s2 = N(o2, s2, "key");
  var b2, f2 = 0 | r$1._crypto_aead_aegis256_keybytes();
  s2.length !== f2 && I$1(o2, "invalid key length"), b2 = w$1(s2), o2.push(b2);
  var m2 = new T$1(0 | y2), x2 = m2.address;
  if (o2.push(x2), 0 === r$1._crypto_aead_aegis256_decrypt_detached(x2, p2, h2, y2, 0, i, u2, d2, 0, v2, b2)) {
    var k2 = E(m2, c2);
    return A(o2), k2;
  }
  M$1(o2, "ciphertext cannot be decrypted using that key");
}
function D(e, t2, a2, _2, n2, s2) {
  var c2 = [];
  S$1(s2);
  var o2 = w$1(e = N(c2, e, "message")), p2 = e.length;
  c2.push(o2);
  var h2 = null, y2 = 0;
  null != t2 && (h2 = w$1(t2 = N(c2, t2, "additional_data")), y2 = t2.length, c2.push(h2));
  var i = null;
  null != a2 && (i = w$1(a2 = N(c2, a2, "secret_nonce")), a2.length, c2.push(i)), _2 = N(c2, _2, "public_nonce");
  var l2, u2 = 0 | r$1._crypto_aead_aegis256_npubbytes();
  _2.length !== u2 && I$1(c2, "invalid public_nonce length"), l2 = w$1(_2), c2.push(l2), n2 = N(c2, n2, "key");
  var d2, v2 = 0 | r$1._crypto_aead_aegis256_keybytes();
  n2.length !== v2 && I$1(c2, "invalid key length"), d2 = w$1(n2), c2.push(d2);
  var g2 = new T$1(p2 + r$1._crypto_aead_aegis256_abytes() | 0), b2 = g2.address;
  if (c2.push(b2), 0 === r$1._crypto_aead_aegis256_encrypt(b2, null, o2, p2, 0, h2, y2, 0, i, l2, d2)) {
    var f2 = E(g2, s2);
    return A(c2), f2;
  }
  M$1(c2, "invalid usage");
}
function G(e, t2, a2, _2, n2, s2) {
  var c2 = [];
  S$1(s2);
  var o2 = w$1(e = N(c2, e, "message")), p2 = e.length;
  c2.push(o2);
  var h2 = null, y2 = 0;
  null != t2 && (h2 = w$1(t2 = N(c2, t2, "additional_data")), y2 = t2.length, c2.push(h2));
  var i = null;
  null != a2 && (i = w$1(a2 = N(c2, a2, "secret_nonce")), a2.length, c2.push(i)), _2 = N(c2, _2, "public_nonce");
  var l2, u2 = 0 | r$1._crypto_aead_aegis256_npubbytes();
  _2.length !== u2 && I$1(c2, "invalid public_nonce length"), l2 = w$1(_2), c2.push(l2), n2 = N(c2, n2, "key");
  var d2, v2 = 0 | r$1._crypto_aead_aegis256_keybytes();
  n2.length !== v2 && I$1(c2, "invalid key length"), d2 = w$1(n2), c2.push(d2);
  var g2 = new T$1(0 | p2), b2 = g2.address;
  c2.push(b2);
  var f2 = new T$1(0 | r$1._crypto_aead_aegis256_abytes()), m2 = f2.address;
  if (c2.push(m2), 0 === r$1._crypto_aead_aegis256_encrypt_detached(b2, m2, null, o2, p2, 0, h2, y2, 0, i, l2, d2)) {
    var x2 = E({ ciphertext: g2, mac: f2 }, s2);
    return A(c2), x2;
  }
  M$1(c2, "invalid usage");
}
function F(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_aead_aegis256_keybytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_aead_aegis256_keygen(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function V$1(e, t2, a2, _2, n2, s2) {
  var c2 = [];
  S$1(s2);
  var o2 = null;
  null != e && (o2 = w$1(e = N(c2, e, "secret_nonce")), e.length, c2.push(o2)), t2 = N(c2, t2, "ciphertext");
  var p2, h2 = r$1._crypto_aead_chacha20poly1305_abytes(), y2 = t2.length;
  y2 < h2 && I$1(c2, "ciphertext is too short"), p2 = w$1(t2), c2.push(p2);
  var i = null, l2 = 0;
  null != a2 && (i = w$1(a2 = N(c2, a2, "additional_data")), l2 = a2.length, c2.push(i)), _2 = N(c2, _2, "public_nonce");
  var u2, d2 = 0 | r$1._crypto_aead_chacha20poly1305_npubbytes();
  _2.length !== d2 && I$1(c2, "invalid public_nonce length"), u2 = w$1(_2), c2.push(u2), n2 = N(c2, n2, "key");
  var v2, g2 = 0 | r$1._crypto_aead_chacha20poly1305_keybytes();
  n2.length !== g2 && I$1(c2, "invalid key length"), v2 = w$1(n2), c2.push(v2);
  var b2 = new T$1(y2 - r$1._crypto_aead_chacha20poly1305_abytes() | 0), f2 = b2.address;
  if (c2.push(f2), 0 === r$1._crypto_aead_chacha20poly1305_decrypt(f2, null, o2, p2, y2, 0, i, l2, 0, u2, v2)) {
    var m2 = E(b2, s2);
    return A(c2), m2;
  }
  M$1(c2, "ciphertext cannot be decrypted using that key");
}
function q$1(e, t2, a2, _2, n2, s2, c2) {
  var o2 = [];
  S$1(c2);
  var p2 = null;
  null != e && (p2 = w$1(e = N(o2, e, "secret_nonce")), e.length, o2.push(p2));
  var h2 = w$1(t2 = N(o2, t2, "ciphertext")), y2 = t2.length;
  o2.push(h2), a2 = N(o2, a2, "mac");
  var i, l2 = 0 | r$1._crypto_box_macbytes();
  a2.length !== l2 && I$1(o2, "invalid mac length"), i = w$1(a2), o2.push(i);
  var u2 = null, d2 = 0;
  null != _2 && (u2 = w$1(_2 = N(o2, _2, "additional_data")), d2 = _2.length, o2.push(u2)), n2 = N(o2, n2, "public_nonce");
  var v2, g2 = 0 | r$1._crypto_aead_chacha20poly1305_npubbytes();
  n2.length !== g2 && I$1(o2, "invalid public_nonce length"), v2 = w$1(n2), o2.push(v2), s2 = N(o2, s2, "key");
  var b2, f2 = 0 | r$1._crypto_aead_chacha20poly1305_keybytes();
  s2.length !== f2 && I$1(o2, "invalid key length"), b2 = w$1(s2), o2.push(b2);
  var m2 = new T$1(0 | y2), x2 = m2.address;
  if (o2.push(x2), 0 === r$1._crypto_aead_chacha20poly1305_decrypt_detached(x2, p2, h2, y2, 0, i, u2, d2, 0, v2, b2)) {
    var k2 = E(m2, c2);
    return A(o2), k2;
  }
  M$1(o2, "ciphertext cannot be decrypted using that key");
}
function z(e, t2, a2, _2, n2, s2) {
  var c2 = [];
  S$1(s2);
  var o2 = w$1(e = N(c2, e, "message")), p2 = e.length;
  c2.push(o2);
  var h2 = null, y2 = 0;
  null != t2 && (h2 = w$1(t2 = N(c2, t2, "additional_data")), y2 = t2.length, c2.push(h2));
  var i = null;
  null != a2 && (i = w$1(a2 = N(c2, a2, "secret_nonce")), a2.length, c2.push(i)), _2 = N(c2, _2, "public_nonce");
  var l2, u2 = 0 | r$1._crypto_aead_chacha20poly1305_npubbytes();
  _2.length !== u2 && I$1(c2, "invalid public_nonce length"), l2 = w$1(_2), c2.push(l2), n2 = N(c2, n2, "key");
  var d2, v2 = 0 | r$1._crypto_aead_chacha20poly1305_keybytes();
  n2.length !== v2 && I$1(c2, "invalid key length"), d2 = w$1(n2), c2.push(d2);
  var g2 = new T$1(p2 + r$1._crypto_aead_chacha20poly1305_abytes() | 0), b2 = g2.address;
  if (c2.push(b2), 0 === r$1._crypto_aead_chacha20poly1305_encrypt(b2, null, o2, p2, 0, h2, y2, 0, i, l2, d2)) {
    var f2 = E(g2, s2);
    return A(c2), f2;
  }
  M$1(c2, "invalid usage");
}
function W$1(e, t2, a2, _2, n2, s2) {
  var c2 = [];
  S$1(s2);
  var o2 = w$1(e = N(c2, e, "message")), p2 = e.length;
  c2.push(o2);
  var h2 = null, y2 = 0;
  null != t2 && (h2 = w$1(t2 = N(c2, t2, "additional_data")), y2 = t2.length, c2.push(h2));
  var i = null;
  null != a2 && (i = w$1(a2 = N(c2, a2, "secret_nonce")), a2.length, c2.push(i)), _2 = N(c2, _2, "public_nonce");
  var l2, u2 = 0 | r$1._crypto_aead_chacha20poly1305_npubbytes();
  _2.length !== u2 && I$1(c2, "invalid public_nonce length"), l2 = w$1(_2), c2.push(l2), n2 = N(c2, n2, "key");
  var d2, v2 = 0 | r$1._crypto_aead_chacha20poly1305_keybytes();
  n2.length !== v2 && I$1(c2, "invalid key length"), d2 = w$1(n2), c2.push(d2);
  var g2 = new T$1(0 | p2), b2 = g2.address;
  c2.push(b2);
  var f2 = new T$1(0 | r$1._crypto_aead_chacha20poly1305_abytes()), m2 = f2.address;
  if (c2.push(m2), 0 === r$1._crypto_aead_chacha20poly1305_encrypt_detached(b2, m2, null, o2, p2, 0, h2, y2, 0, i, l2, d2)) {
    var x2 = E({ ciphertext: g2, mac: f2 }, s2);
    return A(c2), x2;
  }
  M$1(c2, "invalid usage");
}
function H$1(e, t2, a2, _2, n2, s2) {
  var c2 = [];
  S$1(s2);
  var o2 = null;
  null != e && (o2 = w$1(e = N(c2, e, "secret_nonce")), e.length, c2.push(o2)), t2 = N(c2, t2, "ciphertext");
  var p2, h2 = r$1._crypto_aead_chacha20poly1305_ietf_abytes(), y2 = t2.length;
  y2 < h2 && I$1(c2, "ciphertext is too short"), p2 = w$1(t2), c2.push(p2);
  var i = null, l2 = 0;
  null != a2 && (i = w$1(a2 = N(c2, a2, "additional_data")), l2 = a2.length, c2.push(i)), _2 = N(c2, _2, "public_nonce");
  var u2, d2 = 0 | r$1._crypto_aead_chacha20poly1305_ietf_npubbytes();
  _2.length !== d2 && I$1(c2, "invalid public_nonce length"), u2 = w$1(_2), c2.push(u2), n2 = N(c2, n2, "key");
  var v2, g2 = 0 | r$1._crypto_aead_chacha20poly1305_ietf_keybytes();
  n2.length !== g2 && I$1(c2, "invalid key length"), v2 = w$1(n2), c2.push(v2);
  var b2 = new T$1(y2 - r$1._crypto_aead_chacha20poly1305_ietf_abytes() | 0), f2 = b2.address;
  if (c2.push(f2), 0 === r$1._crypto_aead_chacha20poly1305_ietf_decrypt(f2, null, o2, p2, y2, 0, i, l2, 0, u2, v2)) {
    var m2 = E(b2, s2);
    return A(c2), m2;
  }
  M$1(c2, "ciphertext cannot be decrypted using that key");
}
function j(e, t2, a2, _2, n2, s2, c2) {
  var o2 = [];
  S$1(c2);
  var p2 = null;
  null != e && (p2 = w$1(e = N(o2, e, "secret_nonce")), e.length, o2.push(p2));
  var h2 = w$1(t2 = N(o2, t2, "ciphertext")), y2 = t2.length;
  o2.push(h2), a2 = N(o2, a2, "mac");
  var i, l2 = 0 | r$1._crypto_box_macbytes();
  a2.length !== l2 && I$1(o2, "invalid mac length"), i = w$1(a2), o2.push(i);
  var u2 = null, d2 = 0;
  null != _2 && (u2 = w$1(_2 = N(o2, _2, "additional_data")), d2 = _2.length, o2.push(u2)), n2 = N(o2, n2, "public_nonce");
  var v2, g2 = 0 | r$1._crypto_aead_chacha20poly1305_ietf_npubbytes();
  n2.length !== g2 && I$1(o2, "invalid public_nonce length"), v2 = w$1(n2), o2.push(v2), s2 = N(o2, s2, "key");
  var b2, f2 = 0 | r$1._crypto_aead_chacha20poly1305_ietf_keybytes();
  s2.length !== f2 && I$1(o2, "invalid key length"), b2 = w$1(s2), o2.push(b2);
  var m2 = new T$1(0 | y2), x2 = m2.address;
  if (o2.push(x2), 0 === r$1._crypto_aead_chacha20poly1305_ietf_decrypt_detached(x2, p2, h2, y2, 0, i, u2, d2, 0, v2, b2)) {
    var k2 = E(m2, c2);
    return A(o2), k2;
  }
  M$1(o2, "ciphertext cannot be decrypted using that key");
}
function J(e, t2, a2, _2, n2, s2) {
  var c2 = [];
  S$1(s2);
  var o2 = w$1(e = N(c2, e, "message")), p2 = e.length;
  c2.push(o2);
  var h2 = null, y2 = 0;
  null != t2 && (h2 = w$1(t2 = N(c2, t2, "additional_data")), y2 = t2.length, c2.push(h2));
  var i = null;
  null != a2 && (i = w$1(a2 = N(c2, a2, "secret_nonce")), a2.length, c2.push(i)), _2 = N(c2, _2, "public_nonce");
  var l2, u2 = 0 | r$1._crypto_aead_chacha20poly1305_ietf_npubbytes();
  _2.length !== u2 && I$1(c2, "invalid public_nonce length"), l2 = w$1(_2), c2.push(l2), n2 = N(c2, n2, "key");
  var d2, v2 = 0 | r$1._crypto_aead_chacha20poly1305_ietf_keybytes();
  n2.length !== v2 && I$1(c2, "invalid key length"), d2 = w$1(n2), c2.push(d2);
  var g2 = new T$1(p2 + r$1._crypto_aead_chacha20poly1305_ietf_abytes() | 0), b2 = g2.address;
  if (c2.push(b2), 0 === r$1._crypto_aead_chacha20poly1305_ietf_encrypt(b2, null, o2, p2, 0, h2, y2, 0, i, l2, d2)) {
    var f2 = E(g2, s2);
    return A(c2), f2;
  }
  M$1(c2, "invalid usage");
}
function Q$1(e, t2, a2, _2, n2, s2) {
  var c2 = [];
  S$1(s2);
  var o2 = w$1(e = N(c2, e, "message")), p2 = e.length;
  c2.push(o2);
  var h2 = null, y2 = 0;
  null != t2 && (h2 = w$1(t2 = N(c2, t2, "additional_data")), y2 = t2.length, c2.push(h2));
  var i = null;
  null != a2 && (i = w$1(a2 = N(c2, a2, "secret_nonce")), a2.length, c2.push(i)), _2 = N(c2, _2, "public_nonce");
  var l2, u2 = 0 | r$1._crypto_aead_chacha20poly1305_ietf_npubbytes();
  _2.length !== u2 && I$1(c2, "invalid public_nonce length"), l2 = w$1(_2), c2.push(l2), n2 = N(c2, n2, "key");
  var d2, v2 = 0 | r$1._crypto_aead_chacha20poly1305_ietf_keybytes();
  n2.length !== v2 && I$1(c2, "invalid key length"), d2 = w$1(n2), c2.push(d2);
  var g2 = new T$1(0 | p2), b2 = g2.address;
  c2.push(b2);
  var f2 = new T$1(0 | r$1._crypto_aead_chacha20poly1305_ietf_abytes()), m2 = f2.address;
  if (c2.push(m2), 0 === r$1._crypto_aead_chacha20poly1305_ietf_encrypt_detached(b2, m2, null, o2, p2, 0, h2, y2, 0, i, l2, d2)) {
    var x2 = E({ ciphertext: g2, mac: f2 }, s2);
    return A(c2), x2;
  }
  M$1(c2, "invalid usage");
}
function Z$1(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_aead_chacha20poly1305_ietf_keybytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_aead_chacha20poly1305_ietf_keygen(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function $(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_aead_chacha20poly1305_keybytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_aead_chacha20poly1305_keygen(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function ee(e, t2, a2, _2, n2, s2) {
  var c2 = [];
  S$1(s2);
  var o2 = null;
  null != e && (o2 = w$1(e = N(c2, e, "secret_nonce")), e.length, c2.push(o2)), t2 = N(c2, t2, "ciphertext");
  var p2, h2 = r$1._crypto_aead_xchacha20poly1305_ietf_abytes(), y2 = t2.length;
  y2 < h2 && I$1(c2, "ciphertext is too short"), p2 = w$1(t2), c2.push(p2);
  var i = null, l2 = 0;
  null != a2 && (i = w$1(a2 = N(c2, a2, "additional_data")), l2 = a2.length, c2.push(i)), _2 = N(c2, _2, "public_nonce");
  var u2, d2 = 0 | r$1._crypto_aead_xchacha20poly1305_ietf_npubbytes();
  _2.length !== d2 && I$1(c2, "invalid public_nonce length"), u2 = w$1(_2), c2.push(u2), n2 = N(c2, n2, "key");
  var v2, g2 = 0 | r$1._crypto_aead_xchacha20poly1305_ietf_keybytes();
  n2.length !== g2 && I$1(c2, "invalid key length"), v2 = w$1(n2), c2.push(v2);
  var b2 = new T$1(y2 - r$1._crypto_aead_xchacha20poly1305_ietf_abytes() | 0), f2 = b2.address;
  if (c2.push(f2), 0 === r$1._crypto_aead_xchacha20poly1305_ietf_decrypt(f2, null, o2, p2, y2, 0, i, l2, 0, u2, v2)) {
    var m2 = E(b2, s2);
    return A(c2), m2;
  }
  M$1(c2, "ciphertext cannot be decrypted using that key");
}
function re(e, t2, a2, _2, n2, s2, c2) {
  var o2 = [];
  S$1(c2);
  var p2 = null;
  null != e && (p2 = w$1(e = N(o2, e, "secret_nonce")), e.length, o2.push(p2));
  var h2 = w$1(t2 = N(o2, t2, "ciphertext")), y2 = t2.length;
  o2.push(h2), a2 = N(o2, a2, "mac");
  var i, l2 = 0 | r$1._crypto_box_macbytes();
  a2.length !== l2 && I$1(o2, "invalid mac length"), i = w$1(a2), o2.push(i);
  var u2 = null, d2 = 0;
  null != _2 && (u2 = w$1(_2 = N(o2, _2, "additional_data")), d2 = _2.length, o2.push(u2)), n2 = N(o2, n2, "public_nonce");
  var v2, g2 = 0 | r$1._crypto_aead_xchacha20poly1305_ietf_npubbytes();
  n2.length !== g2 && I$1(o2, "invalid public_nonce length"), v2 = w$1(n2), o2.push(v2), s2 = N(o2, s2, "key");
  var b2, f2 = 0 | r$1._crypto_aead_xchacha20poly1305_ietf_keybytes();
  s2.length !== f2 && I$1(o2, "invalid key length"), b2 = w$1(s2), o2.push(b2);
  var m2 = new T$1(0 | y2), x2 = m2.address;
  if (o2.push(x2), 0 === r$1._crypto_aead_xchacha20poly1305_ietf_decrypt_detached(x2, p2, h2, y2, 0, i, u2, d2, 0, v2, b2)) {
    var k2 = E(m2, c2);
    return A(o2), k2;
  }
  M$1(o2, "ciphertext cannot be decrypted using that key");
}
function te(e, t2, a2, _2, n2, s2) {
  var c2 = [];
  S$1(s2);
  var o2 = w$1(e = N(c2, e, "message")), p2 = e.length;
  c2.push(o2);
  var h2 = null, y2 = 0;
  null != t2 && (h2 = w$1(t2 = N(c2, t2, "additional_data")), y2 = t2.length, c2.push(h2));
  var i = null;
  null != a2 && (i = w$1(a2 = N(c2, a2, "secret_nonce")), a2.length, c2.push(i)), _2 = N(c2, _2, "public_nonce");
  var l2, u2 = 0 | r$1._crypto_aead_xchacha20poly1305_ietf_npubbytes();
  _2.length !== u2 && I$1(c2, "invalid public_nonce length"), l2 = w$1(_2), c2.push(l2), n2 = N(c2, n2, "key");
  var d2, v2 = 0 | r$1._crypto_aead_xchacha20poly1305_ietf_keybytes();
  n2.length !== v2 && I$1(c2, "invalid key length"), d2 = w$1(n2), c2.push(d2);
  var g2 = new T$1(p2 + r$1._crypto_aead_xchacha20poly1305_ietf_abytes() | 0), b2 = g2.address;
  if (c2.push(b2), 0 === r$1._crypto_aead_xchacha20poly1305_ietf_encrypt(b2, null, o2, p2, 0, h2, y2, 0, i, l2, d2)) {
    var f2 = E(g2, s2);
    return A(c2), f2;
  }
  M$1(c2, "invalid usage");
}
function ae(e, t2, a2, _2, n2, s2) {
  var c2 = [];
  S$1(s2);
  var o2 = w$1(e = N(c2, e, "message")), p2 = e.length;
  c2.push(o2);
  var h2 = null, y2 = 0;
  null != t2 && (h2 = w$1(t2 = N(c2, t2, "additional_data")), y2 = t2.length, c2.push(h2));
  var i = null;
  null != a2 && (i = w$1(a2 = N(c2, a2, "secret_nonce")), a2.length, c2.push(i)), _2 = N(c2, _2, "public_nonce");
  var l2, u2 = 0 | r$1._crypto_aead_xchacha20poly1305_ietf_npubbytes();
  _2.length !== u2 && I$1(c2, "invalid public_nonce length"), l2 = w$1(_2), c2.push(l2), n2 = N(c2, n2, "key");
  var d2, v2 = 0 | r$1._crypto_aead_xchacha20poly1305_ietf_keybytes();
  n2.length !== v2 && I$1(c2, "invalid key length"), d2 = w$1(n2), c2.push(d2);
  var g2 = new T$1(0 | p2), b2 = g2.address;
  c2.push(b2);
  var f2 = new T$1(0 | r$1._crypto_aead_xchacha20poly1305_ietf_abytes()), m2 = f2.address;
  if (c2.push(m2), 0 === r$1._crypto_aead_xchacha20poly1305_ietf_encrypt_detached(b2, m2, null, o2, p2, 0, h2, y2, 0, i, l2, d2)) {
    var x2 = E({ ciphertext: g2, mac: f2 }, s2);
    return A(c2), x2;
  }
  M$1(c2, "invalid usage");
}
function _e(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_aead_xchacha20poly1305_ietf_keybytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_aead_xchacha20poly1305_ietf_keygen(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function ne(e, t2, a2) {
  var _2 = [];
  S$1(a2);
  var n2 = w$1(e = N(_2, e, "message")), s2 = e.length;
  _2.push(n2), t2 = N(_2, t2, "key");
  var c2, o2 = 0 | r$1._crypto_auth_keybytes();
  t2.length !== o2 && I$1(_2, "invalid key length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_auth_bytes()), h2 = p2.address;
  if (_2.push(h2), !(0 | r$1._crypto_auth(h2, n2, s2, 0, c2))) {
    var y2 = E(p2, a2);
    return A(_2), y2;
  }
  M$1(_2, "invalid usage");
}
function se(e, t2, a2) {
  var _2 = [];
  S$1(a2);
  var n2 = w$1(e = N(_2, e, "message")), s2 = e.length;
  _2.push(n2), t2 = N(_2, t2, "key");
  var c2, o2 = 0 | r$1._crypto_auth_hmacsha256_keybytes();
  t2.length !== o2 && I$1(_2, "invalid key length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_auth_hmacsha256_bytes()), h2 = p2.address;
  if (_2.push(h2), !(0 | r$1._crypto_auth_hmacsha256(h2, n2, s2, 0, c2))) {
    var y2 = E(p2, a2);
    return A(_2), y2;
  }
  M$1(_2, "invalid usage");
}
function ce(e, t2) {
  var a2 = [];
  S$1(t2), K(a2, e, "state_address");
  var _2 = new T$1(0 | r$1._crypto_auth_hmacsha256_bytes()), n2 = _2.address;
  if (a2.push(n2), !(0 | r$1._crypto_auth_hmacsha256_final(e, n2))) {
    var s2 = (r$1._free(e), E(_2, t2));
    return A(a2), s2;
  }
  M$1(a2, "invalid usage");
}
function oe(e, t2) {
  var a2 = [];
  S$1(t2);
  var _2 = null, n2 = 0;
  null != e && (_2 = w$1(e = N(a2, e, "key")), n2 = e.length, a2.push(_2));
  var s2 = new T$1(208).address;
  if (!(0 | r$1._crypto_auth_hmacsha256_init(s2, _2, n2))) {
    var c2 = s2;
    return A(a2), c2;
  }
  M$1(a2, "invalid usage");
}
function pe(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_auth_hmacsha256_keybytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_auth_hmacsha256_keygen(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function he(e, t2, a2) {
  var _2 = [];
  S$1(a2), K(_2, e, "state_address");
  var n2 = w$1(t2 = N(_2, t2, "message_chunk")), s2 = t2.length;
  _2.push(n2), 0 | r$1._crypto_auth_hmacsha256_update(e, n2, s2) && M$1(_2, "invalid usage"), A(_2);
}
function ye(e, t2, a2) {
  var _2 = [];
  e = N(_2, e, "tag");
  var n2, s2 = 0 | r$1._crypto_auth_hmacsha256_bytes();
  e.length !== s2 && I$1(_2, "invalid tag length"), n2 = w$1(e), _2.push(n2);
  var c2 = w$1(t2 = N(_2, t2, "message")), o2 = t2.length;
  _2.push(c2), a2 = N(_2, a2, "key");
  var p2, h2 = 0 | r$1._crypto_auth_hmacsha256_keybytes();
  a2.length !== h2 && I$1(_2, "invalid key length"), p2 = w$1(a2), _2.push(p2);
  var y2 = !(0 | r$1._crypto_auth_hmacsha256_verify(n2, c2, o2, 0, p2));
  return A(_2), y2;
}
function ie$2(e, t2, a2) {
  var _2 = [];
  S$1(a2);
  var n2 = w$1(e = N(_2, e, "message")), s2 = e.length;
  _2.push(n2), t2 = N(_2, t2, "key");
  var c2, o2 = 0 | r$1._crypto_auth_hmacsha512_keybytes();
  t2.length !== o2 && I$1(_2, "invalid key length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_auth_hmacsha512_bytes()), h2 = p2.address;
  if (_2.push(h2), !(0 | r$1._crypto_auth_hmacsha512(h2, n2, s2, 0, c2))) {
    var y2 = E(p2, a2);
    return A(_2), y2;
  }
  M$1(_2, "invalid usage");
}
function le(e, t2, a2) {
  var _2 = [];
  S$1(a2);
  var n2 = w$1(e = N(_2, e, "message")), s2 = e.length;
  _2.push(n2), t2 = N(_2, t2, "key");
  var c2, o2 = 0 | r$1._crypto_auth_hmacsha512256_keybytes();
  t2.length !== o2 && I$1(_2, "invalid key length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_auth_hmacsha512256_bytes()), h2 = p2.address;
  if (_2.push(h2), !(0 | r$1._crypto_auth_hmacsha512256(h2, n2, s2, 0, c2))) {
    var y2 = E(p2, a2);
    return A(_2), y2;
  }
  M$1(_2, "invalid usage");
}
function ue(e, t2) {
  var a2 = [];
  S$1(t2), K(a2, e, "state_address");
  var _2 = new T$1(0 | r$1._crypto_auth_hmacsha512256_bytes()), n2 = _2.address;
  if (a2.push(n2), !(0 | r$1._crypto_auth_hmacsha512256_final(e, n2))) {
    var s2 = (r$1._free(e), E(_2, t2));
    return A(a2), s2;
  }
  M$1(a2, "invalid usage");
}
function de(e, t2) {
  var a2 = [];
  S$1(t2);
  var _2 = null, n2 = 0;
  null != e && (_2 = w$1(e = N(a2, e, "key")), n2 = e.length, a2.push(_2));
  var s2 = new T$1(416).address;
  if (!(0 | r$1._crypto_auth_hmacsha512256_init(s2, _2, n2))) {
    var c2 = s2;
    return A(a2), c2;
  }
  M$1(a2, "invalid usage");
}
function ve(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_auth_hmacsha512256_keybytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_auth_hmacsha512256_keygen(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function ge(e, t2, a2) {
  var _2 = [];
  S$1(a2), K(_2, e, "state_address");
  var n2 = w$1(t2 = N(_2, t2, "message_chunk")), s2 = t2.length;
  _2.push(n2), 0 | r$1._crypto_auth_hmacsha512256_update(e, n2, s2) && M$1(_2, "invalid usage"), A(_2);
}
function be(e, t2, a2) {
  var _2 = [];
  e = N(_2, e, "tag");
  var n2, s2 = 0 | r$1._crypto_auth_hmacsha512256_bytes();
  e.length !== s2 && I$1(_2, "invalid tag length"), n2 = w$1(e), _2.push(n2);
  var c2 = w$1(t2 = N(_2, t2, "message")), o2 = t2.length;
  _2.push(c2), a2 = N(_2, a2, "key");
  var p2, h2 = 0 | r$1._crypto_auth_hmacsha512256_keybytes();
  a2.length !== h2 && I$1(_2, "invalid key length"), p2 = w$1(a2), _2.push(p2);
  var y2 = !(0 | r$1._crypto_auth_hmacsha512256_verify(n2, c2, o2, 0, p2));
  return A(_2), y2;
}
function fe(e, t2) {
  var a2 = [];
  S$1(t2), K(a2, e, "state_address");
  var _2 = new T$1(0 | r$1._crypto_auth_hmacsha512_bytes()), n2 = _2.address;
  if (a2.push(n2), !(0 | r$1._crypto_auth_hmacsha512_final(e, n2))) {
    var s2 = (r$1._free(e), E(_2, t2));
    return A(a2), s2;
  }
  M$1(a2, "invalid usage");
}
function me(e, t2) {
  var a2 = [];
  S$1(t2);
  var _2 = null, n2 = 0;
  null != e && (_2 = w$1(e = N(a2, e, "key")), n2 = e.length, a2.push(_2));
  var s2 = new T$1(416).address;
  if (!(0 | r$1._crypto_auth_hmacsha512_init(s2, _2, n2))) {
    var c2 = s2;
    return A(a2), c2;
  }
  M$1(a2, "invalid usage");
}
function xe(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_auth_hmacsha512_keybytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_auth_hmacsha512_keygen(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function Ee(e, t2, a2) {
  var _2 = [];
  S$1(a2), K(_2, e, "state_address");
  var n2 = w$1(t2 = N(_2, t2, "message_chunk")), s2 = t2.length;
  _2.push(n2), 0 | r$1._crypto_auth_hmacsha512_update(e, n2, s2) && M$1(_2, "invalid usage"), A(_2);
}
function ke(e, t2, a2) {
  var _2 = [];
  e = N(_2, e, "tag");
  var n2, s2 = 0 | r$1._crypto_auth_hmacsha512_bytes();
  e.length !== s2 && I$1(_2, "invalid tag length"), n2 = w$1(e), _2.push(n2);
  var c2 = w$1(t2 = N(_2, t2, "message")), o2 = t2.length;
  _2.push(c2), a2 = N(_2, a2, "key");
  var p2, h2 = 0 | r$1._crypto_auth_hmacsha512_keybytes();
  a2.length !== h2 && I$1(_2, "invalid key length"), p2 = w$1(a2), _2.push(p2);
  var y2 = !(0 | r$1._crypto_auth_hmacsha512_verify(n2, c2, o2, 0, p2));
  return A(_2), y2;
}
function Se(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_auth_keybytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_auth_keygen(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function Te(e, t2, a2) {
  var _2 = [];
  e = N(_2, e, "tag");
  var n2, s2 = 0 | r$1._crypto_auth_bytes();
  e.length !== s2 && I$1(_2, "invalid tag length"), n2 = w$1(e), _2.push(n2);
  var c2 = w$1(t2 = N(_2, t2, "message")), o2 = t2.length;
  _2.push(c2), a2 = N(_2, a2, "key");
  var p2, h2 = 0 | r$1._crypto_auth_keybytes();
  a2.length !== h2 && I$1(_2, "invalid key length"), p2 = w$1(a2), _2.push(p2);
  var y2 = !(0 | r$1._crypto_auth_verify(n2, c2, o2, 0, p2));
  return A(_2), y2;
}
function we(e, t2, a2) {
  var _2 = [];
  S$1(a2), e = N(_2, e, "publicKey");
  var n2, s2 = 0 | r$1._crypto_box_publickeybytes();
  e.length !== s2 && I$1(_2, "invalid publicKey length"), n2 = w$1(e), _2.push(n2), t2 = N(_2, t2, "privateKey");
  var c2, o2 = 0 | r$1._crypto_box_secretkeybytes();
  t2.length !== o2 && I$1(_2, "invalid privateKey length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_box_beforenmbytes()), h2 = p2.address;
  if (_2.push(h2), !(0 | r$1._crypto_box_beforenm(h2, n2, c2))) {
    var y2 = E(p2, a2);
    return A(_2), y2;
  }
  M$1(_2, "invalid usage");
}
function Ye(e, t2, a2) {
  var _2 = [];
  S$1(a2), e = N(_2, e, "publicKey");
  var n2, s2 = 0 | r$1._crypto_box_curve25519xchacha20poly1305_publickeybytes();
  e.length !== s2 && I$1(_2, "invalid publicKey length"), n2 = w$1(e), _2.push(n2), t2 = N(_2, t2, "privateKey");
  var c2, o2 = 0 | r$1._crypto_box_curve25519xchacha20poly1305_secretkeybytes();
  t2.length !== o2 && I$1(_2, "invalid privateKey length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_box_curve25519xchacha20poly1305_beforenmbytes()), h2 = p2.address;
  if (_2.push(h2), !(0 | r$1._crypto_box_curve25519xchacha20poly1305_beforenm(h2, n2, c2))) {
    var y2 = E(p2, a2);
    return A(_2), y2;
  }
  M$1(_2, "invalid usage");
}
function Be(e, t2, a2, _2, n2) {
  var s2 = [];
  S$1(n2);
  var c2 = w$1(e = N(s2, e, "message")), o2 = e.length;
  s2.push(c2), t2 = N(s2, t2, "nonce");
  var p2, h2 = 0 | r$1._crypto_box_curve25519xchacha20poly1305_noncebytes();
  t2.length !== h2 && I$1(s2, "invalid nonce length"), p2 = w$1(t2), s2.push(p2), a2 = N(s2, a2, "publicKey");
  var y2, i = 0 | r$1._crypto_box_curve25519xchacha20poly1305_publickeybytes();
  a2.length !== i && I$1(s2, "invalid publicKey length"), y2 = w$1(a2), s2.push(y2), _2 = N(s2, _2, "privateKey");
  var l2, u2 = 0 | r$1._crypto_box_curve25519xchacha20poly1305_secretkeybytes();
  _2.length !== u2 && I$1(s2, "invalid privateKey length"), l2 = w$1(_2), s2.push(l2);
  var d2 = new T$1(0 | o2), v2 = d2.address;
  s2.push(v2);
  var g2 = new T$1(0 | r$1._crypto_box_curve25519xchacha20poly1305_macbytes()), b2 = g2.address;
  if (s2.push(b2), !(0 | r$1._crypto_box_curve25519xchacha20poly1305_detached(v2, b2, c2, o2, 0, p2, y2, l2))) {
    var f2 = E({ ciphertext: d2, mac: g2 }, n2);
    return A(s2), f2;
  }
  M$1(s2, "invalid usage");
}
function Ae(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2);
  var s2 = w$1(e = N(n2, e, "message")), c2 = e.length;
  n2.push(s2), t2 = N(n2, t2, "nonce");
  var o2, p2 = 0 | r$1._crypto_box_curve25519xchacha20poly1305_noncebytes();
  t2.length !== p2 && I$1(n2, "invalid nonce length"), o2 = w$1(t2), n2.push(o2), a2 = N(n2, a2, "sharedKey");
  var h2, y2 = 0 | r$1._crypto_box_curve25519xchacha20poly1305_beforenmbytes();
  a2.length !== y2 && I$1(n2, "invalid sharedKey length"), h2 = w$1(a2), n2.push(h2);
  var i = new T$1(0 | c2), l2 = i.address;
  n2.push(l2);
  var u2 = new T$1(0 | r$1._crypto_box_curve25519xchacha20poly1305_macbytes()), d2 = u2.address;
  if (n2.push(d2), !(0 | r$1._crypto_box_curve25519xchacha20poly1305_detached_afternm(l2, d2, s2, c2, 0, o2, h2))) {
    var v2 = E({ ciphertext: i, mac: u2 }, _2);
    return A(n2), v2;
  }
  M$1(n2, "invalid usage");
}
function Me(e, t2, a2, _2, n2) {
  var s2 = [];
  S$1(n2);
  var c2 = w$1(e = N(s2, e, "message")), o2 = e.length;
  s2.push(c2), t2 = N(s2, t2, "nonce");
  var p2, h2 = 0 | r$1._crypto_box_curve25519xchacha20poly1305_noncebytes();
  t2.length !== h2 && I$1(s2, "invalid nonce length"), p2 = w$1(t2), s2.push(p2), a2 = N(s2, a2, "publicKey");
  var y2, i = 0 | r$1._crypto_box_curve25519xchacha20poly1305_publickeybytes();
  a2.length !== i && I$1(s2, "invalid publicKey length"), y2 = w$1(a2), s2.push(y2), _2 = N(s2, _2, "privateKey");
  var l2, u2 = 0 | r$1._crypto_box_curve25519xchacha20poly1305_secretkeybytes();
  _2.length !== u2 && I$1(s2, "invalid privateKey length"), l2 = w$1(_2), s2.push(l2);
  var d2 = new T$1(o2 + r$1._crypto_box_curve25519xchacha20poly1305_macbytes() | 0), v2 = d2.address;
  if (s2.push(v2), !(0 | r$1._crypto_box_curve25519xchacha20poly1305_easy(v2, c2, o2, 0, p2, y2, l2))) {
    var g2 = E(d2, n2);
    return A(s2), g2;
  }
  M$1(s2, "invalid usage");
}
function Ie(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2);
  var s2 = w$1(e = N(n2, e, "message")), c2 = e.length;
  n2.push(s2), t2 = N(n2, t2, "nonce");
  var o2, p2 = 0 | r$1._crypto_box_curve25519xchacha20poly1305_noncebytes();
  t2.length !== p2 && I$1(n2, "invalid nonce length"), o2 = w$1(t2), n2.push(o2), a2 = N(n2, a2, "sharedKey");
  var h2, y2 = 0 | r$1._crypto_box_curve25519xchacha20poly1305_beforenmbytes();
  a2.length !== y2 && I$1(n2, "invalid sharedKey length"), h2 = w$1(a2), n2.push(h2);
  var i = new T$1(c2 + r$1._crypto_box_curve25519xchacha20poly1305_macbytes() | 0), l2 = i.address;
  if (n2.push(l2), !(0 | r$1._crypto_box_curve25519xchacha20poly1305_easy_afternm(l2, s2, c2, 0, o2, h2))) {
    var u2 = E(i, _2);
    return A(n2), u2;
  }
  M$1(n2, "invalid usage");
}
function Ke(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_box_curve25519xchacha20poly1305_publickeybytes()), _2 = a2.address;
  t2.push(_2);
  var n2 = new T$1(0 | r$1._crypto_box_curve25519xchacha20poly1305_secretkeybytes()), s2 = n2.address;
  t2.push(s2), r$1._crypto_box_curve25519xchacha20poly1305_keypair(_2, s2);
  var c2 = E({ publicKey: a2, privateKey: n2, keyType: "curve25519" }, e);
  return A(t2), c2;
}
function Ne(e, t2, a2, _2, n2, s2) {
  var c2 = [];
  S$1(s2);
  var o2 = w$1(e = N(c2, e, "ciphertext")), p2 = e.length;
  c2.push(o2), t2 = N(c2, t2, "mac");
  var h2, y2 = 0 | r$1._crypto_box_curve25519xchacha20poly1305_macbytes();
  t2.length !== y2 && I$1(c2, "invalid mac length"), h2 = w$1(t2), c2.push(h2), a2 = N(c2, a2, "nonce");
  var i, l2 = 0 | r$1._crypto_box_curve25519xchacha20poly1305_noncebytes();
  a2.length !== l2 && I$1(c2, "invalid nonce length"), i = w$1(a2), c2.push(i), _2 = N(c2, _2, "publicKey");
  var u2, d2 = 0 | r$1._crypto_box_curve25519xchacha20poly1305_publickeybytes();
  _2.length !== d2 && I$1(c2, "invalid publicKey length"), u2 = w$1(_2), c2.push(u2), n2 = N(c2, n2, "privateKey");
  var v2, g2 = 0 | r$1._crypto_box_curve25519xchacha20poly1305_secretkeybytes();
  n2.length !== g2 && I$1(c2, "invalid privateKey length"), v2 = w$1(n2), c2.push(v2);
  var b2 = new T$1(0 | p2), f2 = b2.address;
  if (c2.push(f2), !(0 | r$1._crypto_box_curve25519xchacha20poly1305_open_detached(f2, o2, h2, p2, 0, i, u2, v2))) {
    var m2 = E(b2, s2);
    return A(c2), m2;
  }
  M$1(c2, "incorrect key pair for the given ciphertext");
}
function Le(e, t2, a2, _2, n2) {
  var s2 = [];
  S$1(n2);
  var c2 = w$1(e = N(s2, e, "ciphertext")), o2 = e.length;
  s2.push(c2), t2 = N(s2, t2, "mac");
  var p2, h2 = 0 | r$1._crypto_box_curve25519xchacha20poly1305_macbytes();
  t2.length !== h2 && I$1(s2, "invalid mac length"), p2 = w$1(t2), s2.push(p2), a2 = N(s2, a2, "nonce");
  var y2, i = 0 | r$1._crypto_box_curve25519xchacha20poly1305_noncebytes();
  a2.length !== i && I$1(s2, "invalid nonce length"), y2 = w$1(a2), s2.push(y2), _2 = N(s2, _2, "sharedKey");
  var l2, u2 = 0 | r$1._crypto_box_curve25519xchacha20poly1305_beforenmbytes();
  _2.length !== u2 && I$1(s2, "invalid sharedKey length"), l2 = w$1(_2), s2.push(l2);
  var d2 = new T$1(0 | o2), v2 = d2.address;
  if (s2.push(v2), !(0 | r$1._crypto_box_curve25519xchacha20poly1305_open_detached_afternm(v2, c2, p2, o2, 0, y2, l2))) {
    var g2 = E(d2, n2);
    return A(s2), g2;
  }
  M$1(s2, "incorrect secret key for the given ciphertext");
}
function Oe(e, t2, a2, _2, n2) {
  var s2 = [];
  S$1(n2), e = N(s2, e, "ciphertext");
  var c2, o2 = r$1._crypto_box_curve25519xchacha20poly1305_macbytes(), p2 = e.length;
  p2 < o2 && I$1(s2, "ciphertext is too short"), c2 = w$1(e), s2.push(c2), t2 = N(s2, t2, "nonce");
  var h2, y2 = 0 | r$1._crypto_box_curve25519xchacha20poly1305_noncebytes();
  t2.length !== y2 && I$1(s2, "invalid nonce length"), h2 = w$1(t2), s2.push(h2), a2 = N(s2, a2, "publicKey");
  var i, l2 = 0 | r$1._crypto_box_curve25519xchacha20poly1305_publickeybytes();
  a2.length !== l2 && I$1(s2, "invalid publicKey length"), i = w$1(a2), s2.push(i), _2 = N(s2, _2, "privateKey");
  var u2, d2 = 0 | r$1._crypto_box_curve25519xchacha20poly1305_secretkeybytes();
  _2.length !== d2 && I$1(s2, "invalid privateKey length"), u2 = w$1(_2), s2.push(u2);
  var v2 = new T$1(p2 - r$1._crypto_box_curve25519xchacha20poly1305_macbytes() | 0), g2 = v2.address;
  if (s2.push(g2), !(0 | r$1._crypto_box_curve25519xchacha20poly1305_open_easy(g2, c2, p2, 0, h2, i, u2))) {
    var b2 = E(v2, n2);
    return A(s2), b2;
  }
  M$1(s2, "incorrect key pair for the given ciphertext");
}
function Ue(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2);
  var s2 = w$1(e = N(n2, e, "ciphertext")), c2 = e.length;
  n2.push(s2), t2 = N(n2, t2, "nonce");
  var o2, p2 = 0 | r$1._crypto_box_curve25519xchacha20poly1305_noncebytes();
  t2.length !== p2 && I$1(n2, "invalid nonce length"), o2 = w$1(t2), n2.push(o2), a2 = N(n2, a2, "sharedKey");
  var h2, y2 = 0 | r$1._crypto_box_curve25519xchacha20poly1305_beforenmbytes();
  a2.length !== y2 && I$1(n2, "invalid sharedKey length"), h2 = w$1(a2), n2.push(h2);
  var i = new T$1(c2 - r$1._crypto_box_curve25519xchacha20poly1305_macbytes() | 0), l2 = i.address;
  if (n2.push(l2), !(0 | r$1._crypto_box_curve25519xchacha20poly1305_open_easy_afternm(l2, s2, c2, 0, o2, h2))) {
    var u2 = E(i, _2);
    return A(n2), u2;
  }
  M$1(n2, "incorrect secret key for the given ciphertext");
}
function Pe(e, t2, a2) {
  var _2 = [];
  S$1(a2);
  var n2 = w$1(e = N(_2, e, "message")), s2 = e.length;
  _2.push(n2), t2 = N(_2, t2, "publicKey");
  var c2, o2 = 0 | r$1._crypto_box_curve25519xchacha20poly1305_publickeybytes();
  t2.length !== o2 && I$1(_2, "invalid publicKey length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(s2 + r$1._crypto_box_curve25519xchacha20poly1305_sealbytes() | 0), h2 = p2.address;
  _2.push(h2), r$1._crypto_box_curve25519xchacha20poly1305_seal(h2, n2, s2, 0, c2);
  var y2 = E(p2, a2);
  return A(_2), y2;
}
function Ce(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2), e = N(n2, e, "ciphertext");
  var s2, c2 = r$1._crypto_box_curve25519xchacha20poly1305_sealbytes(), o2 = e.length;
  o2 < c2 && I$1(n2, "ciphertext is too short"), s2 = w$1(e), n2.push(s2), t2 = N(n2, t2, "publicKey");
  var p2, h2 = 0 | r$1._crypto_box_curve25519xchacha20poly1305_publickeybytes();
  t2.length !== h2 && I$1(n2, "invalid publicKey length"), p2 = w$1(t2), n2.push(p2), a2 = N(n2, a2, "secretKey");
  var y2, i = 0 | r$1._crypto_box_curve25519xchacha20poly1305_secretkeybytes();
  a2.length !== i && I$1(n2, "invalid secretKey length"), y2 = w$1(a2), n2.push(y2);
  var l2 = new T$1(o2 - r$1._crypto_box_curve25519xchacha20poly1305_sealbytes() | 0), u2 = l2.address;
  n2.push(u2), r$1._crypto_box_curve25519xchacha20poly1305_seal_open(u2, s2, o2, 0, p2, y2);
  var d2 = E(l2, _2);
  return A(n2), d2;
}
function Re(e, t2) {
  var a2 = [];
  S$1(t2), e = N(a2, e, "seed");
  var _2, n2 = 0 | r$1._crypto_box_curve25519xchacha20poly1305_seedbytes();
  e.length !== n2 && I$1(a2, "invalid seed length"), _2 = w$1(e), a2.push(_2);
  var s2 = new T$1(0 | r$1._crypto_box_curve25519xchacha20poly1305_publickeybytes()), c2 = s2.address;
  a2.push(c2);
  var o2 = new T$1(0 | r$1._crypto_box_curve25519xchacha20poly1305_secretkeybytes()), p2 = o2.address;
  if (a2.push(p2), !(0 | r$1._crypto_box_curve25519xchacha20poly1305_seed_keypair(c2, p2, _2))) {
    var h2 = { publicKey: E(s2, t2), privateKey: E(o2, t2), keyType: "x25519" };
    return A(a2), h2;
  }
  M$1(a2, "invalid usage");
}
function Xe(e, t2, a2, _2, n2) {
  var s2 = [];
  S$1(n2);
  var c2 = w$1(e = N(s2, e, "message")), o2 = e.length;
  s2.push(c2), t2 = N(s2, t2, "nonce");
  var p2, h2 = 0 | r$1._crypto_box_noncebytes();
  t2.length !== h2 && I$1(s2, "invalid nonce length"), p2 = w$1(t2), s2.push(p2), a2 = N(s2, a2, "publicKey");
  var y2, i = 0 | r$1._crypto_box_publickeybytes();
  a2.length !== i && I$1(s2, "invalid publicKey length"), y2 = w$1(a2), s2.push(y2), _2 = N(s2, _2, "privateKey");
  var l2, u2 = 0 | r$1._crypto_box_secretkeybytes();
  _2.length !== u2 && I$1(s2, "invalid privateKey length"), l2 = w$1(_2), s2.push(l2);
  var d2 = new T$1(0 | o2), v2 = d2.address;
  s2.push(v2);
  var g2 = new T$1(0 | r$1._crypto_box_macbytes()), b2 = g2.address;
  if (s2.push(b2), !(0 | r$1._crypto_box_detached(v2, b2, c2, o2, 0, p2, y2, l2))) {
    var f2 = E({ ciphertext: d2, mac: g2 }, n2);
    return A(s2), f2;
  }
  M$1(s2, "invalid usage");
}
function De(e, t2, a2, _2, n2) {
  var s2 = [];
  S$1(n2);
  var c2 = w$1(e = N(s2, e, "message")), o2 = e.length;
  s2.push(c2), t2 = N(s2, t2, "nonce");
  var p2, h2 = 0 | r$1._crypto_box_noncebytes();
  t2.length !== h2 && I$1(s2, "invalid nonce length"), p2 = w$1(t2), s2.push(p2), a2 = N(s2, a2, "publicKey");
  var y2, i = 0 | r$1._crypto_box_publickeybytes();
  a2.length !== i && I$1(s2, "invalid publicKey length"), y2 = w$1(a2), s2.push(y2), _2 = N(s2, _2, "privateKey");
  var l2, u2 = 0 | r$1._crypto_box_secretkeybytes();
  _2.length !== u2 && I$1(s2, "invalid privateKey length"), l2 = w$1(_2), s2.push(l2);
  var d2 = new T$1(o2 + r$1._crypto_box_macbytes() | 0), v2 = d2.address;
  if (s2.push(v2), !(0 | r$1._crypto_box_easy(v2, c2, o2, 0, p2, y2, l2))) {
    var g2 = E(d2, n2);
    return A(s2), g2;
  }
  M$1(s2, "invalid usage");
}
function Ge(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2);
  var s2 = w$1(e = N(n2, e, "message")), c2 = e.length;
  n2.push(s2), t2 = N(n2, t2, "nonce");
  var o2, p2 = 0 | r$1._crypto_box_noncebytes();
  t2.length !== p2 && I$1(n2, "invalid nonce length"), o2 = w$1(t2), n2.push(o2), a2 = N(n2, a2, "sharedKey");
  var h2, y2 = 0 | r$1._crypto_box_beforenmbytes();
  a2.length !== y2 && I$1(n2, "invalid sharedKey length"), h2 = w$1(a2), n2.push(h2);
  var i = new T$1(c2 + r$1._crypto_box_macbytes() | 0), l2 = i.address;
  if (n2.push(l2), !(0 | r$1._crypto_box_easy_afternm(l2, s2, c2, 0, o2, h2))) {
    var u2 = E(i, _2);
    return A(n2), u2;
  }
  M$1(n2, "invalid usage");
}
function Fe(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_box_publickeybytes()), _2 = a2.address;
  t2.push(_2);
  var n2 = new T$1(0 | r$1._crypto_box_secretkeybytes()), s2 = n2.address;
  if (t2.push(s2), !(0 | r$1._crypto_box_keypair(_2, s2))) {
    var c2 = { publicKey: E(a2, e), privateKey: E(n2, e), keyType: "x25519" };
    return A(t2), c2;
  }
  M$1(t2, "internal error");
}
function Ve(e, t2, a2, _2, n2, s2) {
  var c2 = [];
  S$1(s2);
  var o2 = w$1(e = N(c2, e, "ciphertext")), p2 = e.length;
  c2.push(o2), t2 = N(c2, t2, "mac");
  var h2, y2 = 0 | r$1._crypto_box_macbytes();
  t2.length !== y2 && I$1(c2, "invalid mac length"), h2 = w$1(t2), c2.push(h2), a2 = N(c2, a2, "nonce");
  var i, l2 = 0 | r$1._crypto_box_noncebytes();
  a2.length !== l2 && I$1(c2, "invalid nonce length"), i = w$1(a2), c2.push(i), _2 = N(c2, _2, "publicKey");
  var u2, d2 = 0 | r$1._crypto_box_publickeybytes();
  _2.length !== d2 && I$1(c2, "invalid publicKey length"), u2 = w$1(_2), c2.push(u2), n2 = N(c2, n2, "privateKey");
  var v2, g2 = 0 | r$1._crypto_box_secretkeybytes();
  n2.length !== g2 && I$1(c2, "invalid privateKey length"), v2 = w$1(n2), c2.push(v2);
  var b2 = new T$1(0 | p2), f2 = b2.address;
  if (c2.push(f2), !(0 | r$1._crypto_box_open_detached(f2, o2, h2, p2, 0, i, u2, v2))) {
    var m2 = E(b2, s2);
    return A(c2), m2;
  }
  M$1(c2, "incorrect key pair for the given ciphertext");
}
function qe(e, t2, a2, _2, n2) {
  var s2 = [];
  S$1(n2), e = N(s2, e, "ciphertext");
  var c2, o2 = r$1._crypto_box_macbytes(), p2 = e.length;
  p2 < o2 && I$1(s2, "ciphertext is too short"), c2 = w$1(e), s2.push(c2), t2 = N(s2, t2, "nonce");
  var h2, y2 = 0 | r$1._crypto_box_noncebytes();
  t2.length !== y2 && I$1(s2, "invalid nonce length"), h2 = w$1(t2), s2.push(h2), a2 = N(s2, a2, "publicKey");
  var i, l2 = 0 | r$1._crypto_box_publickeybytes();
  a2.length !== l2 && I$1(s2, "invalid publicKey length"), i = w$1(a2), s2.push(i), _2 = N(s2, _2, "privateKey");
  var u2, d2 = 0 | r$1._crypto_box_secretkeybytes();
  _2.length !== d2 && I$1(s2, "invalid privateKey length"), u2 = w$1(_2), s2.push(u2);
  var v2 = new T$1(p2 - r$1._crypto_box_macbytes() | 0), g2 = v2.address;
  if (s2.push(g2), !(0 | r$1._crypto_box_open_easy(g2, c2, p2, 0, h2, i, u2))) {
    var b2 = E(v2, n2);
    return A(s2), b2;
  }
  M$1(s2, "incorrect key pair for the given ciphertext");
}
function ze(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2);
  var s2 = w$1(e = N(n2, e, "ciphertext")), c2 = e.length;
  n2.push(s2), t2 = N(n2, t2, "nonce");
  var o2, p2 = 0 | r$1._crypto_box_noncebytes();
  t2.length !== p2 && I$1(n2, "invalid nonce length"), o2 = w$1(t2), n2.push(o2), a2 = N(n2, a2, "sharedKey");
  var h2, y2 = 0 | r$1._crypto_box_beforenmbytes();
  a2.length !== y2 && I$1(n2, "invalid sharedKey length"), h2 = w$1(a2), n2.push(h2);
  var i = new T$1(c2 - r$1._crypto_box_macbytes() | 0), l2 = i.address;
  if (n2.push(l2), !(0 | r$1._crypto_box_open_easy_afternm(l2, s2, c2, 0, o2, h2))) {
    var u2 = E(i, _2);
    return A(n2), u2;
  }
  M$1(n2, "incorrect secret key for the given ciphertext");
}
function We(e, t2, a2) {
  var _2 = [];
  S$1(a2);
  var n2 = w$1(e = N(_2, e, "message")), s2 = e.length;
  _2.push(n2), t2 = N(_2, t2, "publicKey");
  var c2, o2 = 0 | r$1._crypto_box_publickeybytes();
  t2.length !== o2 && I$1(_2, "invalid publicKey length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(s2 + r$1._crypto_box_sealbytes() | 0), h2 = p2.address;
  if (_2.push(h2), !(0 | r$1._crypto_box_seal(h2, n2, s2, 0, c2))) {
    var y2 = E(p2, a2);
    return A(_2), y2;
  }
  M$1(_2, "invalid usage");
}
function He(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2), e = N(n2, e, "ciphertext");
  var s2, c2 = r$1._crypto_box_sealbytes(), o2 = e.length;
  o2 < c2 && I$1(n2, "ciphertext is too short"), s2 = w$1(e), n2.push(s2), t2 = N(n2, t2, "publicKey");
  var p2, h2 = 0 | r$1._crypto_box_publickeybytes();
  t2.length !== h2 && I$1(n2, "invalid publicKey length"), p2 = w$1(t2), n2.push(p2), a2 = N(n2, a2, "privateKey");
  var y2, i = 0 | r$1._crypto_box_secretkeybytes();
  a2.length !== i && I$1(n2, "invalid privateKey length"), y2 = w$1(a2), n2.push(y2);
  var l2 = new T$1(o2 - r$1._crypto_box_sealbytes() | 0), u2 = l2.address;
  if (n2.push(u2), !(0 | r$1._crypto_box_seal_open(u2, s2, o2, 0, p2, y2))) {
    var d2 = E(l2, _2);
    return A(n2), d2;
  }
  M$1(n2, "incorrect key pair for the given ciphertext");
}
function je(e, t2) {
  var a2 = [];
  S$1(t2), e = N(a2, e, "seed");
  var _2, n2 = 0 | r$1._crypto_box_seedbytes();
  e.length !== n2 && I$1(a2, "invalid seed length"), _2 = w$1(e), a2.push(_2);
  var s2 = new T$1(0 | r$1._crypto_box_publickeybytes()), c2 = s2.address;
  a2.push(c2);
  var o2 = new T$1(0 | r$1._crypto_box_secretkeybytes()), p2 = o2.address;
  if (a2.push(p2), !(0 | r$1._crypto_box_seed_keypair(c2, p2, _2))) {
    var h2 = { publicKey: E(s2, t2), privateKey: E(o2, t2), keyType: "x25519" };
    return A(a2), h2;
  }
  M$1(a2, "invalid usage");
}
function Je(e, t2, a2) {
  var _2 = [];
  S$1(a2), e = N(_2, e, "p");
  var n2, s2 = 0 | r$1._crypto_core_ed25519_bytes();
  e.length !== s2 && I$1(_2, "invalid p length"), n2 = w$1(e), _2.push(n2), t2 = N(_2, t2, "q");
  var c2, o2 = 0 | r$1._crypto_core_ed25519_bytes();
  t2.length !== o2 && I$1(_2, "invalid q length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_core_ed25519_bytes()), h2 = p2.address;
  if (_2.push(h2), !(0 | r$1._crypto_core_ed25519_add(h2, n2, c2))) {
    var y2 = E(p2, a2);
    return A(_2), y2;
  }
  M$1(_2, "input is an invalid element");
}
function Qe(e, t2) {
  var a2 = [];
  S$1(t2);
  var _2 = w$1(e = N(a2, e, "r"));
  e.length, a2.push(_2);
  var n2 = new T$1(0 | r$1._crypto_core_ed25519_bytes()), s2 = n2.address;
  if (a2.push(s2), !(0 | r$1._crypto_core_ed25519_from_hash(s2, _2))) {
    var c2 = E(n2, t2);
    return A(a2), c2;
  }
  M$1(a2, "invalid usage");
}
function Ze(e, t2) {
  var a2 = [];
  S$1(t2);
  var _2 = w$1(e = N(a2, e, "r"));
  e.length, a2.push(_2);
  var n2 = new T$1(0 | r$1._crypto_core_ed25519_bytes()), s2 = n2.address;
  if (a2.push(s2), !(0 | r$1._crypto_core_ed25519_from_uniform(s2, _2))) {
    var c2 = E(n2, t2);
    return A(a2), c2;
  }
  M$1(a2, "invalid usage");
}
function $e(e, t2) {
  var a2 = [];
  S$1(t2), e = N(a2, e, "repr");
  var _2, n2 = 0 | r$1._crypto_core_ed25519_bytes();
  e.length !== n2 && I$1(a2, "invalid repr length"), _2 = w$1(e), a2.push(_2);
  var s2 = 1 == (0 | r$1._crypto_core_ed25519_is_valid_point(_2));
  return A(a2), s2;
}
function er(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_core_ed25519_bytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_core_ed25519_random(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function rr(e, t2, a2) {
  var _2 = [];
  S$1(a2), e = N(_2, e, "x");
  var n2, s2 = 0 | r$1._crypto_core_ed25519_scalarbytes();
  e.length !== s2 && I$1(_2, "invalid x length"), n2 = w$1(e), _2.push(n2), t2 = N(_2, t2, "y");
  var c2, o2 = 0 | r$1._crypto_core_ed25519_scalarbytes();
  t2.length !== o2 && I$1(_2, "invalid y length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_core_ed25519_scalarbytes()), h2 = p2.address;
  _2.push(h2), r$1._crypto_core_ed25519_scalar_add(h2, n2, c2);
  var y2 = E(p2, a2);
  return A(_2), y2;
}
function tr$1(e, t2) {
  var a2 = [];
  S$1(t2), e = N(a2, e, "s");
  var _2, n2 = 0 | r$1._crypto_core_ed25519_scalarbytes();
  e.length !== n2 && I$1(a2, "invalid s length"), _2 = w$1(e), a2.push(_2);
  var s2 = new T$1(0 | r$1._crypto_core_ed25519_scalarbytes()), c2 = s2.address;
  a2.push(c2), r$1._crypto_core_ed25519_scalar_complement(c2, _2);
  var o2 = E(s2, t2);
  return A(a2), o2;
}
function ar(e, t2) {
  var a2 = [];
  S$1(t2), e = N(a2, e, "s");
  var _2, n2 = 0 | r$1._crypto_core_ed25519_scalarbytes();
  e.length !== n2 && I$1(a2, "invalid s length"), _2 = w$1(e), a2.push(_2);
  var s2 = new T$1(0 | r$1._crypto_core_ed25519_scalarbytes()), c2 = s2.address;
  if (a2.push(c2), !(0 | r$1._crypto_core_ed25519_scalar_invert(c2, _2))) {
    var o2 = E(s2, t2);
    return A(a2), o2;
  }
  M$1(a2, "invalid reciprocate");
}
function _r(e, t2, a2) {
  var _2 = [];
  S$1(a2), e = N(_2, e, "x");
  var n2, s2 = 0 | r$1._crypto_core_ed25519_scalarbytes();
  e.length !== s2 && I$1(_2, "invalid x length"), n2 = w$1(e), _2.push(n2), t2 = N(_2, t2, "y");
  var c2, o2 = 0 | r$1._crypto_core_ed25519_scalarbytes();
  t2.length !== o2 && I$1(_2, "invalid y length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_core_ed25519_scalarbytes()), h2 = p2.address;
  _2.push(h2), r$1._crypto_core_ed25519_scalar_mul(h2, n2, c2);
  var y2 = E(p2, a2);
  return A(_2), y2;
}
function nr(e, t2) {
  var a2 = [];
  S$1(t2), e = N(a2, e, "s");
  var _2, n2 = 0 | r$1._crypto_core_ed25519_scalarbytes();
  e.length !== n2 && I$1(a2, "invalid s length"), _2 = w$1(e), a2.push(_2);
  var s2 = new T$1(0 | r$1._crypto_core_ed25519_scalarbytes()), c2 = s2.address;
  a2.push(c2), r$1._crypto_core_ed25519_scalar_negate(c2, _2);
  var o2 = E(s2, t2);
  return A(a2), o2;
}
function sr(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_core_ed25519_scalarbytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_core_ed25519_scalar_random(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function cr(e, t2) {
  var a2 = [];
  S$1(t2), e = N(a2, e, "sample");
  var _2, n2 = 0 | r$1._crypto_core_ed25519_nonreducedscalarbytes();
  e.length !== n2 && I$1(a2, "invalid sample length"), _2 = w$1(e), a2.push(_2);
  var s2 = new T$1(0 | r$1._crypto_core_ed25519_scalarbytes()), c2 = s2.address;
  a2.push(c2), r$1._crypto_core_ed25519_scalar_reduce(c2, _2);
  var o2 = E(s2, t2);
  return A(a2), o2;
}
function or(e, t2, a2) {
  var _2 = [];
  S$1(a2), e = N(_2, e, "x");
  var n2, s2 = 0 | r$1._crypto_core_ed25519_scalarbytes();
  e.length !== s2 && I$1(_2, "invalid x length"), n2 = w$1(e), _2.push(n2), t2 = N(_2, t2, "y");
  var c2, o2 = 0 | r$1._crypto_core_ed25519_scalarbytes();
  t2.length !== o2 && I$1(_2, "invalid y length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_core_ed25519_scalarbytes()), h2 = p2.address;
  _2.push(h2), r$1._crypto_core_ed25519_scalar_sub(h2, n2, c2);
  var y2 = E(p2, a2);
  return A(_2), y2;
}
function pr(e, t2, a2) {
  var _2 = [];
  S$1(a2), e = N(_2, e, "p");
  var n2, s2 = 0 | r$1._crypto_core_ed25519_bytes();
  e.length !== s2 && I$1(_2, "invalid p length"), n2 = w$1(e), _2.push(n2), t2 = N(_2, t2, "q");
  var c2, o2 = 0 | r$1._crypto_core_ed25519_bytes();
  t2.length !== o2 && I$1(_2, "invalid q length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_core_ed25519_bytes()), h2 = p2.address;
  if (_2.push(h2), !(0 | r$1._crypto_core_ed25519_sub(h2, n2, c2))) {
    var y2 = E(p2, a2);
    return A(_2), y2;
  }
  M$1(_2, "input is an invalid element");
}
function hr(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2), e = N(n2, e, "input");
  var s2, c2 = 0 | r$1._crypto_core_hchacha20_inputbytes();
  e.length !== c2 && I$1(n2, "invalid input length"), s2 = w$1(e), n2.push(s2), t2 = N(n2, t2, "privateKey");
  var o2, p2 = 0 | r$1._crypto_core_hchacha20_keybytes();
  t2.length !== p2 && I$1(n2, "invalid privateKey length"), o2 = w$1(t2), n2.push(o2);
  var h2 = null;
  null != a2 && (h2 = w$1(a2 = N(n2, a2, "constant")), a2.length, n2.push(h2));
  var y2 = new T$1(0 | r$1._crypto_core_hchacha20_outputbytes()), i = y2.address;
  if (n2.push(i), !(0 | r$1._crypto_core_hchacha20(i, s2, o2, h2))) {
    var l2 = E(y2, _2);
    return A(n2), l2;
  }
  M$1(n2, "invalid usage");
}
function yr(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2), e = N(n2, e, "input");
  var s2, c2 = 0 | r$1._crypto_core_hsalsa20_inputbytes();
  e.length !== c2 && I$1(n2, "invalid input length"), s2 = w$1(e), n2.push(s2), t2 = N(n2, t2, "privateKey");
  var o2, p2 = 0 | r$1._crypto_core_hsalsa20_keybytes();
  t2.length !== p2 && I$1(n2, "invalid privateKey length"), o2 = w$1(t2), n2.push(o2);
  var h2 = null;
  null != a2 && (h2 = w$1(a2 = N(n2, a2, "constant")), a2.length, n2.push(h2));
  var y2 = new T$1(0 | r$1._crypto_core_hsalsa20_outputbytes()), i = y2.address;
  if (n2.push(i), !(0 | r$1._crypto_core_hsalsa20(i, s2, o2, h2))) {
    var l2 = E(y2, _2);
    return A(n2), l2;
  }
  M$1(n2, "invalid usage");
}
function ir(e, t2, a2) {
  var _2 = [];
  S$1(a2), e = N(_2, e, "p");
  var n2, s2 = 0 | r$1._crypto_core_ristretto255_bytes();
  e.length !== s2 && I$1(_2, "invalid p length"), n2 = w$1(e), _2.push(n2), t2 = N(_2, t2, "q");
  var c2, o2 = 0 | r$1._crypto_core_ristretto255_bytes();
  t2.length !== o2 && I$1(_2, "invalid q length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_core_ristretto255_bytes()), h2 = p2.address;
  if (_2.push(h2), !(0 | r$1._crypto_core_ristretto255_add(h2, n2, c2))) {
    var y2 = E(p2, a2);
    return A(_2), y2;
  }
  M$1(_2, "input is an invalid element");
}
function lr(e, t2) {
  var a2 = [];
  S$1(t2);
  var _2 = w$1(e = N(a2, e, "r"));
  e.length, a2.push(_2);
  var n2 = new T$1(0 | r$1._crypto_core_ristretto255_bytes()), s2 = n2.address;
  if (a2.push(s2), !(0 | r$1._crypto_core_ristretto255_from_hash(s2, _2))) {
    var c2 = E(n2, t2);
    return A(a2), c2;
  }
  M$1(a2, "invalid usage");
}
function ur(e, t2) {
  var a2 = [];
  S$1(t2), e = N(a2, e, "repr");
  var _2, n2 = 0 | r$1._crypto_core_ristretto255_bytes();
  e.length !== n2 && I$1(a2, "invalid repr length"), _2 = w$1(e), a2.push(_2);
  var s2 = 1 == (0 | r$1._crypto_core_ristretto255_is_valid_point(_2));
  return A(a2), s2;
}
function dr(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_core_ristretto255_bytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_core_ristretto255_random(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function vr(e, t2, a2) {
  var _2 = [];
  S$1(a2), e = N(_2, e, "x");
  var n2, s2 = 0 | r$1._crypto_core_ristretto255_scalarbytes();
  e.length !== s2 && I$1(_2, "invalid x length"), n2 = w$1(e), _2.push(n2), t2 = N(_2, t2, "y");
  var c2, o2 = 0 | r$1._crypto_core_ristretto255_scalarbytes();
  t2.length !== o2 && I$1(_2, "invalid y length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_core_ristretto255_scalarbytes()), h2 = p2.address;
  _2.push(h2), r$1._crypto_core_ristretto255_scalar_add(h2, n2, c2);
  var y2 = E(p2, a2);
  return A(_2), y2;
}
function gr(e, t2) {
  var a2 = [];
  S$1(t2), e = N(a2, e, "s");
  var _2, n2 = 0 | r$1._crypto_core_ristretto255_scalarbytes();
  e.length !== n2 && I$1(a2, "invalid s length"), _2 = w$1(e), a2.push(_2);
  var s2 = new T$1(0 | r$1._crypto_core_ristretto255_scalarbytes()), c2 = s2.address;
  a2.push(c2), r$1._crypto_core_ristretto255_scalar_complement(c2, _2);
  var o2 = E(s2, t2);
  return A(a2), o2;
}
function br(e, t2) {
  var a2 = [];
  S$1(t2), e = N(a2, e, "s");
  var _2, n2 = 0 | r$1._crypto_core_ristretto255_scalarbytes();
  e.length !== n2 && I$1(a2, "invalid s length"), _2 = w$1(e), a2.push(_2);
  var s2 = new T$1(0 | r$1._crypto_core_ristretto255_scalarbytes()), c2 = s2.address;
  if (a2.push(c2), !(0 | r$1._crypto_core_ristretto255_scalar_invert(c2, _2))) {
    var o2 = E(s2, t2);
    return A(a2), o2;
  }
  M$1(a2, "invalid reciprocate");
}
function fr(e, t2, a2) {
  var _2 = [];
  S$1(a2), e = N(_2, e, "x");
  var n2, s2 = 0 | r$1._crypto_core_ristretto255_scalarbytes();
  e.length !== s2 && I$1(_2, "invalid x length"), n2 = w$1(e), _2.push(n2), t2 = N(_2, t2, "y");
  var c2, o2 = 0 | r$1._crypto_core_ristretto255_scalarbytes();
  t2.length !== o2 && I$1(_2, "invalid y length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_core_ristretto255_scalarbytes()), h2 = p2.address;
  _2.push(h2), r$1._crypto_core_ristretto255_scalar_mul(h2, n2, c2);
  var y2 = E(p2, a2);
  return A(_2), y2;
}
function mr(e, t2) {
  var a2 = [];
  S$1(t2), e = N(a2, e, "s");
  var _2, n2 = 0 | r$1._crypto_core_ristretto255_scalarbytes();
  e.length !== n2 && I$1(a2, "invalid s length"), _2 = w$1(e), a2.push(_2);
  var s2 = new T$1(0 | r$1._crypto_core_ristretto255_scalarbytes()), c2 = s2.address;
  a2.push(c2), r$1._crypto_core_ristretto255_scalar_negate(c2, _2);
  var o2 = E(s2, t2);
  return A(a2), o2;
}
function xr(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_core_ristretto255_scalarbytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_core_ristretto255_scalar_random(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function Er(e, t2) {
  var a2 = [];
  S$1(t2), e = N(a2, e, "sample");
  var _2, n2 = 0 | r$1._crypto_core_ristretto255_nonreducedscalarbytes();
  e.length !== n2 && I$1(a2, "invalid sample length"), _2 = w$1(e), a2.push(_2);
  var s2 = new T$1(0 | r$1._crypto_core_ristretto255_scalarbytes()), c2 = s2.address;
  a2.push(c2), r$1._crypto_core_ristretto255_scalar_reduce(c2, _2);
  var o2 = E(s2, t2);
  return A(a2), o2;
}
function kr(e, t2, a2) {
  var _2 = [];
  S$1(a2), e = N(_2, e, "x");
  var n2, s2 = 0 | r$1._crypto_core_ristretto255_scalarbytes();
  e.length !== s2 && I$1(_2, "invalid x length"), n2 = w$1(e), _2.push(n2), t2 = N(_2, t2, "y");
  var c2, o2 = 0 | r$1._crypto_core_ristretto255_scalarbytes();
  t2.length !== o2 && I$1(_2, "invalid y length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_core_ristretto255_scalarbytes()), h2 = p2.address;
  _2.push(h2), r$1._crypto_core_ristretto255_scalar_sub(h2, n2, c2);
  var y2 = E(p2, a2);
  return A(_2), y2;
}
function Sr(e, t2, a2) {
  var _2 = [];
  S$1(a2), e = N(_2, e, "p");
  var n2, s2 = 0 | r$1._crypto_core_ristretto255_bytes();
  e.length !== s2 && I$1(_2, "invalid p length"), n2 = w$1(e), _2.push(n2), t2 = N(_2, t2, "q");
  var c2, o2 = 0 | r$1._crypto_core_ristretto255_bytes();
  t2.length !== o2 && I$1(_2, "invalid q length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_core_ristretto255_bytes()), h2 = p2.address;
  if (_2.push(h2), !(0 | r$1._crypto_core_ristretto255_sub(h2, n2, c2))) {
    var y2 = E(p2, a2);
    return A(_2), y2;
  }
  M$1(_2, "input is an invalid element");
}
function Tr(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2), K(n2, e, "hash_length"), ("number" != typeof e || (0 | e) !== e || e < 0) && I$1(n2, "hash_length must be an unsigned integer");
  var s2 = w$1(t2 = N(n2, t2, "message")), c2 = t2.length;
  n2.push(s2);
  var o2 = null, p2 = 0;
  null != a2 && (o2 = w$1(a2 = N(n2, a2, "key")), p2 = a2.length, n2.push(o2));
  var h2 = new T$1(e |= 0), y2 = h2.address;
  if (n2.push(y2), !(0 | r$1._crypto_generichash(y2, e, s2, c2, 0, o2, p2))) {
    var i = E(h2, _2);
    return A(n2), i;
  }
  M$1(n2, "invalid usage");
}
function wr(e, t2, a2, _2, n2) {
  var s2 = [];
  S$1(n2), K(s2, e, "subkey_len"), ("number" != typeof e || (0 | e) !== e || e < 0) && I$1(s2, "subkey_len must be an unsigned integer");
  var c2 = null, o2 = 0;
  null != t2 && (c2 = w$1(t2 = N(s2, t2, "key")), o2 = t2.length, s2.push(c2));
  var p2 = null, h2 = 0;
  null != a2 && (a2 = N(s2, a2, "id"), h2 = 0 | r$1._crypto_generichash_blake2b_saltbytes(), a2.length !== h2 && I$1(s2, "invalid id length"), p2 = w$1(a2), s2.push(p2));
  var y2 = null, i = 0;
  null != _2 && (_2 = N(s2, _2, "ctx"), i = 0 | r$1._crypto_generichash_blake2b_personalbytes(), _2.length !== i && I$1(s2, "invalid ctx length"), y2 = w$1(_2), s2.push(y2));
  var l2 = new T$1(0 | e), u2 = l2.address;
  if (s2.push(u2), !(0 | r$1._crypto_generichash_blake2b_salt_personal(u2, e, null, 0, 0, c2, o2, p2, y2))) {
    var d2 = E(l2, n2);
    return A(s2), d2;
  }
  M$1(s2, "invalid usage");
}
function Yr(e, t2, a2) {
  var _2 = [];
  S$1(a2), K(_2, e, "state_address"), K(_2, t2, "hash_length"), ("number" != typeof t2 || (0 | t2) !== t2 || t2 < 0) && I$1(_2, "hash_length must be an unsigned integer");
  var n2 = new T$1(t2 |= 0), s2 = n2.address;
  if (_2.push(s2), !(0 | r$1._crypto_generichash_final(e, s2, t2))) {
    var c2 = (r$1._free(e), E(n2, a2));
    return A(_2), c2;
  }
  M$1(_2, "invalid usage");
}
function Br(e, t2, a2) {
  var _2 = [];
  S$1(a2);
  var n2 = null, s2 = 0;
  null != e && (n2 = w$1(e = N(_2, e, "key")), s2 = e.length, _2.push(n2)), K(_2, t2, "hash_length"), ("number" != typeof t2 || (0 | t2) !== t2 || t2 < 0) && I$1(_2, "hash_length must be an unsigned integer");
  var c2 = new T$1(357).address;
  if (!(0 | r$1._crypto_generichash_init(c2, n2, s2, t2))) {
    var o2 = c2;
    return A(_2), o2;
  }
  M$1(_2, "invalid usage");
}
function Ar(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_generichash_keybytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_generichash_keygen(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function Mr(e, t2, a2) {
  var _2 = [];
  S$1(a2), K(_2, e, "state_address");
  var n2 = w$1(t2 = N(_2, t2, "message_chunk")), s2 = t2.length;
  _2.push(n2), 0 | r$1._crypto_generichash_update(e, n2, s2) && M$1(_2, "invalid usage"), A(_2);
}
function Ir(e, t2) {
  var a2 = [];
  S$1(t2);
  var _2 = w$1(e = N(a2, e, "message")), n2 = e.length;
  a2.push(_2);
  var s2 = new T$1(0 | r$1._crypto_hash_bytes()), c2 = s2.address;
  if (a2.push(c2), !(0 | r$1._crypto_hash(c2, _2, n2, 0))) {
    var o2 = E(s2, t2);
    return A(a2), o2;
  }
  M$1(a2, "invalid usage");
}
function Kr(e, t2) {
  var a2 = [];
  S$1(t2);
  var _2 = w$1(e = N(a2, e, "message")), n2 = e.length;
  a2.push(_2);
  var s2 = new T$1(0 | r$1._crypto_hash_sha256_bytes()), c2 = s2.address;
  if (a2.push(c2), !(0 | r$1._crypto_hash_sha256(c2, _2, n2, 0))) {
    var o2 = E(s2, t2);
    return A(a2), o2;
  }
  M$1(a2, "invalid usage");
}
function Nr(e, t2) {
  var a2 = [];
  S$1(t2), K(a2, e, "state_address");
  var _2 = new T$1(0 | r$1._crypto_hash_sha256_bytes()), n2 = _2.address;
  if (a2.push(n2), !(0 | r$1._crypto_hash_sha256_final(e, n2))) {
    var s2 = (r$1._free(e), E(_2, t2));
    return A(a2), s2;
  }
  M$1(a2, "invalid usage");
}
function Lr(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(104).address;
  if (!(0 | r$1._crypto_hash_sha256_init(a2))) {
    var _2 = a2;
    return A(t2), _2;
  }
  M$1(t2, "invalid usage");
}
function Or(e, t2, a2) {
  var _2 = [];
  S$1(a2), K(_2, e, "state_address");
  var n2 = w$1(t2 = N(_2, t2, "message_chunk")), s2 = t2.length;
  _2.push(n2), 0 | r$1._crypto_hash_sha256_update(e, n2, s2) && M$1(_2, "invalid usage"), A(_2);
}
function Ur(e, t2) {
  var a2 = [];
  S$1(t2);
  var _2 = w$1(e = N(a2, e, "message")), n2 = e.length;
  a2.push(_2);
  var s2 = new T$1(0 | r$1._crypto_hash_sha512_bytes()), c2 = s2.address;
  if (a2.push(c2), !(0 | r$1._crypto_hash_sha512(c2, _2, n2, 0))) {
    var o2 = E(s2, t2);
    return A(a2), o2;
  }
  M$1(a2, "invalid usage");
}
function Pr(e, t2) {
  var a2 = [];
  S$1(t2), K(a2, e, "state_address");
  var _2 = new T$1(0 | r$1._crypto_hash_sha512_bytes()), n2 = _2.address;
  if (a2.push(n2), !(0 | r$1._crypto_hash_sha512_final(e, n2))) {
    var s2 = (r$1._free(e), E(_2, t2));
    return A(a2), s2;
  }
  M$1(a2, "invalid usage");
}
function Cr(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(208).address;
  if (!(0 | r$1._crypto_hash_sha512_init(a2))) {
    var _2 = a2;
    return A(t2), _2;
  }
  M$1(t2, "invalid usage");
}
function Rr(e, t2, a2) {
  var _2 = [];
  S$1(a2), K(_2, e, "state_address");
  var n2 = w$1(t2 = N(_2, t2, "message_chunk")), s2 = t2.length;
  _2.push(n2), 0 | r$1._crypto_hash_sha512_update(e, n2, s2) && M$1(_2, "invalid usage"), A(_2);
}
function Xr(e, t2, a2) {
  var _2 = [];
  S$1(a2), e = N(_2, e, "input");
  var n2, s2 = 0 | r$1._crypto_ipcrypt_bytes();
  e.length !== s2 && I$1(_2, "invalid input length"), n2 = w$1(e), _2.push(n2), t2 = N(_2, t2, "key");
  var c2, o2 = 0 | r$1._crypto_ipcrypt_keybytes();
  t2.length !== o2 && I$1(_2, "invalid key length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_ipcrypt_bytes()), h2 = p2.address;
  _2.push(h2), r$1._crypto_ipcrypt_decrypt(h2, n2, c2);
  var y2 = E(p2, a2);
  return A(_2), y2;
}
function Dr(e, t2, a2) {
  var _2 = [];
  S$1(a2), e = N(_2, e, "input");
  var n2, s2 = 0 | r$1._crypto_ipcrypt_bytes();
  e.length !== s2 && I$1(_2, "invalid input length"), n2 = w$1(e), _2.push(n2), t2 = N(_2, t2, "key");
  var c2, o2 = 0 | r$1._crypto_ipcrypt_keybytes();
  t2.length !== o2 && I$1(_2, "invalid key length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_ipcrypt_bytes()), h2 = p2.address;
  _2.push(h2), r$1._crypto_ipcrypt_encrypt(h2, n2, c2);
  var y2 = E(p2, a2);
  return A(_2), y2;
}
function Gr(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_ipcrypt_keybytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_ipcrypt_keygen(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function Fr(e, t2, a2) {
  var _2 = [];
  S$1(a2), e = N(_2, e, "input");
  var n2, s2 = 0 | r$1._crypto_ipcrypt_nd_outputbytes();
  e.length !== s2 && I$1(_2, "invalid input length"), n2 = w$1(e), _2.push(n2), t2 = N(_2, t2, "key");
  var c2, o2 = 0 | r$1._crypto_ipcrypt_nd_keybytes();
  t2.length !== o2 && I$1(_2, "invalid key length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_ipcrypt_nd_inputbytes()), h2 = p2.address;
  _2.push(h2), r$1._crypto_ipcrypt_nd_decrypt(h2, n2, c2);
  var y2 = E(p2, a2);
  return A(_2), y2;
}
function Vr(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2), e = N(n2, e, "input");
  var s2, c2 = 0 | r$1._crypto_ipcrypt_nd_inputbytes();
  e.length !== c2 && I$1(n2, "invalid input length"), s2 = w$1(e), n2.push(s2), t2 = N(n2, t2, "tweak");
  var o2, p2 = 0 | r$1._crypto_ipcrypt_nd_tweakbytes();
  t2.length !== p2 && I$1(n2, "invalid tweak length"), o2 = w$1(t2), n2.push(o2), a2 = N(n2, a2, "key");
  var h2, y2 = 0 | r$1._crypto_ipcrypt_nd_keybytes();
  a2.length !== y2 && I$1(n2, "invalid key length"), h2 = w$1(a2), n2.push(h2);
  var i = new T$1(0 | r$1._crypto_ipcrypt_nd_outputbytes()), l2 = i.address;
  n2.push(l2), r$1._crypto_ipcrypt_nd_encrypt(l2, s2, o2, h2);
  var u2 = E(i, _2);
  return A(n2), u2;
}
function qr(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_ipcrypt_nd_keybytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_ipcrypt_nd_keygen(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function zr(e, t2, a2) {
  var _2 = [];
  S$1(a2), e = N(_2, e, "input");
  var n2, s2 = 0 | r$1._crypto_ipcrypt_ndx_outputbytes();
  e.length !== s2 && I$1(_2, "invalid input length"), n2 = w$1(e), _2.push(n2), t2 = N(_2, t2, "key");
  var c2, o2 = 0 | r$1._crypto_ipcrypt_ndx_keybytes();
  t2.length !== o2 && I$1(_2, "invalid key length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_ipcrypt_ndx_inputbytes()), h2 = p2.address;
  _2.push(h2), r$1._crypto_ipcrypt_ndx_decrypt(h2, n2, c2);
  var y2 = E(p2, a2);
  return A(_2), y2;
}
function Wr(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2), e = N(n2, e, "input");
  var s2, c2 = 0 | r$1._crypto_ipcrypt_ndx_inputbytes();
  e.length !== c2 && I$1(n2, "invalid input length"), s2 = w$1(e), n2.push(s2), t2 = N(n2, t2, "tweak");
  var o2, p2 = 0 | r$1._crypto_ipcrypt_ndx_tweakbytes();
  t2.length !== p2 && I$1(n2, "invalid tweak length"), o2 = w$1(t2), n2.push(o2), a2 = N(n2, a2, "key");
  var h2, y2 = 0 | r$1._crypto_ipcrypt_ndx_keybytes();
  a2.length !== y2 && I$1(n2, "invalid key length"), h2 = w$1(a2), n2.push(h2);
  var i = new T$1(0 | r$1._crypto_ipcrypt_ndx_outputbytes()), l2 = i.address;
  n2.push(l2), r$1._crypto_ipcrypt_ndx_encrypt(l2, s2, o2, h2);
  var u2 = E(i, _2);
  return A(n2), u2;
}
function Hr(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_ipcrypt_ndx_keybytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_ipcrypt_ndx_keygen(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function jr(e, t2, a2) {
  var _2 = [];
  S$1(a2), e = N(_2, e, "input");
  var n2, s2 = 0 | r$1._crypto_ipcrypt_pfx_bytes();
  e.length !== s2 && I$1(_2, "invalid input length"), n2 = w$1(e), _2.push(n2), t2 = N(_2, t2, "key");
  var c2, o2 = 0 | r$1._crypto_ipcrypt_pfx_keybytes();
  t2.length !== o2 && I$1(_2, "invalid key length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_ipcrypt_pfx_bytes()), h2 = p2.address;
  _2.push(h2), r$1._crypto_ipcrypt_pfx_decrypt(h2, n2, c2);
  var y2 = E(p2, a2);
  return A(_2), y2;
}
function Jr(e, t2, a2) {
  var _2 = [];
  S$1(a2), e = N(_2, e, "input");
  var n2, s2 = 0 | r$1._crypto_ipcrypt_pfx_bytes();
  e.length !== s2 && I$1(_2, "invalid input length"), n2 = w$1(e), _2.push(n2), t2 = N(_2, t2, "key");
  var c2, o2 = 0 | r$1._crypto_ipcrypt_pfx_keybytes();
  t2.length !== o2 && I$1(_2, "invalid key length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_ipcrypt_pfx_bytes()), h2 = p2.address;
  _2.push(h2), r$1._crypto_ipcrypt_pfx_encrypt(h2, n2, c2);
  var y2 = E(p2, a2);
  return A(_2), y2;
}
function Qr(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_ipcrypt_pfx_keybytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_ipcrypt_pfx_keygen(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function Zr(e, t2, a2, _2, n2) {
  var s2 = [];
  S$1(n2), K(s2, e, "subkey_len"), ("number" != typeof e || (0 | e) !== e || e < 0) && I$1(s2, "subkey_len must be an unsigned integer"), K(s2, t2, "subkey_id");
  var c2, o2 = 0;
  if ("bigint" == typeof t2 && t2 >= BigInt(0)) {
    const e2 = t2 >> BigInt(32);
    e2 > BigInt(4294967295) && I$1(s2, "subkey_id cannot be more than 64 bits"), o2 = Number(e2), c2 = Number(t2 & BigInt(4294967295));
  } else "number" == typeof t2 && (0 | t2) === t2 && t2 >= 0 ? c2 = t2 : I$1(s2, "subkey_id must be an unsigned integer or bigint");
  "string" != typeof a2 && I$1(s2, "ctx must be a string"), (a2 = l(a2 + "\0")).length - 1 !== r$1._crypto_kdf_contextbytes() && I$1(s2, "invalid ctx length");
  var p2 = w$1(a2);
  a2.length, s2.push(p2), _2 = N(s2, _2, "key");
  var h2, y2 = 0 | r$1._crypto_kdf_keybytes();
  _2.length !== y2 && I$1(s2, "invalid key length"), h2 = w$1(_2), s2.push(h2);
  var i = new T$1(0 | e), u2 = i.address;
  s2.push(u2), r$1._crypto_kdf_derive_from_key(u2, e, c2, o2, p2, h2);
  var d2 = E(i, n2);
  return A(s2), d2;
}
function $r(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_kdf_keybytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_kdf_keygen(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function et(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2), e = N(n2, e, "clientPublicKey");
  var s2, c2 = 0 | r$1._crypto_kx_publickeybytes();
  e.length !== c2 && I$1(n2, "invalid clientPublicKey length"), s2 = w$1(e), n2.push(s2), t2 = N(n2, t2, "clientSecretKey");
  var o2, p2 = 0 | r$1._crypto_kx_secretkeybytes();
  t2.length !== p2 && I$1(n2, "invalid clientSecretKey length"), o2 = w$1(t2), n2.push(o2), a2 = N(n2, a2, "serverPublicKey");
  var h2, y2 = 0 | r$1._crypto_kx_publickeybytes();
  a2.length !== y2 && I$1(n2, "invalid serverPublicKey length"), h2 = w$1(a2), n2.push(h2);
  var i = new T$1(0 | r$1._crypto_kx_sessionkeybytes()), l2 = i.address;
  n2.push(l2);
  var u2 = new T$1(0 | r$1._crypto_kx_sessionkeybytes()), d2 = u2.address;
  if (n2.push(d2), !(0 | r$1._crypto_kx_client_session_keys(l2, d2, s2, o2, h2))) {
    var v2 = E({ sharedRx: i, sharedTx: u2 }, _2);
    return A(n2), v2;
  }
  M$1(n2, "invalid usage");
}
function rt(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_kx_publickeybytes()), _2 = a2.address;
  t2.push(_2);
  var n2 = new T$1(0 | r$1._crypto_kx_secretkeybytes()), s2 = n2.address;
  if (t2.push(s2), !(0 | r$1._crypto_kx_keypair(_2, s2))) {
    var c2 = { publicKey: E(a2, e), privateKey: E(n2, e), keyType: "x25519" };
    return A(t2), c2;
  }
  M$1(t2, "internal error");
}
function tt$1(e, t2) {
  var a2 = [];
  S$1(t2), e = N(a2, e, "seed");
  var _2, n2 = 0 | r$1._crypto_kx_seedbytes();
  e.length !== n2 && I$1(a2, "invalid seed length"), _2 = w$1(e), a2.push(_2);
  var s2 = new T$1(0 | r$1._crypto_kx_publickeybytes()), c2 = s2.address;
  a2.push(c2);
  var o2 = new T$1(0 | r$1._crypto_kx_secretkeybytes()), p2 = o2.address;
  if (a2.push(p2), !(0 | r$1._crypto_kx_seed_keypair(c2, p2, _2))) {
    var h2 = { publicKey: E(s2, t2), privateKey: E(o2, t2), keyType: "x25519" };
    return A(a2), h2;
  }
  M$1(a2, "internal error");
}
function at(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2), e = N(n2, e, "serverPublicKey");
  var s2, c2 = 0 | r$1._crypto_kx_publickeybytes();
  e.length !== c2 && I$1(n2, "invalid serverPublicKey length"), s2 = w$1(e), n2.push(s2), t2 = N(n2, t2, "serverSecretKey");
  var o2, p2 = 0 | r$1._crypto_kx_secretkeybytes();
  t2.length !== p2 && I$1(n2, "invalid serverSecretKey length"), o2 = w$1(t2), n2.push(o2), a2 = N(n2, a2, "clientPublicKey");
  var h2, y2 = 0 | r$1._crypto_kx_publickeybytes();
  a2.length !== y2 && I$1(n2, "invalid clientPublicKey length"), h2 = w$1(a2), n2.push(h2);
  var i = new T$1(0 | r$1._crypto_kx_sessionkeybytes()), l2 = i.address;
  n2.push(l2);
  var u2 = new T$1(0 | r$1._crypto_kx_sessionkeybytes()), d2 = u2.address;
  if (n2.push(d2), !(0 | r$1._crypto_kx_server_session_keys(l2, d2, s2, o2, h2))) {
    var v2 = E({ sharedRx: i, sharedTx: u2 }, _2);
    return A(n2), v2;
  }
  M$1(n2, "invalid usage");
}
function _t(e, t2, a2) {
  var _2 = [];
  S$1(a2);
  var n2 = w$1(e = N(_2, e, "message")), s2 = e.length;
  _2.push(n2), t2 = N(_2, t2, "key");
  var c2, o2 = 0 | r$1._crypto_onetimeauth_keybytes();
  t2.length !== o2 && I$1(_2, "invalid key length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_onetimeauth_bytes()), h2 = p2.address;
  if (_2.push(h2), !(0 | r$1._crypto_onetimeauth(h2, n2, s2, 0, c2))) {
    var y2 = E(p2, a2);
    return A(_2), y2;
  }
  M$1(_2, "invalid usage");
}
function nt(e, t2) {
  var a2 = [];
  S$1(t2), K(a2, e, "state_address");
  var _2 = new T$1(0 | r$1._crypto_onetimeauth_bytes()), n2 = _2.address;
  if (a2.push(n2), !(0 | r$1._crypto_onetimeauth_final(e, n2))) {
    var s2 = (r$1._free(e), E(_2, t2));
    return A(a2), s2;
  }
  M$1(a2, "invalid usage");
}
function st(e, t2) {
  var a2 = [];
  S$1(t2);
  var _2 = null;
  null != e && (_2 = w$1(e = N(a2, e, "key")), e.length, a2.push(_2));
  var n2 = new T$1(144).address;
  if (!(0 | r$1._crypto_onetimeauth_init(n2, _2))) {
    var s2 = n2;
    return A(a2), s2;
  }
  M$1(a2, "invalid usage");
}
function ct(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_onetimeauth_keybytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_onetimeauth_keygen(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function ot(e, t2, a2) {
  var _2 = [];
  S$1(a2), K(_2, e, "state_address");
  var n2 = w$1(t2 = N(_2, t2, "message_chunk")), s2 = t2.length;
  _2.push(n2), 0 | r$1._crypto_onetimeauth_update(e, n2, s2) && M$1(_2, "invalid usage"), A(_2);
}
function pt(e, t2, a2) {
  var _2 = [];
  e = N(_2, e, "hash");
  var n2, s2 = 0 | r$1._crypto_onetimeauth_bytes();
  e.length !== s2 && I$1(_2, "invalid hash length"), n2 = w$1(e), _2.push(n2);
  var c2 = w$1(t2 = N(_2, t2, "message")), o2 = t2.length;
  _2.push(c2), a2 = N(_2, a2, "key");
  var p2, h2 = 0 | r$1._crypto_onetimeauth_keybytes();
  a2.length !== h2 && I$1(_2, "invalid key length"), p2 = w$1(a2), _2.push(p2);
  var y2 = !(0 | r$1._crypto_onetimeauth_verify(n2, c2, o2, 0, p2));
  return A(_2), y2;
}
function ht(e, t2, a2, _2, n2, s2, c2) {
  var o2 = [];
  S$1(c2), K(o2, e, "keyLength"), ("number" != typeof e || (0 | e) !== e || e < 0) && I$1(o2, "keyLength must be an unsigned integer");
  var p2 = w$1(t2 = N(o2, t2, "password")), h2 = t2.length;
  o2.push(p2), a2 = N(o2, a2, "salt");
  var y2, i = 0 | r$1._crypto_pwhash_saltbytes();
  a2.length !== i && I$1(o2, "invalid salt length"), y2 = w$1(a2), o2.push(y2), K(o2, _2, "opsLimit"), ("number" != typeof _2 || (0 | _2) !== _2 || _2 < 0) && I$1(o2, "opsLimit must be an unsigned integer"), K(o2, n2, "memLimit"), ("number" != typeof n2 || (0 | n2) !== n2 || n2 < 0) && I$1(o2, "memLimit must be an unsigned integer"), K(o2, s2, "algorithm"), ("number" != typeof s2 || (0 | s2) !== s2 || s2 < 0) && I$1(o2, "algorithm must be an unsigned integer");
  var l2 = new T$1(0 | e), u2 = l2.address;
  if (o2.push(u2), !(0 | r$1._crypto_pwhash(u2, e, 0, p2, h2, 0, y2, _2, 0, n2, s2))) {
    var d2 = E(l2, c2);
    return A(o2), d2;
  }
  M$1(o2, "invalid usage");
}
function yt(e, t2, a2, _2, n2, s2) {
  var c2 = [];
  S$1(s2), K(c2, e, "keyLength"), ("number" != typeof e || (0 | e) !== e || e < 0) && I$1(c2, "keyLength must be an unsigned integer");
  var o2 = w$1(t2 = N(c2, t2, "password")), p2 = t2.length;
  c2.push(o2), a2 = N(c2, a2, "salt");
  var h2, y2 = 0 | r$1._crypto_pwhash_scryptsalsa208sha256_saltbytes();
  a2.length !== y2 && I$1(c2, "invalid salt length"), h2 = w$1(a2), c2.push(h2), K(c2, _2, "opsLimit"), ("number" != typeof _2 || (0 | _2) !== _2 || _2 < 0) && I$1(c2, "opsLimit must be an unsigned integer"), K(c2, n2, "memLimit"), ("number" != typeof n2 || (0 | n2) !== n2 || n2 < 0) && I$1(c2, "memLimit must be an unsigned integer");
  var i = new T$1(0 | e), l2 = i.address;
  if (c2.push(l2), !(0 | r$1._crypto_pwhash_scryptsalsa208sha256(l2, e, 0, o2, p2, 0, h2, _2, 0, n2))) {
    var u2 = E(i, s2);
    return A(c2), u2;
  }
  M$1(c2, "invalid usage");
}
function it(e, t2, a2, _2, n2, s2, c2) {
  var o2 = [];
  S$1(c2);
  var p2 = w$1(e = N(o2, e, "password")), h2 = e.length;
  o2.push(p2);
  var y2 = w$1(t2 = N(o2, t2, "salt")), i = t2.length;
  o2.push(y2), K(o2, a2, "opsLimit"), ("number" != typeof a2 || (0 | a2) !== a2 || a2 < 0) && I$1(o2, "opsLimit must be an unsigned integer"), K(o2, _2, "r"), ("number" != typeof _2 || (0 | _2) !== _2 || _2 < 0) && I$1(o2, "r must be an unsigned integer"), K(o2, n2, "p"), ("number" != typeof n2 || (0 | n2) !== n2 || n2 < 0) && I$1(o2, "p must be an unsigned integer"), K(o2, s2, "keyLength"), ("number" != typeof s2 || (0 | s2) !== s2 || s2 < 0) && I$1(o2, "keyLength must be an unsigned integer");
  var l2 = new T$1(0 | s2), u2 = l2.address;
  if (o2.push(u2), !(0 | r$1._crypto_pwhash_scryptsalsa208sha256_ll(p2, h2, y2, i, a2, 0, _2, n2, u2, s2))) {
    var d2 = E(l2, c2);
    return A(o2), d2;
  }
  M$1(o2, "invalid usage");
}
function lt(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2);
  var s2 = w$1(e = N(n2, e, "password")), c2 = e.length;
  n2.push(s2), K(n2, t2, "opsLimit"), ("number" != typeof t2 || (0 | t2) !== t2 || t2 < 0) && I$1(n2, "opsLimit must be an unsigned integer"), K(n2, a2, "memLimit"), ("number" != typeof a2 || (0 | a2) !== a2 || a2 < 0) && I$1(n2, "memLimit must be an unsigned integer");
  var o2 = new T$1(0 | r$1._crypto_pwhash_scryptsalsa208sha256_strbytes()).address;
  if (n2.push(o2), !(0 | r$1._crypto_pwhash_scryptsalsa208sha256_str(o2, s2, c2, 0, t2, 0, a2))) {
    var p2 = r$1.UTF8ToString(o2);
    return A(n2), p2;
  }
  M$1(n2, "invalid usage");
}
function ut(e, t2, a2) {
  var _2 = [];
  S$1(a2), "string" != typeof e && I$1(_2, "hashed_password must be a string");
  var n2 = w$1(e = l(e + "\0"));
  e.length, _2.push(n2);
  var s2 = w$1(t2 = N(_2, t2, "password")), c2 = t2.length;
  _2.push(s2);
  var o2 = !(0 | r$1._crypto_pwhash_scryptsalsa208sha256_str_verify(n2, s2, c2, 0));
  return A(_2), o2;
}
function dt(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2);
  var s2 = w$1(e = N(n2, e, "password")), c2 = e.length;
  n2.push(s2), K(n2, t2, "opsLimit"), ("number" != typeof t2 || (0 | t2) !== t2 || t2 < 0) && I$1(n2, "opsLimit must be an unsigned integer"), K(n2, a2, "memLimit"), ("number" != typeof a2 || (0 | a2) !== a2 || a2 < 0) && I$1(n2, "memLimit must be an unsigned integer");
  var o2 = new T$1(0 | r$1._crypto_pwhash_strbytes()).address;
  if (n2.push(o2), !(0 | r$1._crypto_pwhash_str(o2, s2, c2, 0, t2, 0, a2))) {
    var p2 = r$1.UTF8ToString(o2);
    return A(n2), p2;
  }
  M$1(n2, "invalid usage");
}
function vt(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2), "string" != typeof e && I$1(n2, "hashed_password must be a string");
  var s2 = w$1(e = l(e + "\0"));
  e.length, n2.push(s2), K(n2, t2, "opsLimit"), ("number" != typeof t2 || (0 | t2) !== t2 || t2 < 0) && I$1(n2, "opsLimit must be an unsigned integer"), K(n2, a2, "memLimit"), ("number" != typeof a2 || (0 | a2) !== a2 || a2 < 0) && I$1(n2, "memLimit must be an unsigned integer");
  var c2 = !!(0 | r$1._crypto_pwhash_str_needs_rehash(s2, t2, 0, a2));
  return A(n2), c2;
}
function gt(e, t2, a2) {
  var _2 = [];
  S$1(a2), "string" != typeof e && I$1(_2, "hashed_password must be a string");
  var n2 = w$1(e = l(e + "\0"));
  e.length, _2.push(n2);
  var s2 = w$1(t2 = N(_2, t2, "password")), c2 = t2.length;
  _2.push(s2);
  var o2 = !(0 | r$1._crypto_pwhash_str_verify(n2, s2, c2, 0));
  return A(_2), o2;
}
function bt(e, t2, a2) {
  var _2 = [];
  S$1(a2), e = N(_2, e, "privateKey");
  var n2, s2 = 0 | r$1._crypto_scalarmult_scalarbytes();
  e.length !== s2 && I$1(_2, "invalid privateKey length"), n2 = w$1(e), _2.push(n2), t2 = N(_2, t2, "publicKey");
  var c2, o2 = 0 | r$1._crypto_scalarmult_bytes();
  t2.length !== o2 && I$1(_2, "invalid publicKey length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_scalarmult_bytes()), h2 = p2.address;
  if (_2.push(h2), !(0 | r$1._crypto_scalarmult(h2, n2, c2))) {
    var y2 = E(p2, a2);
    return A(_2), y2;
  }
  M$1(_2, "weak public key");
}
function ft(e, t2) {
  var a2 = [];
  S$1(t2), e = N(a2, e, "privateKey");
  var _2, n2 = 0 | r$1._crypto_scalarmult_scalarbytes();
  e.length !== n2 && I$1(a2, "invalid privateKey length"), _2 = w$1(e), a2.push(_2);
  var s2 = new T$1(0 | r$1._crypto_scalarmult_bytes()), c2 = s2.address;
  if (a2.push(c2), !(0 | r$1._crypto_scalarmult_base(c2, _2))) {
    var o2 = E(s2, t2);
    return A(a2), o2;
  }
  M$1(a2, "unknown error");
}
function mt(e, t2, a2) {
  var _2 = [];
  S$1(a2), e = N(_2, e, "n");
  var n2, s2 = 0 | r$1._crypto_scalarmult_ed25519_scalarbytes();
  e.length !== s2 && I$1(_2, "invalid n length"), n2 = w$1(e), _2.push(n2), t2 = N(_2, t2, "p");
  var c2, o2 = 0 | r$1._crypto_scalarmult_ed25519_bytes();
  t2.length !== o2 && I$1(_2, "invalid p length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_scalarmult_ed25519_bytes()), h2 = p2.address;
  if (_2.push(h2), !(0 | r$1._crypto_scalarmult_ed25519(h2, n2, c2))) {
    var y2 = E(p2, a2);
    return A(_2), y2;
  }
  M$1(_2, "invalid point or scalar is 0");
}
function xt(e, t2) {
  var a2 = [];
  S$1(t2), e = N(a2, e, "scalar");
  var _2, n2 = 0 | r$1._crypto_scalarmult_ed25519_scalarbytes();
  e.length !== n2 && I$1(a2, "invalid scalar length"), _2 = w$1(e), a2.push(_2);
  var s2 = new T$1(0 | r$1._crypto_scalarmult_ed25519_bytes()), c2 = s2.address;
  if (a2.push(c2), !(0 | r$1._crypto_scalarmult_ed25519_base(c2, _2))) {
    var o2 = E(s2, t2);
    return A(a2), o2;
  }
  M$1(a2, "scalar is 0");
}
function Et(e, t2) {
  var a2 = [];
  S$1(t2), e = N(a2, e, "scalar");
  var _2, n2 = 0 | r$1._crypto_scalarmult_ed25519_scalarbytes();
  e.length !== n2 && I$1(a2, "invalid scalar length"), _2 = w$1(e), a2.push(_2);
  var s2 = new T$1(0 | r$1._crypto_scalarmult_ed25519_bytes()), c2 = s2.address;
  if (a2.push(c2), !(0 | r$1._crypto_scalarmult_ed25519_base_noclamp(c2, _2))) {
    var o2 = E(s2, t2);
    return A(a2), o2;
  }
  M$1(a2, "scalar is 0");
}
function kt(e, t2, a2) {
  var _2 = [];
  S$1(a2), e = N(_2, e, "n");
  var n2, s2 = 0 | r$1._crypto_scalarmult_ed25519_scalarbytes();
  e.length !== s2 && I$1(_2, "invalid n length"), n2 = w$1(e), _2.push(n2), t2 = N(_2, t2, "p");
  var c2, o2 = 0 | r$1._crypto_scalarmult_ed25519_bytes();
  t2.length !== o2 && I$1(_2, "invalid p length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_scalarmult_ed25519_bytes()), h2 = p2.address;
  if (_2.push(h2), !(0 | r$1._crypto_scalarmult_ed25519_noclamp(h2, n2, c2))) {
    var y2 = E(p2, a2);
    return A(_2), y2;
  }
  M$1(_2, "invalid point or scalar is 0");
}
function St(e, t2, a2) {
  var _2 = [];
  S$1(a2), e = N(_2, e, "scalar");
  var n2, s2 = 0 | r$1._crypto_scalarmult_ristretto255_scalarbytes();
  e.length !== s2 && I$1(_2, "invalid scalar length"), n2 = w$1(e), _2.push(n2), t2 = N(_2, t2, "element");
  var c2, o2 = 0 | r$1._crypto_scalarmult_ristretto255_bytes();
  t2.length !== o2 && I$1(_2, "invalid element length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_scalarmult_ristretto255_bytes()), h2 = p2.address;
  if (_2.push(h2), !(0 | r$1._crypto_scalarmult_ristretto255(h2, n2, c2))) {
    var y2 = E(p2, a2);
    return A(_2), y2;
  }
  M$1(_2, "result is identity element");
}
function Tt(e, t2) {
  var a2 = [];
  S$1(t2), e = N(a2, e, "scalar");
  var _2, n2 = 0 | r$1._crypto_core_ristretto255_scalarbytes();
  e.length !== n2 && I$1(a2, "invalid scalar length"), _2 = w$1(e), a2.push(_2);
  var s2 = new T$1(0 | r$1._crypto_core_ristretto255_bytes()), c2 = s2.address;
  if (a2.push(c2), !(0 | r$1._crypto_scalarmult_ristretto255_base(c2, _2))) {
    var o2 = E(s2, t2);
    return A(a2), o2;
  }
  M$1(a2, "scalar is 0");
}
function wt(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2);
  var s2 = w$1(e = N(n2, e, "message")), c2 = e.length;
  n2.push(s2), t2 = N(n2, t2, "nonce");
  var o2, p2 = 0 | r$1._crypto_secretbox_noncebytes();
  t2.length !== p2 && I$1(n2, "invalid nonce length"), o2 = w$1(t2), n2.push(o2), a2 = N(n2, a2, "key");
  var h2, y2 = 0 | r$1._crypto_secretbox_keybytes();
  a2.length !== y2 && I$1(n2, "invalid key length"), h2 = w$1(a2), n2.push(h2);
  var i = new T$1(0 | c2), l2 = i.address;
  n2.push(l2);
  var u2 = new T$1(0 | r$1._crypto_secretbox_macbytes()), d2 = u2.address;
  if (n2.push(d2), !(0 | r$1._crypto_secretbox_detached(l2, d2, s2, c2, 0, o2, h2))) {
    var v2 = E({ mac: u2, cipher: i }, _2);
    return A(n2), v2;
  }
  M$1(n2, "invalid usage");
}
function Yt(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2);
  var s2 = w$1(e = N(n2, e, "message")), c2 = e.length;
  n2.push(s2), t2 = N(n2, t2, "nonce");
  var o2, p2 = 0 | r$1._crypto_secretbox_noncebytes();
  t2.length !== p2 && I$1(n2, "invalid nonce length"), o2 = w$1(t2), n2.push(o2), a2 = N(n2, a2, "key");
  var h2, y2 = 0 | r$1._crypto_secretbox_keybytes();
  a2.length !== y2 && I$1(n2, "invalid key length"), h2 = w$1(a2), n2.push(h2);
  var i = new T$1(c2 + r$1._crypto_secretbox_macbytes() | 0), l2 = i.address;
  if (n2.push(l2), !(0 | r$1._crypto_secretbox_easy(l2, s2, c2, 0, o2, h2))) {
    var u2 = E(i, _2);
    return A(n2), u2;
  }
  M$1(n2, "invalid usage");
}
function Bt(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_secretbox_keybytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_secretbox_keygen(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function At(e, t2, a2, _2, n2) {
  var s2 = [];
  S$1(n2);
  var c2 = w$1(e = N(s2, e, "ciphertext")), o2 = e.length;
  s2.push(c2), t2 = N(s2, t2, "mac");
  var p2, h2 = 0 | r$1._crypto_secretbox_macbytes();
  t2.length !== h2 && I$1(s2, "invalid mac length"), p2 = w$1(t2), s2.push(p2), a2 = N(s2, a2, "nonce");
  var y2, i = 0 | r$1._crypto_secretbox_noncebytes();
  a2.length !== i && I$1(s2, "invalid nonce length"), y2 = w$1(a2), s2.push(y2), _2 = N(s2, _2, "key");
  var l2, u2 = 0 | r$1._crypto_secretbox_keybytes();
  _2.length !== u2 && I$1(s2, "invalid key length"), l2 = w$1(_2), s2.push(l2);
  var d2 = new T$1(0 | o2), v2 = d2.address;
  if (s2.push(v2), !(0 | r$1._crypto_secretbox_open_detached(v2, c2, p2, o2, 0, y2, l2))) {
    var g2 = E(d2, n2);
    return A(s2), g2;
  }
  M$1(s2, "wrong secret key for the given ciphertext");
}
function Mt(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2), e = N(n2, e, "ciphertext");
  var s2, c2 = r$1._crypto_secretbox_macbytes(), o2 = e.length;
  o2 < c2 && I$1(n2, "ciphertext is too short"), s2 = w$1(e), n2.push(s2), t2 = N(n2, t2, "nonce");
  var p2, h2 = 0 | r$1._crypto_secretbox_noncebytes();
  t2.length !== h2 && I$1(n2, "invalid nonce length"), p2 = w$1(t2), n2.push(p2), a2 = N(n2, a2, "key");
  var y2, i = 0 | r$1._crypto_secretbox_keybytes();
  a2.length !== i && I$1(n2, "invalid key length"), y2 = w$1(a2), n2.push(y2);
  var l2 = new T$1(o2 - r$1._crypto_secretbox_macbytes() | 0), u2 = l2.address;
  if (n2.push(u2), !(0 | r$1._crypto_secretbox_open_easy(u2, s2, o2, 0, p2, y2))) {
    var d2 = E(l2, _2);
    return A(n2), d2;
  }
  M$1(n2, "wrong secret key for the given ciphertext");
}
function It(e, t2, a2) {
  var _2 = [];
  S$1(a2), e = N(_2, e, "header");
  var n2, s2 = 0 | r$1._crypto_secretstream_xchacha20poly1305_headerbytes();
  e.length !== s2 && I$1(_2, "invalid header length"), n2 = w$1(e), _2.push(n2), t2 = N(_2, t2, "key");
  var c2, o2 = 0 | r$1._crypto_secretstream_xchacha20poly1305_keybytes();
  t2.length !== o2 && I$1(_2, "invalid key length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(52).address;
  if (!(0 | r$1._crypto_secretstream_xchacha20poly1305_init_pull(p2, n2, c2))) {
    var h2 = p2;
    return A(_2), h2;
  }
  M$1(_2, "invalid usage");
}
function Kt(e, t2) {
  var a2 = [];
  S$1(t2), e = N(a2, e, "key");
  var _2, n2 = 0 | r$1._crypto_secretstream_xchacha20poly1305_keybytes();
  e.length !== n2 && I$1(a2, "invalid key length"), _2 = w$1(e), a2.push(_2);
  var s2 = new T$1(52).address, c2 = new T$1(0 | r$1._crypto_secretstream_xchacha20poly1305_headerbytes()), o2 = c2.address;
  if (a2.push(o2), !(0 | r$1._crypto_secretstream_xchacha20poly1305_init_push(s2, o2, _2))) {
    var p2 = { state: s2, header: E(c2, t2) };
    return A(a2), p2;
  }
  M$1(a2, "invalid usage");
}
function Nt(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_secretstream_xchacha20poly1305_keybytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_secretstream_xchacha20poly1305_keygen(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function Lt(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2), K(n2, e, "state_address"), t2 = N(n2, t2, "cipher");
  var s2, c2 = r$1._crypto_secretstream_xchacha20poly1305_abytes(), o2 = t2.length;
  o2 < c2 && I$1(n2, "cipher is too short"), s2 = w$1(t2), n2.push(s2);
  var p2 = null, h2 = 0;
  null != a2 && (p2 = w$1(a2 = N(n2, a2, "ad")), h2 = a2.length, n2.push(p2));
  var y2 = new T$1(o2 - r$1._crypto_secretstream_xchacha20poly1305_abytes() | 0), i = y2.address;
  n2.push(i);
  var l2, u2 = (l2 = Y$1(1), n2.push(l2), (u2 = 0 === r$1._crypto_secretstream_xchacha20poly1305_pull(e, i, 0, l2, s2, o2, 0, p2, h2) && { tag: r$1.HEAPU8[l2], message: y2 }) && { message: E(u2.message, _2), tag: u2.tag });
  return A(n2), u2;
}
function Ot(e, t2, a2, _2, n2) {
  var s2 = [];
  S$1(n2), K(s2, e, "state_address");
  var c2 = w$1(t2 = N(s2, t2, "message_chunk")), o2 = t2.length;
  s2.push(c2);
  var p2 = null, h2 = 0;
  null != a2 && (p2 = w$1(a2 = N(s2, a2, "ad")), h2 = a2.length, s2.push(p2)), K(s2, _2, "tag"), ("number" != typeof _2 || (0 | _2) !== _2 || _2 < 0) && I$1(s2, "tag must be an unsigned integer");
  var y2 = new T$1(o2 + r$1._crypto_secretstream_xchacha20poly1305_abytes() | 0), i = y2.address;
  if (s2.push(i), !(0 | r$1._crypto_secretstream_xchacha20poly1305_push(e, i, 0, c2, o2, 0, p2, h2, 0, _2))) {
    var l2 = E(y2, n2);
    return A(s2), l2;
  }
  M$1(s2, "invalid usage");
}
function Ut(e, t2) {
  var a2 = [];
  return S$1(t2), K(a2, e, "state_address"), r$1._crypto_secretstream_xchacha20poly1305_rekey(e), A(a2), true;
}
function Pt(e, t2, a2) {
  var _2 = [];
  S$1(a2);
  var n2 = w$1(e = N(_2, e, "message")), s2 = e.length;
  _2.push(n2), t2 = N(_2, t2, "key");
  var c2, o2 = 0 | r$1._crypto_shorthash_keybytes();
  t2.length !== o2 && I$1(_2, "invalid key length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_shorthash_bytes()), h2 = p2.address;
  if (_2.push(h2), !(0 | r$1._crypto_shorthash(h2, n2, s2, 0, c2))) {
    var y2 = E(p2, a2);
    return A(_2), y2;
  }
  M$1(_2, "invalid usage");
}
function Ct(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_shorthash_keybytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_shorthash_keygen(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function Rt(e, t2, a2) {
  var _2 = [];
  S$1(a2);
  var n2 = w$1(e = N(_2, e, "message")), s2 = e.length;
  _2.push(n2), t2 = N(_2, t2, "key");
  var c2, o2 = 0 | r$1._crypto_shorthash_siphashx24_keybytes();
  t2.length !== o2 && I$1(_2, "invalid key length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_shorthash_siphashx24_bytes()), h2 = p2.address;
  if (_2.push(h2), !(0 | r$1._crypto_shorthash_siphashx24(h2, n2, s2, 0, c2))) {
    var y2 = E(p2, a2);
    return A(_2), y2;
  }
  M$1(_2, "invalid usage");
}
function Xt(e, t2, a2) {
  var _2 = [];
  S$1(a2);
  var n2 = w$1(e = N(_2, e, "message")), s2 = e.length;
  _2.push(n2), t2 = N(_2, t2, "privateKey");
  var c2, o2 = 0 | r$1._crypto_sign_secretkeybytes();
  t2.length !== o2 && I$1(_2, "invalid privateKey length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(e.length + r$1._crypto_sign_bytes() | 0), h2 = p2.address;
  if (_2.push(h2), !(0 | r$1._crypto_sign(h2, null, n2, s2, 0, c2))) {
    var y2 = E(p2, a2);
    return A(_2), y2;
  }
  M$1(_2, "invalid usage");
}
function Dt(e, t2, a2) {
  var _2 = [];
  S$1(a2);
  var n2 = w$1(e = N(_2, e, "message")), s2 = e.length;
  _2.push(n2), t2 = N(_2, t2, "privateKey");
  var c2, o2 = 0 | r$1._crypto_sign_secretkeybytes();
  t2.length !== o2 && I$1(_2, "invalid privateKey length"), c2 = w$1(t2), _2.push(c2);
  var p2 = new T$1(0 | r$1._crypto_sign_bytes()), h2 = p2.address;
  if (_2.push(h2), !(0 | r$1._crypto_sign_detached(h2, null, n2, s2, 0, c2))) {
    var y2 = E(p2, a2);
    return A(_2), y2;
  }
  M$1(_2, "invalid usage");
}
function Gt(e, t2) {
  var a2 = [];
  S$1(t2), e = N(a2, e, "edPk");
  var _2, n2 = 0 | r$1._crypto_sign_publickeybytes();
  e.length !== n2 && I$1(a2, "invalid edPk length"), _2 = w$1(e), a2.push(_2);
  var s2 = new T$1(0 | r$1._crypto_scalarmult_scalarbytes()), c2 = s2.address;
  if (a2.push(c2), !(0 | r$1._crypto_sign_ed25519_pk_to_curve25519(c2, _2))) {
    var o2 = E(s2, t2);
    return A(a2), o2;
  }
  M$1(a2, "invalid key");
}
function Ft(e, t2) {
  var a2 = [];
  S$1(t2), e = N(a2, e, "edSk");
  var _2, n2 = 0 | r$1._crypto_sign_secretkeybytes();
  e.length !== n2 && I$1(a2, "invalid edSk length"), _2 = w$1(e), a2.push(_2);
  var s2 = new T$1(0 | r$1._crypto_scalarmult_scalarbytes()), c2 = s2.address;
  if (a2.push(c2), !(0 | r$1._crypto_sign_ed25519_sk_to_curve25519(c2, _2))) {
    var o2 = E(s2, t2);
    return A(a2), o2;
  }
  M$1(a2, "invalid key");
}
function Vt(e, t2) {
  var a2 = [];
  S$1(t2), e = N(a2, e, "privateKey");
  var _2, n2 = 0 | r$1._crypto_sign_secretkeybytes();
  e.length !== n2 && I$1(a2, "invalid privateKey length"), _2 = w$1(e), a2.push(_2);
  var s2 = new T$1(0 | r$1._crypto_sign_publickeybytes()), c2 = s2.address;
  if (a2.push(c2), !(0 | r$1._crypto_sign_ed25519_sk_to_pk(c2, _2))) {
    var o2 = E(s2, t2);
    return A(a2), o2;
  }
  M$1(a2, "invalid key");
}
function qt(e, t2) {
  var a2 = [];
  S$1(t2), e = N(a2, e, "privateKey");
  var _2, n2 = 0 | r$1._crypto_sign_secretkeybytes();
  e.length !== n2 && I$1(a2, "invalid privateKey length"), _2 = w$1(e), a2.push(_2);
  var s2 = new T$1(0 | r$1._crypto_sign_seedbytes()), c2 = s2.address;
  if (a2.push(c2), !(0 | r$1._crypto_sign_ed25519_sk_to_seed(c2, _2))) {
    var o2 = E(s2, t2);
    return A(a2), o2;
  }
  M$1(a2, "invalid key");
}
function zt(e, t2, a2) {
  var _2 = [];
  S$1(a2), K(_2, e, "state_address"), t2 = N(_2, t2, "privateKey");
  var n2, s2 = 0 | r$1._crypto_sign_secretkeybytes();
  t2.length !== s2 && I$1(_2, "invalid privateKey length"), n2 = w$1(t2), _2.push(n2);
  var c2 = new T$1(0 | r$1._crypto_sign_bytes()), o2 = c2.address;
  if (_2.push(o2), !(0 | r$1._crypto_sign_final_create(e, o2, null, n2))) {
    var p2 = (r$1._free(e), E(c2, a2));
    return A(_2), p2;
  }
  M$1(_2, "invalid usage");
}
function Wt(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2), K(n2, e, "state_address"), t2 = N(n2, t2, "signature");
  var s2, c2 = 0 | r$1._crypto_sign_bytes();
  t2.length !== c2 && I$1(n2, "invalid signature length"), s2 = w$1(t2), n2.push(s2), a2 = N(n2, a2, "publicKey");
  var o2, p2 = 0 | r$1._crypto_sign_publickeybytes();
  a2.length !== p2 && I$1(n2, "invalid publicKey length"), o2 = w$1(a2), n2.push(o2);
  var h2 = !(0 | r$1._crypto_sign_final_verify(e, s2, o2));
  return A(n2), h2;
}
function Ht(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(208).address;
  if (!(0 | r$1._crypto_sign_init(a2))) {
    var _2 = a2;
    return A(t2), _2;
  }
  M$1(t2, "internal error");
}
function jt(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_sign_publickeybytes()), _2 = a2.address;
  t2.push(_2);
  var n2 = new T$1(0 | r$1._crypto_sign_secretkeybytes()), s2 = n2.address;
  if (t2.push(s2), !(0 | r$1._crypto_sign_keypair(_2, s2))) {
    var c2 = { publicKey: E(a2, e), privateKey: E(n2, e), keyType: "ed25519" };
    return A(t2), c2;
  }
  M$1(t2, "internal error");
}
function Jt(e, t2, a2) {
  var _2 = [];
  S$1(a2), e = N(_2, e, "signedMessage");
  var n2, s2 = r$1._crypto_sign_bytes(), c2 = e.length;
  c2 < s2 && I$1(_2, "signedMessage is too short"), n2 = w$1(e), _2.push(n2), t2 = N(_2, t2, "publicKey");
  var o2, p2 = 0 | r$1._crypto_sign_publickeybytes();
  t2.length !== p2 && I$1(_2, "invalid publicKey length"), o2 = w$1(t2), _2.push(o2);
  var h2 = new T$1(c2 - r$1._crypto_sign_bytes() | 0), y2 = h2.address;
  if (_2.push(y2), !(0 | r$1._crypto_sign_open(y2, null, n2, c2, 0, o2))) {
    var i = E(h2, a2);
    return A(_2), i;
  }
  M$1(_2, "incorrect signature for the given public key");
}
function Qt(e, t2) {
  var a2 = [];
  S$1(t2), e = N(a2, e, "seed");
  var _2, n2 = 0 | r$1._crypto_sign_seedbytes();
  e.length !== n2 && I$1(a2, "invalid seed length"), _2 = w$1(e), a2.push(_2);
  var s2 = new T$1(0 | r$1._crypto_sign_publickeybytes()), c2 = s2.address;
  a2.push(c2);
  var o2 = new T$1(0 | r$1._crypto_sign_secretkeybytes()), p2 = o2.address;
  if (a2.push(p2), !(0 | r$1._crypto_sign_seed_keypair(c2, p2, _2))) {
    var h2 = { publicKey: E(s2, t2), privateKey: E(o2, t2), keyType: "ed25519" };
    return A(a2), h2;
  }
  M$1(a2, "invalid usage");
}
function Zt(e, t2, a2) {
  var _2 = [];
  S$1(a2), K(_2, e, "state_address");
  var n2 = w$1(t2 = N(_2, t2, "message_chunk")), s2 = t2.length;
  _2.push(n2), 0 | r$1._crypto_sign_update(e, n2, s2, 0) && M$1(_2, "invalid usage"), A(_2);
}
function $t(e, t2, a2) {
  var _2 = [];
  e = N(_2, e, "signature");
  var n2, s2 = 0 | r$1._crypto_sign_bytes();
  e.length !== s2 && I$1(_2, "invalid signature length"), n2 = w$1(e), _2.push(n2);
  var c2 = w$1(t2 = N(_2, t2, "message")), o2 = t2.length;
  _2.push(c2), a2 = N(_2, a2, "publicKey");
  var p2, h2 = 0 | r$1._crypto_sign_publickeybytes();
  a2.length !== h2 && I$1(_2, "invalid publicKey length"), p2 = w$1(a2), _2.push(p2);
  var y2 = !(0 | r$1._crypto_sign_verify_detached(n2, c2, o2, 0, p2));
  return A(_2), y2;
}
function ea$1(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2), K(n2, e, "outLength"), ("number" != typeof e || (0 | e) !== e || e < 0) && I$1(n2, "outLength must be an unsigned integer"), t2 = N(n2, t2, "key");
  var s2, c2 = 0 | r$1._crypto_stream_chacha20_keybytes();
  t2.length !== c2 && I$1(n2, "invalid key length"), s2 = w$1(t2), n2.push(s2), a2 = N(n2, a2, "nonce");
  var o2, p2 = 0 | r$1._crypto_stream_chacha20_noncebytes();
  a2.length !== p2 && I$1(n2, "invalid nonce length"), o2 = w$1(a2), n2.push(o2);
  var h2 = new T$1(0 | e), y2 = h2.address;
  n2.push(y2), r$1._crypto_stream_chacha20(y2, e, 0, o2, s2);
  var i = E(h2, _2);
  return A(n2), i;
}
function ra$1(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2);
  var s2 = w$1(e = N(n2, e, "input_message")), c2 = e.length;
  n2.push(s2), t2 = N(n2, t2, "nonce");
  var o2, p2 = 0 | r$1._crypto_stream_chacha20_ietf_noncebytes();
  t2.length !== p2 && I$1(n2, "invalid nonce length"), o2 = w$1(t2), n2.push(o2), a2 = N(n2, a2, "key");
  var h2, y2 = 0 | r$1._crypto_stream_chacha20_ietf_keybytes();
  a2.length !== y2 && I$1(n2, "invalid key length"), h2 = w$1(a2), n2.push(h2);
  var i = new T$1(0 | c2), l2 = i.address;
  if (n2.push(l2), 0 === r$1._crypto_stream_chacha20_ietf_xor(l2, s2, c2, 0, o2, h2)) {
    var u2 = E(i, _2);
    return A(n2), u2;
  }
  M$1(n2, "invalid usage");
}
function ta$2(e, t2, a2, _2, n2) {
  var s2 = [];
  S$1(n2);
  var c2 = w$1(e = N(s2, e, "input_message")), o2 = e.length;
  s2.push(c2), t2 = N(s2, t2, "nonce");
  var p2, h2 = 0 | r$1._crypto_stream_chacha20_ietf_noncebytes();
  t2.length !== h2 && I$1(s2, "invalid nonce length"), p2 = w$1(t2), s2.push(p2), K(s2, a2, "nonce_increment"), ("number" != typeof a2 || (0 | a2) !== a2 || a2 < 0) && I$1(s2, "nonce_increment must be an unsigned integer"), _2 = N(s2, _2, "key");
  var y2, i = 0 | r$1._crypto_stream_chacha20_ietf_keybytes();
  _2.length !== i && I$1(s2, "invalid key length"), y2 = w$1(_2), s2.push(y2);
  var l2 = new T$1(0 | o2), u2 = l2.address;
  if (s2.push(u2), 0 === r$1._crypto_stream_chacha20_ietf_xor_ic(u2, c2, o2, 0, p2, a2, y2)) {
    var d2 = E(l2, n2);
    return A(s2), d2;
  }
  M$1(s2, "invalid usage");
}
function aa$1(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_stream_chacha20_keybytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_stream_chacha20_keygen(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function _a(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2);
  var s2 = w$1(e = N(n2, e, "input_message")), c2 = e.length;
  n2.push(s2), t2 = N(n2, t2, "nonce");
  var o2, p2 = 0 | r$1._crypto_stream_chacha20_noncebytes();
  t2.length !== p2 && I$1(n2, "invalid nonce length"), o2 = w$1(t2), n2.push(o2), a2 = N(n2, a2, "key");
  var h2, y2 = 0 | r$1._crypto_stream_chacha20_keybytes();
  a2.length !== y2 && I$1(n2, "invalid key length"), h2 = w$1(a2), n2.push(h2);
  var i = new T$1(0 | c2), l2 = i.address;
  if (n2.push(l2), 0 === r$1._crypto_stream_chacha20_xor(l2, s2, c2, 0, o2, h2)) {
    var u2 = E(i, _2);
    return A(n2), u2;
  }
  M$1(n2, "invalid usage");
}
function na$1(e, t2, a2, _2, n2) {
  var s2 = [];
  S$1(n2);
  var c2 = w$1(e = N(s2, e, "input_message")), o2 = e.length;
  s2.push(c2), t2 = N(s2, t2, "nonce");
  var p2, h2 = 0 | r$1._crypto_stream_chacha20_noncebytes();
  t2.length !== h2 && I$1(s2, "invalid nonce length"), p2 = w$1(t2), s2.push(p2), K(s2, a2, "nonce_increment"), ("number" != typeof a2 || (0 | a2) !== a2 || a2 < 0) && I$1(s2, "nonce_increment must be an unsigned integer"), _2 = N(s2, _2, "key");
  var y2, i = 0 | r$1._crypto_stream_chacha20_keybytes();
  _2.length !== i && I$1(s2, "invalid key length"), y2 = w$1(_2), s2.push(y2);
  var l2 = new T$1(0 | o2), u2 = l2.address;
  if (s2.push(u2), 0 === r$1._crypto_stream_chacha20_xor_ic(u2, c2, o2, 0, p2, a2, 0, y2)) {
    var d2 = E(l2, n2);
    return A(s2), d2;
  }
  M$1(s2, "invalid usage");
}
function sa$1(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_stream_keybytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_stream_keygen(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function ca$1(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(0 | r$1._crypto_stream_xchacha20_keybytes()), _2 = a2.address;
  t2.push(_2), r$1._crypto_stream_xchacha20_keygen(_2);
  var n2 = E(a2, e);
  return A(t2), n2;
}
function oa$1(e, t2, a2, _2) {
  var n2 = [];
  S$1(_2);
  var s2 = w$1(e = N(n2, e, "input_message")), c2 = e.length;
  n2.push(s2), t2 = N(n2, t2, "nonce");
  var o2, p2 = 0 | r$1._crypto_stream_xchacha20_noncebytes();
  t2.length !== p2 && I$1(n2, "invalid nonce length"), o2 = w$1(t2), n2.push(o2), a2 = N(n2, a2, "key");
  var h2, y2 = 0 | r$1._crypto_stream_xchacha20_keybytes();
  a2.length !== y2 && I$1(n2, "invalid key length"), h2 = w$1(a2), n2.push(h2);
  var i = new T$1(0 | c2), l2 = i.address;
  if (n2.push(l2), 0 === r$1._crypto_stream_xchacha20_xor(l2, s2, c2, 0, o2, h2)) {
    var u2 = E(i, _2);
    return A(n2), u2;
  }
  M$1(n2, "invalid usage");
}
function pa(e, t2, a2, _2, n2) {
  var s2 = [];
  S$1(n2);
  var c2 = w$1(e = N(s2, e, "input_message")), o2 = e.length;
  s2.push(c2), t2 = N(s2, t2, "nonce");
  var p2, h2 = 0 | r$1._crypto_stream_xchacha20_noncebytes();
  t2.length !== h2 && I$1(s2, "invalid nonce length"), p2 = w$1(t2), s2.push(p2), K(s2, a2, "nonce_increment"), ("number" != typeof a2 || (0 | a2) !== a2 || a2 < 0) && I$1(s2, "nonce_increment must be an unsigned integer"), _2 = N(s2, _2, "key");
  var y2, i = 0 | r$1._crypto_stream_xchacha20_keybytes();
  _2.length !== i && I$1(s2, "invalid key length"), y2 = w$1(_2), s2.push(y2);
  var l2 = new T$1(0 | o2), u2 = l2.address;
  if (s2.push(u2), 0 === r$1._crypto_stream_xchacha20_xor_ic(u2, c2, o2, 0, p2, a2, 0, y2)) {
    var d2 = E(l2, n2);
    return A(s2), d2;
  }
  M$1(s2, "invalid usage");
}
function ha$1(e, t2, a2) {
  var _2 = [];
  S$1(a2), K(_2, e, "out_length"), ("number" != typeof e || (0 | e) !== e || e < 0) && I$1(_2, "out_length must be an unsigned integer");
  var n2 = w$1(t2 = N(_2, t2, "message")), s2 = t2.length;
  _2.push(n2);
  var c2 = new T$1(e |= 0), o2 = c2.address;
  if (_2.push(o2), !(0 | r$1._crypto_xof_shake128(o2, e, n2, s2, 0))) {
    var p2 = E(c2, a2);
    return A(_2), p2;
  }
  M$1(_2, "invalid usage");
}
function ya(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(256).address;
  if (!(0 | r$1._crypto_xof_shake128_init(a2))) {
    var _2 = a2;
    return A(t2), _2;
  }
  M$1(t2, "invalid usage");
}
function ia$1(e, t2) {
  var a2 = [];
  S$1(t2), K(a2, e, "domain"), ("number" != typeof e || (0 | e) !== e || e < 0) && I$1(a2, "domain must be an unsigned integer");
  var _2 = new T$1(256).address;
  if (!(0 | r$1._crypto_xof_shake128_init_with_domain(_2, e))) {
    var n2 = _2;
    return A(a2), n2;
  }
  M$1(a2, "invalid usage");
}
function la$1(e, t2, a2) {
  var _2 = [];
  S$1(a2), K(_2, e, "state_address"), K(_2, t2, "out_length"), ("number" != typeof t2 || (0 | t2) !== t2 || t2 < 0) && I$1(_2, "out_length must be an unsigned integer");
  var n2 = new T$1(t2 |= 0), s2 = n2.address;
  if (_2.push(s2), !(0 | r$1._crypto_xof_shake128_squeeze(e, s2, t2))) {
    var c2 = E(n2, a2);
    return A(_2), c2;
  }
  M$1(_2, "invalid usage");
}
function ua$1(e, t2, a2) {
  var _2 = [];
  S$1(a2), K(_2, e, "state_address");
  var n2 = w$1(t2 = N(_2, t2, "message_chunk")), s2 = t2.length;
  _2.push(n2), 0 | r$1._crypto_xof_shake128_update(e, n2, s2, 0) && M$1(_2, "invalid usage"), A(_2);
}
function da(e, t2, a2) {
  var _2 = [];
  S$1(a2), K(_2, e, "out_length"), ("number" != typeof e || (0 | e) !== e || e < 0) && I$1(_2, "out_length must be an unsigned integer");
  var n2 = w$1(t2 = N(_2, t2, "message")), s2 = t2.length;
  _2.push(n2);
  var c2 = new T$1(e |= 0), o2 = c2.address;
  if (_2.push(o2), !(0 | r$1._crypto_xof_shake256(o2, e, n2, s2, 0))) {
    var p2 = E(c2, a2);
    return A(_2), p2;
  }
  M$1(_2, "invalid usage");
}
function va$1(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(256).address;
  if (!(0 | r$1._crypto_xof_shake256_init(a2))) {
    var _2 = a2;
    return A(t2), _2;
  }
  M$1(t2, "invalid usage");
}
function ga(e, t2) {
  var a2 = [];
  S$1(t2), K(a2, e, "domain"), ("number" != typeof e || (0 | e) !== e || e < 0) && I$1(a2, "domain must be an unsigned integer");
  var _2 = new T$1(256).address;
  if (!(0 | r$1._crypto_xof_shake256_init_with_domain(_2, e))) {
    var n2 = _2;
    return A(a2), n2;
  }
  M$1(a2, "invalid usage");
}
function ba$1(e, t2, a2) {
  var _2 = [];
  S$1(a2), K(_2, e, "state_address"), K(_2, t2, "out_length"), ("number" != typeof t2 || (0 | t2) !== t2 || t2 < 0) && I$1(_2, "out_length must be an unsigned integer");
  var n2 = new T$1(t2 |= 0), s2 = n2.address;
  if (_2.push(s2), !(0 | r$1._crypto_xof_shake256_squeeze(e, s2, t2))) {
    var c2 = E(n2, a2);
    return A(_2), c2;
  }
  M$1(_2, "invalid usage");
}
function fa$1(e, t2, a2) {
  var _2 = [];
  S$1(a2), K(_2, e, "state_address");
  var n2 = w$1(t2 = N(_2, t2, "message_chunk")), s2 = t2.length;
  _2.push(n2), 0 | r$1._crypto_xof_shake256_update(e, n2, s2, 0) && M$1(_2, "invalid usage"), A(_2);
}
function ma$1(e, t2, a2) {
  var _2 = [];
  S$1(a2), K(_2, e, "out_length"), ("number" != typeof e || (0 | e) !== e || e < 0) && I$1(_2, "out_length must be an unsigned integer");
  var n2 = w$1(t2 = N(_2, t2, "message")), s2 = t2.length;
  _2.push(n2);
  var c2 = new T$1(e |= 0), o2 = c2.address;
  if (_2.push(o2), !(0 | r$1._crypto_xof_turboshake128(o2, e, n2, s2, 0))) {
    var p2 = E(c2, a2);
    return A(_2), p2;
  }
  M$1(_2, "invalid usage");
}
function xa$1(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(256).address;
  if (!(0 | r$1._crypto_xof_turboshake128_init(a2))) {
    var _2 = a2;
    return A(t2), _2;
  }
  M$1(t2, "invalid usage");
}
function Ea$1(e, t2) {
  var a2 = [];
  S$1(t2), K(a2, e, "domain"), ("number" != typeof e || (0 | e) !== e || e < 0) && I$1(a2, "domain must be an unsigned integer");
  var _2 = new T$1(256).address;
  if (!(0 | r$1._crypto_xof_turboshake128_init_with_domain(_2, e))) {
    var n2 = _2;
    return A(a2), n2;
  }
  M$1(a2, "invalid usage");
}
function ka$1(e, t2, a2) {
  var _2 = [];
  S$1(a2), K(_2, e, "state_address"), K(_2, t2, "out_length"), ("number" != typeof t2 || (0 | t2) !== t2 || t2 < 0) && I$1(_2, "out_length must be an unsigned integer");
  var n2 = new T$1(t2 |= 0), s2 = n2.address;
  if (_2.push(s2), !(0 | r$1._crypto_xof_turboshake128_squeeze(e, s2, t2))) {
    var c2 = E(n2, a2);
    return A(_2), c2;
  }
  M$1(_2, "invalid usage");
}
function Sa$1(e, t2, a2) {
  var _2 = [];
  S$1(a2), K(_2, e, "state_address");
  var n2 = w$1(t2 = N(_2, t2, "message_chunk")), s2 = t2.length;
  _2.push(n2), 0 | r$1._crypto_xof_turboshake128_update(e, n2, s2, 0) && M$1(_2, "invalid usage"), A(_2);
}
function Ta$1(e, t2, a2) {
  var _2 = [];
  S$1(a2), K(_2, e, "out_length"), ("number" != typeof e || (0 | e) !== e || e < 0) && I$1(_2, "out_length must be an unsigned integer");
  var n2 = w$1(t2 = N(_2, t2, "message")), s2 = t2.length;
  _2.push(n2);
  var c2 = new T$1(e |= 0), o2 = c2.address;
  if (_2.push(o2), !(0 | r$1._crypto_xof_turboshake256(o2, e, n2, s2, 0))) {
    var p2 = E(c2, a2);
    return A(_2), p2;
  }
  M$1(_2, "invalid usage");
}
function wa$1(e) {
  var t2 = [];
  S$1(e);
  var a2 = new T$1(256).address;
  if (!(0 | r$1._crypto_xof_turboshake256_init(a2))) {
    var _2 = a2;
    return A(t2), _2;
  }
  M$1(t2, "invalid usage");
}
function Ya$1(e, t2) {
  var a2 = [];
  S$1(t2), K(a2, e, "domain"), ("number" != typeof e || (0 | e) !== e || e < 0) && I$1(a2, "domain must be an unsigned integer");
  var _2 = new T$1(256).address;
  if (!(0 | r$1._crypto_xof_turboshake256_init_with_domain(_2, e))) {
    var n2 = _2;
    return A(a2), n2;
  }
  M$1(a2, "invalid usage");
}
function Ba$1(e, t2, a2) {
  var _2 = [];
  S$1(a2), K(_2, e, "state_address"), K(_2, t2, "out_length"), ("number" != typeof t2 || (0 | t2) !== t2 || t2 < 0) && I$1(_2, "out_length must be an unsigned integer");
  var n2 = new T$1(t2 |= 0), s2 = n2.address;
  if (_2.push(s2), !(0 | r$1._crypto_xof_turboshake256_squeeze(e, s2, t2))) {
    var c2 = E(n2, a2);
    return A(_2), c2;
  }
  M$1(_2, "invalid usage");
}
function Aa$1(e, t2, a2) {
  var _2 = [];
  S$1(a2), K(_2, e, "state_address");
  var n2 = w$1(t2 = N(_2, t2, "message_chunk")), s2 = t2.length;
  _2.push(n2), 0 | r$1._crypto_xof_turboshake256_update(e, n2, s2, 0) && M$1(_2, "invalid usage"), A(_2);
}
function Ma$1(e, t2) {
  var a2 = [];
  S$1(t2), K(a2, e, "length"), ("number" != typeof e || (0 | e) !== e || e < 0) && I$1(a2, "length must be an unsigned integer");
  var _2 = new T$1(0 | e), n2 = _2.address;
  a2.push(n2), r$1._randombytes_buf(n2, e);
  var s2 = E(_2, t2);
  return A(a2), s2;
}
function Ia$1(e, t2, a2) {
  var _2 = [];
  S$1(a2), K(_2, e, "length"), ("number" != typeof e || (0 | e) !== e || e < 0) && I$1(_2, "length must be an unsigned integer"), t2 = N(_2, t2, "seed");
  var n2, s2 = 0 | r$1._randombytes_seedbytes();
  t2.length !== s2 && I$1(_2, "invalid seed length"), n2 = w$1(t2), _2.push(n2);
  var c2 = new T$1(0 | e), o2 = c2.address;
  _2.push(o2), r$1._randombytes_buf_deterministic(o2, e, n2);
  var p2 = E(c2, a2);
  return A(_2), p2;
}
function Ka$1(e) {
  S$1(e), r$1._randombytes_close();
}
function Na$1(e) {
  S$1(e);
  var t2 = r$1._randombytes_random() >>> 0;
  return A([]), t2;
}
function La$1(e, t2) {
  var a2 = [];
  S$1(t2);
  for (var _2 = r$1._malloc(24), n2 = 0; n2 < 6; n2++) r$1.setValue(_2 + 4 * n2, r$1.Runtime.addFunction(e[["implementation_name", "random", "stir", "uniform", "buf", "close"][n2]]), "i32");
  0 | r$1._randombytes_set_implementation(_2) && M$1(a2, "unsupported implementation"), A(a2);
}
function Oa(e) {
  S$1(e), r$1._randombytes_stir();
}
function Ua$1(e, t2) {
  var a2 = [];
  S$1(t2), K(a2, e, "upper_bound"), ("number" != typeof e || (0 | e) !== e || e < 0) && I$1(a2, "upper_bound must be an unsigned integer");
  var _2 = r$1._randombytes_uniform(e) >>> 0;
  return A(a2), _2;
}
function Pa(e) {
  var t2, a2 = [];
  16 !== (e = N(a2, e, "bin")).length && I$1(a2, "invalid bin length"), t2 = w$1(e), a2.push(t2);
  var _2 = new T$1(46).address;
  if (a2.push(_2), 0 !== r$1._sodium_bin2ip(_2, 46, t2)) {
    var n2 = r$1.UTF8ToString(_2);
    return A(a2), n2;
  }
  M$1(a2, "conversion failed");
}
function Ca$1(e, t2) {
  var a2 = [];
  S$1(t2), "string" != typeof e && I$1(a2, "ip must be a string");
  var _2 = w$1(e = l(e + "\0")), n2 = e.length - 1;
  a2.push(_2);
  var s2 = new T$1(16), c2 = s2.address;
  if (a2.push(c2), !(0 | r$1._sodium_ip2bin(c2, _2, n2))) {
    var o2 = E(s2, t2);
    return A(a2), o2;
  }
  M$1(a2, "invalid IP address");
}
function Ra$1() {
  var e = r$1._sodium_version_string(), t2 = r$1.UTF8ToString(e);
  return A([]), t2;
}
T$1.prototype.to_Uint8Array = function() {
  var e = new Uint8Array(this.length);
  return e.set(r$1.HEAPU8.subarray(this.address, this.address + this.length)), e;
}, t.add = s, t.base64_variants = g, t.compare = h$1, t.from_base64 = f, t.from_hex = d$1, t.from_string = l, t.increment = n, t.is_zero = c$1, t.libsodium = A$1, t.memcmp = p, t.memzero = o, t.output_formats = x, t.pad = y, t.unpad = i$1, t.ready = a, t.symbols = _, t.to_base64 = m, t.to_hex = v, t.to_string = u;
const byteToHex = [];
for (let i = 0; i < 256; ++i) {
  byteToHex.push((i + 256).toString(16).slice(1));
}
function unsafeStringify(arr, offset2 = 0) {
  return (byteToHex[arr[offset2 + 0]] + byteToHex[arr[offset2 + 1]] + byteToHex[arr[offset2 + 2]] + byteToHex[arr[offset2 + 3]] + "-" + byteToHex[arr[offset2 + 4]] + byteToHex[arr[offset2 + 5]] + "-" + byteToHex[arr[offset2 + 6]] + byteToHex[arr[offset2 + 7]] + "-" + byteToHex[arr[offset2 + 8]] + byteToHex[arr[offset2 + 9]] + "-" + byteToHex[arr[offset2 + 10]] + byteToHex[arr[offset2 + 11]] + byteToHex[arr[offset2 + 12]] + byteToHex[arr[offset2 + 13]] + byteToHex[arr[offset2 + 14]] + byteToHex[arr[offset2 + 15]]).toLowerCase();
}
let getRandomValues;
const rnds8 = new Uint8Array(16);
function rng() {
  if (!getRandomValues) {
    if (typeof crypto === "undefined" || !crypto.getRandomValues) {
      throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
    }
    getRandomValues = crypto.getRandomValues.bind(crypto);
  }
  return getRandomValues(rnds8);
}
const randomUUID = typeof crypto !== "undefined" && crypto.randomUUID && crypto.randomUUID.bind(crypto);
const native = { randomUUID };
function _v4(options, buf, offset2) {
  options = options || {};
  const rnds = options.random ?? options.rng?.() ?? rng();
  if (rnds.length < 16) {
    throw new Error("Random bytes length must be >= 16");
  }
  rnds[6] = rnds[6] & 15 | 64;
  rnds[8] = rnds[8] & 63 | 128;
  return unsafeStringify(rnds);
}
function v4(options, buf, offset2) {
  if (native.randomUUID && true && !options) {
    return native.randomUUID();
  }
  return _v4(options);
}
const scriptRel = /* @__PURE__ */ (function detectScriptRel() {
  const relList = typeof document !== "undefined" && document.createElement("link").relList;
  return relList && relList.supports && relList.supports("modulepreload") ? "modulepreload" : "preload";
})();
const assetsURL = function(dep, importerUrl) {
  return new URL(dep, importerUrl).href;
};
const seen = {};
const __vitePreload = function preload(baseModule, deps, importerUrl) {
  let promise = Promise.resolve();
  if (deps && deps.length > 0) {
    let allSettled = function(promises$2) {
      return Promise.all(promises$2.map((p2) => Promise.resolve(p2).then((value$1) => ({
        status: "fulfilled",
        value: value$1
      }), (reason) => ({
        status: "rejected",
        reason
      }))));
    };
    const links = document.getElementsByTagName("link");
    const cspNonceMeta = document.querySelector("meta[property=csp-nonce]");
    const cspNonce = cspNonceMeta?.nonce || cspNonceMeta?.getAttribute("nonce");
    promise = allSettled(deps.map((dep) => {
      dep = assetsURL(dep, importerUrl);
      if (dep in seen) return;
      seen[dep] = true;
      const isCss = dep.endsWith(".css");
      const cssSelector = isCss ? '[rel="stylesheet"]' : "";
      if (!!importerUrl) for (let i$12 = links.length - 1; i$12 >= 0; i$12--) {
        const link$1 = links[i$12];
        if (link$1.href === dep && (!isCss || link$1.rel === "stylesheet")) return;
      }
      else if (document.querySelector(`link[href="${dep}"]${cssSelector}`)) return;
      const link = document.createElement("link");
      link.rel = isCss ? "stylesheet" : scriptRel;
      if (!isCss) link.as = "script";
      link.crossOrigin = "";
      link.href = dep;
      if (cspNonce) link.setAttribute("nonce", cspNonce);
      document.head.appendChild(link);
      if (isCss) return new Promise((res, rej) => {
        link.addEventListener("load", res);
        link.addEventListener("error", () => rej(/* @__PURE__ */ new Error(`Unable to preload CSS for ${dep}`)));
      });
    }));
  }
  function handlePreloadError(err$2) {
    const e$1 = new Event("vite:preloadError", { cancelable: true });
    e$1.payload = err$2;
    window.dispatchEvent(e$1);
    if (!e$1.defaultPrevented) throw err$2;
  }
  return promise.then((res) => {
    for (const item of res || []) {
      if (item.status !== "rejected") continue;
      handlePreloadError(item.reason);
    }
    return baseModule().catch(handlePreloadError);
  });
};
var w;
function H(a2, c2, b2) {
  const e = typeof b2, d2 = typeof a2;
  if (e !== "undefined") {
    if (d2 !== "undefined") {
      if (b2) {
        if (d2 === "function" && e === d2) return function(k2) {
          return a2(b2(k2));
        };
        c2 = a2.constructor;
        if (c2 === b2.constructor) {
          if (c2 === Array) return b2.concat(a2);
          if (c2 === Map) {
            var f2 = new Map(b2);
            for (var g2 of a2) f2.set(g2[0], g2[1]);
            return f2;
          }
          if (c2 === Set) {
            g2 = new Set(b2);
            for (f2 of a2.values()) g2.add(f2);
            return g2;
          }
        }
      }
      return a2;
    }
    return b2;
  }
  return d2 === "undefined" ? c2 : a2;
}
function aa(a2, c2) {
  return typeof a2 === "undefined" ? c2 : a2;
}
function I() {
  return /* @__PURE__ */ Object.create(null);
}
function M(a2) {
  return typeof a2 === "string";
}
function ba(a2) {
  return typeof a2 === "object";
}
function ca(a2, c2) {
  if (M(c2)) a2 = a2[c2];
  else for (let b2 = 0; a2 && b2 < c2.length; b2++) a2 = a2[c2[b2]];
  return a2;
}
const ea = /[^\p{L}\p{N}]+/u, fa = /(\d{3})/g, ha = /(\D)(\d{3})/g, ia = /(\d{3})(\D)/g, ja = /[\u0300-\u036f]/g;
function ka(a2 = {}) {
  if (!this || this.constructor !== ka) return new ka(...arguments);
  if (arguments.length) for (a2 = 0; a2 < arguments.length; a2++) this.assign(arguments[a2]);
  else this.assign(a2);
}
w = ka.prototype;
w.assign = function(a2) {
  this.normalize = H(a2.normalize, true, this.normalize);
  let c2 = a2.include, b2 = c2 || a2.exclude || a2.split, e;
  if (b2 || b2 === "") {
    if (typeof b2 === "object" && b2.constructor !== RegExp) {
      let d2 = "";
      e = !c2;
      c2 || (d2 += "\\p{Z}");
      b2.letter && (d2 += "\\p{L}");
      b2.number && (d2 += "\\p{N}", e = !!c2);
      b2.symbol && (d2 += "\\p{S}");
      b2.punctuation && (d2 += "\\p{P}");
      b2.control && (d2 += "\\p{C}");
      if (b2 = b2.char) d2 += typeof b2 === "object" ? b2.join("") : b2;
      try {
        this.split = new RegExp("[" + (c2 ? "^" : "") + d2 + "]+", "u");
      } catch (f2) {
        this.split = /\s+/;
      }
    } else this.split = b2, e = b2 === false || "a1a".split(b2).length < 2;
    this.numeric = H(a2.numeric, e);
  } else {
    try {
      this.split = H(this.split, ea);
    } catch (d2) {
      this.split = /\s+/;
    }
    this.numeric = H(a2.numeric, H(this.numeric, true));
  }
  this.prepare = H(a2.prepare, null, this.prepare);
  this.finalize = H(a2.finalize, null, this.finalize);
  b2 = a2.filter;
  this.filter = typeof b2 === "function" ? b2 : H(b2 && new Set(b2), null, this.filter);
  this.dedupe = H(a2.dedupe, true, this.dedupe);
  this.matcher = H((b2 = a2.matcher) && new Map(b2), null, this.matcher);
  this.mapper = H((b2 = a2.mapper) && new Map(b2), null, this.mapper);
  this.stemmer = H(
    (b2 = a2.stemmer) && new Map(b2),
    null,
    this.stemmer
  );
  this.replacer = H(a2.replacer, null, this.replacer);
  this.minlength = H(a2.minlength, 1, this.minlength);
  this.maxlength = H(a2.maxlength, 1024, this.maxlength);
  this.rtl = H(a2.rtl, false, this.rtl);
  if (this.cache = b2 = H(a2.cache, true, this.cache)) this.F = null, this.L = typeof b2 === "number" ? b2 : 2e5, this.B = /* @__PURE__ */ new Map(), this.D = /* @__PURE__ */ new Map(), this.I = this.H = 128;
  this.h = "";
  this.J = null;
  this.A = "";
  this.K = null;
  if (this.matcher) for (const d2 of this.matcher.keys()) this.h += (this.h ? "|" : "") + d2;
  if (this.stemmer) for (const d2 of this.stemmer.keys()) this.A += (this.A ? "|" : "") + d2;
  return this;
};
w.addStemmer = function(a2, c2) {
  this.stemmer || (this.stemmer = /* @__PURE__ */ new Map());
  this.stemmer.set(a2, c2);
  this.A += (this.A ? "|" : "") + a2;
  this.K = null;
  this.cache && Q(this);
  return this;
};
w.addFilter = function(a2) {
  typeof a2 === "function" ? this.filter = a2 : (this.filter || (this.filter = /* @__PURE__ */ new Set()), this.filter.add(a2));
  this.cache && Q(this);
  return this;
};
w.addMapper = function(a2, c2) {
  if (typeof a2 === "object") return this.addReplacer(a2, c2);
  if (a2.length > 1) return this.addMatcher(a2, c2);
  this.mapper || (this.mapper = /* @__PURE__ */ new Map());
  this.mapper.set(a2, c2);
  this.cache && Q(this);
  return this;
};
w.addMatcher = function(a2, c2) {
  if (typeof a2 === "object") return this.addReplacer(a2, c2);
  if (a2.length < 2 && (this.dedupe || this.mapper)) return this.addMapper(a2, c2);
  this.matcher || (this.matcher = /* @__PURE__ */ new Map());
  this.matcher.set(a2, c2);
  this.h += (this.h ? "|" : "") + a2;
  this.J = null;
  this.cache && Q(this);
  return this;
};
w.addReplacer = function(a2, c2) {
  if (typeof a2 === "string") return this.addMatcher(a2, c2);
  this.replacer || (this.replacer = []);
  this.replacer.push(a2, c2);
  this.cache && Q(this);
  return this;
};
w.encode = function(a2, c2) {
  if (this.cache && a2.length <= this.H) if (this.F) {
    if (this.B.has(a2)) return this.B.get(a2);
  } else this.F = setTimeout(Q, 50, this);
  this.normalize && (typeof this.normalize === "function" ? a2 = this.normalize(a2) : a2 = ja ? a2.normalize("NFKD").replace(ja, "").toLowerCase() : a2.toLowerCase());
  this.prepare && (a2 = this.prepare(a2));
  this.numeric && a2.length > 3 && (a2 = a2.replace(ha, "$1 $2").replace(ia, "$1 $2").replace(fa, "$1 "));
  const b2 = !(this.dedupe || this.mapper || this.filter || this.matcher || this.stemmer || this.replacer);
  let e = [], d2 = I(), f2, g2, k2 = this.split || this.split === "" ? a2.split(this.split) : [a2];
  for (let l2 = 0, m2, p2; l2 < k2.length; l2++) if ((m2 = p2 = k2[l2]) && !(m2.length < this.minlength || m2.length > this.maxlength)) {
    if (c2) {
      if (d2[m2]) continue;
      d2[m2] = 1;
    } else {
      if (f2 === m2) continue;
      f2 = m2;
    }
    if (b2) e.push(m2);
    else if (!this.filter || (typeof this.filter === "function" ? this.filter(m2) : !this.filter.has(m2))) {
      if (this.cache && m2.length <= this.I) if (this.F) {
        var h2 = this.D.get(m2);
        if (h2 || h2 === "") {
          h2 && e.push(h2);
          continue;
        }
      } else this.F = setTimeout(Q, 50, this);
      if (this.stemmer) {
        this.K || (this.K = new RegExp("(?!^)(" + this.A + ")$"));
        let u2;
        for (; u2 !== m2 && m2.length > 2; ) u2 = m2, m2 = m2.replace(this.K, (r2) => this.stemmer.get(r2));
      }
      if (m2 && (this.mapper || this.dedupe && m2.length > 1)) {
        h2 = "";
        for (let u2 = 0, r2 = "", t2, n2; u2 < m2.length; u2++) t2 = m2.charAt(u2), t2 === r2 && this.dedupe || ((n2 = this.mapper && this.mapper.get(t2)) || n2 === "" ? n2 === r2 && this.dedupe || !(r2 = n2) || (h2 += n2) : h2 += r2 = t2);
        m2 = h2;
      }
      this.matcher && m2.length > 1 && (this.J || (this.J = new RegExp("(" + this.h + ")", "g")), m2 = m2.replace(this.J, (u2) => this.matcher.get(u2)));
      if (m2 && this.replacer) for (h2 = 0; m2 && h2 < this.replacer.length; h2 += 2) m2 = m2.replace(
        this.replacer[h2],
        this.replacer[h2 + 1]
      );
      this.cache && p2.length <= this.I && (this.D.set(p2, m2), this.D.size > this.L && (this.D.clear(), this.I = this.I / 1.1 | 0));
      if (m2) {
        if (m2 !== p2) if (c2) {
          if (d2[m2]) continue;
          d2[m2] = 1;
        } else {
          if (g2 === m2) continue;
          g2 = m2;
        }
        e.push(m2);
      }
    }
  }
  this.finalize && (e = this.finalize(e) || e);
  this.cache && a2.length <= this.H && (this.B.set(a2, e), this.B.size > this.L && (this.B.clear(), this.H = this.H / 1.1 | 0));
  return e;
};
function Q(a2) {
  a2.F = null;
  a2.B.clear();
  a2.D.clear();
}
function la(a2, c2, b2) {
  b2 || (c2 || typeof a2 !== "object" ? typeof c2 === "object" && (b2 = c2, c2 = 0) : b2 = a2);
  b2 && (a2 = b2.query || a2, c2 = b2.limit || c2);
  let e = "" + (c2 || 0);
  b2 && (e += (b2.offset || 0) + !!b2.context + !!b2.suggest + (b2.resolve !== false) + (b2.resolution || this.resolution) + (b2.boost || 0));
  a2 = ("" + a2).toLowerCase();
  this.cache || (this.cache = new ma());
  let d2 = this.cache.get(a2 + e);
  if (!d2) {
    const f2 = b2 && b2.cache;
    f2 && (b2.cache = false);
    d2 = this.search(a2, c2, b2);
    f2 && (b2.cache = f2);
    this.cache.set(a2 + e, d2);
  }
  return d2;
}
function ma(a2) {
  this.limit = a2 && a2 !== true ? a2 : 1e3;
  this.cache = /* @__PURE__ */ new Map();
  this.h = "";
}
ma.prototype.set = function(a2, c2) {
  this.cache.set(this.h = a2, c2);
  this.cache.size > this.limit && this.cache.delete(this.cache.keys().next().value);
};
ma.prototype.get = function(a2) {
  const c2 = this.cache.get(a2);
  c2 && this.h !== a2 && (this.cache.delete(a2), this.cache.set(this.h = a2, c2));
  return c2;
};
ma.prototype.remove = function(a2) {
  for (const c2 of this.cache) {
    const b2 = c2[0];
    c2[1].includes(a2) && this.cache.delete(b2);
  }
};
ma.prototype.clear = function() {
  this.cache.clear();
  this.h = "";
};
const na = { normalize: false, numeric: false, dedupe: false };
const oa = {};
const ra = /* @__PURE__ */ new Map([["b", "p"], ["v", "f"], ["w", "f"], ["z", "s"], ["x", "s"], ["d", "t"], ["n", "m"], ["c", "k"], ["g", "k"], ["j", "k"], ["q", "k"], ["i", "e"], ["y", "e"], ["u", "o"]]);
const sa = /* @__PURE__ */ new Map([["ae", "a"], ["oe", "o"], ["sh", "s"], ["kh", "k"], ["th", "t"], ["ph", "f"], ["pf", "f"]]), ta$1 = [/([^aeo])h(.)/g, "$1$2", /([aeo])h([^aeo]|$)/g, "$1$2", /(.)\1+/g, "$1"];
const ua = { a: "", e: "", i: "", o: "", u: "", y: "", b: 1, f: 1, p: 1, v: 1, c: 2, g: 2, j: 2, k: 2, q: 2, s: 2, x: 2, z: 2, "ß": 2, d: 3, t: 3, l: 4, m: 5, n: 5, r: 6 };
var va = { Exact: na, Default: oa, Normalize: oa, LatinBalance: { mapper: ra }, LatinAdvanced: { mapper: ra, matcher: sa, replacer: ta$1 }, LatinExtra: { mapper: ra, replacer: ta$1.concat([/(?!^)[aeo]/g, ""]), matcher: sa }, LatinSoundex: { dedupe: false, include: { letter: true }, finalize: function(a2) {
  for (let b2 = 0; b2 < a2.length; b2++) {
    var c2 = a2[b2];
    let e = c2.charAt(0), d2 = ua[e];
    for (let f2 = 1, g2; f2 < c2.length && (g2 = c2.charAt(f2), g2 === "h" || g2 === "w" || !(g2 = ua[g2]) || g2 === d2 || (e += g2, d2 = g2, e.length !== 4)); f2++) ;
    a2[b2] = e;
  }
} }, CJK: { split: "" }, LatinExact: na, LatinDefault: oa, LatinSimple: oa };
function wa(a2, c2, b2, e) {
  let d2 = [];
  for (let f2 = 0, g2; f2 < a2.index.length; f2++) if (g2 = a2.index[f2], c2 >= g2.length) c2 -= g2.length;
  else {
    c2 = g2[e ? "splice" : "slice"](c2, b2);
    const k2 = c2.length;
    if (k2 && (d2 = d2.length ? d2.concat(c2) : c2, b2 -= k2, e && (a2.length -= k2), !b2)) break;
    c2 = 0;
  }
  return d2;
}
function xa(a2) {
  if (!this || this.constructor !== xa) return new xa(a2);
  this.index = a2 ? [a2] : [];
  this.length = a2 ? a2.length : 0;
  const c2 = this;
  return new Proxy([], { get(b2, e) {
    if (e === "length") return c2.length;
    if (e === "push") return function(d2) {
      c2.index[c2.index.length - 1].push(d2);
      c2.length++;
    };
    if (e === "pop") return function() {
      if (c2.length) return c2.length--, c2.index[c2.index.length - 1].pop();
    };
    if (e === "indexOf") return function(d2) {
      let f2 = 0;
      for (let g2 = 0, k2, h2; g2 < c2.index.length; g2++) {
        k2 = c2.index[g2];
        h2 = k2.indexOf(d2);
        if (h2 >= 0) return f2 + h2;
        f2 += k2.length;
      }
      return -1;
    };
    if (e === "includes") return function(d2) {
      for (let f2 = 0; f2 < c2.index.length; f2++) if (c2.index[f2].includes(d2)) return true;
      return false;
    };
    if (e === "slice") return function(d2, f2) {
      return wa(c2, d2 || 0, f2 || c2.length, false);
    };
    if (e === "splice") return function(d2, f2) {
      return wa(c2, d2 || 0, f2 || c2.length, true);
    };
    if (e === "constructor") return Array;
    if (typeof e !== "symbol") return (b2 = c2.index[e / 2 ** 31 | 0]) && b2[e];
  }, set(b2, e, d2) {
    b2 = e / 2 ** 31 | 0;
    (c2.index[b2] || (c2.index[b2] = []))[e] = d2;
    c2.length++;
    return true;
  } });
}
xa.prototype.clear = function() {
  this.index.length = 0;
};
xa.prototype.push = function() {
};
function R(a2 = 8) {
  if (!this || this.constructor !== R) return new R(a2);
  this.index = I();
  this.h = [];
  this.size = 0;
  a2 > 32 ? (this.B = Aa, this.A = BigInt(a2)) : (this.B = Ba, this.A = a2);
}
R.prototype.get = function(a2) {
  const c2 = this.index[this.B(a2)];
  return c2 && c2.get(a2);
};
R.prototype.set = function(a2, c2) {
  var b2 = this.B(a2);
  let e = this.index[b2];
  e ? (b2 = e.size, e.set(a2, c2), (b2 -= e.size) && this.size++) : (this.index[b2] = e = /* @__PURE__ */ new Map([[a2, c2]]), this.h.push(e), this.size++);
};
function S(a2 = 8) {
  if (!this || this.constructor !== S) return new S(a2);
  this.index = I();
  this.h = [];
  this.size = 0;
  a2 > 32 ? (this.B = Aa, this.A = BigInt(a2)) : (this.B = Ba, this.A = a2);
}
S.prototype.add = function(a2) {
  var c2 = this.B(a2);
  let b2 = this.index[c2];
  b2 ? (c2 = b2.size, b2.add(a2), (c2 -= b2.size) && this.size++) : (this.index[c2] = b2 = /* @__PURE__ */ new Set([a2]), this.h.push(b2), this.size++);
};
w = R.prototype;
w.has = S.prototype.has = function(a2) {
  const c2 = this.index[this.B(a2)];
  return c2 && c2.has(a2);
};
w.delete = S.prototype.delete = function(a2) {
  const c2 = this.index[this.B(a2)];
  c2 && c2.delete(a2) && this.size--;
};
w.clear = S.prototype.clear = function() {
  this.index = I();
  this.h = [];
  this.size = 0;
};
w.values = S.prototype.values = function* () {
  for (let a2 = 0; a2 < this.h.length; a2++) for (let c2 of this.h[a2].values()) yield c2;
};
w.keys = S.prototype.keys = function* () {
  for (let a2 = 0; a2 < this.h.length; a2++) for (let c2 of this.h[a2].keys()) yield c2;
};
w.entries = S.prototype.entries = function* () {
  for (let a2 = 0; a2 < this.h.length; a2++) for (let c2 of this.h[a2].entries()) yield c2;
};
function Ba(a2) {
  let c2 = 2 ** this.A - 1;
  if (typeof a2 == "number") return a2 & c2;
  let b2 = 0, e = this.A + 1;
  for (let d2 = 0; d2 < a2.length; d2++) b2 = (b2 * e ^ a2.charCodeAt(d2)) & c2;
  return this.A === 32 ? b2 + 2 ** 31 : b2;
}
function Aa(a2) {
  let c2 = BigInt(2) ** this.A - BigInt(1);
  var b2 = typeof a2;
  if (b2 === "bigint") return a2 & c2;
  if (b2 === "number") return BigInt(a2) & c2;
  b2 = BigInt(0);
  let e = this.A + BigInt(1);
  for (let d2 = 0; d2 < a2.length; d2++) b2 = (b2 * e ^ BigInt(a2.charCodeAt(d2))) & c2;
  return b2;
}
let Ca, Da;
async function Ea(a2) {
  a2 = a2.data;
  var c2 = a2.task;
  const b2 = a2.id;
  let e = a2.args;
  switch (c2) {
    case "init":
      Da = a2.options || {};
      (c2 = a2.factory) ? (Function("return " + c2)()(self), Ca = new self.FlexSearch.Index(Da), delete self.FlexSearch) : Ca = new T(Da);
      postMessage({ id: b2 });
      break;
    default:
      let d2;
      c2 === "export" && (e[1] ? (e[0] = Da.export, e[2] = 0, e[3] = 1) : e = null);
      c2 === "import" ? e[0] && (a2 = await Da.import.call(Ca, e[0]), Ca.import(e[0], a2)) : ((d2 = e && Ca[c2].apply(Ca, e)) && d2.then && (d2 = await d2), d2 && d2.await && (d2 = await d2.await), c2 === "search" && d2.result && (d2 = d2.result));
      postMessage(c2 === "search" ? { id: b2, msg: d2 } : { id: b2 });
  }
}
function Fa(a2) {
  Ga.call(a2, "add");
  Ga.call(a2, "append");
  Ga.call(a2, "search");
  Ga.call(a2, "update");
  Ga.call(a2, "remove");
  Ga.call(a2, "searchCache");
}
let Ha, Ia, Ja;
function Ka() {
  Ha = Ja = 0;
}
function Ga(a2) {
  this[a2 + "Async"] = function() {
    const c2 = arguments;
    var b2 = c2[c2.length - 1];
    let e;
    typeof b2 === "function" && (e = b2, delete c2[c2.length - 1]);
    Ha ? Ja || (Ja = Date.now() - Ia >= this.priority * this.priority * 3) : (Ha = setTimeout(Ka, 0), Ia = Date.now());
    if (Ja) {
      const f2 = this;
      return new Promise((g2) => {
        setTimeout(function() {
          g2(f2[a2 + "Async"].apply(f2, c2));
        }, 0);
      });
    }
    const d2 = this[a2].apply(this, c2);
    b2 = d2.then ? d2 : new Promise((f2) => f2(d2));
    e && b2.then(e);
    return b2;
  };
}
let V = 0;
function La(a2 = {}, c2) {
  function b2(k2) {
    function h2(l2) {
      l2 = l2.data || l2;
      const m2 = l2.id, p2 = m2 && f2.h[m2];
      p2 && (p2(l2.msg), delete f2.h[m2]);
    }
    this.worker = k2;
    this.h = I();
    if (this.worker) {
      d2 ? this.worker.on("message", h2) : this.worker.onmessage = h2;
      if (a2.config) return new Promise(function(l2) {
        V > 1e9 && (V = 0);
        f2.h[++V] = function() {
          l2(f2);
        };
        f2.worker.postMessage({ id: V, task: "init", factory: e, options: a2 });
      });
      this.priority = a2.priority || 4;
      this.encoder = c2 || null;
      this.worker.postMessage({ task: "init", factory: e, options: a2 });
      return this;
    }
  }
  if (!this || this.constructor !== La) return new La(a2);
  let e = typeof self !== "undefined" ? self._factory : typeof window !== "undefined" ? window._factory : null;
  e && (e = e.toString());
  const d2 = typeof window === "undefined", f2 = this, g2 = Ma(e, d2, a2.worker);
  return g2.then ? g2.then(function(k2) {
    return b2.call(f2, k2);
  }) : b2.call(this, g2);
}
W("add");
W("append");
W("search");
W("update");
W("remove");
W("clear");
W("export");
W("import");
La.prototype.searchCache = la;
Fa(La.prototype);
function W(a2) {
  La.prototype[a2] = function() {
    const c2 = this, b2 = [].slice.call(arguments);
    var e = b2[b2.length - 1];
    let d2;
    typeof e === "function" && (d2 = e, b2.pop());
    e = new Promise(function(f2) {
      a2 === "export" && typeof b2[0] === "function" && (b2[0] = null);
      V > 1e9 && (V = 0);
      c2.h[++V] = f2;
      c2.worker.postMessage({ task: a2, id: V, args: b2 });
    });
    return d2 ? (e.then(d2), this) : e;
  };
}
function Ma(a2, c2, b2) {
  return c2 ? typeof module !== "undefined" ? new (require("worker_threads"))["Worker"](__dirname + "/worker/node.js") : __vitePreload(() => import("./__vite-browser-external-2Ng8QIWW.js"), true ? [] : void 0, import.meta.url).then(function(worker) {
    return new worker["Worker"](import.meta.dirname + "/node/node.mjs");
  }) : a2 ? new window.Worker(URL.createObjectURL(new Blob(["onmessage=" + Ea.toString()], { type: "text/javascript" }))) : new window.Worker(typeof b2 === "string" ? b2 : import.meta.url.replace("/worker.js", "/worker/worker.js").replace(
    "flexsearch.bundle.module.min.js",
    "module/worker/worker.js"
  ).replace("flexsearch.bundle.module.min.mjs", "module/worker/worker.js"), { type: "module" });
}
Na.prototype.add = function(a2, c2, b2) {
  ba(a2) && (c2 = a2, a2 = ca(c2, this.key));
  if (c2 && (a2 || a2 === 0)) {
    if (!b2 && this.reg.has(a2)) return this.update(a2, c2);
    for (let k2 = 0, h2; k2 < this.field.length; k2++) {
      h2 = this.B[k2];
      var e = this.index.get(this.field[k2]);
      if (typeof h2 === "function") {
        var d2 = h2(c2);
        d2 && e.add(a2, d2, b2, true);
      } else if (d2 = h2.G, !d2 || d2(c2)) h2.constructor === String ? h2 = ["" + h2] : M(h2) && (h2 = [h2]), Qa(c2, h2, this.D, 0, e, a2, h2[0], b2);
    }
    if (this.tag) for (e = 0; e < this.A.length; e++) {
      var f2 = this.A[e];
      d2 = this.tag.get(this.F[e]);
      let k2 = I();
      if (typeof f2 === "function") {
        if (f2 = f2(c2), !f2) continue;
      } else {
        var g2 = f2.G;
        if (g2 && !g2(c2)) continue;
        f2.constructor === String && (f2 = "" + f2);
        f2 = ca(c2, f2);
      }
      if (d2 && f2) {
        M(f2) && (f2 = [f2]);
        for (let h2 = 0, l2, m2; h2 < f2.length; h2++) if (l2 = f2[h2], !k2[l2] && (k2[l2] = 1, (g2 = d2.get(l2)) ? m2 = g2 : d2.set(l2, m2 = []), !b2 || !m2.includes(a2))) {
          if (m2.length === 2 ** 31 - 1) {
            g2 = new xa(m2);
            if (this.fastupdate) for (let p2 of this.reg.values()) p2.includes(m2) && (p2[p2.indexOf(m2)] = g2);
            d2.set(l2, m2 = g2);
          }
          m2.push(a2);
          this.fastupdate && ((g2 = this.reg.get(a2)) ? g2.push(m2) : this.reg.set(a2, [m2]));
        }
      }
    }
    if (this.store && (!b2 || !this.store.has(a2))) {
      let k2;
      if (this.h) {
        k2 = I();
        for (let h2 = 0, l2; h2 < this.h.length; h2++) {
          l2 = this.h[h2];
          if ((b2 = l2.G) && !b2(c2)) continue;
          let m2;
          if (typeof l2 === "function") {
            m2 = l2(c2);
            if (!m2) continue;
            l2 = [l2.O];
          } else if (M(l2) || l2.constructor === String) {
            k2[l2] = c2[l2];
            continue;
          }
          Ra(c2, k2, l2, 0, l2[0], m2);
        }
      }
      this.store.set(a2, k2 || c2);
    }
    this.worker && (this.fastupdate || this.reg.add(a2));
  }
  return this;
};
function Ra(a2, c2, b2, e, d2, f2) {
  a2 = a2[d2];
  if (e === b2.length - 1) c2[d2] = f2 || a2;
  else if (a2) if (a2.constructor === Array) for (c2 = c2[d2] = Array(a2.length), d2 = 0; d2 < a2.length; d2++) Ra(a2, c2, b2, e, d2);
  else c2 = c2[d2] || (c2[d2] = I()), d2 = b2[++e], Ra(a2, c2, b2, e, d2);
}
function Qa(a2, c2, b2, e, d2, f2, g2, k2) {
  if (a2 = a2[g2]) if (e === c2.length - 1) {
    if (a2.constructor === Array) {
      if (b2[e]) {
        for (c2 = 0; c2 < a2.length; c2++) d2.add(f2, a2[c2], true, true);
        return;
      }
      a2 = a2.join(" ");
    }
    d2.add(f2, a2, k2, true);
  } else if (a2.constructor === Array) for (g2 = 0; g2 < a2.length; g2++) Qa(a2, c2, b2, e, d2, f2, g2, k2);
  else g2 = c2[++e], Qa(a2, c2, b2, e, d2, f2, g2, k2);
}
function Sa(a2, c2, b2, e) {
  if (!a2.length) return a2;
  if (a2.length === 1) return a2 = a2[0], a2 = b2 || a2.length > c2 ? a2.slice(b2, b2 + c2) : a2, e ? Ta.call(this, a2) : a2;
  let d2 = [];
  for (let f2 = 0, g2, k2; f2 < a2.length; f2++) if ((g2 = a2[f2]) && (k2 = g2.length)) {
    if (b2) {
      if (b2 >= k2) {
        b2 -= k2;
        continue;
      }
      g2 = g2.slice(b2, b2 + c2);
      k2 = g2.length;
      b2 = 0;
    }
    k2 > c2 && (g2 = g2.slice(0, c2), k2 = c2);
    if (!d2.length && k2 >= c2) return e ? Ta.call(this, g2) : g2;
    d2.push(g2);
    c2 -= k2;
    if (!c2) break;
  }
  d2 = d2.length > 1 ? [].concat.apply([], d2) : d2[0];
  return e ? Ta.call(this, d2) : d2;
}
function Ua(a2, c2, b2, e) {
  var d2 = e[0];
  if (d2[0] && d2[0].query) return a2[c2].apply(a2, d2);
  if (!(c2 !== "and" && c2 !== "not" || a2.result.length || a2.await || d2.suggest)) return e.length > 1 && (d2 = e[e.length - 1]), (e = d2.resolve) ? a2.await || a2.result : a2;
  let f2 = [], g2 = 0, k2 = 0, h2, l2, m2, p2, u2;
  for (c2 = 0; c2 < e.length; c2++) if (d2 = e[c2]) {
    var r2 = void 0;
    if (d2.constructor === X) r2 = d2.await || d2.result;
    else if (d2.then || d2.constructor === Array) r2 = d2;
    else {
      g2 = d2.limit || 0;
      k2 = d2.offset || 0;
      m2 = d2.suggest;
      l2 = d2.resolve;
      h2 = ((p2 = d2.highlight || a2.highlight) || d2.enrich) && l2;
      r2 = d2.queue;
      let t2 = d2.async || r2, n2 = d2.index, q2 = d2.query;
      n2 ? a2.index || (a2.index = n2) : n2 = a2.index;
      if (q2 || d2.tag) {
        const x2 = d2.field || d2.pluck;
        x2 && (!q2 || a2.query && !p2 || (a2.query = q2, a2.field = x2, a2.highlight = p2), n2 = n2.index.get(x2));
        if (r2 && (u2 || a2.await)) {
          u2 = 1;
          let v2;
          const A2 = a2.C.length, D2 = new Promise(function(F2) {
            v2 = F2;
          });
          (function(F2, E2) {
            D2.h = function() {
              E2.index = null;
              E2.resolve = false;
              let B2 = t2 ? F2.searchAsync(E2) : F2.search(E2);
              if (B2.then) return B2.then(function(z2) {
                a2.C[A2] = z2 = z2.result || z2;
                v2(z2);
                return z2;
              });
              B2 = B2.result || B2;
              v2(B2);
              return B2;
            };
          })(n2, Object.assign({}, d2));
          a2.C.push(D2);
          f2[c2] = D2;
          continue;
        } else d2.resolve = false, d2.index = null, r2 = t2 ? n2.searchAsync(d2) : n2.search(d2), d2.resolve = l2, d2.index = n2;
      } else if (d2.and) r2 = Va(d2, "and", n2);
      else if (d2.or) r2 = Va(d2, "or", n2);
      else if (d2.not) r2 = Va(d2, "not", n2);
      else if (d2.xor) r2 = Va(d2, "xor", n2);
      else continue;
    }
    r2.await ? (u2 = 1, r2 = r2.await) : r2.then ? (u2 = 1, r2 = r2.then(function(t2) {
      return t2.result || t2;
    })) : r2 = r2.result || r2;
    f2[c2] = r2;
  }
  u2 && !a2.await && (a2.await = new Promise(function(t2) {
    a2.return = t2;
  }));
  if (u2) {
    const t2 = Promise.all(f2).then(function(n2) {
      for (let q2 = 0; q2 < a2.C.length; q2++) if (a2.C[q2] === t2) {
        a2.C[q2] = function() {
          return b2.call(a2, n2, g2, k2, h2, l2, m2, p2);
        };
        break;
      }
      Wa(a2);
    });
    a2.C.push(t2);
  } else if (a2.await) a2.C.push(function() {
    return b2.call(a2, f2, g2, k2, h2, l2, m2, p2);
  });
  else return b2.call(a2, f2, g2, k2, h2, l2, m2, p2);
  return l2 ? a2.await || a2.result : a2;
}
function Va(a2, c2, b2) {
  a2 = a2[c2];
  const e = a2[0] || a2;
  e.index || (e.index = b2);
  b2 = new X(e);
  a2.length > 1 && (b2 = b2[c2].apply(b2, a2.slice(1)));
  return b2;
}
X.prototype.or = function() {
  return Ua(this, "or", Xa, arguments);
};
function Xa(a2, c2, b2, e, d2, f2, g2) {
  a2.length && (this.result.length && a2.push(this.result), a2.length < 2 ? this.result = a2[0] : (this.result = Ya(a2, c2, b2, false, this.h), b2 = 0));
  d2 && (this.await = null);
  return d2 ? this.resolve(c2, b2, e, g2) : this;
}
X.prototype.and = function() {
  return Ua(this, "and", Za, arguments);
};
function Za(a2, c2, b2, e, d2, f2, g2) {
  if (!f2 && !this.result.length) return d2 ? this.result : this;
  let k2;
  if (a2.length) if (this.result.length && a2.unshift(this.result), a2.length < 2) this.result = a2[0];
  else {
    let h2 = 0;
    for (let l2 = 0, m2, p2; l2 < a2.length; l2++) if ((m2 = a2[l2]) && (p2 = m2.length)) h2 < p2 && (h2 = p2);
    else if (!f2) {
      h2 = 0;
      break;
    }
    h2 ? (this.result = $a(a2, h2, c2, b2, f2, this.h, d2), k2 = true) : this.result = [];
  }
  else f2 || (this.result = a2);
  d2 && (this.await = null);
  return d2 ? this.resolve(c2, b2, e, g2, k2) : this;
}
X.prototype.xor = function() {
  return Ua(this, "xor", ab, arguments);
};
function ab(a2, c2, b2, e, d2, f2, g2) {
  if (a2.length) if (this.result.length && a2.unshift(this.result), a2.length < 2) this.result = a2[0];
  else {
    a: {
      f2 = b2;
      var k2 = this.h;
      const h2 = [], l2 = I();
      let m2 = 0;
      for (let p2 = 0, u2; p2 < a2.length; p2++) if (u2 = a2[p2]) {
        m2 < u2.length && (m2 = u2.length);
        for (let r2 = 0, t2; r2 < u2.length; r2++) if (t2 = u2[r2]) for (let n2 = 0, q2; n2 < t2.length; n2++) q2 = t2[n2], l2[q2] = l2[q2] ? 2 : 1;
      }
      for (let p2 = 0, u2, r2 = 0; p2 < m2; p2++) for (let t2 = 0, n2; t2 < a2.length; t2++) if (n2 = a2[t2]) {
        if (u2 = n2[p2]) {
          for (let q2 = 0, x2; q2 < u2.length; q2++) if (x2 = u2[q2], l2[x2] === 1) if (f2) f2--;
          else if (d2) {
            if (h2.push(x2), h2.length === c2) {
              a2 = h2;
              break a;
            }
          } else {
            const v2 = p2 + (t2 ? k2 : 0);
            h2[v2] || (h2[v2] = []);
            h2[v2].push(x2);
            if (++r2 === c2) {
              a2 = h2;
              break a;
            }
          }
        }
      }
      a2 = h2;
    }
    this.result = a2;
    k2 = true;
  }
  else f2 || (this.result = a2);
  d2 && (this.await = null);
  return d2 ? this.resolve(c2, b2, e, g2, k2) : this;
}
X.prototype.not = function() {
  return Ua(this, "not", bb, arguments);
};
function bb(a2, c2, b2, e, d2, f2, g2) {
  if (!f2 && !this.result.length) return d2 ? this.result : this;
  if (a2.length && this.result.length) {
    a: {
      f2 = b2;
      var k2 = [];
      a2 = new Set(a2.flat().flat());
      for (let h2 = 0, l2, m2 = 0; h2 < this.result.length; h2++) if (l2 = this.result[h2]) {
        for (let p2 = 0, u2; p2 < l2.length; p2++) if (u2 = l2[p2], !a2.has(u2)) {
          if (f2) f2--;
          else if (d2) {
            if (k2.push(u2), k2.length === c2) {
              a2 = k2;
              break a;
            }
          } else if (k2[h2] || (k2[h2] = []), k2[h2].push(u2), ++m2 === c2) {
            a2 = k2;
            break a;
          }
        }
      }
      a2 = k2;
    }
    this.result = a2;
    k2 = true;
  }
  d2 && (this.await = null);
  return d2 ? this.resolve(c2, b2, e, g2, k2) : this;
}
function cb(a2, c2, b2, e, d2) {
  let f2, g2, k2;
  typeof d2 === "string" ? (f2 = d2, d2 = "") : f2 = d2.template;
  g2 = f2.indexOf("$1");
  k2 = f2.substring(g2 + 2);
  g2 = f2.substring(0, g2);
  let h2 = d2 && d2.boundary, l2 = !d2 || d2.clip !== false, m2 = d2 && d2.merge && k2 && g2 && new RegExp(k2 + " " + g2, "g");
  d2 = d2 && d2.ellipsis;
  var p2 = 0;
  if (typeof d2 === "object") {
    var u2 = d2.template;
    p2 = u2.length - 2;
    d2 = d2.pattern;
  }
  typeof d2 !== "string" && (d2 = d2 === false ? "" : "...");
  p2 && (d2 = u2.replace("$1", d2));
  u2 = d2.length - p2;
  let r2, t2;
  typeof h2 === "object" && (r2 = h2.before, r2 === 0 && (r2 = -1), t2 = h2.after, t2 === 0 && (t2 = -1), h2 = h2.total || 9e5);
  p2 = /* @__PURE__ */ new Map();
  for (let Oa2 = 0, da2, db, pa2; Oa2 < c2.length; Oa2++) {
    let qa;
    if (e) qa = c2, pa2 = e;
    else {
      var n2 = c2[Oa2];
      pa2 = n2.field;
      if (!pa2) continue;
      qa = n2.result;
    }
    db = b2.get(pa2);
    da2 = db.encoder;
    n2 = p2.get(da2);
    typeof n2 !== "string" && (n2 = da2.encode(a2), p2.set(da2, n2));
    for (let ya2 = 0; ya2 < qa.length; ya2++) {
      var q2 = qa[ya2].doc;
      if (!q2) continue;
      q2 = ca(q2, pa2);
      if (!q2) continue;
      var x2 = q2.trim().split(/\s+/);
      if (!x2.length) continue;
      q2 = "";
      var v2 = [];
      let za = [];
      var A2 = -1, D2 = -1, F2 = 0;
      for (var E2 = 0; E2 < x2.length; E2++) {
        var B2 = x2[E2], z2 = da2.encode(B2);
        z2 = z2.length > 1 ? z2.join(" ") : z2[0];
        let y2;
        if (z2 && B2) {
          var C2 = B2.length, J2 = (da2.split ? B2.replace(da2.split, "") : B2).length - z2.length, G2 = "", N2 = 0;
          for (var O2 = 0; O2 < n2.length; O2++) {
            var P2 = n2[O2];
            if (P2) {
              var L2 = P2.length;
              L2 += J2 < 0 ? 0 : J2;
              N2 && L2 <= N2 || (P2 = z2.indexOf(P2), P2 > -1 && (G2 = (P2 ? B2.substring(0, P2) : "") + g2 + B2.substring(P2, P2 + L2) + k2 + (P2 + L2 < C2 ? B2.substring(P2 + L2) : ""), N2 = L2, y2 = true));
            }
          }
          G2 && (h2 && (A2 < 0 && (A2 = q2.length + (q2 ? 1 : 0)), D2 = q2.length + (q2 ? 1 : 0) + G2.length, F2 += C2, za.push(v2.length), v2.push({ match: G2 })), q2 += (q2 ? " " : "") + G2);
        }
        if (!y2) B2 = x2[E2], q2 += (q2 ? " " : "") + B2, h2 && v2.push({ text: B2 });
        else if (h2 && F2 >= h2) break;
      }
      F2 = za.length * (f2.length - 2);
      if (r2 || t2 || h2 && q2.length - F2 > h2) if (F2 = h2 + F2 - u2 * 2, E2 = D2 - A2, r2 > 0 && (E2 += r2), t2 > 0 && (E2 += t2), E2 <= F2) x2 = r2 ? A2 - (r2 > 0 ? r2 : 0) : A2 - ((F2 - E2) / 2 | 0), v2 = t2 ? D2 + (t2 > 0 ? t2 : 0) : x2 + F2, l2 || (x2 > 0 && q2.charAt(x2) !== " " && q2.charAt(x2 - 1) !== " " && (x2 = q2.indexOf(" ", x2), x2 < 0 && (x2 = 0)), v2 < q2.length && q2.charAt(v2 - 1) !== " " && q2.charAt(v2) !== " " && (v2 = q2.lastIndexOf(" ", v2), v2 < D2 ? v2 = D2 : ++v2)), q2 = (x2 ? d2 : "") + q2.substring(x2, v2) + (v2 < q2.length ? d2 : "");
      else {
        D2 = [];
        A2 = {};
        F2 = {};
        E2 = {};
        B2 = {};
        z2 = {};
        G2 = J2 = C2 = 0;
        for (O2 = N2 = 1; ; ) {
          var U2 = void 0;
          for (let y2 = 0, K2; y2 < za.length; y2++) {
            K2 = za[y2];
            if (G2) if (J2 !== G2) {
              if (E2[y2 + 1]) continue;
              K2 += G2;
              if (A2[K2]) {
                C2 -= u2;
                F2[y2 + 1] = 1;
                E2[y2 + 1] = 1;
                continue;
              }
              if (K2 >= v2.length - 1) {
                if (K2 >= v2.length) {
                  E2[y2 + 1] = 1;
                  K2 >= x2.length && (F2[y2 + 1] = 1);
                  continue;
                }
                C2 -= u2;
              }
              q2 = v2[K2].text;
              if (L2 = t2 && z2[y2]) if (L2 > 0) {
                if (q2.length > L2) if (E2[y2 + 1] = 1, l2) q2 = q2.substring(0, L2);
                else continue;
                (L2 -= q2.length) || (L2 = -1);
                z2[y2] = L2;
              } else {
                E2[y2 + 1] = 1;
                continue;
              }
              if (C2 + q2.length + 1 <= h2) q2 = " " + q2, D2[y2] += q2;
              else if (l2) U2 = h2 - C2 - 1, U2 > 0 && (q2 = " " + q2.substring(0, U2), D2[y2] += q2), E2[y2 + 1] = 1;
              else {
                E2[y2 + 1] = 1;
                continue;
              }
            } else {
              if (E2[y2]) continue;
              K2 -= J2;
              if (A2[K2]) {
                C2 -= u2;
                E2[y2] = 1;
                F2[y2] = 1;
                continue;
              }
              if (K2 <= 0) {
                if (K2 < 0) {
                  E2[y2] = 1;
                  F2[y2] = 1;
                  continue;
                }
                C2 -= u2;
              }
              q2 = v2[K2].text;
              if (L2 = r2 && B2[y2]) if (L2 > 0) {
                if (q2.length > L2) if (E2[y2] = 1, l2) q2 = q2.substring(q2.length - L2);
                else continue;
                (L2 -= q2.length) || (L2 = -1);
                B2[y2] = L2;
              } else {
                E2[y2] = 1;
                continue;
              }
              if (C2 + q2.length + 1 <= h2) q2 += " ", D2[y2] = q2 + D2[y2];
              else if (l2) U2 = q2.length + 1 - (h2 - C2), U2 >= 0 && U2 < q2.length && (q2 = q2.substring(U2) + " ", D2[y2] = q2 + D2[y2]), E2[y2] = 1;
              else {
                E2[y2] = 1;
                continue;
              }
            }
            else {
              q2 = v2[K2].match;
              r2 && (B2[y2] = r2);
              t2 && (z2[y2] = t2);
              y2 && C2++;
              let Pa2;
              K2 ? !y2 && u2 && (C2 += u2) : (F2[y2] = 1, E2[y2] = 1);
              K2 >= x2.length - 1 ? Pa2 = 1 : K2 < v2.length - 1 && v2[K2 + 1].match ? Pa2 = 1 : u2 && (C2 += u2);
              C2 -= f2.length - 2;
              if (!y2 || C2 + q2.length <= h2) D2[y2] = q2;
              else {
                U2 = N2 = O2 = F2[y2] = 0;
                break;
              }
              Pa2 && (F2[y2 + 1] = 1, E2[y2 + 1] = 1);
            }
            C2 += q2.length;
            U2 = A2[K2] = 1;
          }
          if (U2) J2 === G2 ? G2++ : J2++;
          else {
            J2 === G2 ? N2 = 0 : O2 = 0;
            if (!N2 && !O2) break;
            N2 ? (J2++, G2 = J2) : G2++;
          }
        }
        q2 = "";
        for (let y2 = 0, K2; y2 < D2.length; y2++) K2 = (F2[y2] ? y2 ? " " : "" : (y2 && !d2 ? " " : "") + d2) + D2[y2], q2 += K2;
        d2 && !F2[D2.length] && (q2 += d2);
      }
      m2 && (q2 = q2.replace(m2, " "));
      qa[ya2].highlight = q2;
    }
    if (e) break;
  }
  return c2;
}
function X(a2, c2) {
  if (!this || this.constructor !== X) return new X(a2, c2);
  let b2 = 0, e, d2, f2, g2, k2, h2;
  if (a2 && a2.index) {
    const l2 = a2;
    c2 = l2.index;
    b2 = l2.boost || 0;
    if (d2 = l2.query) {
      f2 = l2.field || l2.pluck;
      g2 = l2.highlight;
      const m2 = l2.resolve;
      a2 = l2.async || l2.queue;
      l2.resolve = false;
      l2.index = null;
      a2 = a2 ? c2.searchAsync(l2) : c2.search(l2);
      l2.resolve = m2;
      l2.index = c2;
      a2 = a2.result || a2;
    } else a2 = [];
  }
  if (a2 && a2.then) {
    const l2 = this;
    a2 = a2.then(function(m2) {
      l2.C[0] = l2.result = m2.result || m2;
      Wa(l2);
    });
    e = [a2];
    a2 = [];
    k2 = new Promise(function(m2) {
      h2 = m2;
    });
  }
  this.index = c2 || null;
  this.result = a2 || [];
  this.h = b2;
  this.C = e || [];
  this.await = k2 || null;
  this.return = h2 || null;
  this.highlight = g2 || null;
  this.query = d2 || "";
  this.field = f2 || "";
}
w = X.prototype;
w.limit = function(a2) {
  if (this.await) {
    const c2 = this;
    this.C.push(function() {
      return c2.limit(a2).result;
    });
  } else if (this.result.length) {
    const c2 = [];
    for (let b2 = 0, e; b2 < this.result.length; b2++) if (e = this.result[b2]) if (e.length <= a2) {
      if (c2[b2] = e, a2 -= e.length, !a2) break;
    } else {
      c2[b2] = e.slice(0, a2);
      break;
    }
    this.result = c2;
  }
  return this;
};
w.offset = function(a2) {
  if (this.await) {
    const c2 = this;
    this.C.push(function() {
      return c2.offset(a2).result;
    });
  } else if (this.result.length) {
    const c2 = [];
    for (let b2 = 0, e; b2 < this.result.length; b2++) if (e = this.result[b2]) e.length <= a2 ? a2 -= e.length : (c2[b2] = e.slice(a2), a2 = 0);
    this.result = c2;
  }
  return this;
};
w.boost = function(a2) {
  if (this.await) {
    const c2 = this;
    this.C.push(function() {
      return c2.boost(a2).result;
    });
  } else this.h += a2;
  return this;
};
function Wa(a2, c2) {
  let b2 = a2.result;
  var e = a2.await;
  a2.await = null;
  for (let d2 = 0, f2; d2 < a2.C.length; d2++) if (f2 = a2.C[d2]) {
    if (typeof f2 === "function") b2 = f2(), a2.C[d2] = b2 = b2.result || b2, d2--;
    else if (f2.h) b2 = f2.h(), a2.C[d2] = b2 = b2.result || b2, d2--;
    else if (f2.then) return a2.await = e;
  }
  e = a2.return;
  a2.C = [];
  a2.return = null;
  c2 || e(b2);
  return b2;
}
w.resolve = function(a2, c2, b2, e, d2) {
  let f2 = this.await ? Wa(this, true) : this.result;
  if (f2.then) {
    const g2 = this;
    return f2.then(function() {
      return g2.resolve(a2, c2, b2, e, d2);
    });
  }
  f2.length && (typeof a2 === "object" ? (e = a2.highlight || this.highlight, b2 = !!e || a2.enrich, c2 = a2.offset, a2 = a2.limit) : (e = e || this.highlight, b2 = !!e || b2), f2 = d2 ? b2 ? Ta.call(this.index, f2) : f2 : Sa.call(this.index, f2, a2 || 100, c2, b2));
  return this.finalize(f2, e);
};
w.finalize = function(a2, c2) {
  if (a2.then) {
    const e = this;
    return a2.then(function(d2) {
      return e.finalize(d2, c2);
    });
  }
  c2 && a2.length && this.query && (a2 = cb(this.query, a2, this.index.index, this.field, c2));
  const b2 = this.return;
  this.highlight = this.index = this.result = this.C = this.await = this.return = null;
  this.query = this.field = "";
  b2 && b2(a2);
  return a2;
};
function $a(a2, c2, b2, e, d2, f2, g2) {
  const k2 = a2.length;
  let h2 = [], l2, m2;
  l2 = I();
  for (let p2 = 0, u2, r2, t2, n2; p2 < c2; p2++) for (let q2 = 0; q2 < k2; q2++) if (t2 = a2[q2], p2 < t2.length && (u2 = t2[p2])) for (let x2 = 0; x2 < u2.length; x2++) {
    r2 = u2[x2];
    (m2 = l2[r2]) ? l2[r2]++ : (m2 = 0, l2[r2] = 1);
    n2 = h2[m2] || (h2[m2] = []);
    if (!g2) {
      let v2 = p2 + (q2 || !d2 ? 0 : f2 || 0);
      n2 = n2[v2] || (n2[v2] = []);
    }
    n2.push(r2);
    if (g2 && b2 && m2 === k2 - 1 && n2.length - e === b2) return e ? n2.slice(e) : n2;
  }
  if (a2 = h2.length) if (d2) h2 = h2.length > 1 ? Ya(h2, b2, e, g2, f2) : (h2 = h2[0]) && b2 && h2.length > b2 || e ? h2.slice(e, b2 + e) : h2;
  else {
    if (a2 < k2) return [];
    h2 = h2[a2 - 1];
    if (b2 || e) if (g2) {
      if (h2.length > b2 || e) h2 = h2.slice(e, b2 + e);
    } else {
      d2 = [];
      for (let p2 = 0, u2; p2 < h2.length; p2++) if (u2 = h2[p2]) if (e && u2.length > e) e -= u2.length;
      else {
        if (b2 && u2.length > b2 || e) u2 = u2.slice(e, b2 + e), b2 -= u2.length, e && (e -= u2.length);
        d2.push(u2);
        if (!b2) break;
      }
      h2 = d2;
    }
  }
  return h2;
}
function Ya(a2, c2, b2, e, d2) {
  const f2 = [], g2 = I();
  let k2;
  var h2 = a2.length;
  let l2;
  if (e) for (d2 = h2 - 1; d2 >= 0; d2--) {
    if (l2 = (e = a2[d2]) && e.length) {
      for (h2 = 0; h2 < l2; h2++) if (k2 = e[h2], !g2[k2]) {
        if (g2[k2] = 1, b2) b2--;
        else if (f2.push(k2), f2.length === c2) return f2;
      }
    }
  }
  else for (let m2 = h2 - 1, p2, u2 = 0; m2 >= 0; m2--) {
    p2 = a2[m2];
    for (let r2 = 0; r2 < p2.length; r2++) if (l2 = (e = p2[r2]) && e.length) {
      for (let t2 = 0; t2 < l2; t2++) if (k2 = e[t2], !g2[k2]) if (g2[k2] = 1, b2) b2--;
      else {
        let n2 = (r2 + (m2 < h2 - 1 ? d2 || 0 : 0)) / (m2 + 1) | 0;
        (f2[n2] || (f2[n2] = [])).push(k2);
        if (++u2 === c2) return f2;
      }
    }
  }
  return f2;
}
function eb(a2, c2, b2, e, d2) {
  const f2 = I(), g2 = [];
  for (let k2 = 0, h2; k2 < c2.length; k2++) {
    h2 = c2[k2];
    for (let l2 = 0; l2 < h2.length; l2++) f2[h2[l2]] = 1;
  }
  if (d2) for (let k2 = 0, h2; k2 < a2.length; k2++) {
    if (h2 = a2[k2], f2[h2]) {
      if (e) e--;
      else if (g2.push(h2), f2[h2] = 0, b2 && --b2 === 0) break;
    }
  }
  else for (let k2 = 0, h2, l2; k2 < a2.result.length; k2++) for (h2 = a2.result[k2], c2 = 0; c2 < h2.length; c2++) l2 = h2[c2], f2[l2] && ((g2[k2] || (g2[k2] = [])).push(l2), f2[l2] = 0);
  return g2;
}
Na.prototype.search = function(a2, c2, b2, e) {
  b2 || (!c2 && ba(a2) ? (b2 = a2, a2 = "") : ba(c2) && (b2 = c2, c2 = 0));
  let d2 = [];
  var f2 = [];
  let g2;
  let k2, h2, l2, m2, p2;
  let u2 = 0, r2 = true, t2;
  if (b2) {
    b2.constructor === Array && (b2 = { index: b2 });
    a2 = b2.query || a2;
    g2 = b2.pluck;
    k2 = b2.merge;
    l2 = b2.boost;
    p2 = g2 || b2.field || (p2 = b2.index) && (p2.index ? null : p2);
    var n2 = this.tag && b2.tag;
    h2 = b2.suggest;
    r2 = b2.resolve !== false;
    m2 = b2.cache;
    t2 = r2 && this.store && b2.highlight;
    var q2 = !!t2 || r2 && this.store && b2.enrich;
    c2 = b2.limit || c2;
    var x2 = b2.offset || 0;
    c2 || (c2 = r2 ? 100 : 0);
    if (n2 && (!this.db || !e)) {
      n2.constructor !== Array && (n2 = [n2]);
      var v2 = [];
      for (let B2 = 0, z2; B2 < n2.length; B2++) if (z2 = n2[B2], z2.field && z2.tag) {
        var A2 = z2.tag;
        if (A2.constructor === Array) for (var D2 = 0; D2 < A2.length; D2++) v2.push(z2.field, A2[D2]);
        else v2.push(z2.field, A2);
      } else {
        A2 = Object.keys(z2);
        for (let C2 = 0, J2, G2; C2 < A2.length; C2++) if (J2 = A2[C2], G2 = z2[J2], G2.constructor === Array) for (D2 = 0; D2 < G2.length; D2++) v2.push(J2, G2[D2]);
        else v2.push(J2, G2);
      }
      n2 = v2;
      if (!a2) {
        f2 = [];
        if (v2.length) for (n2 = 0; n2 < v2.length; n2 += 2) {
          if (this.db) {
            e = this.index.get(v2[n2]);
            if (!e) continue;
            f2.push(e = e.db.tag(v2[n2 + 1], c2, x2, q2));
          } else e = fb.call(this, v2[n2], v2[n2 + 1], c2, x2, q2);
          d2.push(r2 ? { field: v2[n2], tag: v2[n2 + 1], result: e } : [e]);
        }
        if (f2.length) {
          const B2 = this;
          return Promise.all(f2).then(function(z2) {
            for (let C2 = 0; C2 < z2.length; C2++) r2 ? d2[C2].result = z2[C2] : d2[C2] = z2[C2];
            return r2 ? d2 : new X(d2.length > 1 ? $a(d2, 1, 0, 0, h2, l2) : d2[0], B2);
          });
        }
        return r2 ? d2 : new X(d2.length > 1 ? $a(d2, 1, 0, 0, h2, l2) : d2[0], this);
      }
    }
    r2 || g2 || !(p2 = p2 || this.field) || (M(p2) ? g2 = p2 : (p2.constructor === Array && p2.length === 1 && (p2 = p2[0]), g2 = p2.field || p2.index));
    p2 && p2.constructor !== Array && (p2 = [p2]);
  }
  p2 || (p2 = this.field);
  let F2;
  v2 = (this.worker || this.db) && !e && [];
  for (let B2 = 0, z2, C2, J2; B2 < p2.length; B2++) {
    C2 = p2[B2];
    if (this.db && this.tag && !this.B[B2]) continue;
    let G2;
    M(C2) || (G2 = C2, C2 = G2.field, a2 = G2.query || a2, c2 = aa(G2.limit, c2), x2 = aa(G2.offset, x2), h2 = aa(G2.suggest, h2), t2 = r2 && this.store && aa(G2.highlight, t2), q2 = !!t2 || r2 && this.store && aa(G2.enrich, q2), m2 = aa(G2.cache, m2));
    if (e) z2 = e[B2];
    else {
      A2 = G2 || b2 || {};
      D2 = A2.enrich;
      var E2 = this.index.get(C2);
      n2 && (this.db && (A2.tag = n2, A2.field = p2, F2 = E2.db.support_tag_search), !F2 && D2 && (A2.enrich = false), F2 || (A2.limit = 0, A2.offset = 0));
      z2 = m2 ? E2.searchCache(a2, n2 && !F2 ? 0 : c2, A2) : E2.search(a2, n2 && !F2 ? 0 : c2, A2);
      n2 && !F2 && (A2.limit = c2, A2.offset = x2);
      D2 && (A2.enrich = D2);
      if (v2) {
        v2[B2] = z2;
        continue;
      }
    }
    J2 = (z2 = z2.result || z2) && z2.length;
    if (n2 && J2) {
      A2 = [];
      D2 = 0;
      if (this.db && e) {
        if (!F2) for (E2 = p2.length; E2 < e.length; E2++) {
          let N2 = e[E2];
          if (N2 && N2.length) D2++, A2.push(N2);
          else if (!h2) return r2 ? d2 : new X(d2, this);
        }
      } else for (let N2 = 0, O2, P2; N2 < n2.length; N2 += 2) {
        O2 = this.tag.get(n2[N2]);
        if (!O2) if (h2) continue;
        else return r2 ? d2 : new X(d2, this);
        if (P2 = (O2 = O2 && O2.get(n2[N2 + 1])) && O2.length) D2++, A2.push(O2);
        else if (!h2) return r2 ? d2 : new X(d2, this);
      }
      if (D2) {
        z2 = eb(z2, A2, c2, x2, r2);
        J2 = z2.length;
        if (!J2 && !h2) return r2 ? z2 : new X(z2, this);
        D2--;
      }
    }
    if (J2) f2[u2] = C2, d2.push(z2), u2++;
    else if (p2.length === 1) return r2 ? d2 : new X(
      d2,
      this
    );
  }
  if (v2) {
    if (this.db && n2 && n2.length && !F2) for (q2 = 0; q2 < n2.length; q2 += 2) {
      f2 = this.index.get(n2[q2]);
      if (!f2) if (h2) continue;
      else return r2 ? d2 : new X(d2, this);
      v2.push(f2.db.tag(n2[q2 + 1], c2, x2, false));
    }
    const B2 = this;
    return Promise.all(v2).then(function(z2) {
      b2 && (b2.resolve = r2);
      z2.length && (z2 = B2.search(a2, c2, b2, z2));
      return z2;
    });
  }
  if (!u2) return r2 ? d2 : new X(d2, this);
  if (g2 && (!q2 || !this.store)) return d2 = d2[0], r2 ? d2 : new X(d2, this);
  v2 = [];
  for (x2 = 0; x2 < f2.length; x2++) {
    n2 = d2[x2];
    q2 && n2.length && typeof n2[0].doc === "undefined" && (this.db ? v2.push(n2 = this.index.get(this.field[0]).db.enrich(n2)) : n2 = Ta.call(this, n2));
    if (g2) return r2 ? t2 ? cb(a2, n2, this.index, g2, t2) : n2 : new X(n2, this);
    d2[x2] = { field: f2[x2], result: n2 };
  }
  if (q2 && this.db && v2.length) {
    const B2 = this;
    return Promise.all(v2).then(function(z2) {
      for (let C2 = 0; C2 < z2.length; C2++) d2[C2].result = z2[C2];
      t2 && (d2 = cb(a2, d2, B2.index, g2, t2));
      return k2 ? gb(d2) : d2;
    });
  }
  t2 && (d2 = cb(a2, d2, this.index, g2, t2));
  return k2 ? gb(d2) : d2;
};
function gb(a2) {
  const c2 = [], b2 = I(), e = I();
  for (let d2 = 0, f2, g2, k2, h2, l2, m2, p2; d2 < a2.length; d2++) {
    f2 = a2[d2];
    g2 = f2.field;
    k2 = f2.result;
    for (let u2 = 0; u2 < k2.length; u2++) if (l2 = k2[u2], typeof l2 !== "object" ? l2 = { id: h2 = l2 } : h2 = l2.id, (m2 = b2[h2]) ? m2.push(g2) : (l2.field = b2[h2] = [g2], c2.push(l2)), p2 = l2.highlight) m2 = e[h2], m2 || (e[h2] = m2 = {}, l2.highlight = m2), m2[g2] = p2;
  }
  return c2;
}
function fb(a2, c2, b2, e, d2) {
  a2 = this.tag.get(a2);
  if (!a2) return [];
  a2 = a2.get(c2);
  if (!a2) return [];
  c2 = a2.length - e;
  if (c2 > 0) {
    if (b2 && c2 > b2 || e) a2 = a2.slice(e, e + b2);
    d2 && (a2 = Ta.call(this, a2));
  }
  return a2;
}
function Ta(a2) {
  if (!this || !this.store) return a2;
  if (this.db) return this.index.get(this.field[0]).db.enrich(a2);
  const c2 = Array(a2.length);
  for (let b2 = 0, e; b2 < a2.length; b2++) e = a2[b2], c2[b2] = { id: e, doc: this.store.get(e) };
  return c2;
}
function Na(a2) {
  if (!this || this.constructor !== Na) return new Na(a2);
  const c2 = a2.document || a2.doc || a2;
  let b2, e;
  this.B = [];
  this.field = [];
  this.D = [];
  this.key = (b2 = c2.key || c2.id) && hb(b2, this.D) || "id";
  (e = a2.keystore || 0) && (this.keystore = e);
  this.fastupdate = !!a2.fastupdate;
  this.reg = !this.fastupdate || a2.worker || a2.db ? e ? new S(e) : /* @__PURE__ */ new Set() : e ? new R(e) : /* @__PURE__ */ new Map();
  this.h = (b2 = c2.store || null) && b2 && b2 !== true && [];
  this.store = b2 ? e ? new R(e) : /* @__PURE__ */ new Map() : null;
  this.cache = (b2 = a2.cache || null) && new ma(b2);
  a2.cache = false;
  this.worker = a2.worker || false;
  this.priority = a2.priority || 4;
  this.index = ib.call(this, a2, c2);
  this.tag = null;
  if (b2 = c2.tag) {
    if (typeof b2 === "string" && (b2 = [b2]), b2.length) {
      this.tag = /* @__PURE__ */ new Map();
      this.A = [];
      this.F = [];
      for (let d2 = 0, f2, g2; d2 < b2.length; d2++) {
        f2 = b2[d2];
        g2 = f2.field || f2;
        if (!g2) throw Error("The tag field from the document descriptor is undefined.");
        f2.custom ? this.A[d2] = f2.custom : (this.A[d2] = hb(g2, this.D), f2.filter && (typeof this.A[d2] === "string" && (this.A[d2] = new String(this.A[d2])), this.A[d2].G = f2.filter));
        this.F[d2] = g2;
        this.tag.set(g2, /* @__PURE__ */ new Map());
      }
    }
  }
  if (this.worker) {
    this.fastupdate = false;
    a2 = [];
    for (const d2 of this.index.values()) d2.then && a2.push(d2);
    if (a2.length) {
      const d2 = this;
      return Promise.all(a2).then(function(f2) {
        let g2 = 0;
        for (const k2 of d2.index.entries()) {
          const h2 = k2[0];
          let l2 = k2[1];
          l2.then && (l2 = f2[g2], d2.index.set(h2, l2), g2++);
        }
        return d2;
      });
    }
  } else a2.db && (this.fastupdate = false, this.mount(a2.db));
}
w = Na.prototype;
w.mount = function(a2) {
  let c2 = this.field;
  if (this.tag) for (let f2 = 0, g2; f2 < this.F.length; f2++) {
    g2 = this.F[f2];
    var b2 = void 0;
    this.index.set(g2, b2 = new T({}, this.reg));
    c2 === this.field && (c2 = c2.slice(0));
    c2.push(g2);
    b2.tag = this.tag.get(g2);
  }
  b2 = [];
  const e = { db: a2.db, type: a2.type, fastupdate: a2.fastupdate };
  for (let f2 = 0, g2, k2; f2 < c2.length; f2++) {
    e.field = k2 = c2[f2];
    g2 = this.index.get(k2);
    const h2 = new a2.constructor(a2.id, e);
    h2.id = a2.id;
    b2[f2] = h2.mount(g2);
    g2.document = true;
    f2 ? g2.bypass = true : g2.store = this.store;
  }
  const d2 = this;
  return this.db = Promise.all(b2).then(function() {
    d2.db = true;
  });
};
w.commit = async function() {
  const a2 = [];
  for (const c2 of this.index.values()) a2.push(c2.commit());
  await Promise.all(a2);
  this.reg.clear();
};
w.destroy = function() {
  const a2 = [];
  for (const c2 of this.index.values()) a2.push(c2.destroy());
  return Promise.all(a2);
};
function ib(a2, c2) {
  const b2 = /* @__PURE__ */ new Map();
  let e = c2.index || c2.field || c2;
  M(e) && (e = [e]);
  for (let f2 = 0, g2, k2; f2 < e.length; f2++) {
    g2 = e[f2];
    M(g2) || (k2 = g2, g2 = g2.field);
    k2 = ba(k2) ? Object.assign({}, a2, k2) : a2;
    if (this.worker) {
      var d2 = void 0;
      d2 = (d2 = k2.encoder) && d2.encode ? d2 : new ka(typeof d2 === "string" ? va[d2] : d2 || {});
      d2 = new La(k2, d2);
      b2.set(g2, d2);
    }
    this.worker || b2.set(g2, new T(k2, this.reg));
    k2.custom ? this.B[f2] = k2.custom : (this.B[f2] = hb(g2, this.D), k2.filter && (typeof this.B[f2] === "string" && (this.B[f2] = new String(this.B[f2])), this.B[f2].G = k2.filter));
    this.field[f2] = g2;
  }
  if (this.h) {
    a2 = c2.store;
    M(a2) && (a2 = [a2]);
    for (let f2 = 0, g2, k2; f2 < a2.length; f2++) g2 = a2[f2], k2 = g2.field || g2, g2.custom ? (this.h[f2] = g2.custom, g2.custom.O = k2) : (this.h[f2] = hb(k2, this.D), g2.filter && (typeof this.h[f2] === "string" && (this.h[f2] = new String(this.h[f2])), this.h[f2].G = g2.filter));
  }
  return b2;
}
function hb(a2, c2) {
  const b2 = a2.split(":");
  let e = 0;
  for (let d2 = 0; d2 < b2.length; d2++) a2 = b2[d2], a2[a2.length - 1] === "]" && (a2 = a2.substring(0, a2.length - 2)) && (c2[e] = true), a2 && (b2[e++] = a2);
  e < b2.length && (b2.length = e);
  return e > 1 ? b2 : b2[0];
}
w.append = function(a2, c2) {
  return this.add(a2, c2, true);
};
w.update = function(a2, c2) {
  return this.remove(a2).add(a2, c2);
};
w.remove = function(a2) {
  ba(a2) && (a2 = ca(a2, this.key));
  for (var c2 of this.index.values()) c2.remove(a2, true);
  if (this.reg.has(a2)) {
    if (this.tag && !this.fastupdate) for (let b2 of this.tag.values()) for (let e of b2) {
      c2 = e[0];
      const d2 = e[1], f2 = d2.indexOf(a2);
      f2 > -1 && (d2.length > 1 ? d2.splice(f2, 1) : b2.delete(c2));
    }
    this.store && this.store.delete(a2);
    this.reg.delete(a2);
  }
  this.cache && this.cache.remove(a2);
  return this;
};
w.clear = function() {
  const a2 = [];
  for (const c2 of this.index.values()) {
    const b2 = c2.clear();
    b2.then && a2.push(b2);
  }
  if (this.tag) for (const c2 of this.tag.values()) c2.clear();
  this.store && this.store.clear();
  this.cache && this.cache.clear();
  return a2.length ? Promise.all(a2) : this;
};
w.contain = function(a2) {
  return this.db ? this.index.get(this.field[0]).db.has(a2) : this.reg.has(a2);
};
w.cleanup = function() {
  for (const a2 of this.index.values()) a2.cleanup();
  return this;
};
w.get = function(a2) {
  return this.db ? this.index.get(this.field[0]).db.enrich(a2).then(function(c2) {
    return c2[0] && c2[0].doc || null;
  }) : this.store.get(a2) || null;
};
w.set = function(a2, c2) {
  typeof a2 === "object" && (c2 = a2, a2 = ca(c2, this.key));
  this.store.set(a2, c2);
  return this;
};
w.searchCache = la;
w.export = jb;
w.import = kb;
Fa(Na.prototype);
function lb(a2, c2 = 0) {
  let b2 = [], e = [];
  c2 && (c2 = 25e4 / c2 * 5e3 | 0);
  for (const d2 of a2.entries()) e.push(d2), e.length === c2 && (b2.push(e), e = []);
  e.length && b2.push(e);
  return b2;
}
function mb(a2, c2) {
  c2 || (c2 = /* @__PURE__ */ new Map());
  for (let b2 = 0, e; b2 < a2.length; b2++) e = a2[b2], c2.set(e[0], e[1]);
  return c2;
}
function nb(a2, c2 = 0) {
  let b2 = [], e = [];
  c2 && (c2 = 25e4 / c2 * 1e3 | 0);
  for (const d2 of a2.entries()) e.push([d2[0], lb(d2[1])[0] || []]), e.length === c2 && (b2.push(e), e = []);
  e.length && b2.push(e);
  return b2;
}
function ob(a2, c2) {
  c2 || (c2 = /* @__PURE__ */ new Map());
  for (let b2 = 0, e, d2; b2 < a2.length; b2++) e = a2[b2], d2 = c2.get(e[0]), c2.set(e[0], mb(e[1], d2));
  return c2;
}
function pb(a2) {
  let c2 = [], b2 = [];
  for (const e of a2.keys()) b2.push(e), b2.length === 25e4 && (c2.push(b2), b2 = []);
  b2.length && c2.push(b2);
  return c2;
}
function qb(a2, c2) {
  c2 || (c2 = /* @__PURE__ */ new Set());
  for (let b2 = 0; b2 < a2.length; b2++) c2.add(a2[b2]);
  return c2;
}
function rb(a2, c2, b2, e, d2, f2, g2 = 0) {
  const k2 = e && e.constructor === Array;
  var h2 = k2 ? e.shift() : e;
  if (!h2) return this.export(a2, c2, d2, f2 + 1);
  if ((h2 = a2((c2 ? c2 + "." : "") + (g2 + 1) + "." + b2, JSON.stringify(h2))) && h2.then) {
    const l2 = this;
    return h2.then(function() {
      return rb.call(l2, a2, c2, b2, k2 ? e : null, d2, f2, g2 + 1);
    });
  }
  return rb.call(this, a2, c2, b2, k2 ? e : null, d2, f2, g2 + 1);
}
function jb(a2, c2, b2 = 0, e = 0) {
  if (b2 < this.field.length) {
    const g2 = this.field[b2];
    if ((c2 = this.index.get(g2).export(a2, g2, b2, e = 1)) && c2.then) {
      const k2 = this;
      return c2.then(function() {
        return k2.export(a2, g2, b2 + 1);
      });
    }
    return this.export(a2, g2, b2 + 1);
  }
  let d2, f2;
  switch (e) {
    case 0:
      d2 = "reg";
      f2 = pb(this.reg);
      c2 = null;
      break;
    case 1:
      d2 = "tag";
      f2 = this.tag && nb(this.tag, this.reg.size);
      c2 = null;
      break;
    case 2:
      d2 = "doc";
      f2 = this.store && lb(this.store);
      c2 = null;
      break;
    default:
      return;
  }
  return rb.call(this, a2, c2, d2, f2 || null, b2, e);
}
function kb(a2, c2) {
  var b2 = a2.split(".");
  b2[b2.length - 1] === "json" && b2.pop();
  const e = b2.length > 2 ? b2[0] : "";
  b2 = b2.length > 2 ? b2[2] : b2[1];
  if (this.worker && e) return this.index.get(e).import(a2);
  if (c2) {
    typeof c2 === "string" && (c2 = JSON.parse(c2));
    if (e) return this.index.get(e).import(b2, c2);
    switch (b2) {
      case "reg":
        this.fastupdate = false;
        this.reg = qb(c2, this.reg);
        for (let d2 = 0, f2; d2 < this.field.length; d2++) f2 = this.index.get(this.field[d2]), f2.fastupdate = false, f2.reg = this.reg;
        if (this.worker) {
          c2 = [];
          for (const d2 of this.index.values()) c2.push(d2.import(a2));
          return Promise.all(c2);
        }
        break;
      case "tag":
        this.tag = ob(c2, this.tag);
        break;
      case "doc":
        this.store = mb(c2, this.store);
    }
  }
}
function sb(a2, c2) {
  let b2 = "";
  for (const e of a2.entries()) {
    a2 = e[0];
    const d2 = e[1];
    let f2 = "";
    for (let g2 = 0, k2; g2 < d2.length; g2++) {
      k2 = d2[g2] || [""];
      let h2 = "";
      for (let l2 = 0; l2 < k2.length; l2++) h2 += (h2 ? "," : "") + (c2 === "string" ? '"' + k2[l2] + '"' : k2[l2]);
      h2 = "[" + h2 + "]";
      f2 += (f2 ? "," : "") + h2;
    }
    f2 = '["' + a2 + '",[' + f2 + "]]";
    b2 += (b2 ? "," : "") + f2;
  }
  return b2;
}
T.prototype.remove = function(a2, c2) {
  const b2 = this.reg.size && (this.fastupdate ? this.reg.get(a2) : this.reg.has(a2));
  if (b2) {
    if (this.fastupdate) for (let e = 0, d2, f2; e < b2.length; e++) {
      if ((d2 = b2[e]) && (f2 = d2.length)) if (d2[f2 - 1] === a2) d2.pop();
      else {
        const g2 = d2.indexOf(a2);
        g2 >= 0 && d2.splice(g2, 1);
      }
    }
    else tb(this.map, a2), this.depth && tb(this.ctx, a2);
    c2 || this.reg.delete(a2);
  }
  this.db && (this.commit_task.push({ del: a2 }), this.M && ub(this));
  this.cache && this.cache.remove(a2);
  return this;
};
function tb(a2, c2) {
  let b2 = 0;
  var e = typeof c2 === "undefined";
  if (a2.constructor === Array) for (let d2 = 0, f2, g2, k2; d2 < a2.length; d2++) {
    if ((f2 = a2[d2]) && f2.length) {
      if (e) return 1;
      g2 = f2.indexOf(c2);
      if (g2 >= 0) {
        if (f2.length > 1) return f2.splice(g2, 1), 1;
        delete a2[d2];
        if (b2) return 1;
        k2 = 1;
      } else {
        if (k2) return 1;
        b2++;
      }
    }
  }
  else for (let d2 of a2.entries()) e = d2[0], tb(d2[1], c2) ? b2++ : a2.delete(e);
  return b2;
}
const vb = { memory: { resolution: 1 }, performance: { resolution: 3, fastupdate: true, context: { depth: 1, resolution: 1 } }, match: { tokenize: "forward" }, score: { resolution: 9, context: { depth: 2, resolution: 3 } } };
T.prototype.add = function(a2, c2, b2, e) {
  if (c2 && (a2 || a2 === 0)) {
    if (!e && !b2 && this.reg.has(a2)) return this.update(a2, c2);
    e = this.depth;
    c2 = this.encoder.encode(c2, !e);
    const l2 = c2.length;
    if (l2) {
      const m2 = I(), p2 = I(), u2 = this.resolution;
      for (let r2 = 0; r2 < l2; r2++) {
        let t2 = c2[this.rtl ? l2 - 1 - r2 : r2];
        var d2 = t2.length;
        if (d2 && (e || !p2[t2])) {
          var f2 = this.score ? this.score(c2, t2, r2, null, 0) : wb(u2, l2, r2), g2 = "";
          switch (this.tokenize) {
            case "tolerant":
              Y(this, p2, t2, f2, a2, b2);
              if (d2 > 2) {
                for (let n2 = 1, q2, x2, v2, A2; n2 < d2 - 1; n2++) q2 = t2.charAt(n2), x2 = t2.charAt(n2 + 1), v2 = t2.substring(0, n2) + x2, A2 = t2.substring(n2 + 2), g2 = v2 + q2 + A2, Y(this, p2, g2, f2, a2, b2), g2 = v2 + A2, Y(this, p2, g2, f2, a2, b2);
                Y(this, p2, t2.substring(0, t2.length - 1), f2, a2, b2);
              }
              break;
            case "full":
              if (d2 > 2) {
                for (let n2 = 0, q2; n2 < d2; n2++) for (f2 = d2; f2 > n2; f2--) {
                  g2 = t2.substring(n2, f2);
                  q2 = this.rtl ? d2 - 1 - n2 : n2;
                  var k2 = this.score ? this.score(c2, t2, r2, g2, q2) : wb(u2, l2, r2, d2, q2);
                  Y(this, p2, g2, k2, a2, b2);
                }
                break;
              }
            case "bidirectional":
            case "reverse":
              if (d2 > 1) {
                for (k2 = d2 - 1; k2 > 0; k2--) {
                  g2 = t2[this.rtl ? d2 - 1 - k2 : k2] + g2;
                  var h2 = this.score ? this.score(c2, t2, r2, g2, k2) : wb(u2, l2, r2, d2, k2);
                  Y(this, p2, g2, h2, a2, b2);
                }
                g2 = "";
              }
            case "forward":
              if (d2 > 1) {
                for (k2 = 0; k2 < d2; k2++) g2 += t2[this.rtl ? d2 - 1 - k2 : k2], Y(
                  this,
                  p2,
                  g2,
                  f2,
                  a2,
                  b2
                );
                break;
              }
            default:
              if (Y(this, p2, t2, f2, a2, b2), e && l2 > 1 && r2 < l2 - 1) for (d2 = this.N, g2 = t2, f2 = Math.min(e + 1, this.rtl ? r2 + 1 : l2 - r2), k2 = 1; k2 < f2; k2++) {
                t2 = c2[this.rtl ? l2 - 1 - r2 - k2 : r2 + k2];
                h2 = this.bidirectional && t2 > g2;
                const n2 = this.score ? this.score(c2, g2, r2, t2, k2 - 1) : wb(d2 + (l2 / 2 > d2 ? 0 : 1), l2, r2, f2 - 1, k2 - 1);
                Y(this, m2, h2 ? g2 : t2, n2, a2, b2, h2 ? t2 : g2);
              }
          }
        }
      }
      this.fastupdate || this.reg.add(a2);
    }
  }
  this.db && (this.commit_task.push(b2 ? { ins: a2 } : { del: a2 }), this.M && ub(this));
  return this;
};
function Y(a2, c2, b2, e, d2, f2, g2) {
  let k2, h2;
  if (!(k2 = c2[b2]) || g2 && !k2[g2]) {
    g2 ? (c2 = k2 || (c2[b2] = I()), c2[g2] = 1, h2 = a2.ctx, (k2 = h2.get(g2)) ? h2 = k2 : h2.set(g2, h2 = a2.keystore ? new R(a2.keystore) : /* @__PURE__ */ new Map())) : (h2 = a2.map, c2[b2] = 1);
    (k2 = h2.get(b2)) ? h2 = k2 : h2.set(b2, h2 = k2 = []);
    if (f2) {
      for (let l2 = 0, m2; l2 < k2.length; l2++) if ((m2 = k2[l2]) && m2.includes(d2)) {
        if (l2 <= e) return;
        m2.splice(m2.indexOf(d2), 1);
        a2.fastupdate && (c2 = a2.reg.get(d2)) && c2.splice(c2.indexOf(m2), 1);
        break;
      }
    }
    h2 = h2[e] || (h2[e] = []);
    h2.push(d2);
    if (h2.length === 2 ** 31 - 1) {
      c2 = new xa(h2);
      if (a2.fastupdate) for (let l2 of a2.reg.values()) l2.includes(h2) && (l2[l2.indexOf(h2)] = c2);
      k2[e] = h2 = c2;
    }
    a2.fastupdate && ((e = a2.reg.get(d2)) ? e.push(h2) : a2.reg.set(d2, [h2]));
  }
}
function wb(a2, c2, b2, e, d2) {
  return b2 && a2 > 1 ? c2 + (e || 0) <= a2 ? b2 + (d2 || 0) : (a2 - 1) / (c2 + (e || 0)) * (b2 + (d2 || 0)) + 1 | 0 : 0;
}
T.prototype.search = function(a2, c2, b2) {
  b2 || (c2 || typeof a2 !== "object" ? typeof c2 === "object" && (b2 = c2, c2 = 0) : (b2 = a2, a2 = ""));
  if (b2 && b2.cache) return b2.cache = false, a2 = this.searchCache(a2, c2, b2), b2.cache = true, a2;
  let e = [], d2, f2, g2, k2 = 0, h2, l2, m2, p2, u2;
  b2 && (a2 = b2.query || a2, c2 = b2.limit || c2, k2 = b2.offset || 0, f2 = b2.context, g2 = b2.suggest, u2 = (h2 = b2.resolve) && b2.enrich, m2 = b2.boost, p2 = b2.resolution, l2 = this.db && b2.tag);
  typeof h2 === "undefined" && (h2 = this.resolve);
  f2 = this.depth && f2 !== false;
  let r2 = this.encoder.encode(a2, !f2);
  d2 = r2.length;
  c2 = c2 || (h2 ? 100 : 0);
  if (d2 === 1) return xb.call(
    this,
    r2[0],
    "",
    c2,
    k2,
    h2,
    u2,
    l2
  );
  if (d2 === 2 && f2 && !g2) return xb.call(this, r2[1], r2[0], c2, k2, h2, u2, l2);
  let t2 = I(), n2 = 0, q2;
  f2 && (q2 = r2[0], n2 = 1);
  p2 || p2 === 0 || (p2 = q2 ? this.N : this.resolution);
  if (this.db) {
    if (this.db.search && (b2 = this.db.search(this, r2, c2, k2, g2, h2, u2, l2), b2 !== false)) return b2;
    const x2 = this;
    return (async function() {
      for (let v2, A2; n2 < d2; n2++) {
        if ((A2 = r2[n2]) && !t2[A2]) {
          t2[A2] = 1;
          v2 = await yb(x2, A2, q2, 0, 0, false, false);
          if (v2 = zb(v2, e, g2, p2)) {
            e = v2;
            break;
          }
          q2 && (g2 && v2 && e.length || (q2 = A2));
        }
        g2 && q2 && n2 === d2 - 1 && !e.length && (p2 = x2.resolution, q2 = "", n2 = -1, t2 = I());
      }
      return Ab(e, p2, c2, k2, g2, m2, h2);
    })();
  }
  for (let x2, v2; n2 < d2; n2++) {
    if ((v2 = r2[n2]) && !t2[v2]) {
      t2[v2] = 1;
      x2 = yb(this, v2, q2, 0, 0, false, false);
      if (x2 = zb(x2, e, g2, p2)) {
        e = x2;
        break;
      }
      q2 && (g2 && x2 && e.length || (q2 = v2));
    }
    g2 && q2 && n2 === d2 - 1 && !e.length && (p2 = this.resolution, q2 = "", n2 = -1, t2 = I());
  }
  return Ab(e, p2, c2, k2, g2, m2, h2);
};
function Ab(a2, c2, b2, e, d2, f2, g2) {
  let k2 = a2.length, h2 = a2;
  if (k2 > 1) h2 = $a(a2, c2, b2, e, d2, f2, g2);
  else if (k2 === 1) return g2 ? Sa.call(null, a2[0], b2, e) : new X(a2[0], this);
  return g2 ? h2 : new X(h2, this);
}
function xb(a2, c2, b2, e, d2, f2, g2) {
  a2 = yb(this, a2, c2, b2, e, d2, f2, g2);
  return this.db ? a2.then(function(k2) {
    return d2 ? k2 || [] : new X(k2, this);
  }) : a2 && a2.length ? d2 ? Sa.call(this, a2, b2, e) : new X(a2, this) : d2 ? [] : new X([], this);
}
function zb(a2, c2, b2, e) {
  let d2 = [];
  if (a2 && a2.length) {
    if (a2.length <= e) {
      c2.push(a2);
      return;
    }
    for (let f2 = 0, g2; f2 < e; f2++) if (g2 = a2[f2]) d2[f2] = g2;
    if (d2.length) {
      c2.push(d2);
      return;
    }
  }
  if (!b2) return d2;
}
function yb(a2, c2, b2, e, d2, f2, g2, k2) {
  let h2;
  b2 && (h2 = a2.bidirectional && c2 > b2) && (h2 = b2, b2 = c2, c2 = h2);
  if (a2.db) return a2.db.get(c2, b2, e, d2, f2, g2, k2);
  a2 = b2 ? (a2 = a2.ctx.get(b2)) && a2.get(c2) : a2.map.get(c2);
  return a2;
}
function T(a2, c2) {
  if (!this || this.constructor !== T) return new T(a2);
  if (a2) {
    var b2 = M(a2) ? a2 : a2.preset;
    b2 && (a2 = Object.assign({}, vb[b2], a2));
  } else a2 = {};
  b2 = a2.context;
  const e = b2 === true ? { depth: 1 } : b2 || {}, d2 = M(a2.encoder) ? va[a2.encoder] : a2.encode || a2.encoder || {};
  this.encoder = d2.encode ? d2 : typeof d2 === "object" ? new ka(d2) : { encode: d2 };
  this.resolution = a2.resolution || 9;
  this.tokenize = b2 = (b2 = a2.tokenize) && b2 !== "default" && b2 !== "exact" && b2 || "strict";
  this.depth = b2 === "strict" && e.depth || 0;
  this.bidirectional = e.bidirectional !== false;
  this.fastupdate = !!a2.fastupdate;
  this.score = a2.score || null;
  (b2 = a2.keystore || 0) && (this.keystore = b2);
  this.map = b2 ? new R(b2) : /* @__PURE__ */ new Map();
  this.ctx = b2 ? new R(b2) : /* @__PURE__ */ new Map();
  this.reg = c2 || (this.fastupdate ? b2 ? new R(b2) : /* @__PURE__ */ new Map() : b2 ? new S(b2) : /* @__PURE__ */ new Set());
  this.N = e.resolution || 3;
  this.rtl = d2.rtl || a2.rtl || false;
  this.cache = (b2 = a2.cache || null) && new ma(b2);
  this.resolve = a2.resolve !== false;
  if (b2 = a2.db) this.db = this.mount(b2);
  this.M = a2.commit !== false;
  this.commit_task = [];
  this.commit_timer = null;
  this.priority = a2.priority || 4;
}
w = T.prototype;
w.mount = function(a2) {
  this.commit_timer && (clearTimeout(this.commit_timer), this.commit_timer = null);
  return a2.mount(this);
};
w.commit = function() {
  this.commit_timer && (clearTimeout(this.commit_timer), this.commit_timer = null);
  return this.db.commit(this);
};
w.destroy = function() {
  this.commit_timer && (clearTimeout(this.commit_timer), this.commit_timer = null);
  return this.db.destroy();
};
function ub(a2) {
  a2.commit_timer || (a2.commit_timer = setTimeout(function() {
    a2.commit_timer = null;
    a2.db.commit(a2);
  }, 1));
}
w.clear = function() {
  this.map.clear();
  this.ctx.clear();
  this.reg.clear();
  this.cache && this.cache.clear();
  return this.db ? (this.commit_timer && clearTimeout(this.commit_timer), this.commit_timer = null, this.commit_task = [], this.db.clear()) : this;
};
w.append = function(a2, c2) {
  return this.add(a2, c2, true);
};
w.contain = function(a2) {
  return this.db ? this.db.has(a2) : this.reg.has(a2);
};
w.update = function(a2, c2) {
  const b2 = this, e = this.remove(a2);
  return e && e.then ? e.then(() => b2.add(a2, c2)) : this.add(a2, c2);
};
w.cleanup = function() {
  if (!this.fastupdate) return this;
  tb(this.map);
  this.depth && tb(this.ctx);
  return this;
};
w.searchCache = la;
w.export = function(a2, c2, b2 = 0, e = 0) {
  let d2, f2;
  switch (e) {
    case 0:
      d2 = "reg";
      f2 = pb(this.reg);
      break;
    case 1:
      d2 = "cfg";
      f2 = null;
      break;
    case 2:
      d2 = "map";
      f2 = lb(this.map, this.reg.size);
      break;
    case 3:
      d2 = "ctx";
      f2 = nb(this.ctx, this.reg.size);
      break;
    default:
      return;
  }
  return rb.call(this, a2, c2, d2, f2, b2, e);
};
w.import = function(a2, c2) {
  if (c2) switch (typeof c2 === "string" && (c2 = JSON.parse(c2)), a2 = a2.split("."), a2[a2.length - 1] === "json" && a2.pop(), a2.length === 3 && a2.shift(), a2 = a2.length > 1 ? a2[1] : a2[0], a2) {
    case "reg":
      this.fastupdate = false;
      this.reg = qb(c2, this.reg);
      break;
    case "map":
      this.map = mb(c2, this.map);
      break;
    case "ctx":
      this.ctx = ob(c2, this.ctx);
  }
};
w.serialize = function(a2 = true) {
  let c2 = "", b2 = "", e = "";
  if (this.reg.size) {
    let f2;
    for (var d2 of this.reg.keys()) f2 || (f2 = typeof d2), c2 += (c2 ? "," : "") + (f2 === "string" ? '"' + d2 + '"' : d2);
    c2 = "index.reg=new Set([" + c2 + "]);";
    b2 = sb(this.map, f2);
    b2 = "index.map=new Map([" + b2 + "]);";
    for (const g2 of this.ctx.entries()) {
      d2 = g2[0];
      let k2 = sb(g2[1], f2);
      k2 = "new Map([" + k2 + "])";
      k2 = '["' + d2 + '",' + k2 + "]";
      e += (e ? "," : "") + k2;
    }
    e = "index.ctx=new Map([" + e + "]);";
  }
  return a2 ? "function inject(index){" + c2 + b2 + e + "}" : c2 + b2 + e;
};
Fa(T.prototype);
const Bb = typeof window !== "undefined" && (window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB), Cb = ["map", "ctx", "tag", "reg", "cfg"], Db = I();
function Eb(a2, c2 = {}) {
  if (!this || this.constructor !== Eb) return new Eb(a2, c2);
  typeof a2 === "object" && (c2 = a2, a2 = a2.name);
  a2 || console.info("Default storage space was used, because a name was not passed.");
  this.id = "flexsearch" + (a2 ? ":" + a2.toLowerCase().replace(/[^a-z0-9_\-]/g, "") : "");
  this.field = c2.field ? c2.field.toLowerCase().replace(/[^a-z0-9_\-]/g, "") : "";
  this.type = c2.type;
  this.fastupdate = this.support_tag_search = false;
  this.db = null;
  this.h = {};
}
w = Eb.prototype;
w.mount = function(a2) {
  if (a2.index) return a2.mount(this);
  a2.db = this;
  return this.open();
};
w.open = function() {
  if (this.db) return this.db;
  let a2 = this;
  navigator.storage && navigator.storage.persist && navigator.storage.persist();
  Db[a2.id] || (Db[a2.id] = []);
  Db[a2.id].push(a2.field);
  const c2 = Bb.open(a2.id, 1);
  c2.onupgradeneeded = function() {
    const b2 = a2.db = this.result;
    for (let e = 0, d2; e < Cb.length; e++) {
      d2 = Cb[e];
      for (let f2 = 0, g2; f2 < Db[a2.id].length; f2++) g2 = Db[a2.id][f2], b2.objectStoreNames.contains(d2 + (d2 !== "reg" ? g2 ? ":" + g2 : "" : "")) || b2.createObjectStore(d2 + (d2 !== "reg" ? g2 ? ":" + g2 : "" : ""));
    }
  };
  return a2.db = Z(c2, function(b2) {
    a2.db = b2;
    a2.db.onversionchange = function() {
      a2.close();
    };
  });
};
w.close = function() {
  this.db && this.db.close();
  this.db = null;
};
w.destroy = function() {
  const a2 = Bb.deleteDatabase(this.id);
  return Z(a2);
};
w.clear = function() {
  const a2 = [];
  for (let b2 = 0, e; b2 < Cb.length; b2++) {
    e = Cb[b2];
    for (let d2 = 0, f2; d2 < Db[this.id].length; d2++) f2 = Db[this.id][d2], a2.push(e + (e !== "reg" ? f2 ? ":" + f2 : "" : ""));
  }
  const c2 = this.db.transaction(a2, "readwrite");
  for (let b2 = 0; b2 < a2.length; b2++) c2.objectStore(a2[b2]).clear();
  return Z(c2);
};
w.get = function(a2, c2, b2 = 0, e = 0, d2 = true, f2 = false) {
  a2 = this.db.transaction((c2 ? "ctx" : "map") + (this.field ? ":" + this.field : ""), "readonly").objectStore((c2 ? "ctx" : "map") + (this.field ? ":" + this.field : "")).get(c2 ? c2 + ":" + a2 : a2);
  const g2 = this;
  return Z(a2).then(function(k2) {
    let h2 = [];
    if (!k2 || !k2.length) return h2;
    if (d2) {
      if (!b2 && !e && k2.length === 1) return k2[0];
      for (let l2 = 0, m2; l2 < k2.length; l2++) if ((m2 = k2[l2]) && m2.length) {
        if (e >= m2.length) {
          e -= m2.length;
          continue;
        }
        const p2 = b2 ? e + Math.min(m2.length - e, b2) : m2.length;
        for (let u2 = e; u2 < p2; u2++) h2.push(m2[u2]);
        e = 0;
        if (h2.length === b2) break;
      }
      return f2 ? g2.enrich(h2) : h2;
    }
    return k2;
  });
};
w.tag = function(a2, c2 = 0, b2 = 0, e = false) {
  a2 = this.db.transaction("tag" + (this.field ? ":" + this.field : ""), "readonly").objectStore("tag" + (this.field ? ":" + this.field : "")).get(a2);
  const d2 = this;
  return Z(a2).then(function(f2) {
    if (!f2 || !f2.length || b2 >= f2.length) return [];
    if (!c2 && !b2) return f2;
    f2 = f2.slice(b2, b2 + c2);
    return e ? d2.enrich(f2) : f2;
  });
};
w.enrich = function(a2) {
  typeof a2 !== "object" && (a2 = [a2]);
  const c2 = this.db.transaction("reg", "readonly").objectStore("reg"), b2 = [];
  for (let e = 0; e < a2.length; e++) b2[e] = Z(c2.get(a2[e]));
  return Promise.all(b2).then(function(e) {
    for (let d2 = 0; d2 < e.length; d2++) e[d2] = { id: a2[d2], doc: e[d2] ? JSON.parse(e[d2]) : null };
    return e;
  });
};
w.has = function(a2) {
  a2 = this.db.transaction("reg", "readonly").objectStore("reg").getKey(a2);
  return Z(a2).then(function(c2) {
    return !!c2;
  });
};
w.search = null;
w.info = function() {
};
w.transaction = function(a2, c2, b2) {
  a2 += a2 !== "reg" ? this.field ? ":" + this.field : "" : "";
  let e = this.h[a2 + ":" + c2];
  if (e) return b2.call(this, e);
  let d2 = this.db.transaction(a2, c2);
  this.h[a2 + ":" + c2] = e = d2.objectStore(a2);
  const f2 = b2.call(this, e);
  this.h[a2 + ":" + c2] = null;
  return Z(d2).finally(function() {
    return f2;
  });
};
w.commit = async function(a2) {
  let c2 = a2.commit_task, b2 = [];
  a2.commit_task = [];
  for (let e = 0, d2; e < c2.length; e++) d2 = c2[e], d2.del && b2.push(d2.del);
  b2.length && await this.remove(b2);
  a2.reg.size && (await this.transaction("map", "readwrite", function(e) {
    for (const d2 of a2.map) {
      const f2 = d2[0], g2 = d2[1];
      g2.length && (e.get(f2).onsuccess = function() {
        let k2 = this.result;
        var h2;
        if (k2 && k2.length) {
          const l2 = Math.max(k2.length, g2.length);
          for (let m2 = 0, p2, u2; m2 < l2; m2++) if ((u2 = g2[m2]) && u2.length) {
            if ((p2 = k2[m2]) && p2.length) for (h2 = 0; h2 < u2.length; h2++) p2.push(u2[h2]);
            else k2[m2] = u2;
            h2 = 1;
          }
        } else k2 = g2, h2 = 1;
        h2 && e.put(k2, f2);
      });
    }
  }), await this.transaction("ctx", "readwrite", function(e) {
    for (const d2 of a2.ctx) {
      const f2 = d2[0], g2 = d2[1];
      for (const k2 of g2) {
        const h2 = k2[0], l2 = k2[1];
        l2.length && (e.get(f2 + ":" + h2).onsuccess = function() {
          let m2 = this.result;
          var p2;
          if (m2 && m2.length) {
            const u2 = Math.max(m2.length, l2.length);
            for (let r2 = 0, t2, n2; r2 < u2; r2++) if ((n2 = l2[r2]) && n2.length) {
              if ((t2 = m2[r2]) && t2.length) for (p2 = 0; p2 < n2.length; p2++) t2.push(n2[p2]);
              else m2[r2] = n2;
              p2 = 1;
            }
          } else m2 = l2, p2 = 1;
          p2 && e.put(m2, f2 + ":" + h2);
        });
      }
    }
  }), a2.store ? await this.transaction(
    "reg",
    "readwrite",
    function(e) {
      for (const d2 of a2.store) {
        const f2 = d2[0], g2 = d2[1];
        e.put(typeof g2 === "object" ? JSON.stringify(g2) : 1, f2);
      }
    }
  ) : a2.bypass || await this.transaction("reg", "readwrite", function(e) {
    for (const d2 of a2.reg.keys()) e.put(1, d2);
  }), a2.tag && await this.transaction("tag", "readwrite", function(e) {
    for (const d2 of a2.tag) {
      const f2 = d2[0], g2 = d2[1];
      g2.length && (e.get(f2).onsuccess = function() {
        let k2 = this.result;
        k2 = k2 && k2.length ? k2.concat(g2) : g2;
        e.put(k2, f2);
      });
    }
  }), a2.map.clear(), a2.ctx.clear(), a2.tag && a2.tag.clear(), a2.store && a2.store.clear(), a2.document || a2.reg.clear());
};
function Fb(a2, c2, b2) {
  const e = a2.value;
  let d2, f2 = 0;
  for (let g2 = 0, k2; g2 < e.length; g2++) {
    if (k2 = b2 ? e : e[g2]) {
      for (let h2 = 0, l2, m2; h2 < c2.length; h2++) if (m2 = c2[h2], l2 = k2.indexOf(m2), l2 >= 0) if (d2 = 1, k2.length > 1) k2.splice(l2, 1);
      else {
        e[g2] = [];
        break;
      }
      f2 += k2.length;
    }
    if (b2) break;
  }
  f2 ? d2 && a2.update(e) : a2.delete();
  a2.continue();
}
w.remove = function(a2) {
  typeof a2 !== "object" && (a2 = [a2]);
  return Promise.all([this.transaction("map", "readwrite", function(c2) {
    c2.openCursor().onsuccess = function() {
      const b2 = this.result;
      b2 && Fb(b2, a2);
    };
  }), this.transaction("ctx", "readwrite", function(c2) {
    c2.openCursor().onsuccess = function() {
      const b2 = this.result;
      b2 && Fb(b2, a2);
    };
  }), this.transaction("tag", "readwrite", function(c2) {
    c2.openCursor().onsuccess = function() {
      const b2 = this.result;
      b2 && Fb(b2, a2, true);
    };
  }), this.transaction("reg", "readwrite", function(c2) {
    for (let b2 = 0; b2 < a2.length; b2++) c2.delete(a2[b2]);
  })]);
};
function Z(a2, c2) {
  return new Promise((b2, e) => {
    a2.onsuccess = a2.oncomplete = function() {
      c2 && c2(this.result);
      c2 = null;
      b2(this.result);
    };
    a2.onerror = a2.onblocked = e;
    a2 = null;
  });
}
const Index = T;
function hexToUint8Array(hex) {
  const bytes = new Uint8Array(hex.length / 2);
  for (let i = 0; i < hex.length; i += 2) {
    bytes[i / 2] = parseInt(hex.substring(i, i + 2), 16);
  }
  return bytes;
}
function base64ToUint8Array(base64) {
  const binary = atob(base64);
  const bytes = new Uint8Array(binary.length);
  for (let i = 0; i < binary.length; i++) {
    bytes[i] = binary.charCodeAt(i);
  }
  return bytes;
}
function uint8ArrayToBase64(bytes) {
  let binary = "";
  for (let i = 0; i < bytes.length; i++) {
    binary += String.fromCharCode(bytes[i]);
  }
  return btoa(binary);
}
function concatUint8Arrays(...arrays) {
  const totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0);
  const result = new Uint8Array(totalLength);
  let offset2 = 0;
  for (const arr of arrays) {
    result.set(arr, offset2);
    offset2 += arr.length;
  }
  return result;
}
class NotesAPI {
  constructor(adapter, encryptionKey = null) {
    if (!adapter) {
      throw new Error("NotesAPI requires a storage adapter");
    }
    this.adapter = adapter;
    this.notesCache = /* @__PURE__ */ new Map();
    this.encryptionKey = encryptionKey;
    this._sodiumReady = false;
    this.index = new Index({
      tokenize: "forward"
    });
  }
  async _initSodium() {
    if (!this._sodiumReady) {
      await t.ready;
      this._sodiumReady = true;
    }
  }
  _encrypt(note) {
    if (!this.encryptionKey) {
      throw new Error("Encryption key not set");
    }
    const key = hexToUint8Array(this.encryptionKey);
    if (key.length !== 32) {
      throw new Error(
        "Encryption key must be 64 hex characters (32 bytes)"
      );
    }
    const nonce = t.randombytes_buf(t.crypto_secretbox_NONCEBYTES);
    const message = JSON.stringify(note);
    const ciphertext = t.crypto_secretbox_easy(
      new TextEncoder().encode(message),
      nonce,
      key
    );
    const combined = concatUint8Arrays(nonce, ciphertext);
    return uint8ArrayToBase64(combined);
  }
  _decrypt(encryptedData) {
    if (!this.encryptionKey) {
      throw new Error("Encryption key not set");
    }
    const key = hexToUint8Array(this.encryptionKey);
    if (key.length !== 32) {
      throw new Error(
        "Encryption key must be 64 hex characters (32 bytes)"
      );
    }
    let combined;
    try {
      combined = base64ToUint8Array(encryptedData);
    } catch (e) {
      throw new Error("Invalid encrypted data: not valid base64");
    }
    if (combined.length < t.crypto_secretbox_NONCEBYTES + t.crypto_secretbox_MACBYTES) {
      throw new Error("Invalid encrypted data: too short");
    }
    const nonce = combined.slice(0, t.crypto_secretbox_NONCEBYTES);
    const ciphertext = combined.slice(t.crypto_secretbox_NONCEBYTES);
    let decrypted;
    try {
      decrypted = t.crypto_secretbox_open_easy(
        ciphertext,
        nonce,
        key
      );
    } catch (e) {
      throw new Error("Decryption failed: wrong key or corrupted data");
    }
    if (!decrypted) {
      throw new Error("Decryption failed: no data returned");
    }
    const decryptedStr = new TextDecoder().decode(decrypted);
    try {
      return JSON.parse(decryptedStr);
    } catch (e) {
      throw new Error(
        `Decryption succeeded but invalid JSON: ${decryptedStr}`
      );
    }
  }
  async init() {
    await this._initSodium();
    await this.adapter.init();
    const encryptedNotes = await this.adapter.getAll();
    for (const encryptedNote of encryptedNotes) {
      try {
        const note = this._decrypt(encryptedNote.data || encryptedNote);
        this.notesCache.set(note.id, note);
        const searchText = note.plainText || this._extractPlainText(note.content);
        this.index.add(note.id, note.title + "\n" + searchText);
      } catch (error) {
        console.error("Failed to decrypt note:", error);
      }
    }
  }
  _extractPlainText(content) {
    if (!content) return "";
    if (typeof content === "string") return content;
    const extractText = (node) => {
      if (typeof node === "string") return node;
      if (!node || !node.content) return "";
      return node.content.map(extractText).join(" ");
    };
    return extractText(content);
  }
  /* -----------------------
       Public API
      ------------------------*/
  getCategories() {
    const categories2 = /* @__PURE__ */ new Set();
    for (const note of this.notesCache.values()) {
      if (note.category) {
        categories2.add(note.category);
      }
    }
    return Array.from(categories2).sort();
  }
  getCategoryNotes(categoryName) {
    return Array.from(this.notesCache.values()).filter((n2) => n2.category === categoryName).sort((a2, b2) => new Date(b2.updatedAt) - new Date(a2.updatedAt));
  }
  getNote(id) {
    return this.notesCache.get(id) ?? null;
  }
  async createNote(metadata = {}, content = "", plainText = "") {
    const id = v4();
    const now = (/* @__PURE__ */ new Date()).toISOString();
    const note = {
      id,
      title: metadata.title || "Untitled",
      category: metadata.category || null,
      createdAt: now,
      updatedAt: now,
      content,
      plainText
    };
    const encryptedNote = {
      id: note.id,
      data: this._encrypt(note)
    };
    this.notesCache.set(id, note);
    this.index.add(id, note.title + "\n" + plainText);
    await this.adapter.create(encryptedNote);
    return note;
  }
  async deleteNote(id) {
    await this.adapter.delete(id);
    this.notesCache.delete(id);
    this.index.remove(id);
  }
  async updateNote(id, content, plainText = "") {
    const note = this.notesCache.get(id);
    if (!note) throw new Error("Note not found");
    note.content = content;
    note.plainText = plainText;
    note.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
    const encryptedNote = {
      id: note.id,
      data: this._encrypt(note)
    };
    this.index.update(id, note.title + "\n" + plainText);
    await this.adapter.update(encryptedNote);
    return note;
  }
  async updateNoteMetadata(id, updates = {}) {
    const note = this.notesCache.get(id);
    if (!note) throw new Error("Note not found");
    const allowedFields = ["title", "category"];
    for (const key of Object.keys(updates)) {
      if (!allowedFields.includes(key)) {
        throw new Error(`Invalid metadata field: ${key}`);
      }
    }
    if (updates.title !== void 0) {
      note.title = updates.title;
    }
    if (updates.category !== void 0) {
      note.category = updates.category;
    }
    note.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
    const encryptedNote = {
      id: note.id,
      data: this._encrypt(note)
    };
    this.index.update(
      id,
      note.title + "\n" + (note.plainText || this._extractPlainText(note.content))
    );
    await this.adapter.update(encryptedNote);
    return note;
  }
  search(query) {
    const ids = this.index.search(query, {
      limit: 50,
      suggest: true
    });
    return ids.map((id) => this.notesCache.get(id));
  }
}
class IpcAdapter {
  constructor() {
    this._methods = ["init", "getAll", "create", "update", "delete"];
  }
  async init() {
    return await window.adapter.call("init");
  }
  async getAll() {
    return await window.adapter.call("getAll");
  }
  async create(note) {
    return await window.adapter.call("create", note);
  }
  async update(note) {
    return await window.adapter.call("update", note);
  }
  async delete(id) {
    return await window.adapter.call("delete", id);
  }
}
const categories = /* @__PURE__ */ ref([]);
const searchResults = /* @__PURE__ */ ref([]);
const notesChangeCount = /* @__PURE__ */ ref(0);
let notesAPI = null;
let initialized = false;
async function initNotesAPI() {
  if (notesAPI) return notesAPI;
  const encryptionKey = "729a0d21d783654c68f1a0123e2a0e986350de536b5324f1f35876ea12ffeaf5";
  const adapter = new IpcAdapter();
  notesAPI = new NotesAPI(adapter, encryptionKey);
  await notesAPI.init();
  return notesAPI;
}
function setupListeners() {
  if (initialized || typeof window === "undefined") return;
  initialized = true;
  window.api.onNoteCreated(() => {
    notesChangeCount.value++;
  });
  window.api.onNoteUpdated(() => {
    notesChangeCount.value++;
  });
  window.api.onNoteDeleted(() => {
    notesChangeCount.value++;
  });
}
function broadcastChange(event, data) {
  window.api.notifyNoteChanged(event, data);
}
setupListeners();
const useNotes = () => {
  async function loadCategories() {
    const api = await initNotesAPI();
    categories.value = api.getCategories();
  }
  async function loadCategoryNotes(category = null) {
    const api = await initNotesAPI();
    return api.getCategoryNotes(category);
  }
  async function loadNote(id) {
    const api = await initNotesAPI();
    return api.getNote(id);
  }
  async function createNote(metadata, content, plainText = "") {
    const api = await initNotesAPI();
    const note = await api.createNote(metadata, content, plainText);
    await loadCategories();
    broadcastChange("note-created", note);
    return note;
  }
  async function updateNoteContent(id, content, plainText = "") {
    const api = await initNotesAPI();
    const note = await api.updateNote(id, content, plainText);
    broadcastChange("note-updated", note);
    return note;
  }
  async function updateNoteMetadata(id, updates) {
    const api = await initNotesAPI();
    const note = await api.updateNoteMetadata(id, updates);
    await loadCategories();
    broadcastChange("note-updated", note);
    return note;
  }
  async function updateCategory(category, update) {
    const notes = await loadCategoryNotes(category);
    for (const note of notes) {
      await updateNoteMetadata(note.id, { category: update });
    }
    await loadCategories();
  }
  async function deleteNote(id) {
    const api = await initNotesAPI();
    await api.deleteNote(id);
    await loadCategories();
    broadcastChange("note-deleted", { id });
  }
  async function search(query) {
    if (!query) {
      searchResults.value = [];
      return;
    }
    const api = await initNotesAPI();
    searchResults.value = api.search(query);
  }
  return {
    categories,
    searchResults,
    notesChangeCount,
    loadCategories,
    loadCategoryNotes,
    loadNote,
    createNote,
    updateNoteContent,
    updateNoteMetadata,
    updateCategory,
    deleteNote,
    search
  };
};
const _sfc_main$f = {
  __name: "NewNote",
  props: { category: String },
  emits: ["noteOpened"],
  setup(__props, { emit: __emit }) {
    const props = __props;
    const emit2 = __emit;
    const { createNote } = useNotes();
    const { openNote } = useOpenNote();
    const onClick = async () => {
      const note = await createNote(
        {
          category: props.category ?? null
        },
        ""
      );
      openNote(note.id);
      emit2("noteOpened");
    };
    return (_ctx, _cache) => {
      return openBlock(), createElementBlock("button", {
        class: "new-note",
        onClick
      }, "+ New Nota");
    };
  }
};
const colors = {
  black: "#181818",
  white: "#D5D5D5",
  green: "#87FF5B",
  blue: "#5B92FF"
};
const themes = {
  dark: {
    bg: colors.black,
    fg: colors.white,
    accent: colors.green,
    link: colors.blue
  },
  light: {
    bg: colors.white,
    fg: colors.black,
    accent: colors.green,
    link: colors.blue
  }
};
const useState = /* @__PURE__ */ createGlobalState(() => {
  const theme = useStorage("app-theme", "dark");
  return { theme };
});
const _hoisted_1$d = { class: "theme-switcher" };
const _hoisted_2$5 = ["onClick"];
const _sfc_main$e = {
  __name: "ThemeSwitcher",
  setup(__props) {
    const { theme } = useState();
    const setTheme = (value) => {
      theme.value = value;
    };
    return (_ctx, _cache) => {
      return openBlock(), createElementBlock("div", _hoisted_1$d, [
        _cache[0] || (_cache[0] = createBaseVNode("span", null, "Change Theme", -1)),
        (openBlock(true), createElementBlock(Fragment$1, null, renderList(unref(themes), (value, key) => {
          return openBlock(), createElementBlock("button", {
            class: normalizeClass([`theme-${key}`, { active: unref(theme) === key }]),
            onClick: ($event) => setTheme(key)
          }, null, 10, _hoisted_2$5);
        }), 256))
      ]);
    };
  }
};
var _arrayMap;
var hasRequired_arrayMap;
function require_arrayMap() {
  if (hasRequired_arrayMap) return _arrayMap;
  hasRequired_arrayMap = 1;
  function arrayMap(array, iteratee) {
    var index2 = -1, length = array == null ? 0 : array.length, result = Array(length);
    while (++index2 < length) {
      result[index2] = iteratee(array[index2], index2, array);
    }
    return result;
  }
  _arrayMap = arrayMap;
  return _arrayMap;
}
var _baseUnary;
var hasRequired_baseUnary;
function require_baseUnary() {
  if (hasRequired_baseUnary) return _baseUnary;
  hasRequired_baseUnary = 1;
  function baseUnary(func) {
    return function(value) {
      return func(value);
    };
  }
  _baseUnary = baseUnary;
  return _baseUnary;
}
var _baseDifference;
var hasRequired_baseDifference;
function require_baseDifference() {
  if (hasRequired_baseDifference) return _baseDifference;
  hasRequired_baseDifference = 1;
  var SetCache = require_SetCache(), arrayIncludes = require_arrayIncludes(), arrayIncludesWith = require_arrayIncludesWith(), arrayMap = require_arrayMap(), baseUnary = require_baseUnary(), cacheHas = require_cacheHas();
  var LARGE_ARRAY_SIZE = 200;
  function baseDifference(array, values, iteratee, comparator) {
    var index2 = -1, includes = arrayIncludes, isCommon = true, length = array.length, result = [], valuesLength = values.length;
    if (!length) {
      return result;
    }
    if (iteratee) {
      values = arrayMap(values, baseUnary(iteratee));
    }
    if (comparator) {
      includes = arrayIncludesWith;
      isCommon = false;
    } else if (values.length >= LARGE_ARRAY_SIZE) {
      includes = cacheHas;
      isCommon = false;
      values = new SetCache(values);
    }
    outer:
      while (++index2 < length) {
        var value = array[index2], computed2 = iteratee == null ? value : iteratee(value);
        value = comparator || value !== 0 ? value : 0;
        if (isCommon && computed2 === computed2) {
          var valuesIndex = valuesLength;
          while (valuesIndex--) {
            if (values[valuesIndex] === computed2) {
              continue outer;
            }
          }
          result.push(value);
        } else if (!includes(values, computed2, comparator)) {
          result.push(value);
        }
      }
    return result;
  }
  _baseDifference = baseDifference;
  return _baseDifference;
}
var identity_1;
var hasRequiredIdentity;
function requireIdentity() {
  if (hasRequiredIdentity) return identity_1;
  hasRequiredIdentity = 1;
  function identity(value) {
    return value;
  }
  identity_1 = identity;
  return identity_1;
}
var _apply;
var hasRequired_apply;
function require_apply() {
  if (hasRequired_apply) return _apply;
  hasRequired_apply = 1;
  function apply2(func, thisArg, args) {
    switch (args.length) {
      case 0:
        return func.call(thisArg);
      case 1:
        return func.call(thisArg, args[0]);
      case 2:
        return func.call(thisArg, args[0], args[1]);
      case 3:
        return func.call(thisArg, args[0], args[1], args[2]);
    }
    return func.apply(thisArg, args);
  }
  _apply = apply2;
  return _apply;
}
var _overRest;
var hasRequired_overRest;
function require_overRest() {
  if (hasRequired_overRest) return _overRest;
  hasRequired_overRest = 1;
  var apply2 = require_apply();
  var nativeMax = Math.max;
  function overRest(func, start, transform) {
    start = nativeMax(start === void 0 ? func.length - 1 : start, 0);
    return function() {
      var args = arguments, index2 = -1, length = nativeMax(args.length - start, 0), array = Array(length);
      while (++index2 < length) {
        array[index2] = args[start + index2];
      }
      index2 = -1;
      var otherArgs = Array(start + 1);
      while (++index2 < start) {
        otherArgs[index2] = args[index2];
      }
      otherArgs[start] = transform(array);
      return apply2(func, this, otherArgs);
    };
  }
  _overRest = overRest;
  return _overRest;
}
var constant_1;
var hasRequiredConstant;
function requireConstant() {
  if (hasRequiredConstant) return constant_1;
  hasRequiredConstant = 1;
  function constant(value) {
    return function() {
      return value;
    };
  }
  constant_1 = constant;
  return constant_1;
}
var _defineProperty;
var hasRequired_defineProperty;
function require_defineProperty() {
  if (hasRequired_defineProperty) return _defineProperty;
  hasRequired_defineProperty = 1;
  var getNative = require_getNative();
  var defineProperty = (function() {
    try {
      var func = getNative(Object, "defineProperty");
      func({}, "", {});
      return func;
    } catch (e) {
    }
  })();
  _defineProperty = defineProperty;
  return _defineProperty;
}
var _baseSetToString;
var hasRequired_baseSetToString;
function require_baseSetToString() {
  if (hasRequired_baseSetToString) return _baseSetToString;
  hasRequired_baseSetToString = 1;
  var constant = requireConstant(), defineProperty = require_defineProperty(), identity = requireIdentity();
  var baseSetToString = !defineProperty ? identity : function(func, string) {
    return defineProperty(func, "toString", {
      "configurable": true,
      "enumerable": false,
      "value": constant(string),
      "writable": true
    });
  };
  _baseSetToString = baseSetToString;
  return _baseSetToString;
}
var _shortOut;
var hasRequired_shortOut;
function require_shortOut() {
  if (hasRequired_shortOut) return _shortOut;
  hasRequired_shortOut = 1;
  var HOT_COUNT = 800, HOT_SPAN = 16;
  var nativeNow = Date.now;
  function shortOut(func) {
    var count = 0, lastCalled = 0;
    return function() {
      var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled);
      lastCalled = stamp;
      if (remaining > 0) {
        if (++count >= HOT_COUNT) {
          return arguments[0];
        }
      } else {
        count = 0;
      }
      return func.apply(void 0, arguments);
    };
  }
  _shortOut = shortOut;
  return _shortOut;
}
var _setToString;
var hasRequired_setToString;
function require_setToString() {
  if (hasRequired_setToString) return _setToString;
  hasRequired_setToString = 1;
  var baseSetToString = require_baseSetToString(), shortOut = require_shortOut();
  var setToString = shortOut(baseSetToString);
  _setToString = setToString;
  return _setToString;
}
var _baseRest;
var hasRequired_baseRest;
function require_baseRest() {
  if (hasRequired_baseRest) return _baseRest;
  hasRequired_baseRest = 1;
  var identity = requireIdentity(), overRest = require_overRest(), setToString = require_setToString();
  function baseRest(func, start) {
    return setToString(overRest(func, start, identity), func + "");
  }
  _baseRest = baseRest;
  return _baseRest;
}
var isLength_1;
var hasRequiredIsLength;
function requireIsLength() {
  if (hasRequiredIsLength) return isLength_1;
  hasRequiredIsLength = 1;
  var MAX_SAFE_INTEGER = 9007199254740991;
  function isLength(value) {
    return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
  }
  isLength_1 = isLength;
  return isLength_1;
}
var isArrayLike_1;
var hasRequiredIsArrayLike;
function requireIsArrayLike() {
  if (hasRequiredIsArrayLike) return isArrayLike_1;
  hasRequiredIsArrayLike = 1;
  var isFunction2 = requireIsFunction(), isLength = requireIsLength();
  function isArrayLike(value) {
    return value != null && isLength(value.length) && !isFunction2(value);
  }
  isArrayLike_1 = isArrayLike;
  return isArrayLike_1;
}
var isObjectLike_1;
var hasRequiredIsObjectLike;
function requireIsObjectLike() {
  if (hasRequiredIsObjectLike) return isObjectLike_1;
  hasRequiredIsObjectLike = 1;
  function isObjectLike(value) {
    return value != null && typeof value == "object";
  }
  isObjectLike_1 = isObjectLike;
  return isObjectLike_1;
}
var isArrayLikeObject_1;
var hasRequiredIsArrayLikeObject;
function requireIsArrayLikeObject() {
  if (hasRequiredIsArrayLikeObject) return isArrayLikeObject_1;
  hasRequiredIsArrayLikeObject = 1;
  var isArrayLike = requireIsArrayLike(), isObjectLike = requireIsObjectLike();
  function isArrayLikeObject(value) {
    return isObjectLike(value) && isArrayLike(value);
  }
  isArrayLikeObject_1 = isArrayLikeObject;
  return isArrayLikeObject_1;
}
var without_1;
var hasRequiredWithout;
function requireWithout() {
  if (hasRequiredWithout) return without_1;
  hasRequiredWithout = 1;
  var baseDifference = require_baseDifference(), baseRest = require_baseRest(), isArrayLikeObject = requireIsArrayLikeObject();
  var without = baseRest(function(array, values) {
    return isArrayLikeObject(array) ? baseDifference(array, values) : [];
  });
  without_1 = without;
  return without_1;
}
var withoutExports = requireWithout();
const _without = /* @__PURE__ */ getDefaultExportFromCjs(withoutExports);
const useMenu = () => {
  const route = useRoute();
  const router2 = useRouter();
  const menuOpen = computed(() => route.query?.menuOpen === "true");
  const closeMenu = () => {
    router2.push({
      query: _without(route.query, "menuOpen")
    });
  };
  const openMenu = () => {
    router2.push({
      query: {
        menuOpen: true
      }
    });
  };
  return {
    menuOpen,
    closeMenu,
    openMenu
  };
};
const _hoisted_1$c = { class: "nav layout-block" };
const _sfc_main$d = {
  __name: "Nav",
  setup(__props) {
    const { menuOpen, closeMenu, openMenu } = useMenu();
    const toggleMenu = () => {
      if (menuOpen.value) {
        closeMenu();
      } else {
        openMenu();
      }
    };
    onMounted(() => {
    });
    return (_ctx, _cache) => {
      const _component_router_link = resolveComponent("router-link");
      return openBlock(), createElementBlock("nav", _hoisted_1$c, [
        createBaseVNode("button", { onClick: toggleMenu }, "Menu"),
        createVNode(_component_router_link, { to: "/search" }, {
          default: withCtx(() => [..._cache[0] || (_cache[0] = [
            createTextVNode("Search", -1)
          ])]),
          _: 1
        })
      ]);
    };
  }
};
const _hoisted_1$b = { class: "menu-wrap layout-block" };
const _sfc_main$c = {
  __name: "Menu",
  setup(__props) {
    const container = /* @__PURE__ */ ref();
    const { menuOpen, closeMenu } = useMenu();
    onClickOutside(container, () => {
      closeMenu();
    });
    const route = useRoute();
    watch(
      () => route.path,
      () => {
        closeMenu();
      }
    );
    return (_ctx, _cache) => {
      const _component_router_link = resolveComponent("router-link");
      return openBlock(), createBlock(Transition, { name: "menu" }, {
        default: withCtx(() => [
          unref(menuOpen) ? (openBlock(), createElementBlock("div", {
            key: 0,
            class: "menu",
            ref_key: "container",
            ref: container
          }, [
            createVNode(_sfc_main$d),
            createBaseVNode("div", _hoisted_1$b, [
              createVNode(_sfc_main$f, {
                class: "menu-item",
                onNoteOpened: unref(closeMenu)
              }, null, 8, ["onNoteOpened"]),
              createVNode(_component_router_link, {
                class: "menu-item",
                to: "/category"
              }, {
                default: withCtx(() => [..._cache[0] || (_cache[0] = [
                  createTextVNode("+ New Capitulum", -1)
                ])]),
                _: 1
              }),
              createVNode(_sfc_main$e, { class: "menu-item" }),
              createVNode(_component_router_link, {
                class: "menu-item",
                to: "/instructions"
              }, {
                default: withCtx(() => [..._cache[1] || (_cache[1] = [
                  createTextVNode("Instructio", -1)
                ])]),
                _: 1
              }),
              _cache[2] || (_cache[2] = createBaseVNode("button", { class: "menu-item" }, "Import", -1)),
              _cache[3] || (_cache[3] = createBaseVNode("button", { class: "menu-item" }, "Export", -1))
            ])
          ], 512)) : createCommentVNode("", true)
        ]),
        _: 1
      });
    };
  }
};
var Clock = class {
  _elapsed = 0;
  _currentTime = 0;
  _startTime = void 0;
  _lastTime = void 0;
  _isPlaying = false;
  _deltaTime = 0;
  play() {
    if (this._isPlaying) return;
    this._currentTime = 0;
    this._startTime = void 0;
    this._isPlaying = true;
  }
  pause() {
    if (!this._isPlaying) return;
    this._deltaTime = 0;
    this._isPlaying = false;
  }
  reset() {
    this._elapsed = 0;
    this._deltaTime = 0;
    this._currentTime = 0;
    this._lastTime = void 0;
    this._isPlaying = false;
  }
  update(browserTime) {
    if (!this._isPlaying) return;
    if (!this._startTime) {
      this._startTime = browserTime;
    }
    if (this._lastTime === void 0) {
      this._lastTime = this._startTime;
      this._currentTime = 0;
      this._deltaTime = 0;
    } else {
      this._lastTime = this._currentTime;
      this._currentTime = browserTime - this._startTime;
      this._deltaTime = this._currentTime - this._lastTime;
      this._elapsed += this._deltaTime;
    }
  }
  get time() {
    return this._elapsed;
  }
  get isPlaying() {
    return this._isPlaying;
  }
  get deltaTime() {
    return this._deltaTime;
  }
};
var index = 0;
function getUID() {
  return index++;
}
var version = "1.0.0-dev.17";
var isClient = typeof window !== "undefined";
var originalRAF = isClient && window.requestAnimationFrame;
var originalCancelRAF = isClient && window.cancelAnimationFrame;
if (isClient) {
  window.tempusVersion = version;
}
function stopwatch(callback) {
  const now = performance.now();
  callback();
  return performance.now() - now;
}
var Framerate = class {
  callbacks = [];
  fps;
  time = 0;
  lastTickDate = performance.now();
  framesCount = 0;
  constructor(fps = Number.POSITIVE_INFINITY) {
    this.fps = fps;
  }
  get isRelativeFps() {
    return typeof this.fps === "string" && this.fps.endsWith("%");
  }
  get maxFramesCount() {
    if (!this.isRelativeFps) return 1;
    return Math.max(1, Math.round(100 / Number(this.fps.replace("%", ""))));
  }
  get executionTime() {
    if (this.isRelativeFps) return 0;
    return 1e3 / this.fps;
  }
  dispatch(time, deltaTime, frameCount) {
    for (let i = 0; i < this.callbacks.length; i++) {
      const duration = stopwatch(() => {
        if ((this.callbacks[i]?.idle ?? Number.POSITIVE_INFINITY) > Tempus.usage) {
          this.callbacks[i]?.callback(time, deltaTime, frameCount);
        }
      });
      this.callbacks[i].samples?.push(duration);
      this.callbacks[i].samples = this.callbacks[i].samples?.slice(-9);
    }
  }
  raf(time, deltaTime, frameCount) {
    this.time += deltaTime;
    if (this.isRelativeFps) {
      if (this.framesCount === 0) {
        this.dispatch(time, deltaTime, frameCount);
      }
      this.framesCount++;
      this.framesCount %= this.maxFramesCount;
    } else {
      if (this.fps === Number.POSITIVE_INFINITY) {
        this.dispatch(time, deltaTime, frameCount);
      } else if (this.time >= this.executionTime) {
        this.time = this.time % this.executionTime;
        const deltaTime2 = time - this.lastTickDate;
        this.lastTickDate = time;
        this.dispatch(time, deltaTime2, frameCount);
      }
    }
  }
  add({
    callback,
    priority,
    label,
    idle
  }) {
    if (typeof callback !== "function") {
      console.warn("Tempus.add: callback is not a function");
      return;
    }
    const uid2 = getUID();
    this.callbacks.push({ callback, priority, uid: uid2, label, samples: [], idle });
    this.callbacks.sort((a2, b2) => a2.priority - b2.priority);
    return () => this.remove(uid2);
  }
  remove(uid2) {
    this.callbacks = this.callbacks.filter(({ uid: u2 }) => uid2 !== u2);
  }
};
var TempusImpl = class {
  framerates = {};
  clock = new Clock();
  fps;
  usage = 0;
  rafId;
  frameCount = 0;
  constructor() {
    if (!isClient) return;
    this.play();
  }
  restart() {
    if (this.rafId) {
      cancelAnimationFrame(this.rafId);
    }
    this.frameCount = 0;
    for (const framerate of Object.values(this.framerates)) {
      framerate.framesCount = 0;
      framerate.time = 0;
      framerate.lastTickDate = performance.now();
    }
    this.clock.reset();
    this.play();
  }
  play() {
    if (!isClient || this.clock.isPlaying) return;
    this.clock.play();
    this.rafId = requestAnimationFrame(this.raf);
  }
  pause() {
    if (!isClient || !this.rafId || !this.clock.isPlaying) return;
    cancelAnimationFrame(this.rafId);
    this.rafId = void 0;
    this.clock.pause();
  }
  get isPlaying() {
    return this.clock.isPlaying;
  }
  add(callback, {
    priority = 0,
    fps = Number.POSITIVE_INFINITY,
    label = "",
    idle = Number.POSITIVE_INFINITY
  } = {}) {
    if (!isClient) return;
    if (typeof fps === "number" || typeof fps === "string" && fps.endsWith("%")) {
      if (!this.framerates[fps]) this.framerates[fps] = new Framerate(fps);
      return this.framerates[fps].add({ callback, priority, label, idle });
    }
    console.warn('Tempus.add: fps is not a number or a string ending with "%"');
  }
  raf = (browserElapsed) => {
    if (!isClient) return;
    this.clock.update(browserElapsed);
    const elapsed = this.clock.time;
    const deltaTime = this.clock.deltaTime;
    this.fps = 1e3 / deltaTime;
    const duration = stopwatch(() => {
      for (const framerate of Object.values(this.framerates)) {
        framerate.raf(elapsed, deltaTime, this.frameCount);
      }
    });
    if (deltaTime) {
      this.usage = duration / deltaTime;
    }
    this.frameCount++;
    this.rafId = requestAnimationFrame(this.raf);
  };
  patch() {
    if (!isClient) return;
    window.requestAnimationFrame = (callback, { priority = 0, fps = Number.POSITIVE_INFINITY } = {}) => {
      const stringifiedCallback = callback.toString();
      if ((stringifiedCallback.includes(
        `requestAnimationFrame(${callback.name})`
      ) || stringifiedCallback.includes(
        `requestAnimationFrame(this.${callback.name})`
      )) && callback !== this.raf) {
        if (!callback.__tempusPatched) {
          callback.__tempusPatched = true;
          callback.__tempusUnsubscribe = this.add(callback, {
            priority,
            fps,
            label: callback.name
          });
        }
        return callback.__tempusUnsubscribe;
      }
      return originalRAF(callback);
    };
    window.cancelAnimationFrame = (callback) => {
      if (typeof callback === "function") {
        callback?.();
        return;
      }
      return originalCancelRAF(callback);
    };
  }
  unpatch() {
    if (!isClient) return;
    window.requestAnimationFrame = originalRAF;
    window.cancelAnimationFrame = originalCancelRAF;
  }
};
var Tempus = new TempusImpl();
const _hoisted_1$a = {
  key: 0,
  class: "scroll-bar"
};
const _sfc_main$b = {
  __name: "ScrollBar",
  setup(__props) {
    const inner = /* @__PURE__ */ ref();
    const handle = /* @__PURE__ */ ref();
    const { height: wHeight } = /* @__PURE__ */ useWindowSize();
    const { y: scrollY } = useWindowScroll();
    const { height: documentHeight } = useElementSize(document.documentElement);
    const { height: innerHeight2 } = useElementSize(inner);
    const { height: handleHeight } = useElementSize(handle);
    const updateScrollbar = () => {
      const scrollHeight = documentHeight.value;
      const viewportHeight = wHeight.value;
      const limit = scrollHeight - viewportHeight;
      if (limit <= 0) return;
      const progress = scrollY.value / limit;
      if (handle.value) {
        handle.value.style.transform = `translate3d(0,${progress * (innerHeight2.value - handleHeight.value)}px,0)`;
      }
    };
    const showScrollBar = computed(() => {
      return documentHeight.value > wHeight.value;
    });
    const removeRaf = /* @__PURE__ */ ref();
    const addRaf = () => removeRaf.value = Tempus.add(updateScrollbar);
    onBeforeUnmount(() => {
      removeRaf.value?.();
    });
    watch(
      showScrollBar,
      (show) => {
        if (show) {
          addRaf();
        } else {
          removeRaf.value?.();
        }
      },
      { immediate: true }
    );
    return (_ctx, _cache) => {
      return showScrollBar.value ? (openBlock(), createElementBlock("div", _hoisted_1$a, [
        createBaseVNode("div", {
          class: "inner",
          ref_key: "inner",
          ref: inner
        }, [
          createBaseVNode("div", {
            class: "handle",
            ref_key: "handle",
            ref: handle
          }, null, 512)
        ], 512)
      ])) : createCommentVNode("", true);
    };
  }
};
const _sfc_main$a = {
  __name: "App",
  setup(__props) {
    const { height } = /* @__PURE__ */ useWindowSize();
    const { theme } = useState();
    const classes = computed(() => [
      "container",
      { "fonts-ready": !fontsLoading.value },
      `theme-${theme.value}`
    ]);
    const fontsLoading = /* @__PURE__ */ ref(true);
    onMounted(async () => {
      loadFonts([
        {
          name: "Leibniz Fraktur",
          weights: [400]
        },
        {
          name: "Geist Mono",
          weights: [400, 700]
        }
      ]).then(() => {
        fontsLoading.value = false;
      }).catch(() => {
        fontsLoading.value = false;
      });
    });
    const styles = computed(() => ({
      "--vh": height.value ? height.value / 100 + "px" : "100vh"
    }));
    return (_ctx, _cache) => {
      const _component_router_view = resolveComponent("router-view");
      return openBlock(), createElementBlock("div", {
        class: normalizeClass(classes.value),
        style: normalizeStyle(styles.value)
      }, [
        createVNode(_sfc_main$d),
        (openBlock(), createBlock(_component_router_view, {
          key: _ctx.$route.fullPath
        })),
        createVNode(_sfc_main$c),
        createVNode(_sfc_main$b)
      ], 6);
    };
  }
};
const _hoisted_1$9 = { class: "index" };
const _hoisted_2$4 = {
  key: 1,
  class: "title h1"
};
const _sfc_main$9 = {
  __name: "CategoryRow",
  props: {
    index: Number,
    category: {
      type: String,
      default: () => ""
    },
    editable: {
      type: Boolean,
      default: () => false
    }
  },
  emits: ["edited"],
  setup(__props, { emit: __emit }) {
    const props = __props;
    const emit2 = __emit;
    const isEditing = /* @__PURE__ */ ref(false);
    const categoryInput = /* @__PURE__ */ ref("");
    const input = /* @__PURE__ */ ref();
    onMounted(() => {
      categoryInput.value = props.category;
      if (categoryInput.value === "") {
        onEdit();
      }
    });
    const onEdit = async () => {
      isEditing.value = true;
      await new Promise((res) => setTimeout(res, 300));
      input.value?.focus();
    };
    const onSave = async () => {
      isEditing.value = false;
      emit2("edited", categoryInput.value);
      await new Promise((res) => setTimeout(res, 300));
      input.value?.blur();
    };
    const wrapper = computed(() => {
      return props.editable ? "div" : RouterLink;
    });
    return (_ctx, _cache) => {
      return openBlock(), createBlock(resolveDynamicComponent(wrapper.value), {
        class: normalizeClass(["category-row", { editable: __props.editable }]),
        to: `/category/${__props.category}`
      }, {
        default: withCtx(() => [
          createBaseVNode("span", _hoisted_1$9, toDisplayString(String(__props.index + 1).padStart(2, "0")) + ".", 1),
          isEditing.value ? (openBlock(), createElementBlock("form", {
            key: 0,
            onSubmit: withModifiers(onSave, ["prevent"])
          }, [
            withDirectives(createBaseVNode("input", {
              "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => categoryInput.value = $event),
              class: "category-input",
              type: "text",
              ref_key: "input",
              ref: input,
              onBlur: onSave
            }, null, 544), [
              [vModelText, categoryInput.value]
            ])
          ], 32)) : (openBlock(), createElementBlock("span", _hoisted_2$4, toDisplayString(categoryInput.value), 1)),
          isEditing.value ? (openBlock(), createElementBlock("button", {
            key: 2,
            class: "save-button",
            onClick: onSave
          }, " Save ")) : __props.editable ? (openBlock(), createElementBlock("button", {
            key: 3,
            class: "edit-button",
            onClick: onEdit
          }, " Edit ")) : createCommentVNode("", true)
        ]),
        _: 1
      }, 8, ["class", "to"]);
    };
  }
};
var token = /d{1,4}|M{1,4}|YY(?:YY)?|S{1,3}|Do|ZZ|Z|([HhMsDm])\1?|[aA]|"[^"]*"|'[^']*'/g;
var literal = /\[([^]*?)\]/gm;
function shorten(arr, sLen) {
  var newArr = [];
  for (var i = 0, len = arr.length; i < len; i++) {
    newArr.push(arr[i].substr(0, sLen));
  }
  return newArr;
}
function assign(origObj) {
  var args = [];
  for (var _i = 1; _i < arguments.length; _i++) {
    args[_i - 1] = arguments[_i];
  }
  for (var _a2 = 0, args_1 = args; _a2 < args_1.length; _a2++) {
    var obj = args_1[_a2];
    for (var key in obj) {
      origObj[key] = obj[key];
    }
  }
  return origObj;
}
var dayNames = [
  "Sunday",
  "Monday",
  "Tuesday",
  "Wednesday",
  "Thursday",
  "Friday",
  "Saturday"
];
var monthNames = [
  "January",
  "February",
  "March",
  "April",
  "May",
  "June",
  "July",
  "August",
  "September",
  "October",
  "November",
  "December"
];
var monthNamesShort = shorten(monthNames, 3);
var dayNamesShort = shorten(dayNames, 3);
var defaultI18n = {
  dayNamesShort,
  dayNames,
  monthNamesShort,
  monthNames,
  amPm: ["am", "pm"],
  DoFn: function(dayOfMonth) {
    return dayOfMonth + ["th", "st", "nd", "rd"][dayOfMonth % 10 > 3 ? 0 : (dayOfMonth - dayOfMonth % 10 !== 10 ? 1 : 0) * dayOfMonth % 10];
  }
};
var globalI18n = assign({}, defaultI18n);
var pad = function(val, len) {
  if (len === void 0) {
    len = 2;
  }
  val = String(val);
  while (val.length < len) {
    val = "0" + val;
  }
  return val;
};
var formatFlags = {
  D: function(dateObj) {
    return String(dateObj.getDate());
  },
  DD: function(dateObj) {
    return pad(dateObj.getDate());
  },
  Do: function(dateObj, i18n) {
    return i18n.DoFn(dateObj.getDate());
  },
  d: function(dateObj) {
    return String(dateObj.getDay());
  },
  dd: function(dateObj) {
    return pad(dateObj.getDay());
  },
  ddd: function(dateObj, i18n) {
    return i18n.dayNamesShort[dateObj.getDay()];
  },
  dddd: function(dateObj, i18n) {
    return i18n.dayNames[dateObj.getDay()];
  },
  M: function(dateObj) {
    return String(dateObj.getMonth() + 1);
  },
  MM: function(dateObj) {
    return pad(dateObj.getMonth() + 1);
  },
  MMM: function(dateObj, i18n) {
    return i18n.monthNamesShort[dateObj.getMonth()];
  },
  MMMM: function(dateObj, i18n) {
    return i18n.monthNames[dateObj.getMonth()];
  },
  YY: function(dateObj) {
    return pad(String(dateObj.getFullYear()), 4).substr(2);
  },
  YYYY: function(dateObj) {
    return pad(dateObj.getFullYear(), 4);
  },
  h: function(dateObj) {
    return String(dateObj.getHours() % 12 || 12);
  },
  hh: function(dateObj) {
    return pad(dateObj.getHours() % 12 || 12);
  },
  H: function(dateObj) {
    return String(dateObj.getHours());
  },
  HH: function(dateObj) {
    return pad(dateObj.getHours());
  },
  m: function(dateObj) {
    return String(dateObj.getMinutes());
  },
  mm: function(dateObj) {
    return pad(dateObj.getMinutes());
  },
  s: function(dateObj) {
    return String(dateObj.getSeconds());
  },
  ss: function(dateObj) {
    return pad(dateObj.getSeconds());
  },
  S: function(dateObj) {
    return String(Math.round(dateObj.getMilliseconds() / 100));
  },
  SS: function(dateObj) {
    return pad(Math.round(dateObj.getMilliseconds() / 10), 2);
  },
  SSS: function(dateObj) {
    return pad(dateObj.getMilliseconds(), 3);
  },
  a: function(dateObj, i18n) {
    return dateObj.getHours() < 12 ? i18n.amPm[0] : i18n.amPm[1];
  },
  A: function(dateObj, i18n) {
    return dateObj.getHours() < 12 ? i18n.amPm[0].toUpperCase() : i18n.amPm[1].toUpperCase();
  },
  ZZ: function(dateObj) {
    var offset2 = dateObj.getTimezoneOffset();
    return (offset2 > 0 ? "-" : "+") + pad(Math.floor(Math.abs(offset2) / 60) * 100 + Math.abs(offset2) % 60, 4);
  },
  Z: function(dateObj) {
    var offset2 = dateObj.getTimezoneOffset();
    return (offset2 > 0 ? "-" : "+") + pad(Math.floor(Math.abs(offset2) / 60), 2) + ":" + pad(Math.abs(offset2) % 60, 2);
  }
};
var globalMasks = {
  default: "ddd MMM DD YYYY HH:mm:ss",
  shortDate: "M/D/YY",
  mediumDate: "MMM D, YYYY",
  longDate: "MMMM D, YYYY",
  fullDate: "dddd, MMMM D, YYYY",
  isoDate: "YYYY-MM-DD",
  isoDateTime: "YYYY-MM-DDTHH:mm:ssZ",
  shortTime: "HH:mm",
  mediumTime: "HH:mm:ss",
  longTime: "HH:mm:ss.SSS"
};
var format = function(dateObj, mask, i18n) {
  if (mask === void 0) {
    mask = globalMasks["default"];
  }
  if (i18n === void 0) {
    i18n = {};
  }
  if (typeof dateObj === "number") {
    dateObj = new Date(dateObj);
  }
  if (Object.prototype.toString.call(dateObj) !== "[object Date]" || isNaN(dateObj.getTime())) {
    throw new Error("Invalid Date pass to format");
  }
  mask = globalMasks[mask] || mask;
  var literals2 = [];
  mask = mask.replace(literal, function($0, $1) {
    literals2.push($1);
    return "@@@";
  });
  var combinedI18nSettings = assign(assign({}, globalI18n), i18n);
  mask = mask.replace(token, function($0) {
    return formatFlags[$0](dateObj, combinedI18nSettings);
  });
  return mask.replace(/@@@/g, function() {
    return literals2.shift();
  });
};
const _hoisted_1$8 = { class: "date" };
const _hoisted_2$3 = { class: "title bold" };
const _sfc_main$8 = {
  __name: "NoteRow",
  props: { note: Object },
  setup(__props) {
    const { openNote } = useOpenNote();
    const formatDate = (date) => {
      const d2 = new Date(date);
      return format(d2, "MM/DD/YYYY");
    };
    return (_ctx, _cache) => {
      return openBlock(), createElementBlock("button", {
        class: "note-row",
        onClick: _cache[0] || (_cache[0] = ($event) => unref(openNote)(__props.note.id))
      }, [
        createBaseVNode("span", _hoisted_1$8, toDisplayString(formatDate(__props.note.createdAt)), 1),
        createBaseVNode("span", _hoisted_2$3, toDisplayString(__props.note.title), 1)
      ]);
    };
  }
};
const _hoisted_1$7 = { class: "directory layout-block" };
const _hoisted_2$2 = { class: "notes" };
const _sfc_main$7 = {
  __name: "Directory",
  setup(__props) {
    const { categories: categories2, loadCategories, loadCategoryNotes, notesChangeCount: notesChangeCount2 } = useNotes();
    const notes = /* @__PURE__ */ ref();
    async function refreshNotes() {
      await loadCategories();
      notes.value = await loadCategoryNotes();
    }
    onMounted(async () => {
      await refreshNotes();
    });
    watch(notesChangeCount2, async () => {
      await refreshNotes();
    });
    return (_ctx, _cache) => {
      return openBlock(), createElementBlock("main", _hoisted_1$7, [
        (openBlock(true), createElementBlock(Fragment$1, null, renderList(unref(categories2), (category, i) => {
          return openBlock(), createBlock(_sfc_main$9, {
            index: i,
            category,
            key: category
          }, null, 8, ["index", "category"]);
        }), 128)),
        _cache[0] || (_cache[0] = createBaseVNode("h2", { class: "label" }, "Summarium", -1)),
        createBaseVNode("div", _hoisted_2$2, [
          (openBlock(true), createElementBlock(Fragment$1, null, renderList(notes.value, (note) => {
            return openBlock(), createBlock(_sfc_main$8, {
              note,
              key: note.id
            }, null, 8, ["note"]);
          }), 128))
        ])
      ]);
    };
  }
};
function OrderedMap(content) {
  this.content = content;
}
OrderedMap.prototype = {
  constructor: OrderedMap,
  find: function(key) {
    for (var i = 0; i < this.content.length; i += 2)
      if (this.content[i] === key) return i;
    return -1;
  },
  // :: (string) → ?any
  // Retrieve the value stored under `key`, or return undefined when
  // no such key exists.
  get: function(key) {
    var found2 = this.find(key);
    return found2 == -1 ? void 0 : this.content[found2 + 1];
  },
  // :: (string, any, ?string) → OrderedMap
  // Create a new map by replacing the value of `key` with a new
  // value, or adding a binding to the end of the map. If `newKey` is
  // given, the key of the binding will be replaced with that key.
  update: function(key, value, newKey) {
    var self2 = newKey && newKey != key ? this.remove(newKey) : this;
    var found2 = self2.find(key), content = self2.content.slice();
    if (found2 == -1) {
      content.push(newKey || key, value);
    } else {
      content[found2 + 1] = value;
      if (newKey) content[found2] = newKey;
    }
    return new OrderedMap(content);
  },
  // :: (string) → OrderedMap
  // Return a map with the given key removed, if it existed.
  remove: function(key) {
    var found2 = this.find(key);
    if (found2 == -1) return this;
    var content = this.content.slice();
    content.splice(found2, 2);
    return new OrderedMap(content);
  },
  // :: (string, any) → OrderedMap
  // Add a new key to the start of the map.
  addToStart: function(key, value) {
    return new OrderedMap([key, value].concat(this.remove(key).content));
  },
  // :: (string, any) → OrderedMap
  // Add a new key to the end of the map.
  addToEnd: function(key, value) {
    var content = this.remove(key).content.slice();
    content.push(key, value);
    return new OrderedMap(content);
  },
  // :: (string, string, any) → OrderedMap
  // Add a key after the given key. If `place` is not found, the new
  // key is added to the end.
  addBefore: function(place, key, value) {
    var without = this.remove(key), content = without.content.slice();
    var found2 = without.find(place);
    content.splice(found2 == -1 ? content.length : found2, 0, key, value);
    return new OrderedMap(content);
  },
  // :: ((key: string, value: any))
  // Call the given function for each key/value pair in the map, in
  // order.
  forEach: function(f2) {
    for (var i = 0; i < this.content.length; i += 2)
      f2(this.content[i], this.content[i + 1]);
  },
  // :: (union<Object, OrderedMap>) → OrderedMap
  // Create a new map by prepending the keys in this map that don't
  // appear in `map` before the keys in `map`.
  prepend: function(map2) {
    map2 = OrderedMap.from(map2);
    if (!map2.size) return this;
    return new OrderedMap(map2.content.concat(this.subtract(map2).content));
  },
  // :: (union<Object, OrderedMap>) → OrderedMap
  // Create a new map by appending the keys in this map that don't
  // appear in `map` after the keys in `map`.
  append: function(map2) {
    map2 = OrderedMap.from(map2);
    if (!map2.size) return this;
    return new OrderedMap(this.subtract(map2).content.concat(map2.content));
  },
  // :: (union<Object, OrderedMap>) → OrderedMap
  // Create a map containing all the keys in this map that don't
  // appear in `map`.
  subtract: function(map2) {
    var result = this;
    map2 = OrderedMap.from(map2);
    for (var i = 0; i < map2.content.length; i += 2)
      result = result.remove(map2.content[i]);
    return result;
  },
  // :: () → Object
  // Turn ordered map into a plain object.
  toObject: function() {
    var result = {};
    this.forEach(function(key, value) {
      result[key] = value;
    });
    return result;
  },
  // :: number
  // The amount of keys in this map.
  get size() {
    return this.content.length >> 1;
  }
};
OrderedMap.from = function(value) {
  if (value instanceof OrderedMap) return value;
  var content = [];
  if (value) for (var prop in value) content.push(prop, value[prop]);
  return new OrderedMap(content);
};
function findDiffStart(a2, b2, pos) {
  for (let i = 0; ; i++) {
    if (i == a2.childCount || i == b2.childCount)
      return a2.childCount == b2.childCount ? null : pos;
    let childA = a2.child(i), childB = b2.child(i);
    if (childA == childB) {
      pos += childA.nodeSize;
      continue;
    }
    if (!childA.sameMarkup(childB))
      return pos;
    if (childA.isText && childA.text != childB.text) {
      for (let j2 = 0; childA.text[j2] == childB.text[j2]; j2++)
        pos++;
      return pos;
    }
    if (childA.content.size || childB.content.size) {
      let inner = findDiffStart(childA.content, childB.content, pos + 1);
      if (inner != null)
        return inner;
    }
    pos += childA.nodeSize;
  }
}
function findDiffEnd(a2, b2, posA, posB) {
  for (let iA = a2.childCount, iB = b2.childCount; ; ) {
    if (iA == 0 || iB == 0)
      return iA == iB ? null : { a: posA, b: posB };
    let childA = a2.child(--iA), childB = b2.child(--iB), size2 = childA.nodeSize;
    if (childA == childB) {
      posA -= size2;
      posB -= size2;
      continue;
    }
    if (!childA.sameMarkup(childB))
      return { a: posA, b: posB };
    if (childA.isText && childA.text != childB.text) {
      let same = 0, minSize = Math.min(childA.text.length, childB.text.length);
      while (same < minSize && childA.text[childA.text.length - same - 1] == childB.text[childB.text.length - same - 1]) {
        same++;
        posA--;
        posB--;
      }
      return { a: posA, b: posB };
    }
    if (childA.content.size || childB.content.size) {
      let inner = findDiffEnd(childA.content, childB.content, posA - 1, posB - 1);
      if (inner)
        return inner;
    }
    posA -= size2;
    posB -= size2;
  }
}
class Fragment {
  /**
  @internal
  */
  constructor(content, size2) {
    this.content = content;
    this.size = size2 || 0;
    if (size2 == null)
      for (let i = 0; i < content.length; i++)
        this.size += content[i].nodeSize;
  }
  /**
  Invoke a callback for all descendant nodes between the given two
  positions (relative to start of this fragment). Doesn't descend
  into a node when the callback returns `false`.
  */
  nodesBetween(from2, to, f2, nodeStart = 0, parent) {
    for (let i = 0, pos = 0; pos < to; i++) {
      let child = this.content[i], end = pos + child.nodeSize;
      if (end > from2 && f2(child, nodeStart + pos, parent || null, i) !== false && child.content.size) {
        let start = pos + 1;
        child.nodesBetween(Math.max(0, from2 - start), Math.min(child.content.size, to - start), f2, nodeStart + start);
      }
      pos = end;
    }
  }
  /**
  Call the given callback for every descendant node. `pos` will be
  relative to the start of the fragment. The callback may return
  `false` to prevent traversal of a given node's children.
  */
  descendants(f2) {
    this.nodesBetween(0, this.size, f2);
  }
  /**
  Extract the text between `from` and `to`. See the same method on
  [`Node`](https://prosemirror.net/docs/ref/#model.Node.textBetween).
  */
  textBetween(from2, to, blockSeparator, leafText) {
    let text = "", first2 = true;
    this.nodesBetween(from2, to, (node, pos) => {
      let nodeText = node.isText ? node.text.slice(Math.max(from2, pos) - pos, to - pos) : !node.isLeaf ? "" : leafText ? typeof leafText === "function" ? leafText(node) : leafText : node.type.spec.leafText ? node.type.spec.leafText(node) : "";
      if (node.isBlock && (node.isLeaf && nodeText || node.isTextblock) && blockSeparator) {
        if (first2)
          first2 = false;
        else
          text += blockSeparator;
      }
      text += nodeText;
    }, 0);
    return text;
  }
  /**
  Create a new fragment containing the combined content of this
  fragment and the other.
  */
  append(other) {
    if (!other.size)
      return this;
    if (!this.size)
      return other;
    let last = this.lastChild, first2 = other.firstChild, content = this.content.slice(), i = 0;
    if (last.isText && last.sameMarkup(first2)) {
      content[content.length - 1] = last.withText(last.text + first2.text);
      i = 1;
    }
    for (; i < other.content.length; i++)
      content.push(other.content[i]);
    return new Fragment(content, this.size + other.size);
  }
  /**
  Cut out the sub-fragment between the two given positions.
  */
  cut(from2, to = this.size) {
    if (from2 == 0 && to == this.size)
      return this;
    let result = [], size2 = 0;
    if (to > from2)
      for (let i = 0, pos = 0; pos < to; i++) {
        let child = this.content[i], end = pos + child.nodeSize;
        if (end > from2) {
          if (pos < from2 || end > to) {
            if (child.isText)
              child = child.cut(Math.max(0, from2 - pos), Math.min(child.text.length, to - pos));
            else
              child = child.cut(Math.max(0, from2 - pos - 1), Math.min(child.content.size, to - pos - 1));
          }
          result.push(child);
          size2 += child.nodeSize;
        }
        pos = end;
      }
    return new Fragment(result, size2);
  }
  /**
  @internal
  */
  cutByIndex(from2, to) {
    if (from2 == to)
      return Fragment.empty;
    if (from2 == 0 && to == this.content.length)
      return this;
    return new Fragment(this.content.slice(from2, to));
  }
  /**
  Create a new fragment in which the node at the given index is
  replaced by the given node.
  */
  replaceChild(index2, node) {
    let current = this.content[index2];
    if (current == node)
      return this;
    let copy2 = this.content.slice();
    let size2 = this.size + node.nodeSize - current.nodeSize;
    copy2[index2] = node;
    return new Fragment(copy2, size2);
  }
  /**
  Create a new fragment by prepending the given node to this
  fragment.
  */
  addToStart(node) {
    return new Fragment([node].concat(this.content), this.size + node.nodeSize);
  }
  /**
  Create a new fragment by appending the given node to this
  fragment.
  */
  addToEnd(node) {
    return new Fragment(this.content.concat(node), this.size + node.nodeSize);
  }
  /**
  Compare this fragment to another one.
  */
  eq(other) {
    if (this.content.length != other.content.length)
      return false;
    for (let i = 0; i < this.content.length; i++)
      if (!this.content[i].eq(other.content[i]))
        return false;
    return true;
  }
  /**
  The first child of the fragment, or `null` if it is empty.
  */
  get firstChild() {
    return this.content.length ? this.content[0] : null;
  }
  /**
  The last child of the fragment, or `null` if it is empty.
  */
  get lastChild() {
    return this.content.length ? this.content[this.content.length - 1] : null;
  }
  /**
  The number of child nodes in this fragment.
  */
  get childCount() {
    return this.content.length;
  }
  /**
  Get the child node at the given index. Raise an error when the
  index is out of range.
  */
  child(index2) {
    let found2 = this.content[index2];
    if (!found2)
      throw new RangeError("Index " + index2 + " out of range for " + this);
    return found2;
  }
  /**
  Get the child node at the given index, if it exists.
  */
  maybeChild(index2) {
    return this.content[index2] || null;
  }
  /**
  Call `f` for every child node, passing the node, its offset
  into this parent node, and its index.
  */
  forEach(f2) {
    for (let i = 0, p2 = 0; i < this.content.length; i++) {
      let child = this.content[i];
      f2(child, p2, i);
      p2 += child.nodeSize;
    }
  }
  /**
  Find the first position at which this fragment and another
  fragment differ, or `null` if they are the same.
  */
  findDiffStart(other, pos = 0) {
    return findDiffStart(this, other, pos);
  }
  /**
  Find the first position, searching from the end, at which this
  fragment and the given fragment differ, or `null` if they are
  the same. Since this position will not be the same in both
  nodes, an object with two separate positions is returned.
  */
  findDiffEnd(other, pos = this.size, otherPos = other.size) {
    return findDiffEnd(this, other, pos, otherPos);
  }
  /**
  Find the index and inner offset corresponding to a given relative
  position in this fragment. The result object will be reused
  (overwritten) the next time the function is called. @internal
  */
  findIndex(pos) {
    if (pos == 0)
      return retIndex(0, pos);
    if (pos == this.size)
      return retIndex(this.content.length, pos);
    if (pos > this.size || pos < 0)
      throw new RangeError(`Position ${pos} outside of fragment (${this})`);
    for (let i = 0, curPos = 0; ; i++) {
      let cur = this.child(i), end = curPos + cur.nodeSize;
      if (end >= pos) {
        if (end == pos)
          return retIndex(i + 1, end);
        return retIndex(i, curPos);
      }
      curPos = end;
    }
  }
  /**
  Return a debugging string that describes this fragment.
  */
  toString() {
    return "<" + this.toStringInner() + ">";
  }
  /**
  @internal
  */
  toStringInner() {
    return this.content.join(", ");
  }
  /**
  Create a JSON-serializeable representation of this fragment.
  */
  toJSON() {
    return this.content.length ? this.content.map((n2) => n2.toJSON()) : null;
  }
  /**
  Deserialize a fragment from its JSON representation.
  */
  static fromJSON(schema, value) {
    if (!value)
      return Fragment.empty;
    if (!Array.isArray(value))
      throw new RangeError("Invalid input for Fragment.fromJSON");
    return new Fragment(value.map(schema.nodeFromJSON));
  }
  /**
  Build a fragment from an array of nodes. Ensures that adjacent
  text nodes with the same marks are joined together.
  */
  static fromArray(array) {
    if (!array.length)
      return Fragment.empty;
    let joined, size2 = 0;
    for (let i = 0; i < array.length; i++) {
      let node = array[i];
      size2 += node.nodeSize;
      if (i && node.isText && array[i - 1].sameMarkup(node)) {
        if (!joined)
          joined = array.slice(0, i);
        joined[joined.length - 1] = node.withText(joined[joined.length - 1].text + node.text);
      } else if (joined) {
        joined.push(node);
      }
    }
    return new Fragment(joined || array, size2);
  }
  /**
  Create a fragment from something that can be interpreted as a
  set of nodes. For `null`, it returns the empty fragment. For a
  fragment, the fragment itself. For a node or array of nodes, a
  fragment containing those nodes.
  */
  static from(nodes) {
    if (!nodes)
      return Fragment.empty;
    if (nodes instanceof Fragment)
      return nodes;
    if (Array.isArray(nodes))
      return this.fromArray(nodes);
    if (nodes.attrs)
      return new Fragment([nodes], nodes.nodeSize);
    throw new RangeError("Can not convert " + nodes + " to a Fragment" + (nodes.nodesBetween ? " (looks like multiple versions of prosemirror-model were loaded)" : ""));
  }
}
Fragment.empty = new Fragment([], 0);
const found = { index: 0, offset: 0 };
function retIndex(index2, offset2) {
  found.index = index2;
  found.offset = offset2;
  return found;
}
function compareDeep(a2, b2) {
  if (a2 === b2)
    return true;
  if (!(a2 && typeof a2 == "object") || !(b2 && typeof b2 == "object"))
    return false;
  let array = Array.isArray(a2);
  if (Array.isArray(b2) != array)
    return false;
  if (array) {
    if (a2.length != b2.length)
      return false;
    for (let i = 0; i < a2.length; i++)
      if (!compareDeep(a2[i], b2[i]))
        return false;
  } else {
    for (let p2 in a2)
      if (!(p2 in b2) || !compareDeep(a2[p2], b2[p2]))
        return false;
    for (let p2 in b2)
      if (!(p2 in a2))
        return false;
  }
  return true;
}
let Mark$1 = class Mark {
  /**
  @internal
  */
  constructor(type, attrs) {
    this.type = type;
    this.attrs = attrs;
  }
  /**
  Given a set of marks, create a new set which contains this one as
  well, in the right position. If this mark is already in the set,
  the set itself is returned. If any marks that are set to be
  [exclusive](https://prosemirror.net/docs/ref/#model.MarkSpec.excludes) with this mark are present,
  those are replaced by this one.
  */
  addToSet(set) {
    let copy2, placed = false;
    for (let i = 0; i < set.length; i++) {
      let other = set[i];
      if (this.eq(other))
        return set;
      if (this.type.excludes(other.type)) {
        if (!copy2)
          copy2 = set.slice(0, i);
      } else if (other.type.excludes(this.type)) {
        return set;
      } else {
        if (!placed && other.type.rank > this.type.rank) {
          if (!copy2)
            copy2 = set.slice(0, i);
          copy2.push(this);
          placed = true;
        }
        if (copy2)
          copy2.push(other);
      }
    }
    if (!copy2)
      copy2 = set.slice();
    if (!placed)
      copy2.push(this);
    return copy2;
  }
  /**
  Remove this mark from the given set, returning a new set. If this
  mark is not in the set, the set itself is returned.
  */
  removeFromSet(set) {
    for (let i = 0; i < set.length; i++)
      if (this.eq(set[i]))
        return set.slice(0, i).concat(set.slice(i + 1));
    return set;
  }
  /**
  Test whether this mark is in the given set of marks.
  */
  isInSet(set) {
    for (let i = 0; i < set.length; i++)
      if (this.eq(set[i]))
        return true;
    return false;
  }
  /**
  Test whether this mark has the same type and attributes as
  another mark.
  */
  eq(other) {
    return this == other || this.type == other.type && compareDeep(this.attrs, other.attrs);
  }
  /**
  Convert this mark to a JSON-serializeable representation.
  */
  toJSON() {
    let obj = { type: this.type.name };
    for (let _2 in this.attrs) {
      obj.attrs = this.attrs;
      break;
    }
    return obj;
  }
  /**
  Deserialize a mark from JSON.
  */
  static fromJSON(schema, json2) {
    if (!json2)
      throw new RangeError("Invalid input for Mark.fromJSON");
    let type = schema.marks[json2.type];
    if (!type)
      throw new RangeError(`There is no mark type ${json2.type} in this schema`);
    let mark = type.create(json2.attrs);
    type.checkAttrs(mark.attrs);
    return mark;
  }
  /**
  Test whether two sets of marks are identical.
  */
  static sameSet(a2, b2) {
    if (a2 == b2)
      return true;
    if (a2.length != b2.length)
      return false;
    for (let i = 0; i < a2.length; i++)
      if (!a2[i].eq(b2[i]))
        return false;
    return true;
  }
  /**
  Create a properly sorted mark set from null, a single mark, or an
  unsorted array of marks.
  */
  static setFrom(marks) {
    if (!marks || Array.isArray(marks) && marks.length == 0)
      return Mark.none;
    if (marks instanceof Mark)
      return [marks];
    let copy2 = marks.slice();
    copy2.sort((a2, b2) => a2.type.rank - b2.type.rank);
    return copy2;
  }
};
Mark$1.none = [];
class ReplaceError extends Error {
}
class Slice {
  /**
  Create a slice. When specifying a non-zero open depth, you must
  make sure that there are nodes of at least that depth at the
  appropriate side of the fragment—i.e. if the fragment is an
  empty paragraph node, `openStart` and `openEnd` can't be greater
  than 1.
  
  It is not necessary for the content of open nodes to conform to
  the schema's content constraints, though it should be a valid
  start/end/middle for such a node, depending on which sides are
  open.
  */
  constructor(content, openStart, openEnd) {
    this.content = content;
    this.openStart = openStart;
    this.openEnd = openEnd;
  }
  /**
  The size this slice would add when inserted into a document.
  */
  get size() {
    return this.content.size - this.openStart - this.openEnd;
  }
  /**
  @internal
  */
  insertAt(pos, fragment) {
    let content = insertInto(this.content, pos + this.openStart, fragment);
    return content && new Slice(content, this.openStart, this.openEnd);
  }
  /**
  @internal
  */
  removeBetween(from2, to) {
    return new Slice(removeRange(this.content, from2 + this.openStart, to + this.openStart), this.openStart, this.openEnd);
  }
  /**
  Tests whether this slice is equal to another slice.
  */
  eq(other) {
    return this.content.eq(other.content) && this.openStart == other.openStart && this.openEnd == other.openEnd;
  }
  /**
  @internal
  */
  toString() {
    return this.content + "(" + this.openStart + "," + this.openEnd + ")";
  }
  /**
  Convert a slice to a JSON-serializable representation.
  */
  toJSON() {
    if (!this.content.size)
      return null;
    let json2 = { content: this.content.toJSON() };
    if (this.openStart > 0)
      json2.openStart = this.openStart;
    if (this.openEnd > 0)
      json2.openEnd = this.openEnd;
    return json2;
  }
  /**
  Deserialize a slice from its JSON representation.
  */
  static fromJSON(schema, json2) {
    if (!json2)
      return Slice.empty;
    let openStart = json2.openStart || 0, openEnd = json2.openEnd || 0;
    if (typeof openStart != "number" || typeof openEnd != "number")
      throw new RangeError("Invalid input for Slice.fromJSON");
    return new Slice(Fragment.fromJSON(schema, json2.content), openStart, openEnd);
  }
  /**
  Create a slice from a fragment by taking the maximum possible
  open value on both side of the fragment.
  */
  static maxOpen(fragment, openIsolating = true) {
    let openStart = 0, openEnd = 0;
    for (let n2 = fragment.firstChild; n2 && !n2.isLeaf && (openIsolating || !n2.type.spec.isolating); n2 = n2.firstChild)
      openStart++;
    for (let n2 = fragment.lastChild; n2 && !n2.isLeaf && (openIsolating || !n2.type.spec.isolating); n2 = n2.lastChild)
      openEnd++;
    return new Slice(fragment, openStart, openEnd);
  }
}
Slice.empty = new Slice(Fragment.empty, 0, 0);
function removeRange(content, from2, to) {
  let { index: index2, offset: offset2 } = content.findIndex(from2), child = content.maybeChild(index2);
  let { index: indexTo, offset: offsetTo } = content.findIndex(to);
  if (offset2 == from2 || child.isText) {
    if (offsetTo != to && !content.child(indexTo).isText)
      throw new RangeError("Removing non-flat range");
    return content.cut(0, from2).append(content.cut(to));
  }
  if (index2 != indexTo)
    throw new RangeError("Removing non-flat range");
  return content.replaceChild(index2, child.copy(removeRange(child.content, from2 - offset2 - 1, to - offset2 - 1)));
}
function insertInto(content, dist2, insert, parent) {
  let { index: index2, offset: offset2 } = content.findIndex(dist2), child = content.maybeChild(index2);
  if (offset2 == dist2 || child.isText) {
    if (parent && !parent.canReplace(index2, index2, insert))
      return null;
    return content.cut(0, dist2).append(insert).append(content.cut(dist2));
  }
  let inner = insertInto(child.content, dist2 - offset2 - 1, insert, child);
  return inner && content.replaceChild(index2, child.copy(inner));
}
function replace($from, $to, slice2) {
  if (slice2.openStart > $from.depth)
    throw new ReplaceError("Inserted content deeper than insertion position");
  if ($from.depth - slice2.openStart != $to.depth - slice2.openEnd)
    throw new ReplaceError("Inconsistent open depths");
  return replaceOuter($from, $to, slice2, 0);
}
function replaceOuter($from, $to, slice2, depth) {
  let index2 = $from.index(depth), node = $from.node(depth);
  if (index2 == $to.index(depth) && depth < $from.depth - slice2.openStart) {
    let inner = replaceOuter($from, $to, slice2, depth + 1);
    return node.copy(node.content.replaceChild(index2, inner));
  } else if (!slice2.content.size) {
    return close(node, replaceTwoWay($from, $to, depth));
  } else if (!slice2.openStart && !slice2.openEnd && $from.depth == depth && $to.depth == depth) {
    let parent = $from.parent, content = parent.content;
    return close(parent, content.cut(0, $from.parentOffset).append(slice2.content).append(content.cut($to.parentOffset)));
  } else {
    let { start, end } = prepareSliceForReplace(slice2, $from);
    return close(node, replaceThreeWay($from, start, end, $to, depth));
  }
}
function checkJoin(main, sub) {
  if (!sub.type.compatibleContent(main.type))
    throw new ReplaceError("Cannot join " + sub.type.name + " onto " + main.type.name);
}
function joinable$1($before, $after, depth) {
  let node = $before.node(depth);
  checkJoin(node, $after.node(depth));
  return node;
}
function addNode(child, target) {
  let last = target.length - 1;
  if (last >= 0 && child.isText && child.sameMarkup(target[last]))
    target[last] = child.withText(target[last].text + child.text);
  else
    target.push(child);
}
function addRange($start, $end, depth, target) {
  let node = ($end || $start).node(depth);
  let startIndex = 0, endIndex = $end ? $end.index(depth) : node.childCount;
  if ($start) {
    startIndex = $start.index(depth);
    if ($start.depth > depth) {
      startIndex++;
    } else if ($start.textOffset) {
      addNode($start.nodeAfter, target);
      startIndex++;
    }
  }
  for (let i = startIndex; i < endIndex; i++)
    addNode(node.child(i), target);
  if ($end && $end.depth == depth && $end.textOffset)
    addNode($end.nodeBefore, target);
}
function close(node, content) {
  node.type.checkContent(content);
  return node.copy(content);
}
function replaceThreeWay($from, $start, $end, $to, depth) {
  let openStart = $from.depth > depth && joinable$1($from, $start, depth + 1);
  let openEnd = $to.depth > depth && joinable$1($end, $to, depth + 1);
  let content = [];
  addRange(null, $from, depth, content);
  if (openStart && openEnd && $start.index(depth) == $end.index(depth)) {
    checkJoin(openStart, openEnd);
    addNode(close(openStart, replaceThreeWay($from, $start, $end, $to, depth + 1)), content);
  } else {
    if (openStart)
      addNode(close(openStart, replaceTwoWay($from, $start, depth + 1)), content);
    addRange($start, $end, depth, content);
    if (openEnd)
      addNode(close(openEnd, replaceTwoWay($end, $to, depth + 1)), content);
  }
  addRange($to, null, depth, content);
  return new Fragment(content);
}
function replaceTwoWay($from, $to, depth) {
  let content = [];
  addRange(null, $from, depth, content);
  if ($from.depth > depth) {
    let type = joinable$1($from, $to, depth + 1);
    addNode(close(type, replaceTwoWay($from, $to, depth + 1)), content);
  }
  addRange($to, null, depth, content);
  return new Fragment(content);
}
function prepareSliceForReplace(slice2, $along) {
  let extra = $along.depth - slice2.openStart, parent = $along.node(extra);
  let node = parent.copy(slice2.content);
  for (let i = extra - 1; i >= 0; i--)
    node = $along.node(i).copy(Fragment.from(node));
  return {
    start: node.resolveNoCache(slice2.openStart + extra),
    end: node.resolveNoCache(node.content.size - slice2.openEnd - extra)
  };
}
class ResolvedPos {
  /**
  @internal
  */
  constructor(pos, path, parentOffset) {
    this.pos = pos;
    this.path = path;
    this.parentOffset = parentOffset;
    this.depth = path.length / 3 - 1;
  }
  /**
  @internal
  */
  resolveDepth(val) {
    if (val == null)
      return this.depth;
    if (val < 0)
      return this.depth + val;
    return val;
  }
  /**
  The parent node that the position points into. Note that even if
  a position points into a text node, that node is not considered
  the parent—text nodes are ‘flat’ in this model, and have no content.
  */
  get parent() {
    return this.node(this.depth);
  }
  /**
  The root node in which the position was resolved.
  */
  get doc() {
    return this.node(0);
  }
  /**
  The ancestor node at the given level. `p.node(p.depth)` is the
  same as `p.parent`.
  */
  node(depth) {
    return this.path[this.resolveDepth(depth) * 3];
  }
  /**
  The index into the ancestor at the given level. If this points
  at the 3rd node in the 2nd paragraph on the top level, for
  example, `p.index(0)` is 1 and `p.index(1)` is 2.
  */
  index(depth) {
    return this.path[this.resolveDepth(depth) * 3 + 1];
  }
  /**
  The index pointing after this position into the ancestor at the
  given level.
  */
  indexAfter(depth) {
    depth = this.resolveDepth(depth);
    return this.index(depth) + (depth == this.depth && !this.textOffset ? 0 : 1);
  }
  /**
  The (absolute) position at the start of the node at the given
  level.
  */
  start(depth) {
    depth = this.resolveDepth(depth);
    return depth == 0 ? 0 : this.path[depth * 3 - 1] + 1;
  }
  /**
  The (absolute) position at the end of the node at the given
  level.
  */
  end(depth) {
    depth = this.resolveDepth(depth);
    return this.start(depth) + this.node(depth).content.size;
  }
  /**
  The (absolute) position directly before the wrapping node at the
  given level, or, when `depth` is `this.depth + 1`, the original
  position.
  */
  before(depth) {
    depth = this.resolveDepth(depth);
    if (!depth)
      throw new RangeError("There is no position before the top-level node");
    return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1];
  }
  /**
  The (absolute) position directly after the wrapping node at the
  given level, or the original position when `depth` is `this.depth + 1`.
  */
  after(depth) {
    depth = this.resolveDepth(depth);
    if (!depth)
      throw new RangeError("There is no position after the top-level node");
    return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1] + this.path[depth * 3].nodeSize;
  }
  /**
  When this position points into a text node, this returns the
  distance between the position and the start of the text node.
  Will be zero for positions that point between nodes.
  */
  get textOffset() {
    return this.pos - this.path[this.path.length - 1];
  }
  /**
  Get the node directly after the position, if any. If the position
  points into a text node, only the part of that node after the
  position is returned.
  */
  get nodeAfter() {
    let parent = this.parent, index2 = this.index(this.depth);
    if (index2 == parent.childCount)
      return null;
    let dOff = this.pos - this.path[this.path.length - 1], child = parent.child(index2);
    return dOff ? parent.child(index2).cut(dOff) : child;
  }
  /**
  Get the node directly before the position, if any. If the
  position points into a text node, only the part of that node
  before the position is returned.
  */
  get nodeBefore() {
    let index2 = this.index(this.depth);
    let dOff = this.pos - this.path[this.path.length - 1];
    if (dOff)
      return this.parent.child(index2).cut(0, dOff);
    return index2 == 0 ? null : this.parent.child(index2 - 1);
  }
  /**
  Get the position at the given index in the parent node at the
  given depth (which defaults to `this.depth`).
  */
  posAtIndex(index2, depth) {
    depth = this.resolveDepth(depth);
    let node = this.path[depth * 3], pos = depth == 0 ? 0 : this.path[depth * 3 - 1] + 1;
    for (let i = 0; i < index2; i++)
      pos += node.child(i).nodeSize;
    return pos;
  }
  /**
  Get the marks at this position, factoring in the surrounding
  marks' [`inclusive`](https://prosemirror.net/docs/ref/#model.MarkSpec.inclusive) property. If the
  position is at the start of a non-empty node, the marks of the
  node after it (if any) are returned.
  */
  marks() {
    let parent = this.parent, index2 = this.index();
    if (parent.content.size == 0)
      return Mark$1.none;
    if (this.textOffset)
      return parent.child(index2).marks;
    let main = parent.maybeChild(index2 - 1), other = parent.maybeChild(index2);
    if (!main) {
      let tmp = main;
      main = other;
      other = tmp;
    }
    let marks = main.marks;
    for (var i = 0; i < marks.length; i++)
      if (marks[i].type.spec.inclusive === false && (!other || !marks[i].isInSet(other.marks)))
        marks = marks[i--].removeFromSet(marks);
    return marks;
  }
  /**
  Get the marks after the current position, if any, except those
  that are non-inclusive and not present at position `$end`. This
  is mostly useful for getting the set of marks to preserve after a
  deletion. Will return `null` if this position is at the end of
  its parent node or its parent node isn't a textblock (in which
  case no marks should be preserved).
  */
  marksAcross($end) {
    let after = this.parent.maybeChild(this.index());
    if (!after || !after.isInline)
      return null;
    let marks = after.marks, next = $end.parent.maybeChild($end.index());
    for (var i = 0; i < marks.length; i++)
      if (marks[i].type.spec.inclusive === false && (!next || !marks[i].isInSet(next.marks)))
        marks = marks[i--].removeFromSet(marks);
    return marks;
  }
  /**
  The depth up to which this position and the given (non-resolved)
  position share the same parent nodes.
  */
  sharedDepth(pos) {
    for (let depth = this.depth; depth > 0; depth--)
      if (this.start(depth) <= pos && this.end(depth) >= pos)
        return depth;
    return 0;
  }
  /**
  Returns a range based on the place where this position and the
  given position diverge around block content. If both point into
  the same textblock, for example, a range around that textblock
  will be returned. If they point into different blocks, the range
  around those blocks in their shared ancestor is returned. You can
  pass in an optional predicate that will be called with a parent
  node to see if a range into that parent is acceptable.
  */
  blockRange(other = this, pred) {
    if (other.pos < this.pos)
      return other.blockRange(this);
    for (let d2 = this.depth - (this.parent.inlineContent || this.pos == other.pos ? 1 : 0); d2 >= 0; d2--)
      if (other.pos <= this.end(d2) && (!pred || pred(this.node(d2))))
        return new NodeRange(this, other, d2);
    return null;
  }
  /**
  Query whether the given position shares the same parent node.
  */
  sameParent(other) {
    return this.pos - this.parentOffset == other.pos - other.parentOffset;
  }
  /**
  Return the greater of this and the given position.
  */
  max(other) {
    return other.pos > this.pos ? other : this;
  }
  /**
  Return the smaller of this and the given position.
  */
  min(other) {
    return other.pos < this.pos ? other : this;
  }
  /**
  @internal
  */
  toString() {
    let str = "";
    for (let i = 1; i <= this.depth; i++)
      str += (str ? "/" : "") + this.node(i).type.name + "_" + this.index(i - 1);
    return str + ":" + this.parentOffset;
  }
  /**
  @internal
  */
  static resolve(doc2, pos) {
    if (!(pos >= 0 && pos <= doc2.content.size))
      throw new RangeError("Position " + pos + " out of range");
    let path = [];
    let start = 0, parentOffset = pos;
    for (let node = doc2; ; ) {
      let { index: index2, offset: offset2 } = node.content.findIndex(parentOffset);
      let rem = parentOffset - offset2;
      path.push(node, index2, start + offset2);
      if (!rem)
        break;
      node = node.child(index2);
      if (node.isText)
        break;
      parentOffset = rem - 1;
      start += offset2 + 1;
    }
    return new ResolvedPos(pos, path, parentOffset);
  }
  /**
  @internal
  */
  static resolveCached(doc2, pos) {
    let cache = resolveCache.get(doc2);
    if (cache) {
      for (let i = 0; i < cache.elts.length; i++) {
        let elt = cache.elts[i];
        if (elt.pos == pos)
          return elt;
      }
    } else {
      resolveCache.set(doc2, cache = new ResolveCache());
    }
    let result = cache.elts[cache.i] = ResolvedPos.resolve(doc2, pos);
    cache.i = (cache.i + 1) % resolveCacheSize;
    return result;
  }
}
class ResolveCache {
  constructor() {
    this.elts = [];
    this.i = 0;
  }
}
const resolveCacheSize = 12, resolveCache = /* @__PURE__ */ new WeakMap();
class NodeRange {
  /**
  Construct a node range. `$from` and `$to` should point into the
  same node until at least the given `depth`, since a node range
  denotes an adjacent set of nodes in a single parent node.
  */
  constructor($from, $to, depth) {
    this.$from = $from;
    this.$to = $to;
    this.depth = depth;
  }
  /**
  The position at the start of the range.
  */
  get start() {
    return this.$from.before(this.depth + 1);
  }
  /**
  The position at the end of the range.
  */
  get end() {
    return this.$to.after(this.depth + 1);
  }
  /**
  The parent node that the range points into.
  */
  get parent() {
    return this.$from.node(this.depth);
  }
  /**
  The start index of the range in the parent node.
  */
  get startIndex() {
    return this.$from.index(this.depth);
  }
  /**
  The end index of the range in the parent node.
  */
  get endIndex() {
    return this.$to.indexAfter(this.depth);
  }
}
const emptyAttrs = /* @__PURE__ */ Object.create(null);
let Node$1 = class Node2 {
  /**
  @internal
  */
  constructor(type, attrs, content, marks = Mark$1.none) {
    this.type = type;
    this.attrs = attrs;
    this.marks = marks;
    this.content = content || Fragment.empty;
  }
  /**
  The array of this node's child nodes.
  */
  get children() {
    return this.content.content;
  }
  /**
  The size of this node, as defined by the integer-based [indexing
  scheme](https://prosemirror.net/docs/guide/#doc.indexing). For text nodes, this is the
  amount of characters. For other leaf nodes, it is one. For
  non-leaf nodes, it is the size of the content plus two (the
  start and end token).
  */
  get nodeSize() {
    return this.isLeaf ? 1 : 2 + this.content.size;
  }
  /**
  The number of children that the node has.
  */
  get childCount() {
    return this.content.childCount;
  }
  /**
  Get the child node at the given index. Raises an error when the
  index is out of range.
  */
  child(index2) {
    return this.content.child(index2);
  }
  /**
  Get the child node at the given index, if it exists.
  */
  maybeChild(index2) {
    return this.content.maybeChild(index2);
  }
  /**
  Call `f` for every child node, passing the node, its offset
  into this parent node, and its index.
  */
  forEach(f2) {
    this.content.forEach(f2);
  }
  /**
  Invoke a callback for all descendant nodes recursively between
  the given two positions that are relative to start of this
  node's content. The callback is invoked with the node, its
  position relative to the original node (method receiver),
  its parent node, and its child index. When the callback returns
  false for a given node, that node's children will not be
  recursed over. The last parameter can be used to specify a
  starting position to count from.
  */
  nodesBetween(from2, to, f2, startPos = 0) {
    this.content.nodesBetween(from2, to, f2, startPos, this);
  }
  /**
  Call the given callback for every descendant node. Doesn't
  descend into a node when the callback returns `false`.
  */
  descendants(f2) {
    this.nodesBetween(0, this.content.size, f2);
  }
  /**
  Concatenates all the text nodes found in this fragment and its
  children.
  */
  get textContent() {
    return this.isLeaf && this.type.spec.leafText ? this.type.spec.leafText(this) : this.textBetween(0, this.content.size, "");
  }
  /**
  Get all text between positions `from` and `to`. When
  `blockSeparator` is given, it will be inserted to separate text
  from different block nodes. If `leafText` is given, it'll be
  inserted for every non-text leaf node encountered, otherwise
  [`leafText`](https://prosemirror.net/docs/ref/#model.NodeSpec.leafText) will be used.
  */
  textBetween(from2, to, blockSeparator, leafText) {
    return this.content.textBetween(from2, to, blockSeparator, leafText);
  }
  /**
  Returns this node's first child, or `null` if there are no
  children.
  */
  get firstChild() {
    return this.content.firstChild;
  }
  /**
  Returns this node's last child, or `null` if there are no
  children.
  */
  get lastChild() {
    return this.content.lastChild;
  }
  /**
  Test whether two nodes represent the same piece of document.
  */
  eq(other) {
    return this == other || this.sameMarkup(other) && this.content.eq(other.content);
  }
  /**
  Compare the markup (type, attributes, and marks) of this node to
  those of another. Returns `true` if both have the same markup.
  */
  sameMarkup(other) {
    return this.hasMarkup(other.type, other.attrs, other.marks);
  }
  /**
  Check whether this node's markup correspond to the given type,
  attributes, and marks.
  */
  hasMarkup(type, attrs, marks) {
    return this.type == type && compareDeep(this.attrs, attrs || type.defaultAttrs || emptyAttrs) && Mark$1.sameSet(this.marks, marks || Mark$1.none);
  }
  /**
  Create a new node with the same markup as this node, containing
  the given content (or empty, if no content is given).
  */
  copy(content = null) {
    if (content == this.content)
      return this;
    return new Node2(this.type, this.attrs, content, this.marks);
  }
  /**
  Create a copy of this node, with the given set of marks instead
  of the node's own marks.
  */
  mark(marks) {
    return marks == this.marks ? this : new Node2(this.type, this.attrs, this.content, marks);
  }
  /**
  Create a copy of this node with only the content between the
  given positions. If `to` is not given, it defaults to the end of
  the node.
  */
  cut(from2, to = this.content.size) {
    if (from2 == 0 && to == this.content.size)
      return this;
    return this.copy(this.content.cut(from2, to));
  }
  /**
  Cut out the part of the document between the given positions, and
  return it as a `Slice` object.
  */
  slice(from2, to = this.content.size, includeParents = false) {
    if (from2 == to)
      return Slice.empty;
    let $from = this.resolve(from2), $to = this.resolve(to);
    let depth = includeParents ? 0 : $from.sharedDepth(to);
    let start = $from.start(depth), node = $from.node(depth);
    let content = node.content.cut($from.pos - start, $to.pos - start);
    return new Slice(content, $from.depth - depth, $to.depth - depth);
  }
  /**
  Replace the part of the document between the given positions with
  the given slice. The slice must 'fit', meaning its open sides
  must be able to connect to the surrounding content, and its
  content nodes must be valid children for the node they are placed
  into. If any of this is violated, an error of type
  [`ReplaceError`](https://prosemirror.net/docs/ref/#model.ReplaceError) is thrown.
  */
  replace(from2, to, slice2) {
    return replace(this.resolve(from2), this.resolve(to), slice2);
  }
  /**
  Find the node directly after the given position.
  */
  nodeAt(pos) {
    for (let node = this; ; ) {
      let { index: index2, offset: offset2 } = node.content.findIndex(pos);
      node = node.maybeChild(index2);
      if (!node)
        return null;
      if (offset2 == pos || node.isText)
        return node;
      pos -= offset2 + 1;
    }
  }
  /**
  Find the (direct) child node after the given offset, if any,
  and return it along with its index and offset relative to this
  node.
  */
  childAfter(pos) {
    let { index: index2, offset: offset2 } = this.content.findIndex(pos);
    return { node: this.content.maybeChild(index2), index: index2, offset: offset2 };
  }
  /**
  Find the (direct) child node before the given offset, if any,
  and return it along with its index and offset relative to this
  node.
  */
  childBefore(pos) {
    if (pos == 0)
      return { node: null, index: 0, offset: 0 };
    let { index: index2, offset: offset2 } = this.content.findIndex(pos);
    if (offset2 < pos)
      return { node: this.content.child(index2), index: index2, offset: offset2 };
    let node = this.content.child(index2 - 1);
    return { node, index: index2 - 1, offset: offset2 - node.nodeSize };
  }
  /**
  Resolve the given position in the document, returning an
  [object](https://prosemirror.net/docs/ref/#model.ResolvedPos) with information about its context.
  */
  resolve(pos) {
    return ResolvedPos.resolveCached(this, pos);
  }
  /**
  @internal
  */
  resolveNoCache(pos) {
    return ResolvedPos.resolve(this, pos);
  }
  /**
  Test whether a given mark or mark type occurs in this document
  between the two given positions.
  */
  rangeHasMark(from2, to, type) {
    let found2 = false;
    if (to > from2)
      this.nodesBetween(from2, to, (node) => {
        if (type.isInSet(node.marks))
          found2 = true;
        return !found2;
      });
    return found2;
  }
  /**
  True when this is a block (non-inline node)
  */
  get isBlock() {
    return this.type.isBlock;
  }
  /**
  True when this is a textblock node, a block node with inline
  content.
  */
  get isTextblock() {
    return this.type.isTextblock;
  }
  /**
  True when this node allows inline content.
  */
  get inlineContent() {
    return this.type.inlineContent;
  }
  /**
  True when this is an inline node (a text node or a node that can
  appear among text).
  */
  get isInline() {
    return this.type.isInline;
  }
  /**
  True when this is a text node.
  */
  get isText() {
    return this.type.isText;
  }
  /**
  True when this is a leaf node.
  */
  get isLeaf() {
    return this.type.isLeaf;
  }
  /**
  True when this is an atom, i.e. when it does not have directly
  editable content. This is usually the same as `isLeaf`, but can
  be configured with the [`atom` property](https://prosemirror.net/docs/ref/#model.NodeSpec.atom)
  on a node's spec (typically used when the node is displayed as
  an uneditable [node view](https://prosemirror.net/docs/ref/#view.NodeView)).
  */
  get isAtom() {
    return this.type.isAtom;
  }
  /**
  Return a string representation of this node for debugging
  purposes.
  */
  toString() {
    if (this.type.spec.toDebugString)
      return this.type.spec.toDebugString(this);
    let name = this.type.name;
    if (this.content.size)
      name += "(" + this.content.toStringInner() + ")";
    return wrapMarks(this.marks, name);
  }
  /**
  Get the content match in this node at the given index.
  */
  contentMatchAt(index2) {
    let match = this.type.contentMatch.matchFragment(this.content, 0, index2);
    if (!match)
      throw new Error("Called contentMatchAt on a node with invalid content");
    return match;
  }
  /**
  Test whether replacing the range between `from` and `to` (by
  child index) with the given replacement fragment (which defaults
  to the empty fragment) would leave the node's content valid. You
  can optionally pass `start` and `end` indices into the
  replacement fragment.
  */
  canReplace(from2, to, replacement = Fragment.empty, start = 0, end = replacement.childCount) {
    let one = this.contentMatchAt(from2).matchFragment(replacement, start, end);
    let two = one && one.matchFragment(this.content, to);
    if (!two || !two.validEnd)
      return false;
    for (let i = start; i < end; i++)
      if (!this.type.allowsMarks(replacement.child(i).marks))
        return false;
    return true;
  }
  /**
  Test whether replacing the range `from` to `to` (by index) with
  a node of the given type would leave the node's content valid.
  */
  canReplaceWith(from2, to, type, marks) {
    if (marks && !this.type.allowsMarks(marks))
      return false;
    let start = this.contentMatchAt(from2).matchType(type);
    let end = start && start.matchFragment(this.content, to);
    return end ? end.validEnd : false;
  }
  /**
  Test whether the given node's content could be appended to this
  node. If that node is empty, this will only return true if there
  is at least one node type that can appear in both nodes (to avoid
  merging completely incompatible nodes).
  */
  canAppend(other) {
    if (other.content.size)
      return this.canReplace(this.childCount, this.childCount, other.content);
    else
      return this.type.compatibleContent(other.type);
  }
  /**
  Check whether this node and its descendants conform to the
  schema, and raise an exception when they do not.
  */
  check() {
    this.type.checkContent(this.content);
    this.type.checkAttrs(this.attrs);
    let copy2 = Mark$1.none;
    for (let i = 0; i < this.marks.length; i++) {
      let mark = this.marks[i];
      mark.type.checkAttrs(mark.attrs);
      copy2 = mark.addToSet(copy2);
    }
    if (!Mark$1.sameSet(copy2, this.marks))
      throw new RangeError(`Invalid collection of marks for node ${this.type.name}: ${this.marks.map((m2) => m2.type.name)}`);
    this.content.forEach((node) => node.check());
  }
  /**
  Return a JSON-serializeable representation of this node.
  */
  toJSON() {
    let obj = { type: this.type.name };
    for (let _2 in this.attrs) {
      obj.attrs = this.attrs;
      break;
    }
    if (this.content.size)
      obj.content = this.content.toJSON();
    if (this.marks.length)
      obj.marks = this.marks.map((n2) => n2.toJSON());
    return obj;
  }
  /**
  Deserialize a node from its JSON representation.
  */
  static fromJSON(schema, json2) {
    if (!json2)
      throw new RangeError("Invalid input for Node.fromJSON");
    let marks = void 0;
    if (json2.marks) {
      if (!Array.isArray(json2.marks))
        throw new RangeError("Invalid mark data for Node.fromJSON");
      marks = json2.marks.map(schema.markFromJSON);
    }
    if (json2.type == "text") {
      if (typeof json2.text != "string")
        throw new RangeError("Invalid text node in JSON");
      return schema.text(json2.text, marks);
    }
    let content = Fragment.fromJSON(schema, json2.content);
    let node = schema.nodeType(json2.type).create(json2.attrs, content, marks);
    node.type.checkAttrs(node.attrs);
    return node;
  }
};
Node$1.prototype.text = void 0;
class TextNode extends Node$1 {
  /**
  @internal
  */
  constructor(type, attrs, content, marks) {
    super(type, attrs, null, marks);
    if (!content)
      throw new RangeError("Empty text nodes are not allowed");
    this.text = content;
  }
  toString() {
    if (this.type.spec.toDebugString)
      return this.type.spec.toDebugString(this);
    return wrapMarks(this.marks, JSON.stringify(this.text));
  }
  get textContent() {
    return this.text;
  }
  textBetween(from2, to) {
    return this.text.slice(from2, to);
  }
  get nodeSize() {
    return this.text.length;
  }
  mark(marks) {
    return marks == this.marks ? this : new TextNode(this.type, this.attrs, this.text, marks);
  }
  withText(text) {
    if (text == this.text)
      return this;
    return new TextNode(this.type, this.attrs, text, this.marks);
  }
  cut(from2 = 0, to = this.text.length) {
    if (from2 == 0 && to == this.text.length)
      return this;
    return this.withText(this.text.slice(from2, to));
  }
  eq(other) {
    return this.sameMarkup(other) && this.text == other.text;
  }
  toJSON() {
    let base2 = super.toJSON();
    base2.text = this.text;
    return base2;
  }
}
function wrapMarks(marks, str) {
  for (let i = marks.length - 1; i >= 0; i--)
    str = marks[i].type.name + "(" + str + ")";
  return str;
}
class ContentMatch {
  /**
  @internal
  */
  constructor(validEnd) {
    this.validEnd = validEnd;
    this.next = [];
    this.wrapCache = [];
  }
  /**
  @internal
  */
  static parse(string, nodeTypes) {
    let stream = new TokenStream(string, nodeTypes);
    if (stream.next == null)
      return ContentMatch.empty;
    let expr = parseExpr(stream);
    if (stream.next)
      stream.err("Unexpected trailing text");
    let match = dfa(nfa(expr));
    checkForDeadEnds(match, stream);
    return match;
  }
  /**
  Match a node type, returning a match after that node if
  successful.
  */
  matchType(type) {
    for (let i = 0; i < this.next.length; i++)
      if (this.next[i].type == type)
        return this.next[i].next;
    return null;
  }
  /**
  Try to match a fragment. Returns the resulting match when
  successful.
  */
  matchFragment(frag, start = 0, end = frag.childCount) {
    let cur = this;
    for (let i = start; cur && i < end; i++)
      cur = cur.matchType(frag.child(i).type);
    return cur;
  }
  /**
  @internal
  */
  get inlineContent() {
    return this.next.length != 0 && this.next[0].type.isInline;
  }
  /**
  Get the first matching node type at this match position that can
  be generated.
  */
  get defaultType() {
    for (let i = 0; i < this.next.length; i++) {
      let { type } = this.next[i];
      if (!(type.isText || type.hasRequiredAttrs()))
        return type;
    }
    return null;
  }
  /**
  @internal
  */
  compatible(other) {
    for (let i = 0; i < this.next.length; i++)
      for (let j2 = 0; j2 < other.next.length; j2++)
        if (this.next[i].type == other.next[j2].type)
          return true;
    return false;
  }
  /**
  Try to match the given fragment, and if that fails, see if it can
  be made to match by inserting nodes in front of it. When
  successful, return a fragment of inserted nodes (which may be
  empty if nothing had to be inserted). When `toEnd` is true, only
  return a fragment if the resulting match goes to the end of the
  content expression.
  */
  fillBefore(after, toEnd = false, startIndex = 0) {
    let seen2 = [this];
    function search(match, types) {
      let finished = match.matchFragment(after, startIndex);
      if (finished && (!toEnd || finished.validEnd))
        return Fragment.from(types.map((tp2) => tp2.createAndFill()));
      for (let i = 0; i < match.next.length; i++) {
        let { type, next } = match.next[i];
        if (!(type.isText || type.hasRequiredAttrs()) && seen2.indexOf(next) == -1) {
          seen2.push(next);
          let found2 = search(next, types.concat(type));
          if (found2)
            return found2;
        }
      }
      return null;
    }
    return search(this, []);
  }
  /**
  Find a set of wrapping node types that would allow a node of the
  given type to appear at this position. The result may be empty
  (when it fits directly) and will be null when no such wrapping
  exists.
  */
  findWrapping(target) {
    for (let i = 0; i < this.wrapCache.length; i += 2)
      if (this.wrapCache[i] == target)
        return this.wrapCache[i + 1];
    let computed2 = this.computeWrapping(target);
    this.wrapCache.push(target, computed2);
    return computed2;
  }
  /**
  @internal
  */
  computeWrapping(target) {
    let seen2 = /* @__PURE__ */ Object.create(null), active = [{ match: this, type: null, via: null }];
    while (active.length) {
      let current = active.shift(), match = current.match;
      if (match.matchType(target)) {
        let result = [];
        for (let obj = current; obj.type; obj = obj.via)
          result.push(obj.type);
        return result.reverse();
      }
      for (let i = 0; i < match.next.length; i++) {
        let { type, next } = match.next[i];
        if (!type.isLeaf && !type.hasRequiredAttrs() && !(type.name in seen2) && (!current.type || next.validEnd)) {
          active.push({ match: type.contentMatch, type, via: current });
          seen2[type.name] = true;
        }
      }
    }
    return null;
  }
  /**
  The number of outgoing edges this node has in the finite
  automaton that describes the content expression.
  */
  get edgeCount() {
    return this.next.length;
  }
  /**
  Get the _n_​th outgoing edge from this node in the finite
  automaton that describes the content expression.
  */
  edge(n2) {
    if (n2 >= this.next.length)
      throw new RangeError(`There's no ${n2}th edge in this content match`);
    return this.next[n2];
  }
  /**
  @internal
  */
  toString() {
    let seen2 = [];
    function scan(m2) {
      seen2.push(m2);
      for (let i = 0; i < m2.next.length; i++)
        if (seen2.indexOf(m2.next[i].next) == -1)
          scan(m2.next[i].next);
    }
    scan(this);
    return seen2.map((m2, i) => {
      let out = i + (m2.validEnd ? "*" : " ") + " ";
      for (let i2 = 0; i2 < m2.next.length; i2++)
        out += (i2 ? ", " : "") + m2.next[i2].type.name + "->" + seen2.indexOf(m2.next[i2].next);
      return out;
    }).join("\n");
  }
}
ContentMatch.empty = new ContentMatch(true);
class TokenStream {
  constructor(string, nodeTypes) {
    this.string = string;
    this.nodeTypes = nodeTypes;
    this.inline = null;
    this.pos = 0;
    this.tokens = string.split(/\s*(?=\b|\W|$)/);
    if (this.tokens[this.tokens.length - 1] == "")
      this.tokens.pop();
    if (this.tokens[0] == "")
      this.tokens.shift();
  }
  get next() {
    return this.tokens[this.pos];
  }
  eat(tok) {
    return this.next == tok && (this.pos++ || true);
  }
  err(str) {
    throw new SyntaxError(str + " (in content expression '" + this.string + "')");
  }
}
function parseExpr(stream) {
  let exprs = [];
  do {
    exprs.push(parseExprSeq(stream));
  } while (stream.eat("|"));
  return exprs.length == 1 ? exprs[0] : { type: "choice", exprs };
}
function parseExprSeq(stream) {
  let exprs = [];
  do {
    exprs.push(parseExprSubscript(stream));
  } while (stream.next && stream.next != ")" && stream.next != "|");
  return exprs.length == 1 ? exprs[0] : { type: "seq", exprs };
}
function parseExprSubscript(stream) {
  let expr = parseExprAtom(stream);
  for (; ; ) {
    if (stream.eat("+"))
      expr = { type: "plus", expr };
    else if (stream.eat("*"))
      expr = { type: "star", expr };
    else if (stream.eat("?"))
      expr = { type: "opt", expr };
    else if (stream.eat("{"))
      expr = parseExprRange(stream, expr);
    else
      break;
  }
  return expr;
}
function parseNum(stream) {
  if (/\D/.test(stream.next))
    stream.err("Expected number, got '" + stream.next + "'");
  let result = Number(stream.next);
  stream.pos++;
  return result;
}
function parseExprRange(stream, expr) {
  let min2 = parseNum(stream), max2 = min2;
  if (stream.eat(",")) {
    if (stream.next != "}")
      max2 = parseNum(stream);
    else
      max2 = -1;
  }
  if (!stream.eat("}"))
    stream.err("Unclosed braced range");
  return { type: "range", min: min2, max: max2, expr };
}
function resolveName(stream, name) {
  let types = stream.nodeTypes, type = types[name];
  if (type)
    return [type];
  let result = [];
  for (let typeName in types) {
    let type2 = types[typeName];
    if (type2.isInGroup(name))
      result.push(type2);
  }
  if (result.length == 0)
    stream.err("No node type or group '" + name + "' found");
  return result;
}
function parseExprAtom(stream) {
  if (stream.eat("(")) {
    let expr = parseExpr(stream);
    if (!stream.eat(")"))
      stream.err("Missing closing paren");
    return expr;
  } else if (!/\W/.test(stream.next)) {
    let exprs = resolveName(stream, stream.next).map((type) => {
      if (stream.inline == null)
        stream.inline = type.isInline;
      else if (stream.inline != type.isInline)
        stream.err("Mixing inline and block content");
      return { type: "name", value: type };
    });
    stream.pos++;
    return exprs.length == 1 ? exprs[0] : { type: "choice", exprs };
  } else {
    stream.err("Unexpected token '" + stream.next + "'");
  }
}
function nfa(expr) {
  let nfa2 = [[]];
  connect(compile(expr, 0), node());
  return nfa2;
  function node() {
    return nfa2.push([]) - 1;
  }
  function edge(from2, to, term) {
    let edge2 = { term, to };
    nfa2[from2].push(edge2);
    return edge2;
  }
  function connect(edges, to) {
    edges.forEach((edge2) => edge2.to = to);
  }
  function compile(expr2, from2) {
    if (expr2.type == "choice") {
      return expr2.exprs.reduce((out, expr3) => out.concat(compile(expr3, from2)), []);
    } else if (expr2.type == "seq") {
      for (let i = 0; ; i++) {
        let next = compile(expr2.exprs[i], from2);
        if (i == expr2.exprs.length - 1)
          return next;
        connect(next, from2 = node());
      }
    } else if (expr2.type == "star") {
      let loop = node();
      edge(from2, loop);
      connect(compile(expr2.expr, loop), loop);
      return [edge(loop)];
    } else if (expr2.type == "plus") {
      let loop = node();
      connect(compile(expr2.expr, from2), loop);
      connect(compile(expr2.expr, loop), loop);
      return [edge(loop)];
    } else if (expr2.type == "opt") {
      return [edge(from2)].concat(compile(expr2.expr, from2));
    } else if (expr2.type == "range") {
      let cur = from2;
      for (let i = 0; i < expr2.min; i++) {
        let next = node();
        connect(compile(expr2.expr, cur), next);
        cur = next;
      }
      if (expr2.max == -1) {
        connect(compile(expr2.expr, cur), cur);
      } else {
        for (let i = expr2.min; i < expr2.max; i++) {
          let next = node();
          edge(cur, next);
          connect(compile(expr2.expr, cur), next);
          cur = next;
        }
      }
      return [edge(cur)];
    } else if (expr2.type == "name") {
      return [edge(from2, void 0, expr2.value)];
    } else {
      throw new Error("Unknown expr type");
    }
  }
}
function cmp(a2, b2) {
  return b2 - a2;
}
function nullFrom(nfa2, node) {
  let result = [];
  scan(node);
  return result.sort(cmp);
  function scan(node2) {
    let edges = nfa2[node2];
    if (edges.length == 1 && !edges[0].term)
      return scan(edges[0].to);
    result.push(node2);
    for (let i = 0; i < edges.length; i++) {
      let { term, to } = edges[i];
      if (!term && result.indexOf(to) == -1)
        scan(to);
    }
  }
}
function dfa(nfa2) {
  let labeled = /* @__PURE__ */ Object.create(null);
  return explore(nullFrom(nfa2, 0));
  function explore(states) {
    let out = [];
    states.forEach((node) => {
      nfa2[node].forEach(({ term, to }) => {
        if (!term)
          return;
        let set;
        for (let i = 0; i < out.length; i++)
          if (out[i][0] == term)
            set = out[i][1];
        nullFrom(nfa2, to).forEach((node2) => {
          if (!set)
            out.push([term, set = []]);
          if (set.indexOf(node2) == -1)
            set.push(node2);
        });
      });
    });
    let state = labeled[states.join(",")] = new ContentMatch(states.indexOf(nfa2.length - 1) > -1);
    for (let i = 0; i < out.length; i++) {
      let states2 = out[i][1].sort(cmp);
      state.next.push({ type: out[i][0], next: labeled[states2.join(",")] || explore(states2) });
    }
    return state;
  }
}
function checkForDeadEnds(match, stream) {
  for (let i = 0, work = [match]; i < work.length; i++) {
    let state = work[i], dead = !state.validEnd, nodes = [];
    for (let j2 = 0; j2 < state.next.length; j2++) {
      let { type, next } = state.next[j2];
      nodes.push(type.name);
      if (dead && !(type.isText || type.hasRequiredAttrs()))
        dead = false;
      if (work.indexOf(next) == -1)
        work.push(next);
    }
    if (dead)
      stream.err("Only non-generatable nodes (" + nodes.join(", ") + ") in a required position (see https://prosemirror.net/docs/guide/#generatable)");
  }
}
function defaultAttrs(attrs) {
  let defaults2 = /* @__PURE__ */ Object.create(null);
  for (let attrName in attrs) {
    let attr = attrs[attrName];
    if (!attr.hasDefault)
      return null;
    defaults2[attrName] = attr.default;
  }
  return defaults2;
}
function computeAttrs(attrs, value) {
  let built = /* @__PURE__ */ Object.create(null);
  for (let name in attrs) {
    let given = value && value[name];
    if (given === void 0) {
      let attr = attrs[name];
      if (attr.hasDefault)
        given = attr.default;
      else
        throw new RangeError("No value supplied for attribute " + name);
    }
    built[name] = given;
  }
  return built;
}
function checkAttrs(attrs, values, type, name) {
  for (let name2 in values)
    if (!(name2 in attrs))
      throw new RangeError(`Unsupported attribute ${name2} for ${type} of type ${name2}`);
  for (let name2 in attrs) {
    let attr = attrs[name2];
    if (attr.validate)
      attr.validate(values[name2]);
  }
}
function initAttrs(typeName, attrs) {
  let result = /* @__PURE__ */ Object.create(null);
  if (attrs)
    for (let name in attrs)
      result[name] = new Attribute(typeName, name, attrs[name]);
  return result;
}
let NodeType$1 = class NodeType {
  /**
  @internal
  */
  constructor(name, schema, spec) {
    this.name = name;
    this.schema = schema;
    this.spec = spec;
    this.markSet = null;
    this.groups = spec.group ? spec.group.split(" ") : [];
    this.attrs = initAttrs(name, spec.attrs);
    this.defaultAttrs = defaultAttrs(this.attrs);
    this.contentMatch = null;
    this.inlineContent = null;
    this.isBlock = !(spec.inline || name == "text");
    this.isText = name == "text";
  }
  /**
  True if this is an inline type.
  */
  get isInline() {
    return !this.isBlock;
  }
  /**
  True if this is a textblock type, a block that contains inline
  content.
  */
  get isTextblock() {
    return this.isBlock && this.inlineContent;
  }
  /**
  True for node types that allow no content.
  */
  get isLeaf() {
    return this.contentMatch == ContentMatch.empty;
  }
  /**
  True when this node is an atom, i.e. when it does not have
  directly editable content.
  */
  get isAtom() {
    return this.isLeaf || !!this.spec.atom;
  }
  /**
  Return true when this node type is part of the given
  [group](https://prosemirror.net/docs/ref/#model.NodeSpec.group).
  */
  isInGroup(group) {
    return this.groups.indexOf(group) > -1;
  }
  /**
  The node type's [whitespace](https://prosemirror.net/docs/ref/#model.NodeSpec.whitespace) option.
  */
  get whitespace() {
    return this.spec.whitespace || (this.spec.code ? "pre" : "normal");
  }
  /**
  Tells you whether this node type has any required attributes.
  */
  hasRequiredAttrs() {
    for (let n2 in this.attrs)
      if (this.attrs[n2].isRequired)
        return true;
    return false;
  }
  /**
  Indicates whether this node allows some of the same content as
  the given node type.
  */
  compatibleContent(other) {
    return this == other || this.contentMatch.compatible(other.contentMatch);
  }
  /**
  @internal
  */
  computeAttrs(attrs) {
    if (!attrs && this.defaultAttrs)
      return this.defaultAttrs;
    else
      return computeAttrs(this.attrs, attrs);
  }
  /**
  Create a `Node` of this type. The given attributes are
  checked and defaulted (you can pass `null` to use the type's
  defaults entirely, if no required attributes exist). `content`
  may be a `Fragment`, a node, an array of nodes, or
  `null`. Similarly `marks` may be `null` to default to the empty
  set of marks.
  */
  create(attrs = null, content, marks) {
    if (this.isText)
      throw new Error("NodeType.create can't construct text nodes");
    return new Node$1(this, this.computeAttrs(attrs), Fragment.from(content), Mark$1.setFrom(marks));
  }
  /**
  Like [`create`](https://prosemirror.net/docs/ref/#model.NodeType.create), but check the given content
  against the node type's content restrictions, and throw an error
  if it doesn't match.
  */
  createChecked(attrs = null, content, marks) {
    content = Fragment.from(content);
    this.checkContent(content);
    return new Node$1(this, this.computeAttrs(attrs), content, Mark$1.setFrom(marks));
  }
  /**
  Like [`create`](https://prosemirror.net/docs/ref/#model.NodeType.create), but see if it is
  necessary to add nodes to the start or end of the given fragment
  to make it fit the node. If no fitting wrapping can be found,
  return null. Note that, due to the fact that required nodes can
  always be created, this will always succeed if you pass null or
  `Fragment.empty` as content.
  */
  createAndFill(attrs = null, content, marks) {
    attrs = this.computeAttrs(attrs);
    content = Fragment.from(content);
    if (content.size) {
      let before = this.contentMatch.fillBefore(content);
      if (!before)
        return null;
      content = before.append(content);
    }
    let matched = this.contentMatch.matchFragment(content);
    let after = matched && matched.fillBefore(Fragment.empty, true);
    if (!after)
      return null;
    return new Node$1(this, attrs, content.append(after), Mark$1.setFrom(marks));
  }
  /**
  Returns true if the given fragment is valid content for this node
  type.
  */
  validContent(content) {
    let result = this.contentMatch.matchFragment(content);
    if (!result || !result.validEnd)
      return false;
    for (let i = 0; i < content.childCount; i++)
      if (!this.allowsMarks(content.child(i).marks))
        return false;
    return true;
  }
  /**
  Throws a RangeError if the given fragment is not valid content for this
  node type.
  @internal
  */
  checkContent(content) {
    if (!this.validContent(content))
      throw new RangeError(`Invalid content for node ${this.name}: ${content.toString().slice(0, 50)}`);
  }
  /**
  @internal
  */
  checkAttrs(attrs) {
    checkAttrs(this.attrs, attrs, "node", this.name);
  }
  /**
  Check whether the given mark type is allowed in this node.
  */
  allowsMarkType(markType) {
    return this.markSet == null || this.markSet.indexOf(markType) > -1;
  }
  /**
  Test whether the given set of marks are allowed in this node.
  */
  allowsMarks(marks) {
    if (this.markSet == null)
      return true;
    for (let i = 0; i < marks.length; i++)
      if (!this.allowsMarkType(marks[i].type))
        return false;
    return true;
  }
  /**
  Removes the marks that are not allowed in this node from the given set.
  */
  allowedMarks(marks) {
    if (this.markSet == null)
      return marks;
    let copy2;
    for (let i = 0; i < marks.length; i++) {
      if (!this.allowsMarkType(marks[i].type)) {
        if (!copy2)
          copy2 = marks.slice(0, i);
      } else if (copy2) {
        copy2.push(marks[i]);
      }
    }
    return !copy2 ? marks : copy2.length ? copy2 : Mark$1.none;
  }
  /**
  @internal
  */
  static compile(nodes, schema) {
    let result = /* @__PURE__ */ Object.create(null);
    nodes.forEach((name, spec) => result[name] = new NodeType(name, schema, spec));
    let topType = schema.spec.topNode || "doc";
    if (!result[topType])
      throw new RangeError("Schema is missing its top node type ('" + topType + "')");
    if (!result.text)
      throw new RangeError("Every schema needs a 'text' type");
    for (let _2 in result.text.attrs)
      throw new RangeError("The text node type should not have attributes");
    return result;
  }
};
function validateType(typeName, attrName, type) {
  let types = type.split("|");
  return (value) => {
    let name = value === null ? "null" : typeof value;
    if (types.indexOf(name) < 0)
      throw new RangeError(`Expected value of type ${types} for attribute ${attrName} on type ${typeName}, got ${name}`);
  };
}
class Attribute {
  constructor(typeName, attrName, options) {
    this.hasDefault = Object.prototype.hasOwnProperty.call(options, "default");
    this.default = options.default;
    this.validate = typeof options.validate == "string" ? validateType(typeName, attrName, options.validate) : options.validate;
  }
  get isRequired() {
    return !this.hasDefault;
  }
}
class MarkType {
  /**
  @internal
  */
  constructor(name, rank, schema, spec) {
    this.name = name;
    this.rank = rank;
    this.schema = schema;
    this.spec = spec;
    this.attrs = initAttrs(name, spec.attrs);
    this.excluded = null;
    let defaults2 = defaultAttrs(this.attrs);
    this.instance = defaults2 ? new Mark$1(this, defaults2) : null;
  }
  /**
  Create a mark of this type. `attrs` may be `null` or an object
  containing only some of the mark's attributes. The others, if
  they have defaults, will be added.
  */
  create(attrs = null) {
    if (!attrs && this.instance)
      return this.instance;
    return new Mark$1(this, computeAttrs(this.attrs, attrs));
  }
  /**
  @internal
  */
  static compile(marks, schema) {
    let result = /* @__PURE__ */ Object.create(null), rank = 0;
    marks.forEach((name, spec) => result[name] = new MarkType(name, rank++, schema, spec));
    return result;
  }
  /**
  When there is a mark of this type in the given set, a new set
  without it is returned. Otherwise, the input set is returned.
  */
  removeFromSet(set) {
    for (var i = 0; i < set.length; i++)
      if (set[i].type == this) {
        set = set.slice(0, i).concat(set.slice(i + 1));
        i--;
      }
    return set;
  }
  /**
  Tests whether there is a mark of this type in the given set.
  */
  isInSet(set) {
    for (let i = 0; i < set.length; i++)
      if (set[i].type == this)
        return set[i];
  }
  /**
  @internal
  */
  checkAttrs(attrs) {
    checkAttrs(this.attrs, attrs, "mark", this.name);
  }
  /**
  Queries whether a given mark type is
  [excluded](https://prosemirror.net/docs/ref/#model.MarkSpec.excludes) by this one.
  */
  excludes(other) {
    return this.excluded.indexOf(other) > -1;
  }
}
class Schema {
  /**
  Construct a schema from a schema [specification](https://prosemirror.net/docs/ref/#model.SchemaSpec).
  */
  constructor(spec) {
    this.linebreakReplacement = null;
    this.cached = /* @__PURE__ */ Object.create(null);
    let instanceSpec = this.spec = {};
    for (let prop in spec)
      instanceSpec[prop] = spec[prop];
    instanceSpec.nodes = OrderedMap.from(spec.nodes), instanceSpec.marks = OrderedMap.from(spec.marks || {}), this.nodes = NodeType$1.compile(this.spec.nodes, this);
    this.marks = MarkType.compile(this.spec.marks, this);
    let contentExprCache = /* @__PURE__ */ Object.create(null);
    for (let prop in this.nodes) {
      if (prop in this.marks)
        throw new RangeError(prop + " can not be both a node and a mark");
      let type = this.nodes[prop], contentExpr = type.spec.content || "", markExpr = type.spec.marks;
      type.contentMatch = contentExprCache[contentExpr] || (contentExprCache[contentExpr] = ContentMatch.parse(contentExpr, this.nodes));
      type.inlineContent = type.contentMatch.inlineContent;
      if (type.spec.linebreakReplacement) {
        if (this.linebreakReplacement)
          throw new RangeError("Multiple linebreak nodes defined");
        if (!type.isInline || !type.isLeaf)
          throw new RangeError("Linebreak replacement nodes must be inline leaf nodes");
        this.linebreakReplacement = type;
      }
      type.markSet = markExpr == "_" ? null : markExpr ? gatherMarks(this, markExpr.split(" ")) : markExpr == "" || !type.inlineContent ? [] : null;
    }
    for (let prop in this.marks) {
      let type = this.marks[prop], excl = type.spec.excludes;
      type.excluded = excl == null ? [type] : excl == "" ? [] : gatherMarks(this, excl.split(" "));
    }
    this.nodeFromJSON = (json2) => Node$1.fromJSON(this, json2);
    this.markFromJSON = (json2) => Mark$1.fromJSON(this, json2);
    this.topNodeType = this.nodes[this.spec.topNode || "doc"];
    this.cached.wrappings = /* @__PURE__ */ Object.create(null);
  }
  /**
  Create a node in this schema. The `type` may be a string or a
  `NodeType` instance. Attributes will be extended with defaults,
  `content` may be a `Fragment`, `null`, a `Node`, or an array of
  nodes.
  */
  node(type, attrs = null, content, marks) {
    if (typeof type == "string")
      type = this.nodeType(type);
    else if (!(type instanceof NodeType$1))
      throw new RangeError("Invalid node type: " + type);
    else if (type.schema != this)
      throw new RangeError("Node type from different schema used (" + type.name + ")");
    return type.createChecked(attrs, content, marks);
  }
  /**
  Create a text node in the schema. Empty text nodes are not
  allowed.
  */
  text(text, marks) {
    let type = this.nodes.text;
    return new TextNode(type, type.defaultAttrs, text, Mark$1.setFrom(marks));
  }
  /**
  Create a mark with the given type and attributes.
  */
  mark(type, attrs) {
    if (typeof type == "string")
      type = this.marks[type];
    return type.create(attrs);
  }
  /**
  @internal
  */
  nodeType(name) {
    let found2 = this.nodes[name];
    if (!found2)
      throw new RangeError("Unknown node type: " + name);
    return found2;
  }
}
function gatherMarks(schema, marks) {
  let found2 = [];
  for (let i = 0; i < marks.length; i++) {
    let name = marks[i], mark = schema.marks[name], ok = mark;
    if (mark) {
      found2.push(mark);
    } else {
      for (let prop in schema.marks) {
        let mark2 = schema.marks[prop];
        if (name == "_" || mark2.spec.group && mark2.spec.group.split(" ").indexOf(name) > -1)
          found2.push(ok = mark2);
      }
    }
    if (!ok)
      throw new SyntaxError("Unknown mark type: '" + marks[i] + "'");
  }
  return found2;
}
function isTagRule(rule) {
  return rule.tag != null;
}
function isStyleRule(rule) {
  return rule.style != null;
}
class DOMParser {
  /**
  Create a parser that targets the given schema, using the given
  parsing rules.
  */
  constructor(schema, rules) {
    this.schema = schema;
    this.rules = rules;
    this.tags = [];
    this.styles = [];
    let matchedStyles = this.matchedStyles = [];
    rules.forEach((rule) => {
      if (isTagRule(rule)) {
        this.tags.push(rule);
      } else if (isStyleRule(rule)) {
        let prop = /[^=]*/.exec(rule.style)[0];
        if (matchedStyles.indexOf(prop) < 0)
          matchedStyles.push(prop);
        this.styles.push(rule);
      }
    });
    this.normalizeLists = !this.tags.some((r2) => {
      if (!/^(ul|ol)\b/.test(r2.tag) || !r2.node)
        return false;
      let node = schema.nodes[r2.node];
      return node.contentMatch.matchType(node);
    });
  }
  /**
  Parse a document from the content of a DOM node.
  */
  parse(dom, options = {}) {
    let context = new ParseContext(this, options, false);
    context.addAll(dom, Mark$1.none, options.from, options.to);
    return context.finish();
  }
  /**
  Parses the content of the given DOM node, like
  [`parse`](https://prosemirror.net/docs/ref/#model.DOMParser.parse), and takes the same set of
  options. But unlike that method, which produces a whole node,
  this one returns a slice that is open at the sides, meaning that
  the schema constraints aren't applied to the start of nodes to
  the left of the input and the end of nodes at the end.
  */
  parseSlice(dom, options = {}) {
    let context = new ParseContext(this, options, true);
    context.addAll(dom, Mark$1.none, options.from, options.to);
    return Slice.maxOpen(context.finish());
  }
  /**
  @internal
  */
  matchTag(dom, context, after) {
    for (let i = after ? this.tags.indexOf(after) + 1 : 0; i < this.tags.length; i++) {
      let rule = this.tags[i];
      if (matches(dom, rule.tag) && (rule.namespace === void 0 || dom.namespaceURI == rule.namespace) && (!rule.context || context.matchesContext(rule.context))) {
        if (rule.getAttrs) {
          let result = rule.getAttrs(dom);
          if (result === false)
            continue;
          rule.attrs = result || void 0;
        }
        return rule;
      }
    }
  }
  /**
  @internal
  */
  matchStyle(prop, value, context, after) {
    for (let i = after ? this.styles.indexOf(after) + 1 : 0; i < this.styles.length; i++) {
      let rule = this.styles[i], style2 = rule.style;
      if (style2.indexOf(prop) != 0 || rule.context && !context.matchesContext(rule.context) || // Test that the style string either precisely matches the prop,
      // or has an '=' sign after the prop, followed by the given
      // value.
      style2.length > prop.length && (style2.charCodeAt(prop.length) != 61 || style2.slice(prop.length + 1) != value))
        continue;
      if (rule.getAttrs) {
        let result = rule.getAttrs(value);
        if (result === false)
          continue;
        rule.attrs = result || void 0;
      }
      return rule;
    }
  }
  /**
  @internal
  */
  static schemaRules(schema) {
    let result = [];
    function insert(rule) {
      let priority = rule.priority == null ? 50 : rule.priority, i = 0;
      for (; i < result.length; i++) {
        let next = result[i], nextPriority = next.priority == null ? 50 : next.priority;
        if (nextPriority < priority)
          break;
      }
      result.splice(i, 0, rule);
    }
    for (let name in schema.marks) {
      let rules = schema.marks[name].spec.parseDOM;
      if (rules)
        rules.forEach((rule) => {
          insert(rule = copy(rule));
          if (!(rule.mark || rule.ignore || rule.clearMark))
            rule.mark = name;
        });
    }
    for (let name in schema.nodes) {
      let rules = schema.nodes[name].spec.parseDOM;
      if (rules)
        rules.forEach((rule) => {
          insert(rule = copy(rule));
          if (!(rule.node || rule.ignore || rule.mark))
            rule.node = name;
        });
    }
    return result;
  }
  /**
  Construct a DOM parser using the parsing rules listed in a
  schema's [node specs](https://prosemirror.net/docs/ref/#model.NodeSpec.parseDOM), reordered by
  [priority](https://prosemirror.net/docs/ref/#model.GenericParseRule.priority).
  */
  static fromSchema(schema) {
    return schema.cached.domParser || (schema.cached.domParser = new DOMParser(schema, DOMParser.schemaRules(schema)));
  }
}
const blockTags = {
  address: true,
  article: true,
  aside: true,
  blockquote: true,
  canvas: true,
  dd: true,
  div: true,
  dl: true,
  fieldset: true,
  figcaption: true,
  figure: true,
  footer: true,
  form: true,
  h1: true,
  h2: true,
  h3: true,
  h4: true,
  h5: true,
  h6: true,
  header: true,
  hgroup: true,
  hr: true,
  li: true,
  noscript: true,
  ol: true,
  output: true,
  p: true,
  pre: true,
  section: true,
  table: true,
  tfoot: true,
  ul: true
};
const ignoreTags = {
  head: true,
  noscript: true,
  object: true,
  script: true,
  style: true,
  title: true
};
const listTags = { ol: true, ul: true };
const OPT_PRESERVE_WS = 1, OPT_PRESERVE_WS_FULL = 2, OPT_OPEN_LEFT = 4;
function wsOptionsFor(type, preserveWhitespace, base2) {
  if (preserveWhitespace != null)
    return (preserveWhitespace ? OPT_PRESERVE_WS : 0) | (preserveWhitespace === "full" ? OPT_PRESERVE_WS_FULL : 0);
  return type && type.whitespace == "pre" ? OPT_PRESERVE_WS | OPT_PRESERVE_WS_FULL : base2 & ~OPT_OPEN_LEFT;
}
class NodeContext {
  constructor(type, attrs, marks, solid, match, options) {
    this.type = type;
    this.attrs = attrs;
    this.marks = marks;
    this.solid = solid;
    this.options = options;
    this.content = [];
    this.activeMarks = Mark$1.none;
    this.match = match || (options & OPT_OPEN_LEFT ? null : type.contentMatch);
  }
  findWrapping(node) {
    if (!this.match) {
      if (!this.type)
        return [];
      let fill = this.type.contentMatch.fillBefore(Fragment.from(node));
      if (fill) {
        this.match = this.type.contentMatch.matchFragment(fill);
      } else {
        let start = this.type.contentMatch, wrap2;
        if (wrap2 = start.findWrapping(node.type)) {
          this.match = start;
          return wrap2;
        } else {
          return null;
        }
      }
    }
    return this.match.findWrapping(node.type);
  }
  finish(openEnd) {
    if (!(this.options & OPT_PRESERVE_WS)) {
      let last = this.content[this.content.length - 1], m2;
      if (last && last.isText && (m2 = /[ \t\r\n\u000c]+$/.exec(last.text))) {
        let text = last;
        if (last.text.length == m2[0].length)
          this.content.pop();
        else
          this.content[this.content.length - 1] = text.withText(text.text.slice(0, text.text.length - m2[0].length));
      }
    }
    let content = Fragment.from(this.content);
    if (!openEnd && this.match)
      content = content.append(this.match.fillBefore(Fragment.empty, true));
    return this.type ? this.type.create(this.attrs, content, this.marks) : content;
  }
  inlineContext(node) {
    if (this.type)
      return this.type.inlineContent;
    if (this.content.length)
      return this.content[0].isInline;
    return node.parentNode && !blockTags.hasOwnProperty(node.parentNode.nodeName.toLowerCase());
  }
}
class ParseContext {
  constructor(parser, options, isOpen) {
    this.parser = parser;
    this.options = options;
    this.isOpen = isOpen;
    this.open = 0;
    this.localPreserveWS = false;
    let topNode = options.topNode, topContext;
    let topOptions = wsOptionsFor(null, options.preserveWhitespace, 0) | (isOpen ? OPT_OPEN_LEFT : 0);
    if (topNode)
      topContext = new NodeContext(topNode.type, topNode.attrs, Mark$1.none, true, options.topMatch || topNode.type.contentMatch, topOptions);
    else if (isOpen)
      topContext = new NodeContext(null, null, Mark$1.none, true, null, topOptions);
    else
      topContext = new NodeContext(parser.schema.topNodeType, null, Mark$1.none, true, null, topOptions);
    this.nodes = [topContext];
    this.find = options.findPositions;
    this.needsBlock = false;
  }
  get top() {
    return this.nodes[this.open];
  }
  // Add a DOM node to the content. Text is inserted as text node,
  // otherwise, the node is passed to `addElement` or, if it has a
  // `style` attribute, `addElementWithStyles`.
  addDOM(dom, marks) {
    if (dom.nodeType == 3)
      this.addTextNode(dom, marks);
    else if (dom.nodeType == 1)
      this.addElement(dom, marks);
  }
  addTextNode(dom, marks) {
    let value = dom.nodeValue;
    let top = this.top, preserveWS = top.options & OPT_PRESERVE_WS_FULL ? "full" : this.localPreserveWS || (top.options & OPT_PRESERVE_WS) > 0;
    let { schema } = this.parser;
    if (preserveWS === "full" || top.inlineContext(dom) || /[^ \t\r\n\u000c]/.test(value)) {
      if (!preserveWS) {
        value = value.replace(/[ \t\r\n\u000c]+/g, " ");
        if (/^[ \t\r\n\u000c]/.test(value) && this.open == this.nodes.length - 1) {
          let nodeBefore = top.content[top.content.length - 1];
          let domNodeBefore = dom.previousSibling;
          if (!nodeBefore || domNodeBefore && domNodeBefore.nodeName == "BR" || nodeBefore.isText && /[ \t\r\n\u000c]$/.test(nodeBefore.text))
            value = value.slice(1);
        }
      } else if (preserveWS === "full") {
        value = value.replace(/\r\n?/g, "\n");
      } else if (schema.linebreakReplacement && /[\r\n]/.test(value) && this.top.findWrapping(schema.linebreakReplacement.create())) {
        let lines = value.split(/\r?\n|\r/);
        for (let i = 0; i < lines.length; i++) {
          if (i)
            this.insertNode(schema.linebreakReplacement.create(), marks, true);
          if (lines[i])
            this.insertNode(schema.text(lines[i]), marks, !/\S/.test(lines[i]));
        }
        value = "";
      } else {
        value = value.replace(/\r?\n|\r/g, " ");
      }
      if (value)
        this.insertNode(schema.text(value), marks, !/\S/.test(value));
      this.findInText(dom);
    } else {
      this.findInside(dom);
    }
  }
  // Try to find a handler for the given tag and use that to parse. If
  // none is found, the element's content nodes are added directly.
  addElement(dom, marks, matchAfter) {
    let outerWS = this.localPreserveWS, top = this.top;
    if (dom.tagName == "PRE" || /pre/.test(dom.style && dom.style.whiteSpace))
      this.localPreserveWS = true;
    let name = dom.nodeName.toLowerCase(), ruleID;
    if (listTags.hasOwnProperty(name) && this.parser.normalizeLists)
      normalizeList(dom);
    let rule = this.options.ruleFromNode && this.options.ruleFromNode(dom) || (ruleID = this.parser.matchTag(dom, this, matchAfter));
    out: if (rule ? rule.ignore : ignoreTags.hasOwnProperty(name)) {
      this.findInside(dom);
      this.ignoreFallback(dom, marks);
    } else if (!rule || rule.skip || rule.closeParent) {
      if (rule && rule.closeParent)
        this.open = Math.max(0, this.open - 1);
      else if (rule && rule.skip.nodeType)
        dom = rule.skip;
      let sync, oldNeedsBlock = this.needsBlock;
      if (blockTags.hasOwnProperty(name)) {
        if (top.content.length && top.content[0].isInline && this.open) {
          this.open--;
          top = this.top;
        }
        sync = true;
        if (!top.type)
          this.needsBlock = true;
      } else if (!dom.firstChild) {
        this.leafFallback(dom, marks);
        break out;
      }
      let innerMarks = rule && rule.skip ? marks : this.readStyles(dom, marks);
      if (innerMarks)
        this.addAll(dom, innerMarks);
      if (sync)
        this.sync(top);
      this.needsBlock = oldNeedsBlock;
    } else {
      let innerMarks = this.readStyles(dom, marks);
      if (innerMarks)
        this.addElementByRule(dom, rule, innerMarks, rule.consuming === false ? ruleID : void 0);
    }
    this.localPreserveWS = outerWS;
  }
  // Called for leaf DOM nodes that would otherwise be ignored
  leafFallback(dom, marks) {
    if (dom.nodeName == "BR" && this.top.type && this.top.type.inlineContent)
      this.addTextNode(dom.ownerDocument.createTextNode("\n"), marks);
  }
  // Called for ignored nodes
  ignoreFallback(dom, marks) {
    if (dom.nodeName == "BR" && (!this.top.type || !this.top.type.inlineContent))
      this.findPlace(this.parser.schema.text("-"), marks, true);
  }
  // Run any style parser associated with the node's styles. Either
  // return an updated array of marks, or null to indicate some of the
  // styles had a rule with `ignore` set.
  readStyles(dom, marks) {
    let styles = dom.style;
    if (styles && styles.length)
      for (let i = 0; i < this.parser.matchedStyles.length; i++) {
        let name = this.parser.matchedStyles[i], value = styles.getPropertyValue(name);
        if (value)
          for (let after = void 0; ; ) {
            let rule = this.parser.matchStyle(name, value, this, after);
            if (!rule)
              break;
            if (rule.ignore)
              return null;
            if (rule.clearMark)
              marks = marks.filter((m2) => !rule.clearMark(m2));
            else
              marks = marks.concat(this.parser.schema.marks[rule.mark].create(rule.attrs));
            if (rule.consuming === false)
              after = rule;
            else
              break;
          }
      }
    return marks;
  }
  // Look up a handler for the given node. If none are found, return
  // false. Otherwise, apply it, use its return value to drive the way
  // the node's content is wrapped, and return true.
  addElementByRule(dom, rule, marks, continueAfter) {
    let sync, nodeType;
    if (rule.node) {
      nodeType = this.parser.schema.nodes[rule.node];
      if (!nodeType.isLeaf) {
        let inner = this.enter(nodeType, rule.attrs || null, marks, rule.preserveWhitespace);
        if (inner) {
          sync = true;
          marks = inner;
        }
      } else if (!this.insertNode(nodeType.create(rule.attrs), marks, dom.nodeName == "BR")) {
        this.leafFallback(dom, marks);
      }
    } else {
      let markType = this.parser.schema.marks[rule.mark];
      marks = marks.concat(markType.create(rule.attrs));
    }
    let startIn = this.top;
    if (nodeType && nodeType.isLeaf) {
      this.findInside(dom);
    } else if (continueAfter) {
      this.addElement(dom, marks, continueAfter);
    } else if (rule.getContent) {
      this.findInside(dom);
      rule.getContent(dom, this.parser.schema).forEach((node) => this.insertNode(node, marks, false));
    } else {
      let contentDOM = dom;
      if (typeof rule.contentElement == "string")
        contentDOM = dom.querySelector(rule.contentElement);
      else if (typeof rule.contentElement == "function")
        contentDOM = rule.contentElement(dom);
      else if (rule.contentElement)
        contentDOM = rule.contentElement;
      this.findAround(dom, contentDOM, true);
      this.addAll(contentDOM, marks);
      this.findAround(dom, contentDOM, false);
    }
    if (sync && this.sync(startIn))
      this.open--;
  }
  // Add all child nodes between `startIndex` and `endIndex` (or the
  // whole node, if not given). If `sync` is passed, use it to
  // synchronize after every block element.
  addAll(parent, marks, startIndex, endIndex) {
    let index2 = startIndex || 0;
    for (let dom = startIndex ? parent.childNodes[startIndex] : parent.firstChild, end = endIndex == null ? null : parent.childNodes[endIndex]; dom != end; dom = dom.nextSibling, ++index2) {
      this.findAtPoint(parent, index2);
      this.addDOM(dom, marks);
    }
    this.findAtPoint(parent, index2);
  }
  // Try to find a way to fit the given node type into the current
  // context. May add intermediate wrappers and/or leave non-solid
  // nodes that we're in.
  findPlace(node, marks, cautious) {
    let route, sync;
    for (let depth = this.open, penalty = 0; depth >= 0; depth--) {
      let cx = this.nodes[depth];
      let found2 = cx.findWrapping(node);
      if (found2 && (!route || route.length > found2.length + penalty)) {
        route = found2;
        sync = cx;
        if (!found2.length)
          break;
      }
      if (cx.solid) {
        if (cautious)
          break;
        penalty += 2;
      }
    }
    if (!route)
      return null;
    this.sync(sync);
    for (let i = 0; i < route.length; i++)
      marks = this.enterInner(route[i], null, marks, false);
    return marks;
  }
  // Try to insert the given node, adjusting the context when needed.
  insertNode(node, marks, cautious) {
    if (node.isInline && this.needsBlock && !this.top.type) {
      let block = this.textblockFromContext();
      if (block)
        marks = this.enterInner(block, null, marks);
    }
    let innerMarks = this.findPlace(node, marks, cautious);
    if (innerMarks) {
      this.closeExtra();
      let top = this.top;
      if (top.match)
        top.match = top.match.matchType(node.type);
      let nodeMarks = Mark$1.none;
      for (let m2 of innerMarks.concat(node.marks))
        if (top.type ? top.type.allowsMarkType(m2.type) : markMayApply(m2.type, node.type))
          nodeMarks = m2.addToSet(nodeMarks);
      top.content.push(node.mark(nodeMarks));
      return true;
    }
    return false;
  }
  // Try to start a node of the given type, adjusting the context when
  // necessary.
  enter(type, attrs, marks, preserveWS) {
    let innerMarks = this.findPlace(type.create(attrs), marks, false);
    if (innerMarks)
      innerMarks = this.enterInner(type, attrs, marks, true, preserveWS);
    return innerMarks;
  }
  // Open a node of the given type
  enterInner(type, attrs, marks, solid = false, preserveWS) {
    this.closeExtra();
    let top = this.top;
    top.match = top.match && top.match.matchType(type);
    let options = wsOptionsFor(type, preserveWS, top.options);
    if (top.options & OPT_OPEN_LEFT && top.content.length == 0)
      options |= OPT_OPEN_LEFT;
    let applyMarks = Mark$1.none;
    marks = marks.filter((m2) => {
      if (top.type ? top.type.allowsMarkType(m2.type) : markMayApply(m2.type, type)) {
        applyMarks = m2.addToSet(applyMarks);
        return false;
      }
      return true;
    });
    this.nodes.push(new NodeContext(type, attrs, applyMarks, solid, null, options));
    this.open++;
    return marks;
  }
  // Make sure all nodes above this.open are finished and added to
  // their parents
  closeExtra(openEnd = false) {
    let i = this.nodes.length - 1;
    if (i > this.open) {
      for (; i > this.open; i--)
        this.nodes[i - 1].content.push(this.nodes[i].finish(openEnd));
      this.nodes.length = this.open + 1;
    }
  }
  finish() {
    this.open = 0;
    this.closeExtra(this.isOpen);
    return this.nodes[0].finish(!!(this.isOpen || this.options.topOpen));
  }
  sync(to) {
    for (let i = this.open; i >= 0; i--) {
      if (this.nodes[i] == to) {
        this.open = i;
        return true;
      } else if (this.localPreserveWS) {
        this.nodes[i].options |= OPT_PRESERVE_WS;
      }
    }
    return false;
  }
  get currentPos() {
    this.closeExtra();
    let pos = 0;
    for (let i = this.open; i >= 0; i--) {
      let content = this.nodes[i].content;
      for (let j2 = content.length - 1; j2 >= 0; j2--)
        pos += content[j2].nodeSize;
      if (i)
        pos++;
    }
    return pos;
  }
  findAtPoint(parent, offset2) {
    if (this.find)
      for (let i = 0; i < this.find.length; i++) {
        if (this.find[i].node == parent && this.find[i].offset == offset2)
          this.find[i].pos = this.currentPos;
      }
  }
  findInside(parent) {
    if (this.find)
      for (let i = 0; i < this.find.length; i++) {
        if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node))
          this.find[i].pos = this.currentPos;
      }
  }
  findAround(parent, content, before) {
    if (parent != content && this.find)
      for (let i = 0; i < this.find.length; i++) {
        if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node)) {
          let pos = content.compareDocumentPosition(this.find[i].node);
          if (pos & (before ? 2 : 4))
            this.find[i].pos = this.currentPos;
        }
      }
  }
  findInText(textNode) {
    if (this.find)
      for (let i = 0; i < this.find.length; i++) {
        if (this.find[i].node == textNode)
          this.find[i].pos = this.currentPos - (textNode.nodeValue.length - this.find[i].offset);
      }
  }
  // Determines whether the given context string matches this context.
  matchesContext(context) {
    if (context.indexOf("|") > -1)
      return context.split(/\s*\|\s*/).some(this.matchesContext, this);
    let parts = context.split("/");
    let option = this.options.context;
    let useRoot = !this.isOpen && (!option || option.parent.type == this.nodes[0].type);
    let minDepth = -(option ? option.depth + 1 : 0) + (useRoot ? 0 : 1);
    let match = (i, depth) => {
      for (; i >= 0; i--) {
        let part = parts[i];
        if (part == "") {
          if (i == parts.length - 1 || i == 0)
            continue;
          for (; depth >= minDepth; depth--)
            if (match(i - 1, depth))
              return true;
          return false;
        } else {
          let next = depth > 0 || depth == 0 && useRoot ? this.nodes[depth].type : option && depth >= minDepth ? option.node(depth - minDepth).type : null;
          if (!next || next.name != part && !next.isInGroup(part))
            return false;
          depth--;
        }
      }
      return true;
    };
    return match(parts.length - 1, this.open);
  }
  textblockFromContext() {
    let $context = this.options.context;
    if ($context)
      for (let d2 = $context.depth; d2 >= 0; d2--) {
        let deflt = $context.node(d2).contentMatchAt($context.indexAfter(d2)).defaultType;
        if (deflt && deflt.isTextblock && deflt.defaultAttrs)
          return deflt;
      }
    for (let name in this.parser.schema.nodes) {
      let type = this.parser.schema.nodes[name];
      if (type.isTextblock && type.defaultAttrs)
        return type;
    }
  }
}
function normalizeList(dom) {
  for (let child = dom.firstChild, prevItem = null; child; child = child.nextSibling) {
    let name = child.nodeType == 1 ? child.nodeName.toLowerCase() : null;
    if (name && listTags.hasOwnProperty(name) && prevItem) {
      prevItem.appendChild(child);
      child = prevItem;
    } else if (name == "li") {
      prevItem = child;
    } else if (name) {
      prevItem = null;
    }
  }
}
function matches(dom, selector) {
  return (dom.matches || dom.msMatchesSelector || dom.webkitMatchesSelector || dom.mozMatchesSelector).call(dom, selector);
}
function copy(obj) {
  let copy2 = {};
  for (let prop in obj)
    copy2[prop] = obj[prop];
  return copy2;
}
function markMayApply(markType, nodeType) {
  let nodes = nodeType.schema.nodes;
  for (let name in nodes) {
    let parent = nodes[name];
    if (!parent.allowsMarkType(markType))
      continue;
    let seen2 = [], scan = (match) => {
      seen2.push(match);
      for (let i = 0; i < match.edgeCount; i++) {
        let { type, next } = match.edge(i);
        if (type == nodeType)
          return true;
        if (seen2.indexOf(next) < 0 && scan(next))
          return true;
      }
    };
    if (scan(parent.contentMatch))
      return true;
  }
}
class DOMSerializer {
  /**
  Create a serializer. `nodes` should map node names to functions
  that take a node and return a description of the corresponding
  DOM. `marks` does the same for mark names, but also gets an
  argument that tells it whether the mark's content is block or
  inline content (for typical use, it'll always be inline). A mark
  serializer may be `null` to indicate that marks of that type
  should not be serialized.
  */
  constructor(nodes, marks) {
    this.nodes = nodes;
    this.marks = marks;
  }
  /**
  Serialize the content of this fragment to a DOM fragment. When
  not in the browser, the `document` option, containing a DOM
  document, should be passed so that the serializer can create
  nodes.
  */
  serializeFragment(fragment, options = {}, target) {
    if (!target)
      target = doc$1(options).createDocumentFragment();
    let top = target, active = [];
    fragment.forEach((node) => {
      if (active.length || node.marks.length) {
        let keep = 0, rendered = 0;
        while (keep < active.length && rendered < node.marks.length) {
          let next = node.marks[rendered];
          if (!this.marks[next.type.name]) {
            rendered++;
            continue;
          }
          if (!next.eq(active[keep][0]) || next.type.spec.spanning === false)
            break;
          keep++;
          rendered++;
        }
        while (keep < active.length)
          top = active.pop()[1];
        while (rendered < node.marks.length) {
          let add = node.marks[rendered++];
          let markDOM = this.serializeMark(add, node.isInline, options);
          if (markDOM) {
            active.push([add, top]);
            top.appendChild(markDOM.dom);
            top = markDOM.contentDOM || markDOM.dom;
          }
        }
      }
      top.appendChild(this.serializeNodeInner(node, options));
    });
    return target;
  }
  /**
  @internal
  */
  serializeNodeInner(node, options) {
    let { dom, contentDOM } = renderSpec(doc$1(options), this.nodes[node.type.name](node), null, node.attrs);
    if (contentDOM) {
      if (node.isLeaf)
        throw new RangeError("Content hole not allowed in a leaf node spec");
      this.serializeFragment(node.content, options, contentDOM);
    }
    return dom;
  }
  /**
  Serialize this node to a DOM node. This can be useful when you
  need to serialize a part of a document, as opposed to the whole
  document. To serialize a whole document, use
  [`serializeFragment`](https://prosemirror.net/docs/ref/#model.DOMSerializer.serializeFragment) on
  its [content](https://prosemirror.net/docs/ref/#model.Node.content).
  */
  serializeNode(node, options = {}) {
    let dom = this.serializeNodeInner(node, options);
    for (let i = node.marks.length - 1; i >= 0; i--) {
      let wrap2 = this.serializeMark(node.marks[i], node.isInline, options);
      if (wrap2) {
        (wrap2.contentDOM || wrap2.dom).appendChild(dom);
        dom = wrap2.dom;
      }
    }
    return dom;
  }
  /**
  @internal
  */
  serializeMark(mark, inline2, options = {}) {
    let toDOM = this.marks[mark.type.name];
    return toDOM && renderSpec(doc$1(options), toDOM(mark, inline2), null, mark.attrs);
  }
  static renderSpec(doc2, structure, xmlNS = null, blockArraysIn) {
    return renderSpec(doc2, structure, xmlNS, blockArraysIn);
  }
  /**
  Build a serializer using the [`toDOM`](https://prosemirror.net/docs/ref/#model.NodeSpec.toDOM)
  properties in a schema's node and mark specs.
  */
  static fromSchema(schema) {
    return schema.cached.domSerializer || (schema.cached.domSerializer = new DOMSerializer(this.nodesFromSchema(schema), this.marksFromSchema(schema)));
  }
  /**
  Gather the serializers in a schema's node specs into an object.
  This can be useful as a base to build a custom serializer from.
  */
  static nodesFromSchema(schema) {
    let result = gatherToDOM(schema.nodes);
    if (!result.text)
      result.text = (node) => node.text;
    return result;
  }
  /**
  Gather the serializers in a schema's mark specs into an object.
  */
  static marksFromSchema(schema) {
    return gatherToDOM(schema.marks);
  }
}
function gatherToDOM(obj) {
  let result = {};
  for (let name in obj) {
    let toDOM = obj[name].spec.toDOM;
    if (toDOM)
      result[name] = toDOM;
  }
  return result;
}
function doc$1(options) {
  return options.document || window.document;
}
const suspiciousAttributeCache = /* @__PURE__ */ new WeakMap();
function suspiciousAttributes(attrs) {
  let value = suspiciousAttributeCache.get(attrs);
  if (value === void 0)
    suspiciousAttributeCache.set(attrs, value = suspiciousAttributesInner(attrs));
  return value;
}
function suspiciousAttributesInner(attrs) {
  let result = null;
  function scan(value) {
    if (value && typeof value == "object") {
      if (Array.isArray(value)) {
        if (typeof value[0] == "string") {
          if (!result)
            result = [];
          result.push(value);
        } else {
          for (let i = 0; i < value.length; i++)
            scan(value[i]);
        }
      } else {
        for (let prop in value)
          scan(value[prop]);
      }
    }
  }
  scan(attrs);
  return result;
}
function renderSpec(doc2, structure, xmlNS, blockArraysIn) {
  if (typeof structure == "string")
    return { dom: doc2.createTextNode(structure) };
  if (structure.nodeType != null)
    return { dom: structure };
  if (structure.dom && structure.dom.nodeType != null)
    return structure;
  let tagName = structure[0], suspicious;
  if (typeof tagName != "string")
    throw new RangeError("Invalid array passed to renderSpec");
  if (blockArraysIn && (suspicious = suspiciousAttributes(blockArraysIn)) && suspicious.indexOf(structure) > -1)
    throw new RangeError("Using an array from an attribute object as a DOM spec. This may be an attempted cross site scripting attack.");
  let space = tagName.indexOf(" ");
  if (space > 0) {
    xmlNS = tagName.slice(0, space);
    tagName = tagName.slice(space + 1);
  }
  let contentDOM;
  let dom = xmlNS ? doc2.createElementNS(xmlNS, tagName) : doc2.createElement(tagName);
  let attrs = structure[1], start = 1;
  if (attrs && typeof attrs == "object" && attrs.nodeType == null && !Array.isArray(attrs)) {
    start = 2;
    for (let name in attrs)
      if (attrs[name] != null) {
        let space2 = name.indexOf(" ");
        if (space2 > 0)
          dom.setAttributeNS(name.slice(0, space2), name.slice(space2 + 1), attrs[name]);
        else if (name == "style" && dom.style)
          dom.style.cssText = attrs[name];
        else
          dom.setAttribute(name, attrs[name]);
      }
  }
  for (let i = start; i < structure.length; i++) {
    let child = structure[i];
    if (child === 0) {
      if (i < structure.length - 1 || i > start)
        throw new RangeError("Content hole must be the only child of its parent node");
      return { dom, contentDOM: dom };
    } else {
      let { dom: inner, contentDOM: innerContent } = renderSpec(doc2, child, xmlNS, blockArraysIn);
      dom.appendChild(inner);
      if (innerContent) {
        if (contentDOM)
          throw new RangeError("Multiple content holes");
        contentDOM = innerContent;
      }
    }
  }
  return { dom, contentDOM };
}
const lower16 = 65535;
const factor16 = Math.pow(2, 16);
function makeRecover(index2, offset2) {
  return index2 + offset2 * factor16;
}
function recoverIndex(value) {
  return value & lower16;
}
function recoverOffset(value) {
  return (value - (value & lower16)) / factor16;
}
const DEL_BEFORE = 1, DEL_AFTER = 2, DEL_ACROSS = 4, DEL_SIDE = 8;
class MapResult {
  /**
  @internal
  */
  constructor(pos, delInfo, recover) {
    this.pos = pos;
    this.delInfo = delInfo;
    this.recover = recover;
  }
  /**
  Tells you whether the position was deleted, that is, whether the
  step removed the token on the side queried (via the `assoc`)
  argument from the document.
  */
  get deleted() {
    return (this.delInfo & DEL_SIDE) > 0;
  }
  /**
  Tells you whether the token before the mapped position was deleted.
  */
  get deletedBefore() {
    return (this.delInfo & (DEL_BEFORE | DEL_ACROSS)) > 0;
  }
  /**
  True when the token after the mapped position was deleted.
  */
  get deletedAfter() {
    return (this.delInfo & (DEL_AFTER | DEL_ACROSS)) > 0;
  }
  /**
  Tells whether any of the steps mapped through deletes across the
  position (including both the token before and after the
  position).
  */
  get deletedAcross() {
    return (this.delInfo & DEL_ACROSS) > 0;
  }
}
class StepMap {
  /**
  Create a position map. The modifications to the document are
  represented as an array of numbers, in which each group of three
  represents a modified chunk as `[start, oldSize, newSize]`.
  */
  constructor(ranges, inverted = false) {
    this.ranges = ranges;
    this.inverted = inverted;
    if (!ranges.length && StepMap.empty)
      return StepMap.empty;
  }
  /**
  @internal
  */
  recover(value) {
    let diff2 = 0, index2 = recoverIndex(value);
    if (!this.inverted)
      for (let i = 0; i < index2; i++)
        diff2 += this.ranges[i * 3 + 2] - this.ranges[i * 3 + 1];
    return this.ranges[index2 * 3] + diff2 + recoverOffset(value);
  }
  mapResult(pos, assoc = 1) {
    return this._map(pos, assoc, false);
  }
  map(pos, assoc = 1) {
    return this._map(pos, assoc, true);
  }
  /**
  @internal
  */
  _map(pos, assoc, simple) {
    let diff2 = 0, oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2;
    for (let i = 0; i < this.ranges.length; i += 3) {
      let start = this.ranges[i] - (this.inverted ? diff2 : 0);
      if (start > pos)
        break;
      let oldSize = this.ranges[i + oldIndex], newSize = this.ranges[i + newIndex], end = start + oldSize;
      if (pos <= end) {
        let side = !oldSize ? assoc : pos == start ? -1 : pos == end ? 1 : assoc;
        let result = start + diff2 + (side < 0 ? 0 : newSize);
        if (simple)
          return result;
        let recover = pos == (assoc < 0 ? start : end) ? null : makeRecover(i / 3, pos - start);
        let del = pos == start ? DEL_AFTER : pos == end ? DEL_BEFORE : DEL_ACROSS;
        if (assoc < 0 ? pos != start : pos != end)
          del |= DEL_SIDE;
        return new MapResult(result, del, recover);
      }
      diff2 += newSize - oldSize;
    }
    return simple ? pos + diff2 : new MapResult(pos + diff2, 0, null);
  }
  /**
  @internal
  */
  touches(pos, recover) {
    let diff2 = 0, index2 = recoverIndex(recover);
    let oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2;
    for (let i = 0; i < this.ranges.length; i += 3) {
      let start = this.ranges[i] - (this.inverted ? diff2 : 0);
      if (start > pos)
        break;
      let oldSize = this.ranges[i + oldIndex], end = start + oldSize;
      if (pos <= end && i == index2 * 3)
        return true;
      diff2 += this.ranges[i + newIndex] - oldSize;
    }
    return false;
  }
  /**
  Calls the given function on each of the changed ranges included in
  this map.
  */
  forEach(f2) {
    let oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2;
    for (let i = 0, diff2 = 0; i < this.ranges.length; i += 3) {
      let start = this.ranges[i], oldStart = start - (this.inverted ? diff2 : 0), newStart = start + (this.inverted ? 0 : diff2);
      let oldSize = this.ranges[i + oldIndex], newSize = this.ranges[i + newIndex];
      f2(oldStart, oldStart + oldSize, newStart, newStart + newSize);
      diff2 += newSize - oldSize;
    }
  }
  /**
  Create an inverted version of this map. The result can be used to
  map positions in the post-step document to the pre-step document.
  */
  invert() {
    return new StepMap(this.ranges, !this.inverted);
  }
  /**
  @internal
  */
  toString() {
    return (this.inverted ? "-" : "") + JSON.stringify(this.ranges);
  }
  /**
  Create a map that moves all positions by offset `n` (which may be
  negative). This can be useful when applying steps meant for a
  sub-document to a larger document, or vice-versa.
  */
  static offset(n2) {
    return n2 == 0 ? StepMap.empty : new StepMap(n2 < 0 ? [0, -n2, 0] : [0, 0, n2]);
  }
}
StepMap.empty = new StepMap([]);
class Mapping {
  /**
  Create a new mapping with the given position maps.
  */
  constructor(maps, mirror, from2 = 0, to = maps ? maps.length : 0) {
    this.mirror = mirror;
    this.from = from2;
    this.to = to;
    this._maps = maps || [];
    this.ownData = !(maps || mirror);
  }
  /**
  The step maps in this mapping.
  */
  get maps() {
    return this._maps;
  }
  /**
  Create a mapping that maps only through a part of this one.
  */
  slice(from2 = 0, to = this.maps.length) {
    return new Mapping(this._maps, this.mirror, from2, to);
  }
  /**
  Add a step map to the end of this mapping. If `mirrors` is
  given, it should be the index of the step map that is the mirror
  image of this one.
  */
  appendMap(map2, mirrors) {
    if (!this.ownData) {
      this._maps = this._maps.slice();
      this.mirror = this.mirror && this.mirror.slice();
      this.ownData = true;
    }
    this.to = this._maps.push(map2);
    if (mirrors != null)
      this.setMirror(this._maps.length - 1, mirrors);
  }
  /**
  Add all the step maps in a given mapping to this one (preserving
  mirroring information).
  */
  appendMapping(mapping) {
    for (let i = 0, startSize = this._maps.length; i < mapping._maps.length; i++) {
      let mirr = mapping.getMirror(i);
      this.appendMap(mapping._maps[i], mirr != null && mirr < i ? startSize + mirr : void 0);
    }
  }
  /**
  Finds the offset of the step map that mirrors the map at the
  given offset, in this mapping (as per the second argument to
  `appendMap`).
  */
  getMirror(n2) {
    if (this.mirror) {
      for (let i = 0; i < this.mirror.length; i++)
        if (this.mirror[i] == n2)
          return this.mirror[i + (i % 2 ? -1 : 1)];
    }
  }
  /**
  @internal
  */
  setMirror(n2, m2) {
    if (!this.mirror)
      this.mirror = [];
    this.mirror.push(n2, m2);
  }
  /**
  Append the inverse of the given mapping to this one.
  */
  appendMappingInverted(mapping) {
    for (let i = mapping.maps.length - 1, totalSize = this._maps.length + mapping._maps.length; i >= 0; i--) {
      let mirr = mapping.getMirror(i);
      this.appendMap(mapping._maps[i].invert(), mirr != null && mirr > i ? totalSize - mirr - 1 : void 0);
    }
  }
  /**
  Create an inverted version of this mapping.
  */
  invert() {
    let inverse = new Mapping();
    inverse.appendMappingInverted(this);
    return inverse;
  }
  /**
  Map a position through this mapping.
  */
  map(pos, assoc = 1) {
    if (this.mirror)
      return this._map(pos, assoc, true);
    for (let i = this.from; i < this.to; i++)
      pos = this._maps[i].map(pos, assoc);
    return pos;
  }
  /**
  Map a position through this mapping, returning a mapping
  result.
  */
  mapResult(pos, assoc = 1) {
    return this._map(pos, assoc, false);
  }
  /**
  @internal
  */
  _map(pos, assoc, simple) {
    let delInfo = 0;
    for (let i = this.from; i < this.to; i++) {
      let map2 = this._maps[i], result = map2.mapResult(pos, assoc);
      if (result.recover != null) {
        let corr = this.getMirror(i);
        if (corr != null && corr > i && corr < this.to) {
          i = corr;
          pos = this._maps[corr].recover(result.recover);
          continue;
        }
      }
      delInfo |= result.delInfo;
      pos = result.pos;
    }
    return simple ? pos : new MapResult(pos, delInfo, null);
  }
}
const stepsByID = /* @__PURE__ */ Object.create(null);
class Step {
  /**
  Get the step map that represents the changes made by this step,
  and which can be used to transform between positions in the old
  and the new document.
  */
  getMap() {
    return StepMap.empty;
  }
  /**
  Try to merge this step with another one, to be applied directly
  after it. Returns the merged step when possible, null if the
  steps can't be merged.
  */
  merge(other) {
    return null;
  }
  /**
  Deserialize a step from its JSON representation. Will call
  through to the step class' own implementation of this method.
  */
  static fromJSON(schema, json2) {
    if (!json2 || !json2.stepType)
      throw new RangeError("Invalid input for Step.fromJSON");
    let type = stepsByID[json2.stepType];
    if (!type)
      throw new RangeError(`No step type ${json2.stepType} defined`);
    return type.fromJSON(schema, json2);
  }
  /**
  To be able to serialize steps to JSON, each step needs a string
  ID to attach to its JSON representation. Use this method to
  register an ID for your step classes. Try to pick something
  that's unlikely to clash with steps from other modules.
  */
  static jsonID(id, stepClass) {
    if (id in stepsByID)
      throw new RangeError("Duplicate use of step JSON ID " + id);
    stepsByID[id] = stepClass;
    stepClass.prototype.jsonID = id;
    return stepClass;
  }
}
class StepResult {
  /**
  @internal
  */
  constructor(doc2, failed) {
    this.doc = doc2;
    this.failed = failed;
  }
  /**
  Create a successful step result.
  */
  static ok(doc2) {
    return new StepResult(doc2, null);
  }
  /**
  Create a failed step result.
  */
  static fail(message) {
    return new StepResult(null, message);
  }
  /**
  Call [`Node.replace`](https://prosemirror.net/docs/ref/#model.Node.replace) with the given
  arguments. Create a successful result if it succeeds, and a
  failed one if it throws a `ReplaceError`.
  */
  static fromReplace(doc2, from2, to, slice2) {
    try {
      return StepResult.ok(doc2.replace(from2, to, slice2));
    } catch (e) {
      if (e instanceof ReplaceError)
        return StepResult.fail(e.message);
      throw e;
    }
  }
}
function mapFragment(fragment, f2, parent) {
  let mapped = [];
  for (let i = 0; i < fragment.childCount; i++) {
    let child = fragment.child(i);
    if (child.content.size)
      child = child.copy(mapFragment(child.content, f2, child));
    if (child.isInline)
      child = f2(child, parent, i);
    mapped.push(child);
  }
  return Fragment.fromArray(mapped);
}
class AddMarkStep extends Step {
  /**
  Create a mark step.
  */
  constructor(from2, to, mark) {
    super();
    this.from = from2;
    this.to = to;
    this.mark = mark;
  }
  apply(doc2) {
    let oldSlice = doc2.slice(this.from, this.to), $from = doc2.resolve(this.from);
    let parent = $from.node($from.sharedDepth(this.to));
    let slice2 = new Slice(mapFragment(oldSlice.content, (node, parent2) => {
      if (!node.isAtom || !parent2.type.allowsMarkType(this.mark.type))
        return node;
      return node.mark(this.mark.addToSet(node.marks));
    }, parent), oldSlice.openStart, oldSlice.openEnd);
    return StepResult.fromReplace(doc2, this.from, this.to, slice2);
  }
  invert() {
    return new RemoveMarkStep(this.from, this.to, this.mark);
  }
  map(mapping) {
    let from2 = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);
    if (from2.deleted && to.deleted || from2.pos >= to.pos)
      return null;
    return new AddMarkStep(from2.pos, to.pos, this.mark);
  }
  merge(other) {
    if (other instanceof AddMarkStep && other.mark.eq(this.mark) && this.from <= other.to && this.to >= other.from)
      return new AddMarkStep(Math.min(this.from, other.from), Math.max(this.to, other.to), this.mark);
    return null;
  }
  toJSON() {
    return {
      stepType: "addMark",
      mark: this.mark.toJSON(),
      from: this.from,
      to: this.to
    };
  }
  /**
  @internal
  */
  static fromJSON(schema, json2) {
    if (typeof json2.from != "number" || typeof json2.to != "number")
      throw new RangeError("Invalid input for AddMarkStep.fromJSON");
    return new AddMarkStep(json2.from, json2.to, schema.markFromJSON(json2.mark));
  }
}
Step.jsonID("addMark", AddMarkStep);
class RemoveMarkStep extends Step {
  /**
  Create a mark-removing step.
  */
  constructor(from2, to, mark) {
    super();
    this.from = from2;
    this.to = to;
    this.mark = mark;
  }
  apply(doc2) {
    let oldSlice = doc2.slice(this.from, this.to);
    let slice2 = new Slice(mapFragment(oldSlice.content, (node) => {
      return node.mark(this.mark.removeFromSet(node.marks));
    }, doc2), oldSlice.openStart, oldSlice.openEnd);
    return StepResult.fromReplace(doc2, this.from, this.to, slice2);
  }
  invert() {
    return new AddMarkStep(this.from, this.to, this.mark);
  }
  map(mapping) {
    let from2 = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);
    if (from2.deleted && to.deleted || from2.pos >= to.pos)
      return null;
    return new RemoveMarkStep(from2.pos, to.pos, this.mark);
  }
  merge(other) {
    if (other instanceof RemoveMarkStep && other.mark.eq(this.mark) && this.from <= other.to && this.to >= other.from)
      return new RemoveMarkStep(Math.min(this.from, other.from), Math.max(this.to, other.to), this.mark);
    return null;
  }
  toJSON() {
    return {
      stepType: "removeMark",
      mark: this.mark.toJSON(),
      from: this.from,
      to: this.to
    };
  }
  /**
  @internal
  */
  static fromJSON(schema, json2) {
    if (typeof json2.from != "number" || typeof json2.to != "number")
      throw new RangeError("Invalid input for RemoveMarkStep.fromJSON");
    return new RemoveMarkStep(json2.from, json2.to, schema.markFromJSON(json2.mark));
  }
}
Step.jsonID("removeMark", RemoveMarkStep);
class AddNodeMarkStep extends Step {
  /**
  Create a node mark step.
  */
  constructor(pos, mark) {
    super();
    this.pos = pos;
    this.mark = mark;
  }
  apply(doc2) {
    let node = doc2.nodeAt(this.pos);
    if (!node)
      return StepResult.fail("No node at mark step's position");
    let updated = node.type.create(node.attrs, null, this.mark.addToSet(node.marks));
    return StepResult.fromReplace(doc2, this.pos, this.pos + 1, new Slice(Fragment.from(updated), 0, node.isLeaf ? 0 : 1));
  }
  invert(doc2) {
    let node = doc2.nodeAt(this.pos);
    if (node) {
      let newSet = this.mark.addToSet(node.marks);
      if (newSet.length == node.marks.length) {
        for (let i = 0; i < node.marks.length; i++)
          if (!node.marks[i].isInSet(newSet))
            return new AddNodeMarkStep(this.pos, node.marks[i]);
        return new AddNodeMarkStep(this.pos, this.mark);
      }
    }
    return new RemoveNodeMarkStep(this.pos, this.mark);
  }
  map(mapping) {
    let pos = mapping.mapResult(this.pos, 1);
    return pos.deletedAfter ? null : new AddNodeMarkStep(pos.pos, this.mark);
  }
  toJSON() {
    return { stepType: "addNodeMark", pos: this.pos, mark: this.mark.toJSON() };
  }
  /**
  @internal
  */
  static fromJSON(schema, json2) {
    if (typeof json2.pos != "number")
      throw new RangeError("Invalid input for AddNodeMarkStep.fromJSON");
    return new AddNodeMarkStep(json2.pos, schema.markFromJSON(json2.mark));
  }
}
Step.jsonID("addNodeMark", AddNodeMarkStep);
class RemoveNodeMarkStep extends Step {
  /**
  Create a mark-removing step.
  */
  constructor(pos, mark) {
    super();
    this.pos = pos;
    this.mark = mark;
  }
  apply(doc2) {
    let node = doc2.nodeAt(this.pos);
    if (!node)
      return StepResult.fail("No node at mark step's position");
    let updated = node.type.create(node.attrs, null, this.mark.removeFromSet(node.marks));
    return StepResult.fromReplace(doc2, this.pos, this.pos + 1, new Slice(Fragment.from(updated), 0, node.isLeaf ? 0 : 1));
  }
  invert(doc2) {
    let node = doc2.nodeAt(this.pos);
    if (!node || !this.mark.isInSet(node.marks))
      return this;
    return new AddNodeMarkStep(this.pos, this.mark);
  }
  map(mapping) {
    let pos = mapping.mapResult(this.pos, 1);
    return pos.deletedAfter ? null : new RemoveNodeMarkStep(pos.pos, this.mark);
  }
  toJSON() {
    return { stepType: "removeNodeMark", pos: this.pos, mark: this.mark.toJSON() };
  }
  /**
  @internal
  */
  static fromJSON(schema, json2) {
    if (typeof json2.pos != "number")
      throw new RangeError("Invalid input for RemoveNodeMarkStep.fromJSON");
    return new RemoveNodeMarkStep(json2.pos, schema.markFromJSON(json2.mark));
  }
}
Step.jsonID("removeNodeMark", RemoveNodeMarkStep);
class ReplaceStep extends Step {
  /**
  The given `slice` should fit the 'gap' between `from` and
  `to`—the depths must line up, and the surrounding nodes must be
  able to be joined with the open sides of the slice. When
  `structure` is true, the step will fail if the content between
  from and to is not just a sequence of closing and then opening
  tokens (this is to guard against rebased replace steps
  overwriting something they weren't supposed to).
  */
  constructor(from2, to, slice2, structure = false) {
    super();
    this.from = from2;
    this.to = to;
    this.slice = slice2;
    this.structure = structure;
  }
  apply(doc2) {
    if (this.structure && contentBetween(doc2, this.from, this.to))
      return StepResult.fail("Structure replace would overwrite content");
    return StepResult.fromReplace(doc2, this.from, this.to, this.slice);
  }
  getMap() {
    return new StepMap([this.from, this.to - this.from, this.slice.size]);
  }
  invert(doc2) {
    return new ReplaceStep(this.from, this.from + this.slice.size, doc2.slice(this.from, this.to));
  }
  map(mapping) {
    let from2 = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);
    if (from2.deletedAcross && to.deletedAcross)
      return null;
    return new ReplaceStep(from2.pos, Math.max(from2.pos, to.pos), this.slice, this.structure);
  }
  merge(other) {
    if (!(other instanceof ReplaceStep) || other.structure || this.structure)
      return null;
    if (this.from + this.slice.size == other.from && !this.slice.openEnd && !other.slice.openStart) {
      let slice2 = this.slice.size + other.slice.size == 0 ? Slice.empty : new Slice(this.slice.content.append(other.slice.content), this.slice.openStart, other.slice.openEnd);
      return new ReplaceStep(this.from, this.to + (other.to - other.from), slice2, this.structure);
    } else if (other.to == this.from && !this.slice.openStart && !other.slice.openEnd) {
      let slice2 = this.slice.size + other.slice.size == 0 ? Slice.empty : new Slice(other.slice.content.append(this.slice.content), other.slice.openStart, this.slice.openEnd);
      return new ReplaceStep(other.from, this.to, slice2, this.structure);
    } else {
      return null;
    }
  }
  toJSON() {
    let json2 = { stepType: "replace", from: this.from, to: this.to };
    if (this.slice.size)
      json2.slice = this.slice.toJSON();
    if (this.structure)
      json2.structure = true;
    return json2;
  }
  /**
  @internal
  */
  static fromJSON(schema, json2) {
    if (typeof json2.from != "number" || typeof json2.to != "number")
      throw new RangeError("Invalid input for ReplaceStep.fromJSON");
    return new ReplaceStep(json2.from, json2.to, Slice.fromJSON(schema, json2.slice), !!json2.structure);
  }
}
Step.jsonID("replace", ReplaceStep);
class ReplaceAroundStep extends Step {
  /**
  Create a replace-around step with the given range and gap.
  `insert` should be the point in the slice into which the content
  of the gap should be moved. `structure` has the same meaning as
  it has in the [`ReplaceStep`](https://prosemirror.net/docs/ref/#transform.ReplaceStep) class.
  */
  constructor(from2, to, gapFrom, gapTo, slice2, insert, structure = false) {
    super();
    this.from = from2;
    this.to = to;
    this.gapFrom = gapFrom;
    this.gapTo = gapTo;
    this.slice = slice2;
    this.insert = insert;
    this.structure = structure;
  }
  apply(doc2) {
    if (this.structure && (contentBetween(doc2, this.from, this.gapFrom) || contentBetween(doc2, this.gapTo, this.to)))
      return StepResult.fail("Structure gap-replace would overwrite content");
    let gap = doc2.slice(this.gapFrom, this.gapTo);
    if (gap.openStart || gap.openEnd)
      return StepResult.fail("Gap is not a flat range");
    let inserted = this.slice.insertAt(this.insert, gap.content);
    if (!inserted)
      return StepResult.fail("Content does not fit in gap");
    return StepResult.fromReplace(doc2, this.from, this.to, inserted);
  }
  getMap() {
    return new StepMap([
      this.from,
      this.gapFrom - this.from,
      this.insert,
      this.gapTo,
      this.to - this.gapTo,
      this.slice.size - this.insert
    ]);
  }
  invert(doc2) {
    let gap = this.gapTo - this.gapFrom;
    return new ReplaceAroundStep(this.from, this.from + this.slice.size + gap, this.from + this.insert, this.from + this.insert + gap, doc2.slice(this.from, this.to).removeBetween(this.gapFrom - this.from, this.gapTo - this.from), this.gapFrom - this.from, this.structure);
  }
  map(mapping) {
    let from2 = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);
    let gapFrom = this.from == this.gapFrom ? from2.pos : mapping.map(this.gapFrom, -1);
    let gapTo = this.to == this.gapTo ? to.pos : mapping.map(this.gapTo, 1);
    if (from2.deletedAcross && to.deletedAcross || gapFrom < from2.pos || gapTo > to.pos)
      return null;
    return new ReplaceAroundStep(from2.pos, to.pos, gapFrom, gapTo, this.slice, this.insert, this.structure);
  }
  toJSON() {
    let json2 = {
      stepType: "replaceAround",
      from: this.from,
      to: this.to,
      gapFrom: this.gapFrom,
      gapTo: this.gapTo,
      insert: this.insert
    };
    if (this.slice.size)
      json2.slice = this.slice.toJSON();
    if (this.structure)
      json2.structure = true;
    return json2;
  }
  /**
  @internal
  */
  static fromJSON(schema, json2) {
    if (typeof json2.from != "number" || typeof json2.to != "number" || typeof json2.gapFrom != "number" || typeof json2.gapTo != "number" || typeof json2.insert != "number")
      throw new RangeError("Invalid input for ReplaceAroundStep.fromJSON");
    return new ReplaceAroundStep(json2.from, json2.to, json2.gapFrom, json2.gapTo, Slice.fromJSON(schema, json2.slice), json2.insert, !!json2.structure);
  }
}
Step.jsonID("replaceAround", ReplaceAroundStep);
function contentBetween(doc2, from2, to) {
  let $from = doc2.resolve(from2), dist2 = to - from2, depth = $from.depth;
  while (dist2 > 0 && depth > 0 && $from.indexAfter(depth) == $from.node(depth).childCount) {
    depth--;
    dist2--;
  }
  if (dist2 > 0) {
    let next = $from.node(depth).maybeChild($from.indexAfter(depth));
    while (dist2 > 0) {
      if (!next || next.isLeaf)
        return true;
      next = next.firstChild;
      dist2--;
    }
  }
  return false;
}
function addMark(tr2, from2, to, mark) {
  let removed = [], added = [];
  let removing, adding;
  tr2.doc.nodesBetween(from2, to, (node, pos, parent) => {
    if (!node.isInline)
      return;
    let marks = node.marks;
    if (!mark.isInSet(marks) && parent.type.allowsMarkType(mark.type)) {
      let start = Math.max(pos, from2), end = Math.min(pos + node.nodeSize, to);
      let newSet = mark.addToSet(marks);
      for (let i = 0; i < marks.length; i++) {
        if (!marks[i].isInSet(newSet)) {
          if (removing && removing.to == start && removing.mark.eq(marks[i]))
            removing.to = end;
          else
            removed.push(removing = new RemoveMarkStep(start, end, marks[i]));
        }
      }
      if (adding && adding.to == start)
        adding.to = end;
      else
        added.push(adding = new AddMarkStep(start, end, mark));
    }
  });
  removed.forEach((s2) => tr2.step(s2));
  added.forEach((s2) => tr2.step(s2));
}
function removeMark(tr2, from2, to, mark) {
  let matched = [], step = 0;
  tr2.doc.nodesBetween(from2, to, (node, pos) => {
    if (!node.isInline)
      return;
    step++;
    let toRemove = null;
    if (mark instanceof MarkType) {
      let set = node.marks, found2;
      while (found2 = mark.isInSet(set)) {
        (toRemove || (toRemove = [])).push(found2);
        set = found2.removeFromSet(set);
      }
    } else if (mark) {
      if (mark.isInSet(node.marks))
        toRemove = [mark];
    } else {
      toRemove = node.marks;
    }
    if (toRemove && toRemove.length) {
      let end = Math.min(pos + node.nodeSize, to);
      for (let i = 0; i < toRemove.length; i++) {
        let style2 = toRemove[i], found2;
        for (let j2 = 0; j2 < matched.length; j2++) {
          let m2 = matched[j2];
          if (m2.step == step - 1 && style2.eq(matched[j2].style))
            found2 = m2;
        }
        if (found2) {
          found2.to = end;
          found2.step = step;
        } else {
          matched.push({ style: style2, from: Math.max(pos, from2), to: end, step });
        }
      }
    }
  });
  matched.forEach((m2) => tr2.step(new RemoveMarkStep(m2.from, m2.to, m2.style)));
}
function clearIncompatible(tr2, pos, parentType, match = parentType.contentMatch, clearNewlines = true) {
  let node = tr2.doc.nodeAt(pos);
  let replSteps = [], cur = pos + 1;
  for (let i = 0; i < node.childCount; i++) {
    let child = node.child(i), end = cur + child.nodeSize;
    let allowed = match.matchType(child.type);
    if (!allowed) {
      replSteps.push(new ReplaceStep(cur, end, Slice.empty));
    } else {
      match = allowed;
      for (let j2 = 0; j2 < child.marks.length; j2++)
        if (!parentType.allowsMarkType(child.marks[j2].type))
          tr2.step(new RemoveMarkStep(cur, end, child.marks[j2]));
      if (clearNewlines && child.isText && parentType.whitespace != "pre") {
        let m2, newline = /\r?\n|\r/g, slice2;
        while (m2 = newline.exec(child.text)) {
          if (!slice2)
            slice2 = new Slice(Fragment.from(parentType.schema.text(" ", parentType.allowedMarks(child.marks))), 0, 0);
          replSteps.push(new ReplaceStep(cur + m2.index, cur + m2.index + m2[0].length, slice2));
        }
      }
    }
    cur = end;
  }
  if (!match.validEnd) {
    let fill = match.fillBefore(Fragment.empty, true);
    tr2.replace(cur, cur, new Slice(fill, 0, 0));
  }
  for (let i = replSteps.length - 1; i >= 0; i--)
    tr2.step(replSteps[i]);
}
function canCut(node, start, end) {
  return (start == 0 || node.canReplace(start, node.childCount)) && (end == node.childCount || node.canReplace(0, end));
}
function liftTarget(range) {
  let parent = range.parent;
  let content = parent.content.cutByIndex(range.startIndex, range.endIndex);
  for (let depth = range.depth, contentBefore = 0, contentAfter = 0; ; --depth) {
    let node = range.$from.node(depth);
    let index2 = range.$from.index(depth) + contentBefore, endIndex = range.$to.indexAfter(depth) - contentAfter;
    if (depth < range.depth && node.canReplace(index2, endIndex, content))
      return depth;
    if (depth == 0 || node.type.spec.isolating || !canCut(node, index2, endIndex))
      break;
    if (index2)
      contentBefore = 1;
    if (endIndex < node.childCount)
      contentAfter = 1;
  }
  return null;
}
function lift$2(tr2, range, target) {
  let { $from, $to, depth } = range;
  let gapStart = $from.before(depth + 1), gapEnd = $to.after(depth + 1);
  let start = gapStart, end = gapEnd;
  let before = Fragment.empty, openStart = 0;
  for (let d2 = depth, splitting = false; d2 > target; d2--)
    if (splitting || $from.index(d2) > 0) {
      splitting = true;
      before = Fragment.from($from.node(d2).copy(before));
      openStart++;
    } else {
      start--;
    }
  let after = Fragment.empty, openEnd = 0;
  for (let d2 = depth, splitting = false; d2 > target; d2--)
    if (splitting || $to.after(d2 + 1) < $to.end(d2)) {
      splitting = true;
      after = Fragment.from($to.node(d2).copy(after));
      openEnd++;
    } else {
      end++;
    }
  tr2.step(new ReplaceAroundStep(start, end, gapStart, gapEnd, new Slice(before.append(after), openStart, openEnd), before.size - openStart, true));
}
function findWrapping(range, nodeType, attrs = null, innerRange = range) {
  let around = findWrappingOutside(range, nodeType);
  let inner = around && findWrappingInside(innerRange, nodeType);
  if (!inner)
    return null;
  return around.map(withAttrs).concat({ type: nodeType, attrs }).concat(inner.map(withAttrs));
}
function withAttrs(type) {
  return { type, attrs: null };
}
function findWrappingOutside(range, type) {
  let { parent, startIndex, endIndex } = range;
  let around = parent.contentMatchAt(startIndex).findWrapping(type);
  if (!around)
    return null;
  let outer = around.length ? around[0] : type;
  return parent.canReplaceWith(startIndex, endIndex, outer) ? around : null;
}
function findWrappingInside(range, type) {
  let { parent, startIndex, endIndex } = range;
  let inner = parent.child(startIndex);
  let inside = type.contentMatch.findWrapping(inner.type);
  if (!inside)
    return null;
  let lastType = inside.length ? inside[inside.length - 1] : type;
  let innerMatch = lastType.contentMatch;
  for (let i = startIndex; innerMatch && i < endIndex; i++)
    innerMatch = innerMatch.matchType(parent.child(i).type);
  if (!innerMatch || !innerMatch.validEnd)
    return null;
  return inside;
}
function wrap(tr2, range, wrappers) {
  let content = Fragment.empty;
  for (let i = wrappers.length - 1; i >= 0; i--) {
    if (content.size) {
      let match = wrappers[i].type.contentMatch.matchFragment(content);
      if (!match || !match.validEnd)
        throw new RangeError("Wrapper type given to Transform.wrap does not form valid content of its parent wrapper");
    }
    content = Fragment.from(wrappers[i].type.create(wrappers[i].attrs, content));
  }
  let start = range.start, end = range.end;
  tr2.step(new ReplaceAroundStep(start, end, start, end, new Slice(content, 0, 0), wrappers.length, true));
}
function setBlockType$1(tr2, from2, to, type, attrs) {
  if (!type.isTextblock)
    throw new RangeError("Type given to setBlockType should be a textblock");
  let mapFrom = tr2.steps.length;
  tr2.doc.nodesBetween(from2, to, (node, pos) => {
    let attrsHere = typeof attrs == "function" ? attrs(node) : attrs;
    if (node.isTextblock && !node.hasMarkup(type, attrsHere) && canChangeType(tr2.doc, tr2.mapping.slice(mapFrom).map(pos), type)) {
      let convertNewlines = null;
      if (type.schema.linebreakReplacement) {
        let pre = type.whitespace == "pre", supportLinebreak = !!type.contentMatch.matchType(type.schema.linebreakReplacement);
        if (pre && !supportLinebreak)
          convertNewlines = false;
        else if (!pre && supportLinebreak)
          convertNewlines = true;
      }
      if (convertNewlines === false)
        replaceLinebreaks(tr2, node, pos, mapFrom);
      clearIncompatible(tr2, tr2.mapping.slice(mapFrom).map(pos, 1), type, void 0, convertNewlines === null);
      let mapping = tr2.mapping.slice(mapFrom);
      let startM = mapping.map(pos, 1), endM = mapping.map(pos + node.nodeSize, 1);
      tr2.step(new ReplaceAroundStep(startM, endM, startM + 1, endM - 1, new Slice(Fragment.from(type.create(attrsHere, null, node.marks)), 0, 0), 1, true));
      if (convertNewlines === true)
        replaceNewlines(tr2, node, pos, mapFrom);
      return false;
    }
  });
}
function replaceNewlines(tr2, node, pos, mapFrom) {
  node.forEach((child, offset2) => {
    if (child.isText) {
      let m2, newline = /\r?\n|\r/g;
      while (m2 = newline.exec(child.text)) {
        let start = tr2.mapping.slice(mapFrom).map(pos + 1 + offset2 + m2.index);
        tr2.replaceWith(start, start + 1, node.type.schema.linebreakReplacement.create());
      }
    }
  });
}
function replaceLinebreaks(tr2, node, pos, mapFrom) {
  node.forEach((child, offset2) => {
    if (child.type == child.type.schema.linebreakReplacement) {
      let start = tr2.mapping.slice(mapFrom).map(pos + 1 + offset2);
      tr2.replaceWith(start, start + 1, node.type.schema.text("\n"));
    }
  });
}
function canChangeType(doc2, pos, type) {
  let $pos = doc2.resolve(pos), index2 = $pos.index();
  return $pos.parent.canReplaceWith(index2, index2 + 1, type);
}
function setNodeMarkup(tr2, pos, type, attrs, marks) {
  let node = tr2.doc.nodeAt(pos);
  if (!node)
    throw new RangeError("No node at given position");
  if (!type)
    type = node.type;
  let newNode = type.create(attrs, null, marks || node.marks);
  if (node.isLeaf)
    return tr2.replaceWith(pos, pos + node.nodeSize, newNode);
  if (!type.validContent(node.content))
    throw new RangeError("Invalid content for node type " + type.name);
  tr2.step(new ReplaceAroundStep(pos, pos + node.nodeSize, pos + 1, pos + node.nodeSize - 1, new Slice(Fragment.from(newNode), 0, 0), 1, true));
}
function canSplit(doc2, pos, depth = 1, typesAfter) {
  let $pos = doc2.resolve(pos), base2 = $pos.depth - depth;
  let innerType = typesAfter && typesAfter[typesAfter.length - 1] || $pos.parent;
  if (base2 < 0 || $pos.parent.type.spec.isolating || !$pos.parent.canReplace($pos.index(), $pos.parent.childCount) || !innerType.type.validContent($pos.parent.content.cutByIndex($pos.index(), $pos.parent.childCount)))
    return false;
  for (let d2 = $pos.depth - 1, i = depth - 2; d2 > base2; d2--, i--) {
    let node = $pos.node(d2), index3 = $pos.index(d2);
    if (node.type.spec.isolating)
      return false;
    let rest = node.content.cutByIndex(index3, node.childCount);
    let overrideChild = typesAfter && typesAfter[i + 1];
    if (overrideChild)
      rest = rest.replaceChild(0, overrideChild.type.create(overrideChild.attrs));
    let after = typesAfter && typesAfter[i] || node;
    if (!node.canReplace(index3 + 1, node.childCount) || !after.type.validContent(rest))
      return false;
  }
  let index2 = $pos.indexAfter(base2);
  let baseType = typesAfter && typesAfter[0];
  return $pos.node(base2).canReplaceWith(index2, index2, baseType ? baseType.type : $pos.node(base2 + 1).type);
}
function split(tr2, pos, depth = 1, typesAfter) {
  let $pos = tr2.doc.resolve(pos), before = Fragment.empty, after = Fragment.empty;
  for (let d2 = $pos.depth, e = $pos.depth - depth, i = depth - 1; d2 > e; d2--, i--) {
    before = Fragment.from($pos.node(d2).copy(before));
    let typeAfter = typesAfter && typesAfter[i];
    after = Fragment.from(typeAfter ? typeAfter.type.create(typeAfter.attrs, after) : $pos.node(d2).copy(after));
  }
  tr2.step(new ReplaceStep(pos, pos, new Slice(before.append(after), depth, depth), true));
}
function canJoin(doc2, pos) {
  let $pos = doc2.resolve(pos), index2 = $pos.index();
  return joinable($pos.nodeBefore, $pos.nodeAfter) && $pos.parent.canReplace(index2, index2 + 1);
}
function canAppendWithSubstitutedLinebreaks(a2, b2) {
  if (!b2.content.size)
    a2.type.compatibleContent(b2.type);
  let match = a2.contentMatchAt(a2.childCount);
  let { linebreakReplacement } = a2.type.schema;
  for (let i = 0; i < b2.childCount; i++) {
    let child = b2.child(i);
    let type = child.type == linebreakReplacement ? a2.type.schema.nodes.text : child.type;
    match = match.matchType(type);
    if (!match)
      return false;
    if (!a2.type.allowsMarks(child.marks))
      return false;
  }
  return match.validEnd;
}
function joinable(a2, b2) {
  return !!(a2 && b2 && !a2.isLeaf && canAppendWithSubstitutedLinebreaks(a2, b2));
}
function joinPoint(doc2, pos, dir = -1) {
  let $pos = doc2.resolve(pos);
  for (let d2 = $pos.depth; ; d2--) {
    let before, after, index2 = $pos.index(d2);
    if (d2 == $pos.depth) {
      before = $pos.nodeBefore;
      after = $pos.nodeAfter;
    } else if (dir > 0) {
      before = $pos.node(d2 + 1);
      index2++;
      after = $pos.node(d2).maybeChild(index2);
    } else {
      before = $pos.node(d2).maybeChild(index2 - 1);
      after = $pos.node(d2 + 1);
    }
    if (before && !before.isTextblock && joinable(before, after) && $pos.node(d2).canReplace(index2, index2 + 1))
      return pos;
    if (d2 == 0)
      break;
    pos = dir < 0 ? $pos.before(d2) : $pos.after(d2);
  }
}
function join(tr2, pos, depth) {
  let convertNewlines = null;
  let { linebreakReplacement } = tr2.doc.type.schema;
  let $before = tr2.doc.resolve(pos - depth), beforeType = $before.node().type;
  if (linebreakReplacement && beforeType.inlineContent) {
    let pre = beforeType.whitespace == "pre";
    let supportLinebreak = !!beforeType.contentMatch.matchType(linebreakReplacement);
    if (pre && !supportLinebreak)
      convertNewlines = false;
    else if (!pre && supportLinebreak)
      convertNewlines = true;
  }
  let mapFrom = tr2.steps.length;
  if (convertNewlines === false) {
    let $after = tr2.doc.resolve(pos + depth);
    replaceLinebreaks(tr2, $after.node(), $after.before(), mapFrom);
  }
  if (beforeType.inlineContent)
    clearIncompatible(tr2, pos + depth - 1, beforeType, $before.node().contentMatchAt($before.index()), convertNewlines == null);
  let mapping = tr2.mapping.slice(mapFrom), start = mapping.map(pos - depth);
  tr2.step(new ReplaceStep(start, mapping.map(pos + depth, -1), Slice.empty, true));
  if (convertNewlines === true) {
    let $full = tr2.doc.resolve(start);
    replaceNewlines(tr2, $full.node(), $full.before(), tr2.steps.length);
  }
  return tr2;
}
function insertPoint(doc2, pos, nodeType) {
  let $pos = doc2.resolve(pos);
  if ($pos.parent.canReplaceWith($pos.index(), $pos.index(), nodeType))
    return pos;
  if ($pos.parentOffset == 0)
    for (let d2 = $pos.depth - 1; d2 >= 0; d2--) {
      let index2 = $pos.index(d2);
      if ($pos.node(d2).canReplaceWith(index2, index2, nodeType))
        return $pos.before(d2 + 1);
      if (index2 > 0)
        return null;
    }
  if ($pos.parentOffset == $pos.parent.content.size)
    for (let d2 = $pos.depth - 1; d2 >= 0; d2--) {
      let index2 = $pos.indexAfter(d2);
      if ($pos.node(d2).canReplaceWith(index2, index2, nodeType))
        return $pos.after(d2 + 1);
      if (index2 < $pos.node(d2).childCount)
        return null;
    }
  return null;
}
function dropPoint(doc2, pos, slice2) {
  let $pos = doc2.resolve(pos);
  if (!slice2.content.size)
    return pos;
  let content = slice2.content;
  for (let i = 0; i < slice2.openStart; i++)
    content = content.firstChild.content;
  for (let pass = 1; pass <= (slice2.openStart == 0 && slice2.size ? 2 : 1); pass++) {
    for (let d2 = $pos.depth; d2 >= 0; d2--) {
      let bias = d2 == $pos.depth ? 0 : $pos.pos <= ($pos.start(d2 + 1) + $pos.end(d2 + 1)) / 2 ? -1 : 1;
      let insertPos = $pos.index(d2) + (bias > 0 ? 1 : 0);
      let parent = $pos.node(d2), fits = false;
      if (pass == 1) {
        fits = parent.canReplace(insertPos, insertPos, content);
      } else {
        let wrapping = parent.contentMatchAt(insertPos).findWrapping(content.firstChild.type);
        fits = wrapping && parent.canReplaceWith(insertPos, insertPos, wrapping[0]);
      }
      if (fits)
        return bias == 0 ? $pos.pos : bias < 0 ? $pos.before(d2 + 1) : $pos.after(d2 + 1);
    }
  }
  return null;
}
function replaceStep(doc2, from2, to = from2, slice2 = Slice.empty) {
  if (from2 == to && !slice2.size)
    return null;
  let $from = doc2.resolve(from2), $to = doc2.resolve(to);
  if (fitsTrivially($from, $to, slice2))
    return new ReplaceStep(from2, to, slice2);
  return new Fitter($from, $to, slice2).fit();
}
function fitsTrivially($from, $to, slice2) {
  return !slice2.openStart && !slice2.openEnd && $from.start() == $to.start() && $from.parent.canReplace($from.index(), $to.index(), slice2.content);
}
class Fitter {
  constructor($from, $to, unplaced) {
    this.$from = $from;
    this.$to = $to;
    this.unplaced = unplaced;
    this.frontier = [];
    this.placed = Fragment.empty;
    for (let i = 0; i <= $from.depth; i++) {
      let node = $from.node(i);
      this.frontier.push({
        type: node.type,
        match: node.contentMatchAt($from.indexAfter(i))
      });
    }
    for (let i = $from.depth; i > 0; i--)
      this.placed = Fragment.from($from.node(i).copy(this.placed));
  }
  get depth() {
    return this.frontier.length - 1;
  }
  fit() {
    while (this.unplaced.size) {
      let fit = this.findFittable();
      if (fit)
        this.placeNodes(fit);
      else
        this.openMore() || this.dropNode();
    }
    let moveInline = this.mustMoveInline(), placedSize = this.placed.size - this.depth - this.$from.depth;
    let $from = this.$from, $to = this.close(moveInline < 0 ? this.$to : $from.doc.resolve(moveInline));
    if (!$to)
      return null;
    let content = this.placed, openStart = $from.depth, openEnd = $to.depth;
    while (openStart && openEnd && content.childCount == 1) {
      content = content.firstChild.content;
      openStart--;
      openEnd--;
    }
    let slice2 = new Slice(content, openStart, openEnd);
    if (moveInline > -1)
      return new ReplaceAroundStep($from.pos, moveInline, this.$to.pos, this.$to.end(), slice2, placedSize);
    if (slice2.size || $from.pos != this.$to.pos)
      return new ReplaceStep($from.pos, $to.pos, slice2);
    return null;
  }
  // Find a position on the start spine of `this.unplaced` that has
  // content that can be moved somewhere on the frontier. Returns two
  // depths, one for the slice and one for the frontier.
  findFittable() {
    let startDepth = this.unplaced.openStart;
    for (let cur = this.unplaced.content, d2 = 0, openEnd = this.unplaced.openEnd; d2 < startDepth; d2++) {
      let node = cur.firstChild;
      if (cur.childCount > 1)
        openEnd = 0;
      if (node.type.spec.isolating && openEnd <= d2) {
        startDepth = d2;
        break;
      }
      cur = node.content;
    }
    for (let pass = 1; pass <= 2; pass++) {
      for (let sliceDepth = pass == 1 ? startDepth : this.unplaced.openStart; sliceDepth >= 0; sliceDepth--) {
        let fragment, parent = null;
        if (sliceDepth) {
          parent = contentAt(this.unplaced.content, sliceDepth - 1).firstChild;
          fragment = parent.content;
        } else {
          fragment = this.unplaced.content;
        }
        let first2 = fragment.firstChild;
        for (let frontierDepth = this.depth; frontierDepth >= 0; frontierDepth--) {
          let { type, match } = this.frontier[frontierDepth], wrap2, inject2 = null;
          if (pass == 1 && (first2 ? match.matchType(first2.type) || (inject2 = match.fillBefore(Fragment.from(first2), false)) : parent && type.compatibleContent(parent.type)))
            return { sliceDepth, frontierDepth, parent, inject: inject2 };
          else if (pass == 2 && first2 && (wrap2 = match.findWrapping(first2.type)))
            return { sliceDepth, frontierDepth, parent, wrap: wrap2 };
          if (parent && match.matchType(parent.type))
            break;
        }
      }
    }
  }
  openMore() {
    let { content, openStart, openEnd } = this.unplaced;
    let inner = contentAt(content, openStart);
    if (!inner.childCount || inner.firstChild.isLeaf)
      return false;
    this.unplaced = new Slice(content, openStart + 1, Math.max(openEnd, inner.size + openStart >= content.size - openEnd ? openStart + 1 : 0));
    return true;
  }
  dropNode() {
    let { content, openStart, openEnd } = this.unplaced;
    let inner = contentAt(content, openStart);
    if (inner.childCount <= 1 && openStart > 0) {
      let openAtEnd = content.size - openStart <= openStart + inner.size;
      this.unplaced = new Slice(dropFromFragment(content, openStart - 1, 1), openStart - 1, openAtEnd ? openStart - 1 : openEnd);
    } else {
      this.unplaced = new Slice(dropFromFragment(content, openStart, 1), openStart, openEnd);
    }
  }
  // Move content from the unplaced slice at `sliceDepth` to the
  // frontier node at `frontierDepth`. Close that frontier node when
  // applicable.
  placeNodes({ sliceDepth, frontierDepth, parent, inject: inject2, wrap: wrap2 }) {
    while (this.depth > frontierDepth)
      this.closeFrontierNode();
    if (wrap2)
      for (let i = 0; i < wrap2.length; i++)
        this.openFrontierNode(wrap2[i]);
    let slice2 = this.unplaced, fragment = parent ? parent.content : slice2.content;
    let openStart = slice2.openStart - sliceDepth;
    let taken = 0, add = [];
    let { match, type } = this.frontier[frontierDepth];
    if (inject2) {
      for (let i = 0; i < inject2.childCount; i++)
        add.push(inject2.child(i));
      match = match.matchFragment(inject2);
    }
    let openEndCount = fragment.size + sliceDepth - (slice2.content.size - slice2.openEnd);
    while (taken < fragment.childCount) {
      let next = fragment.child(taken), matches2 = match.matchType(next.type);
      if (!matches2)
        break;
      taken++;
      if (taken > 1 || openStart == 0 || next.content.size) {
        match = matches2;
        add.push(closeNodeStart(next.mark(type.allowedMarks(next.marks)), taken == 1 ? openStart : 0, taken == fragment.childCount ? openEndCount : -1));
      }
    }
    let toEnd = taken == fragment.childCount;
    if (!toEnd)
      openEndCount = -1;
    this.placed = addToFragment(this.placed, frontierDepth, Fragment.from(add));
    this.frontier[frontierDepth].match = match;
    if (toEnd && openEndCount < 0 && parent && parent.type == this.frontier[this.depth].type && this.frontier.length > 1)
      this.closeFrontierNode();
    for (let i = 0, cur = fragment; i < openEndCount; i++) {
      let node = cur.lastChild;
      this.frontier.push({ type: node.type, match: node.contentMatchAt(node.childCount) });
      cur = node.content;
    }
    this.unplaced = !toEnd ? new Slice(dropFromFragment(slice2.content, sliceDepth, taken), slice2.openStart, slice2.openEnd) : sliceDepth == 0 ? Slice.empty : new Slice(dropFromFragment(slice2.content, sliceDepth - 1, 1), sliceDepth - 1, openEndCount < 0 ? slice2.openEnd : sliceDepth - 1);
  }
  mustMoveInline() {
    if (!this.$to.parent.isTextblock)
      return -1;
    let top = this.frontier[this.depth], level;
    if (!top.type.isTextblock || !contentAfterFits(this.$to, this.$to.depth, top.type, top.match, false) || this.$to.depth == this.depth && (level = this.findCloseLevel(this.$to)) && level.depth == this.depth)
      return -1;
    let { depth } = this.$to, after = this.$to.after(depth);
    while (depth > 1 && after == this.$to.end(--depth))
      ++after;
    return after;
  }
  findCloseLevel($to) {
    scan: for (let i = Math.min(this.depth, $to.depth); i >= 0; i--) {
      let { match, type } = this.frontier[i];
      let dropInner = i < $to.depth && $to.end(i + 1) == $to.pos + ($to.depth - (i + 1));
      let fit = contentAfterFits($to, i, type, match, dropInner);
      if (!fit)
        continue;
      for (let d2 = i - 1; d2 >= 0; d2--) {
        let { match: match2, type: type2 } = this.frontier[d2];
        let matches2 = contentAfterFits($to, d2, type2, match2, true);
        if (!matches2 || matches2.childCount)
          continue scan;
      }
      return { depth: i, fit, move: dropInner ? $to.doc.resolve($to.after(i + 1)) : $to };
    }
  }
  close($to) {
    let close2 = this.findCloseLevel($to);
    if (!close2)
      return null;
    while (this.depth > close2.depth)
      this.closeFrontierNode();
    if (close2.fit.childCount)
      this.placed = addToFragment(this.placed, close2.depth, close2.fit);
    $to = close2.move;
    for (let d2 = close2.depth + 1; d2 <= $to.depth; d2++) {
      let node = $to.node(d2), add = node.type.contentMatch.fillBefore(node.content, true, $to.index(d2));
      this.openFrontierNode(node.type, node.attrs, add);
    }
    return $to;
  }
  openFrontierNode(type, attrs = null, content) {
    let top = this.frontier[this.depth];
    top.match = top.match.matchType(type);
    this.placed = addToFragment(this.placed, this.depth, Fragment.from(type.create(attrs, content)));
    this.frontier.push({ type, match: type.contentMatch });
  }
  closeFrontierNode() {
    let open = this.frontier.pop();
    let add = open.match.fillBefore(Fragment.empty, true);
    if (add.childCount)
      this.placed = addToFragment(this.placed, this.frontier.length, add);
  }
}
function dropFromFragment(fragment, depth, count) {
  if (depth == 0)
    return fragment.cutByIndex(count, fragment.childCount);
  return fragment.replaceChild(0, fragment.firstChild.copy(dropFromFragment(fragment.firstChild.content, depth - 1, count)));
}
function addToFragment(fragment, depth, content) {
  if (depth == 0)
    return fragment.append(content);
  return fragment.replaceChild(fragment.childCount - 1, fragment.lastChild.copy(addToFragment(fragment.lastChild.content, depth - 1, content)));
}
function contentAt(fragment, depth) {
  for (let i = 0; i < depth; i++)
    fragment = fragment.firstChild.content;
  return fragment;
}
function closeNodeStart(node, openStart, openEnd) {
  if (openStart <= 0)
    return node;
  let frag = node.content;
  if (openStart > 1)
    frag = frag.replaceChild(0, closeNodeStart(frag.firstChild, openStart - 1, frag.childCount == 1 ? openEnd - 1 : 0));
  if (openStart > 0) {
    frag = node.type.contentMatch.fillBefore(frag).append(frag);
    if (openEnd <= 0)
      frag = frag.append(node.type.contentMatch.matchFragment(frag).fillBefore(Fragment.empty, true));
  }
  return node.copy(frag);
}
function contentAfterFits($to, depth, type, match, open) {
  let node = $to.node(depth), index2 = open ? $to.indexAfter(depth) : $to.index(depth);
  if (index2 == node.childCount && !type.compatibleContent(node.type))
    return null;
  let fit = match.fillBefore(node.content, true, index2);
  return fit && !invalidMarks(type, node.content, index2) ? fit : null;
}
function invalidMarks(type, fragment, start) {
  for (let i = start; i < fragment.childCount; i++)
    if (!type.allowsMarks(fragment.child(i).marks))
      return true;
  return false;
}
function definesContent(type) {
  return type.spec.defining || type.spec.definingForContent;
}
function replaceRange(tr2, from2, to, slice2) {
  if (!slice2.size)
    return tr2.deleteRange(from2, to);
  let $from = tr2.doc.resolve(from2), $to = tr2.doc.resolve(to);
  if (fitsTrivially($from, $to, slice2))
    return tr2.step(new ReplaceStep(from2, to, slice2));
  let targetDepths = coveredDepths($from, $to);
  if (targetDepths[targetDepths.length - 1] == 0)
    targetDepths.pop();
  let preferredTarget = -($from.depth + 1);
  targetDepths.unshift(preferredTarget);
  for (let d2 = $from.depth, pos = $from.pos - 1; d2 > 0; d2--, pos--) {
    let spec = $from.node(d2).type.spec;
    if (spec.defining || spec.definingAsContext || spec.isolating)
      break;
    if (targetDepths.indexOf(d2) > -1)
      preferredTarget = d2;
    else if ($from.before(d2) == pos)
      targetDepths.splice(1, 0, -d2);
  }
  let preferredTargetIndex = targetDepths.indexOf(preferredTarget);
  let leftNodes = [], preferredDepth = slice2.openStart;
  for (let content = slice2.content, i = 0; ; i++) {
    let node = content.firstChild;
    leftNodes.push(node);
    if (i == slice2.openStart)
      break;
    content = node.content;
  }
  for (let d2 = preferredDepth - 1; d2 >= 0; d2--) {
    let leftNode = leftNodes[d2], def2 = definesContent(leftNode.type);
    if (def2 && !leftNode.sameMarkup($from.node(Math.abs(preferredTarget) - 1)))
      preferredDepth = d2;
    else if (def2 || !leftNode.type.isTextblock)
      break;
  }
  for (let j2 = slice2.openStart; j2 >= 0; j2--) {
    let openDepth = (j2 + preferredDepth + 1) % (slice2.openStart + 1);
    let insert = leftNodes[openDepth];
    if (!insert)
      continue;
    for (let i = 0; i < targetDepths.length; i++) {
      let targetDepth = targetDepths[(i + preferredTargetIndex) % targetDepths.length], expand = true;
      if (targetDepth < 0) {
        expand = false;
        targetDepth = -targetDepth;
      }
      let parent = $from.node(targetDepth - 1), index2 = $from.index(targetDepth - 1);
      if (parent.canReplaceWith(index2, index2, insert.type, insert.marks))
        return tr2.replace($from.before(targetDepth), expand ? $to.after(targetDepth) : to, new Slice(closeFragment(slice2.content, 0, slice2.openStart, openDepth), openDepth, slice2.openEnd));
    }
  }
  let startSteps = tr2.steps.length;
  for (let i = targetDepths.length - 1; i >= 0; i--) {
    tr2.replace(from2, to, slice2);
    if (tr2.steps.length > startSteps)
      break;
    let depth = targetDepths[i];
    if (depth < 0)
      continue;
    from2 = $from.before(depth);
    to = $to.after(depth);
  }
}
function closeFragment(fragment, depth, oldOpen, newOpen, parent) {
  if (depth < oldOpen) {
    let first2 = fragment.firstChild;
    fragment = fragment.replaceChild(0, first2.copy(closeFragment(first2.content, depth + 1, oldOpen, newOpen, first2)));
  }
  if (depth > newOpen) {
    let match = parent.contentMatchAt(0);
    let start = match.fillBefore(fragment).append(fragment);
    fragment = start.append(match.matchFragment(start).fillBefore(Fragment.empty, true));
  }
  return fragment;
}
function replaceRangeWith(tr2, from2, to, node) {
  if (!node.isInline && from2 == to && tr2.doc.resolve(from2).parent.content.size) {
    let point = insertPoint(tr2.doc, from2, node.type);
    if (point != null)
      from2 = to = point;
  }
  tr2.replaceRange(from2, to, new Slice(Fragment.from(node), 0, 0));
}
function deleteRange$1(tr2, from2, to) {
  let $from = tr2.doc.resolve(from2), $to = tr2.doc.resolve(to);
  let covered = coveredDepths($from, $to);
  for (let i = 0; i < covered.length; i++) {
    let depth = covered[i], last = i == covered.length - 1;
    if (last && depth == 0 || $from.node(depth).type.contentMatch.validEnd)
      return tr2.delete($from.start(depth), $to.end(depth));
    if (depth > 0 && (last || $from.node(depth - 1).canReplace($from.index(depth - 1), $to.indexAfter(depth - 1))))
      return tr2.delete($from.before(depth), $to.after(depth));
  }
  for (let d2 = 1; d2 <= $from.depth && d2 <= $to.depth; d2++) {
    if (from2 - $from.start(d2) == $from.depth - d2 && to > $from.end(d2) && $to.end(d2) - to != $to.depth - d2 && $from.start(d2 - 1) == $to.start(d2 - 1) && $from.node(d2 - 1).canReplace($from.index(d2 - 1), $to.index(d2 - 1)))
      return tr2.delete($from.before(d2), to);
  }
  tr2.delete(from2, to);
}
function coveredDepths($from, $to) {
  let result = [], minDepth = Math.min($from.depth, $to.depth);
  for (let d2 = minDepth; d2 >= 0; d2--) {
    let start = $from.start(d2);
    if (start < $from.pos - ($from.depth - d2) || $to.end(d2) > $to.pos + ($to.depth - d2) || $from.node(d2).type.spec.isolating || $to.node(d2).type.spec.isolating)
      break;
    if (start == $to.start(d2) || d2 == $from.depth && d2 == $to.depth && $from.parent.inlineContent && $to.parent.inlineContent && d2 && $to.start(d2 - 1) == start - 1)
      result.push(d2);
  }
  return result;
}
class AttrStep extends Step {
  /**
  Construct an attribute step.
  */
  constructor(pos, attr, value) {
    super();
    this.pos = pos;
    this.attr = attr;
    this.value = value;
  }
  apply(doc2) {
    let node = doc2.nodeAt(this.pos);
    if (!node)
      return StepResult.fail("No node at attribute step's position");
    let attrs = /* @__PURE__ */ Object.create(null);
    for (let name in node.attrs)
      attrs[name] = node.attrs[name];
    attrs[this.attr] = this.value;
    let updated = node.type.create(attrs, null, node.marks);
    return StepResult.fromReplace(doc2, this.pos, this.pos + 1, new Slice(Fragment.from(updated), 0, node.isLeaf ? 0 : 1));
  }
  getMap() {
    return StepMap.empty;
  }
  invert(doc2) {
    return new AttrStep(this.pos, this.attr, doc2.nodeAt(this.pos).attrs[this.attr]);
  }
  map(mapping) {
    let pos = mapping.mapResult(this.pos, 1);
    return pos.deletedAfter ? null : new AttrStep(pos.pos, this.attr, this.value);
  }
  toJSON() {
    return { stepType: "attr", pos: this.pos, attr: this.attr, value: this.value };
  }
  static fromJSON(schema, json2) {
    if (typeof json2.pos != "number" || typeof json2.attr != "string")
      throw new RangeError("Invalid input for AttrStep.fromJSON");
    return new AttrStep(json2.pos, json2.attr, json2.value);
  }
}
Step.jsonID("attr", AttrStep);
class DocAttrStep extends Step {
  /**
  Construct an attribute step.
  */
  constructor(attr, value) {
    super();
    this.attr = attr;
    this.value = value;
  }
  apply(doc2) {
    let attrs = /* @__PURE__ */ Object.create(null);
    for (let name in doc2.attrs)
      attrs[name] = doc2.attrs[name];
    attrs[this.attr] = this.value;
    let updated = doc2.type.create(attrs, doc2.content, doc2.marks);
    return StepResult.ok(updated);
  }
  getMap() {
    return StepMap.empty;
  }
  invert(doc2) {
    return new DocAttrStep(this.attr, doc2.attrs[this.attr]);
  }
  map(mapping) {
    return this;
  }
  toJSON() {
    return { stepType: "docAttr", attr: this.attr, value: this.value };
  }
  static fromJSON(schema, json2) {
    if (typeof json2.attr != "string")
      throw new RangeError("Invalid input for DocAttrStep.fromJSON");
    return new DocAttrStep(json2.attr, json2.value);
  }
}
Step.jsonID("docAttr", DocAttrStep);
let TransformError = class extends Error {
};
TransformError = function TransformError2(message) {
  let err = Error.call(this, message);
  err.__proto__ = TransformError2.prototype;
  return err;
};
TransformError.prototype = Object.create(Error.prototype);
TransformError.prototype.constructor = TransformError;
TransformError.prototype.name = "TransformError";
class Transform {
  /**
  Create a transform that starts with the given document.
  */
  constructor(doc2) {
    this.doc = doc2;
    this.steps = [];
    this.docs = [];
    this.mapping = new Mapping();
  }
  /**
  The starting document.
  */
  get before() {
    return this.docs.length ? this.docs[0] : this.doc;
  }
  /**
  Apply a new step in this transform, saving the result. Throws an
  error when the step fails.
  */
  step(step) {
    let result = this.maybeStep(step);
    if (result.failed)
      throw new TransformError(result.failed);
    return this;
  }
  /**
  Try to apply a step in this transformation, ignoring it if it
  fails. Returns the step result.
  */
  maybeStep(step) {
    let result = step.apply(this.doc);
    if (!result.failed)
      this.addStep(step, result.doc);
    return result;
  }
  /**
  True when the document has been changed (when there are any
  steps).
  */
  get docChanged() {
    return this.steps.length > 0;
  }
  /**
  Return a single range, in post-transform document positions,
  that covers all content changed by this transform. Returns null
  if no replacements are made. Note that this will ignore changes
  that add/remove marks without replacing the underlying content.
  */
  changedRange() {
    let from2 = 1e9, to = -1e9;
    for (let i = 0; i < this.mapping.maps.length; i++) {
      let map2 = this.mapping.maps[i];
      if (i) {
        from2 = map2.map(from2, 1);
        to = map2.map(to, -1);
      }
      map2.forEach((_f, _t2, fromB, toB) => {
        from2 = Math.min(from2, fromB);
        to = Math.max(to, toB);
      });
    }
    return from2 == 1e9 ? null : { from: from2, to };
  }
  /**
  @internal
  */
  addStep(step, doc2) {
    this.docs.push(this.doc);
    this.steps.push(step);
    this.mapping.appendMap(step.getMap());
    this.doc = doc2;
  }
  /**
  Replace the part of the document between `from` and `to` with the
  given `slice`.
  */
  replace(from2, to = from2, slice2 = Slice.empty) {
    let step = replaceStep(this.doc, from2, to, slice2);
    if (step)
      this.step(step);
    return this;
  }
  /**
  Replace the given range with the given content, which may be a
  fragment, node, or array of nodes.
  */
  replaceWith(from2, to, content) {
    return this.replace(from2, to, new Slice(Fragment.from(content), 0, 0));
  }
  /**
  Delete the content between the given positions.
  */
  delete(from2, to) {
    return this.replace(from2, to, Slice.empty);
  }
  /**
  Insert the given content at the given position.
  */
  insert(pos, content) {
    return this.replaceWith(pos, pos, content);
  }
  /**
  Replace a range of the document with a given slice, using
  `from`, `to`, and the slice's
  [`openStart`](https://prosemirror.net/docs/ref/#model.Slice.openStart) property as hints, rather
  than fixed start and end points. This method may grow the
  replaced area or close open nodes in the slice in order to get a
  fit that is more in line with WYSIWYG expectations, by dropping
  fully covered parent nodes of the replaced region when they are
  marked [non-defining as
  context](https://prosemirror.net/docs/ref/#model.NodeSpec.definingAsContext), or including an
  open parent node from the slice that _is_ marked as [defining
  its content](https://prosemirror.net/docs/ref/#model.NodeSpec.definingForContent).
  
  This is the method, for example, to handle paste. The similar
  [`replace`](https://prosemirror.net/docs/ref/#transform.Transform.replace) method is a more
  primitive tool which will _not_ move the start and end of its given
  range, and is useful in situations where you need more precise
  control over what happens.
  */
  replaceRange(from2, to, slice2) {
    replaceRange(this, from2, to, slice2);
    return this;
  }
  /**
  Replace the given range with a node, but use `from` and `to` as
  hints, rather than precise positions. When from and to are the same
  and are at the start or end of a parent node in which the given
  node doesn't fit, this method may _move_ them out towards a parent
  that does allow the given node to be placed. When the given range
  completely covers a parent node, this method may completely replace
  that parent node.
  */
  replaceRangeWith(from2, to, node) {
    replaceRangeWith(this, from2, to, node);
    return this;
  }
  /**
  Delete the given range, expanding it to cover fully covered
  parent nodes until a valid replace is found.
  */
  deleteRange(from2, to) {
    deleteRange$1(this, from2, to);
    return this;
  }
  /**
  Split the content in the given range off from its parent, if there
  is sibling content before or after it, and move it up the tree to
  the depth specified by `target`. You'll probably want to use
  [`liftTarget`](https://prosemirror.net/docs/ref/#transform.liftTarget) to compute `target`, to make
  sure the lift is valid.
  */
  lift(range, target) {
    lift$2(this, range, target);
    return this;
  }
  /**
  Join the blocks around the given position. If depth is 2, their
  last and first siblings are also joined, and so on.
  */
  join(pos, depth = 1) {
    join(this, pos, depth);
    return this;
  }
  /**
  Wrap the given [range](https://prosemirror.net/docs/ref/#model.NodeRange) in the given set of wrappers.
  The wrappers are assumed to be valid in this position, and should
  probably be computed with [`findWrapping`](https://prosemirror.net/docs/ref/#transform.findWrapping).
  */
  wrap(range, wrappers) {
    wrap(this, range, wrappers);
    return this;
  }
  /**
  Set the type of all textblocks (partly) between `from` and `to` to
  the given node type with the given attributes.
  */
  setBlockType(from2, to = from2, type, attrs = null) {
    setBlockType$1(this, from2, to, type, attrs);
    return this;
  }
  /**
  Change the type, attributes, and/or marks of the node at `pos`.
  When `type` isn't given, the existing node type is preserved,
  */
  setNodeMarkup(pos, type, attrs = null, marks) {
    setNodeMarkup(this, pos, type, attrs, marks);
    return this;
  }
  /**
  Set a single attribute on a given node to a new value.
  The `pos` addresses the document content. Use `setDocAttribute`
  to set attributes on the document itself.
  */
  setNodeAttribute(pos, attr, value) {
    this.step(new AttrStep(pos, attr, value));
    return this;
  }
  /**
  Set a single attribute on the document to a new value.
  */
  setDocAttribute(attr, value) {
    this.step(new DocAttrStep(attr, value));
    return this;
  }
  /**
  Add a mark to the node at position `pos`.
  */
  addNodeMark(pos, mark) {
    this.step(new AddNodeMarkStep(pos, mark));
    return this;
  }
  /**
  Remove a mark (or all marks of the given type) from the node at
  position `pos`.
  */
  removeNodeMark(pos, mark) {
    let node = this.doc.nodeAt(pos);
    if (!node)
      throw new RangeError("No node at position " + pos);
    if (mark instanceof Mark$1) {
      if (mark.isInSet(node.marks))
        this.step(new RemoveNodeMarkStep(pos, mark));
    } else {
      let set = node.marks, found2, steps = [];
      while (found2 = mark.isInSet(set)) {
        steps.push(new RemoveNodeMarkStep(pos, found2));
        set = found2.removeFromSet(set);
      }
      for (let i = steps.length - 1; i >= 0; i--)
        this.step(steps[i]);
    }
    return this;
  }
  /**
  Split the node at the given position, and optionally, if `depth` is
  greater than one, any number of nodes above that. By default, the
  parts split off will inherit the node type of the original node.
  This can be changed by passing an array of types and attributes to
  use after the split (with the outermost nodes coming first).
  */
  split(pos, depth = 1, typesAfter) {
    split(this, pos, depth, typesAfter);
    return this;
  }
  /**
  Add the given mark to the inline content between `from` and `to`.
  */
  addMark(from2, to, mark) {
    addMark(this, from2, to, mark);
    return this;
  }
  /**
  Remove marks from inline nodes between `from` and `to`. When
  `mark` is a single mark, remove precisely that mark. When it is
  a mark type, remove all marks of that type. When it is null,
  remove all marks of any type.
  */
  removeMark(from2, to, mark) {
    removeMark(this, from2, to, mark);
    return this;
  }
  /**
  Removes all marks and nodes from the content of the node at
  `pos` that don't match the given new parent node type. Accepts
  an optional starting [content match](https://prosemirror.net/docs/ref/#model.ContentMatch) as
  third argument.
  */
  clearIncompatible(pos, parentType, match) {
    clearIncompatible(this, pos, parentType, match);
    return this;
  }
}
const classesById = /* @__PURE__ */ Object.create(null);
class Selection {
  /**
  Initialize a selection with the head and anchor and ranges. If no
  ranges are given, constructs a single range across `$anchor` and
  `$head`.
  */
  constructor($anchor, $head, ranges) {
    this.$anchor = $anchor;
    this.$head = $head;
    this.ranges = ranges || [new SelectionRange($anchor.min($head), $anchor.max($head))];
  }
  /**
  The selection's anchor, as an unresolved position.
  */
  get anchor() {
    return this.$anchor.pos;
  }
  /**
  The selection's head.
  */
  get head() {
    return this.$head.pos;
  }
  /**
  The lower bound of the selection's main range.
  */
  get from() {
    return this.$from.pos;
  }
  /**
  The upper bound of the selection's main range.
  */
  get to() {
    return this.$to.pos;
  }
  /**
  The resolved lower  bound of the selection's main range.
  */
  get $from() {
    return this.ranges[0].$from;
  }
  /**
  The resolved upper bound of the selection's main range.
  */
  get $to() {
    return this.ranges[0].$to;
  }
  /**
  Indicates whether the selection contains any content.
  */
  get empty() {
    let ranges = this.ranges;
    for (let i = 0; i < ranges.length; i++)
      if (ranges[i].$from.pos != ranges[i].$to.pos)
        return false;
    return true;
  }
  /**
  Get the content of this selection as a slice.
  */
  content() {
    return this.$from.doc.slice(this.from, this.to, true);
  }
  /**
  Replace the selection with a slice or, if no slice is given,
  delete the selection. Will append to the given transaction.
  */
  replace(tr2, content = Slice.empty) {
    let lastNode = content.content.lastChild, lastParent = null;
    for (let i = 0; i < content.openEnd; i++) {
      lastParent = lastNode;
      lastNode = lastNode.lastChild;
    }
    let mapFrom = tr2.steps.length, ranges = this.ranges;
    for (let i = 0; i < ranges.length; i++) {
      let { $from, $to } = ranges[i], mapping = tr2.mapping.slice(mapFrom);
      tr2.replaceRange(mapping.map($from.pos), mapping.map($to.pos), i ? Slice.empty : content);
      if (i == 0)
        selectionToInsertionEnd$1(tr2, mapFrom, (lastNode ? lastNode.isInline : lastParent && lastParent.isTextblock) ? -1 : 1);
    }
  }
  /**
  Replace the selection with the given node, appending the changes
  to the given transaction.
  */
  replaceWith(tr2, node) {
    let mapFrom = tr2.steps.length, ranges = this.ranges;
    for (let i = 0; i < ranges.length; i++) {
      let { $from, $to } = ranges[i], mapping = tr2.mapping.slice(mapFrom);
      let from2 = mapping.map($from.pos), to = mapping.map($to.pos);
      if (i) {
        tr2.deleteRange(from2, to);
      } else {
        tr2.replaceRangeWith(from2, to, node);
        selectionToInsertionEnd$1(tr2, mapFrom, node.isInline ? -1 : 1);
      }
    }
  }
  /**
  Find a valid cursor or leaf node selection starting at the given
  position and searching back if `dir` is negative, and forward if
  positive. When `textOnly` is true, only consider cursor
  selections. Will return null when no valid selection position is
  found.
  */
  static findFrom($pos, dir, textOnly = false) {
    let inner = $pos.parent.inlineContent ? new TextSelection($pos) : findSelectionIn($pos.node(0), $pos.parent, $pos.pos, $pos.index(), dir, textOnly);
    if (inner)
      return inner;
    for (let depth = $pos.depth - 1; depth >= 0; depth--) {
      let found2 = dir < 0 ? findSelectionIn($pos.node(0), $pos.node(depth), $pos.before(depth + 1), $pos.index(depth), dir, textOnly) : findSelectionIn($pos.node(0), $pos.node(depth), $pos.after(depth + 1), $pos.index(depth) + 1, dir, textOnly);
      if (found2)
        return found2;
    }
    return null;
  }
  /**
  Find a valid cursor or leaf node selection near the given
  position. Searches forward first by default, but if `bias` is
  negative, it will search backwards first.
  */
  static near($pos, bias = 1) {
    return this.findFrom($pos, bias) || this.findFrom($pos, -bias) || new AllSelection($pos.node(0));
  }
  /**
  Find the cursor or leaf node selection closest to the start of
  the given document. Will return an
  [`AllSelection`](https://prosemirror.net/docs/ref/#state.AllSelection) if no valid position
  exists.
  */
  static atStart(doc2) {
    return findSelectionIn(doc2, doc2, 0, 0, 1) || new AllSelection(doc2);
  }
  /**
  Find the cursor or leaf node selection closest to the end of the
  given document.
  */
  static atEnd(doc2) {
    return findSelectionIn(doc2, doc2, doc2.content.size, doc2.childCount, -1) || new AllSelection(doc2);
  }
  /**
  Deserialize the JSON representation of a selection. Must be
  implemented for custom classes (as a static class method).
  */
  static fromJSON(doc2, json2) {
    if (!json2 || !json2.type)
      throw new RangeError("Invalid input for Selection.fromJSON");
    let cls = classesById[json2.type];
    if (!cls)
      throw new RangeError(`No selection type ${json2.type} defined`);
    return cls.fromJSON(doc2, json2);
  }
  /**
  To be able to deserialize selections from JSON, custom selection
  classes must register themselves with an ID string, so that they
  can be disambiguated. Try to pick something that's unlikely to
  clash with classes from other modules.
  */
  static jsonID(id, selectionClass) {
    if (id in classesById)
      throw new RangeError("Duplicate use of selection JSON ID " + id);
    classesById[id] = selectionClass;
    selectionClass.prototype.jsonID = id;
    return selectionClass;
  }
  /**
  Get a [bookmark](https://prosemirror.net/docs/ref/#state.SelectionBookmark) for this selection,
  which is a value that can be mapped without having access to a
  current document, and later resolved to a real selection for a
  given document again. (This is used mostly by the history to
  track and restore old selections.) The default implementation of
  this method just converts the selection to a text selection and
  returns the bookmark for that.
  */
  getBookmark() {
    return TextSelection.between(this.$anchor, this.$head).getBookmark();
  }
}
Selection.prototype.visible = true;
class SelectionRange {
  /**
  Create a range.
  */
  constructor($from, $to) {
    this.$from = $from;
    this.$to = $to;
  }
}
let warnedAboutTextSelection = false;
function checkTextSelection($pos) {
  if (!warnedAboutTextSelection && !$pos.parent.inlineContent) {
    warnedAboutTextSelection = true;
    console["warn"]("TextSelection endpoint not pointing into a node with inline content (" + $pos.parent.type.name + ")");
  }
}
class TextSelection extends Selection {
  /**
  Construct a text selection between the given points.
  */
  constructor($anchor, $head = $anchor) {
    checkTextSelection($anchor);
    checkTextSelection($head);
    super($anchor, $head);
  }
  /**
  Returns a resolved position if this is a cursor selection (an
  empty text selection), and null otherwise.
  */
  get $cursor() {
    return this.$anchor.pos == this.$head.pos ? this.$head : null;
  }
  map(doc2, mapping) {
    let $head = doc2.resolve(mapping.map(this.head));
    if (!$head.parent.inlineContent)
      return Selection.near($head);
    let $anchor = doc2.resolve(mapping.map(this.anchor));
    return new TextSelection($anchor.parent.inlineContent ? $anchor : $head, $head);
  }
  replace(tr2, content = Slice.empty) {
    super.replace(tr2, content);
    if (content == Slice.empty) {
      let marks = this.$from.marksAcross(this.$to);
      if (marks)
        tr2.ensureMarks(marks);
    }
  }
  eq(other) {
    return other instanceof TextSelection && other.anchor == this.anchor && other.head == this.head;
  }
  getBookmark() {
    return new TextBookmark(this.anchor, this.head);
  }
  toJSON() {
    return { type: "text", anchor: this.anchor, head: this.head };
  }
  /**
  @internal
  */
  static fromJSON(doc2, json2) {
    if (typeof json2.anchor != "number" || typeof json2.head != "number")
      throw new RangeError("Invalid input for TextSelection.fromJSON");
    return new TextSelection(doc2.resolve(json2.anchor), doc2.resolve(json2.head));
  }
  /**
  Create a text selection from non-resolved positions.
  */
  static create(doc2, anchor, head = anchor) {
    let $anchor = doc2.resolve(anchor);
    return new this($anchor, head == anchor ? $anchor : doc2.resolve(head));
  }
  /**
  Return a text selection that spans the given positions or, if
  they aren't text positions, find a text selection near them.
  `bias` determines whether the method searches forward (default)
  or backwards (negative number) first. Will fall back to calling
  [`Selection.near`](https://prosemirror.net/docs/ref/#state.Selection^near) when the document
  doesn't contain a valid text position.
  */
  static between($anchor, $head, bias) {
    let dPos = $anchor.pos - $head.pos;
    if (!bias || dPos)
      bias = dPos >= 0 ? 1 : -1;
    if (!$head.parent.inlineContent) {
      let found2 = Selection.findFrom($head, bias, true) || Selection.findFrom($head, -bias, true);
      if (found2)
        $head = found2.$head;
      else
        return Selection.near($head, bias);
    }
    if (!$anchor.parent.inlineContent) {
      if (dPos == 0) {
        $anchor = $head;
      } else {
        $anchor = (Selection.findFrom($anchor, -bias, true) || Selection.findFrom($anchor, bias, true)).$anchor;
        if ($anchor.pos < $head.pos != dPos < 0)
          $anchor = $head;
      }
    }
    return new TextSelection($anchor, $head);
  }
}
Selection.jsonID("text", TextSelection);
class TextBookmark {
  constructor(anchor, head) {
    this.anchor = anchor;
    this.head = head;
  }
  map(mapping) {
    return new TextBookmark(mapping.map(this.anchor), mapping.map(this.head));
  }
  resolve(doc2) {
    return TextSelection.between(doc2.resolve(this.anchor), doc2.resolve(this.head));
  }
}
class NodeSelection extends Selection {
  /**
  Create a node selection. Does not verify the validity of its
  argument.
  */
  constructor($pos) {
    let node = $pos.nodeAfter;
    let $end = $pos.node(0).resolve($pos.pos + node.nodeSize);
    super($pos, $end);
    this.node = node;
  }
  map(doc2, mapping) {
    let { deleted, pos } = mapping.mapResult(this.anchor);
    let $pos = doc2.resolve(pos);
    if (deleted)
      return Selection.near($pos);
    return new NodeSelection($pos);
  }
  content() {
    return new Slice(Fragment.from(this.node), 0, 0);
  }
  eq(other) {
    return other instanceof NodeSelection && other.anchor == this.anchor;
  }
  toJSON() {
    return { type: "node", anchor: this.anchor };
  }
  getBookmark() {
    return new NodeBookmark(this.anchor);
  }
  /**
  @internal
  */
  static fromJSON(doc2, json2) {
    if (typeof json2.anchor != "number")
      throw new RangeError("Invalid input for NodeSelection.fromJSON");
    return new NodeSelection(doc2.resolve(json2.anchor));
  }
  /**
  Create a node selection from non-resolved positions.
  */
  static create(doc2, from2) {
    return new NodeSelection(doc2.resolve(from2));
  }
  /**
  Determines whether the given node may be selected as a node
  selection.
  */
  static isSelectable(node) {
    return !node.isText && node.type.spec.selectable !== false;
  }
}
NodeSelection.prototype.visible = false;
Selection.jsonID("node", NodeSelection);
class NodeBookmark {
  constructor(anchor) {
    this.anchor = anchor;
  }
  map(mapping) {
    let { deleted, pos } = mapping.mapResult(this.anchor);
    return deleted ? new TextBookmark(pos, pos) : new NodeBookmark(pos);
  }
  resolve(doc2) {
    let $pos = doc2.resolve(this.anchor), node = $pos.nodeAfter;
    if (node && NodeSelection.isSelectable(node))
      return new NodeSelection($pos);
    return Selection.near($pos);
  }
}
class AllSelection extends Selection {
  /**
  Create an all-selection over the given document.
  */
  constructor(doc2) {
    super(doc2.resolve(0), doc2.resolve(doc2.content.size));
  }
  replace(tr2, content = Slice.empty) {
    if (content == Slice.empty) {
      tr2.delete(0, tr2.doc.content.size);
      let sel = Selection.atStart(tr2.doc);
      if (!sel.eq(tr2.selection))
        tr2.setSelection(sel);
    } else {
      super.replace(tr2, content);
    }
  }
  toJSON() {
    return { type: "all" };
  }
  /**
  @internal
  */
  static fromJSON(doc2) {
    return new AllSelection(doc2);
  }
  map(doc2) {
    return new AllSelection(doc2);
  }
  eq(other) {
    return other instanceof AllSelection;
  }
  getBookmark() {
    return AllBookmark;
  }
}
Selection.jsonID("all", AllSelection);
const AllBookmark = {
  map() {
    return this;
  },
  resolve(doc2) {
    return new AllSelection(doc2);
  }
};
function findSelectionIn(doc2, node, pos, index2, dir, text = false) {
  if (node.inlineContent)
    return TextSelection.create(doc2, pos);
  for (let i = index2 - (dir > 0 ? 0 : 1); dir > 0 ? i < node.childCount : i >= 0; i += dir) {
    let child = node.child(i);
    if (!child.isAtom) {
      let inner = findSelectionIn(doc2, child, pos + dir, dir < 0 ? child.childCount : 0, dir, text);
      if (inner)
        return inner;
    } else if (!text && NodeSelection.isSelectable(child)) {
      return NodeSelection.create(doc2, pos - (dir < 0 ? child.nodeSize : 0));
    }
    pos += child.nodeSize * dir;
  }
  return null;
}
function selectionToInsertionEnd$1(tr2, startLen, bias) {
  let last = tr2.steps.length - 1;
  if (last < startLen)
    return;
  let step = tr2.steps[last];
  if (!(step instanceof ReplaceStep || step instanceof ReplaceAroundStep))
    return;
  let map2 = tr2.mapping.maps[last], end;
  map2.forEach((_from, _to, _newFrom, newTo) => {
    if (end == null)
      end = newTo;
  });
  tr2.setSelection(Selection.near(tr2.doc.resolve(end), bias));
}
const UPDATED_SEL = 1, UPDATED_MARKS = 2, UPDATED_SCROLL = 4;
class Transaction extends Transform {
  /**
  @internal
  */
  constructor(state) {
    super(state.doc);
    this.curSelectionFor = 0;
    this.updated = 0;
    this.meta = /* @__PURE__ */ Object.create(null);
    this.time = Date.now();
    this.curSelection = state.selection;
    this.storedMarks = state.storedMarks;
  }
  /**
  The transaction's current selection. This defaults to the editor
  selection [mapped](https://prosemirror.net/docs/ref/#state.Selection.map) through the steps in the
  transaction, but can be overwritten with
  [`setSelection`](https://prosemirror.net/docs/ref/#state.Transaction.setSelection).
  */
  get selection() {
    if (this.curSelectionFor < this.steps.length) {
      this.curSelection = this.curSelection.map(this.doc, this.mapping.slice(this.curSelectionFor));
      this.curSelectionFor = this.steps.length;
    }
    return this.curSelection;
  }
  /**
  Update the transaction's current selection. Will determine the
  selection that the editor gets when the transaction is applied.
  */
  setSelection(selection) {
    if (selection.$from.doc != this.doc)
      throw new RangeError("Selection passed to setSelection must point at the current document");
    this.curSelection = selection;
    this.curSelectionFor = this.steps.length;
    this.updated = (this.updated | UPDATED_SEL) & ~UPDATED_MARKS;
    this.storedMarks = null;
    return this;
  }
  /**
  Whether the selection was explicitly updated by this transaction.
  */
  get selectionSet() {
    return (this.updated & UPDATED_SEL) > 0;
  }
  /**
  Set the current stored marks.
  */
  setStoredMarks(marks) {
    this.storedMarks = marks;
    this.updated |= UPDATED_MARKS;
    return this;
  }
  /**
  Make sure the current stored marks or, if that is null, the marks
  at the selection, match the given set of marks. Does nothing if
  this is already the case.
  */
  ensureMarks(marks) {
    if (!Mark$1.sameSet(this.storedMarks || this.selection.$from.marks(), marks))
      this.setStoredMarks(marks);
    return this;
  }
  /**
  Add a mark to the set of stored marks.
  */
  addStoredMark(mark) {
    return this.ensureMarks(mark.addToSet(this.storedMarks || this.selection.$head.marks()));
  }
  /**
  Remove a mark or mark type from the set of stored marks.
  */
  removeStoredMark(mark) {
    return this.ensureMarks(mark.removeFromSet(this.storedMarks || this.selection.$head.marks()));
  }
  /**
  Whether the stored marks were explicitly set for this transaction.
  */
  get storedMarksSet() {
    return (this.updated & UPDATED_MARKS) > 0;
  }
  /**
  @internal
  */
  addStep(step, doc2) {
    super.addStep(step, doc2);
    this.updated = this.updated & ~UPDATED_MARKS;
    this.storedMarks = null;
  }
  /**
  Update the timestamp for the transaction.
  */
  setTime(time) {
    this.time = time;
    return this;
  }
  /**
  Replace the current selection with the given slice.
  */
  replaceSelection(slice2) {
    this.selection.replace(this, slice2);
    return this;
  }
  /**
  Replace the selection with the given node. When `inheritMarks` is
  true and the content is inline, it inherits the marks from the
  place where it is inserted.
  */
  replaceSelectionWith(node, inheritMarks = true) {
    let selection = this.selection;
    if (inheritMarks)
      node = node.mark(this.storedMarks || (selection.empty ? selection.$from.marks() : selection.$from.marksAcross(selection.$to) || Mark$1.none));
    selection.replaceWith(this, node);
    return this;
  }
  /**
  Delete the selection.
  */
  deleteSelection() {
    this.selection.replace(this);
    return this;
  }
  /**
  Replace the given range, or the selection if no range is given,
  with a text node containing the given string.
  */
  insertText(text, from2, to) {
    let schema = this.doc.type.schema;
    if (from2 == null) {
      if (!text)
        return this.deleteSelection();
      return this.replaceSelectionWith(schema.text(text), true);
    } else {
      if (to == null)
        to = from2;
      if (!text)
        return this.deleteRange(from2, to);
      let marks = this.storedMarks;
      if (!marks) {
        let $from = this.doc.resolve(from2);
        marks = to == from2 ? $from.marks() : $from.marksAcross(this.doc.resolve(to));
      }
      this.replaceRangeWith(from2, to, schema.text(text, marks));
      if (!this.selection.empty && this.selection.to == from2 + text.length)
        this.setSelection(Selection.near(this.selection.$to));
      return this;
    }
  }
  /**
  Store a metadata property in this transaction, keyed either by
  name or by plugin.
  */
  setMeta(key, value) {
    this.meta[typeof key == "string" ? key : key.key] = value;
    return this;
  }
  /**
  Retrieve a metadata property for a given name or plugin.
  */
  getMeta(key) {
    return this.meta[typeof key == "string" ? key : key.key];
  }
  /**
  Returns true if this transaction doesn't contain any metadata,
  and can thus safely be extended.
  */
  get isGeneric() {
    for (let _2 in this.meta)
      return false;
    return true;
  }
  /**
  Indicate that the editor should scroll the selection into view
  when updated to the state produced by this transaction.
  */
  scrollIntoView() {
    this.updated |= UPDATED_SCROLL;
    return this;
  }
  /**
  True when this transaction has had `scrollIntoView` called on it.
  */
  get scrolledIntoView() {
    return (this.updated & UPDATED_SCROLL) > 0;
  }
}
function bind(f2, self2) {
  return !self2 || !f2 ? f2 : f2.bind(self2);
}
class FieldDesc {
  constructor(name, desc, self2) {
    this.name = name;
    this.init = bind(desc.init, self2);
    this.apply = bind(desc.apply, self2);
  }
}
const baseFields = [
  new FieldDesc("doc", {
    init(config) {
      return config.doc || config.schema.topNodeType.createAndFill();
    },
    apply(tr2) {
      return tr2.doc;
    }
  }),
  new FieldDesc("selection", {
    init(config, instance) {
      return config.selection || Selection.atStart(instance.doc);
    },
    apply(tr2) {
      return tr2.selection;
    }
  }),
  new FieldDesc("storedMarks", {
    init(config) {
      return config.storedMarks || null;
    },
    apply(tr2, _marks, _old, state) {
      return state.selection.$cursor ? tr2.storedMarks : null;
    }
  }),
  new FieldDesc("scrollToSelection", {
    init() {
      return 0;
    },
    apply(tr2, prev) {
      return tr2.scrolledIntoView ? prev + 1 : prev;
    }
  })
];
class Configuration {
  constructor(schema, plugins) {
    this.schema = schema;
    this.plugins = [];
    this.pluginsByKey = /* @__PURE__ */ Object.create(null);
    this.fields = baseFields.slice();
    if (plugins)
      plugins.forEach((plugin) => {
        if (this.pluginsByKey[plugin.key])
          throw new RangeError("Adding different instances of a keyed plugin (" + plugin.key + ")");
        this.plugins.push(plugin);
        this.pluginsByKey[plugin.key] = plugin;
        if (plugin.spec.state)
          this.fields.push(new FieldDesc(plugin.key, plugin.spec.state, plugin));
      });
  }
}
class EditorState {
  /**
  @internal
  */
  constructor(config) {
    this.config = config;
  }
  /**
  The schema of the state's document.
  */
  get schema() {
    return this.config.schema;
  }
  /**
  The plugins that are active in this state.
  */
  get plugins() {
    return this.config.plugins;
  }
  /**
  Apply the given transaction to produce a new state.
  */
  apply(tr2) {
    return this.applyTransaction(tr2).state;
  }
  /**
  @internal
  */
  filterTransaction(tr2, ignore = -1) {
    for (let i = 0; i < this.config.plugins.length; i++)
      if (i != ignore) {
        let plugin = this.config.plugins[i];
        if (plugin.spec.filterTransaction && !plugin.spec.filterTransaction.call(plugin, tr2, this))
          return false;
      }
    return true;
  }
  /**
  Verbose variant of [`apply`](https://prosemirror.net/docs/ref/#state.EditorState.apply) that
  returns the precise transactions that were applied (which might
  be influenced by the [transaction
  hooks](https://prosemirror.net/docs/ref/#state.PluginSpec.filterTransaction) of
  plugins) along with the new state.
  */
  applyTransaction(rootTr) {
    if (!this.filterTransaction(rootTr))
      return { state: this, transactions: [] };
    let trs = [rootTr], newState = this.applyInner(rootTr), seen2 = null;
    for (; ; ) {
      let haveNew = false;
      for (let i = 0; i < this.config.plugins.length; i++) {
        let plugin = this.config.plugins[i];
        if (plugin.spec.appendTransaction) {
          let n2 = seen2 ? seen2[i].n : 0, oldState = seen2 ? seen2[i].state : this;
          let tr2 = n2 < trs.length && plugin.spec.appendTransaction.call(plugin, n2 ? trs.slice(n2) : trs, oldState, newState);
          if (tr2 && newState.filterTransaction(tr2, i)) {
            tr2.setMeta("appendedTransaction", rootTr);
            if (!seen2) {
              seen2 = [];
              for (let j2 = 0; j2 < this.config.plugins.length; j2++)
                seen2.push(j2 < i ? { state: newState, n: trs.length } : { state: this, n: 0 });
            }
            trs.push(tr2);
            newState = newState.applyInner(tr2);
            haveNew = true;
          }
          if (seen2)
            seen2[i] = { state: newState, n: trs.length };
        }
      }
      if (!haveNew)
        return { state: newState, transactions: trs };
    }
  }
  /**
  @internal
  */
  applyInner(tr2) {
    if (!tr2.before.eq(this.doc))
      throw new RangeError("Applying a mismatched transaction");
    let newInstance = new EditorState(this.config), fields = this.config.fields;
    for (let i = 0; i < fields.length; i++) {
      let field = fields[i];
      newInstance[field.name] = field.apply(tr2, this[field.name], this, newInstance);
    }
    return newInstance;
  }
  /**
  Accessor that constructs and returns a new [transaction](https://prosemirror.net/docs/ref/#state.Transaction) from this state.
  */
  get tr() {
    return new Transaction(this);
  }
  /**
  Create a new state.
  */
  static create(config) {
    let $config = new Configuration(config.doc ? config.doc.type.schema : config.schema, config.plugins);
    let instance = new EditorState($config);
    for (let i = 0; i < $config.fields.length; i++)
      instance[$config.fields[i].name] = $config.fields[i].init(config, instance);
    return instance;
  }
  /**
  Create a new state based on this one, but with an adjusted set
  of active plugins. State fields that exist in both sets of
  plugins are kept unchanged. Those that no longer exist are
  dropped, and those that are new are initialized using their
  [`init`](https://prosemirror.net/docs/ref/#state.StateField.init) method, passing in the new
  configuration object..
  */
  reconfigure(config) {
    let $config = new Configuration(this.schema, config.plugins);
    let fields = $config.fields, instance = new EditorState($config);
    for (let i = 0; i < fields.length; i++) {
      let name = fields[i].name;
      instance[name] = this.hasOwnProperty(name) ? this[name] : fields[i].init(config, instance);
    }
    return instance;
  }
  /**
  Serialize this state to JSON. If you want to serialize the state
  of plugins, pass an object mapping property names to use in the
  resulting JSON object to plugin objects. The argument may also be
  a string or number, in which case it is ignored, to support the
  way `JSON.stringify` calls `toString` methods.
  */
  toJSON(pluginFields) {
    let result = { doc: this.doc.toJSON(), selection: this.selection.toJSON() };
    if (this.storedMarks)
      result.storedMarks = this.storedMarks.map((m2) => m2.toJSON());
    if (pluginFields && typeof pluginFields == "object")
      for (let prop in pluginFields) {
        if (prop == "doc" || prop == "selection")
          throw new RangeError("The JSON fields `doc` and `selection` are reserved");
        let plugin = pluginFields[prop], state = plugin.spec.state;
        if (state && state.toJSON)
          result[prop] = state.toJSON.call(plugin, this[plugin.key]);
      }
    return result;
  }
  /**
  Deserialize a JSON representation of a state. `config` should
  have at least a `schema` field, and should contain array of
  plugins to initialize the state with. `pluginFields` can be used
  to deserialize the state of plugins, by associating plugin
  instances with the property names they use in the JSON object.
  */
  static fromJSON(config, json2, pluginFields) {
    if (!json2)
      throw new RangeError("Invalid input for EditorState.fromJSON");
    if (!config.schema)
      throw new RangeError("Required config field 'schema' missing");
    let $config = new Configuration(config.schema, config.plugins);
    let instance = new EditorState($config);
    $config.fields.forEach((field) => {
      if (field.name == "doc") {
        instance.doc = Node$1.fromJSON(config.schema, json2.doc);
      } else if (field.name == "selection") {
        instance.selection = Selection.fromJSON(instance.doc, json2.selection);
      } else if (field.name == "storedMarks") {
        if (json2.storedMarks)
          instance.storedMarks = json2.storedMarks.map(config.schema.markFromJSON);
      } else {
        if (pluginFields)
          for (let prop in pluginFields) {
            let plugin = pluginFields[prop], state = plugin.spec.state;
            if (plugin.key == field.name && state && state.fromJSON && Object.prototype.hasOwnProperty.call(json2, prop)) {
              instance[field.name] = state.fromJSON.call(plugin, config, json2[prop], instance);
              return;
            }
          }
        instance[field.name] = field.init(config, instance);
      }
    });
    return instance;
  }
}
function bindProps(obj, self2, target) {
  for (let prop in obj) {
    let val = obj[prop];
    if (val instanceof Function)
      val = val.bind(self2);
    else if (prop == "handleDOMEvents")
      val = bindProps(val, self2, {});
    target[prop] = val;
  }
  return target;
}
class Plugin {
  /**
  Create a plugin.
  */
  constructor(spec) {
    this.spec = spec;
    this.props = {};
    if (spec.props)
      bindProps(spec.props, this, this.props);
    this.key = spec.key ? spec.key.key : createKey("plugin");
  }
  /**
  Extract the plugin's state field from an editor state.
  */
  getState(state) {
    return state[this.key];
  }
}
const keys = /* @__PURE__ */ Object.create(null);
function createKey(name) {
  if (name in keys)
    return name + "$" + ++keys[name];
  keys[name] = 0;
  return name + "$";
}
class PluginKey {
  /**
  Create a plugin key.
  */
  constructor(name = "key") {
    this.key = createKey(name);
  }
  /**
  Get the active plugin with this key, if any, from an editor
  state.
  */
  get(state) {
    return state.config.pluginsByKey[this.key];
  }
  /**
  Get the plugin's state from an editor state.
  */
  getState(state) {
    return state[this.key];
  }
}
const deleteSelection$1 = (state, dispatch) => {
  if (state.selection.empty)
    return false;
  if (dispatch)
    dispatch(state.tr.deleteSelection().scrollIntoView());
  return true;
};
function atBlockStart(state, view) {
  let { $cursor } = state.selection;
  if (!$cursor || (view ? !view.endOfTextblock("backward", state) : $cursor.parentOffset > 0))
    return null;
  return $cursor;
}
const joinBackward$1 = (state, dispatch, view) => {
  let $cursor = atBlockStart(state, view);
  if (!$cursor)
    return false;
  let $cut = findCutBefore($cursor);
  if (!$cut) {
    let range = $cursor.blockRange(), target = range && liftTarget(range);
    if (target == null)
      return false;
    if (dispatch)
      dispatch(state.tr.lift(range, target).scrollIntoView());
    return true;
  }
  let before = $cut.nodeBefore;
  if (deleteBarrier(state, $cut, dispatch, -1))
    return true;
  if ($cursor.parent.content.size == 0 && (textblockAt(before, "end") || NodeSelection.isSelectable(before))) {
    for (let depth = $cursor.depth; ; depth--) {
      let delStep = replaceStep(state.doc, $cursor.before(depth), $cursor.after(depth), Slice.empty);
      if (delStep && delStep.slice.size < delStep.to - delStep.from) {
        if (dispatch) {
          let tr2 = state.tr.step(delStep);
          tr2.setSelection(textblockAt(before, "end") ? Selection.findFrom(tr2.doc.resolve(tr2.mapping.map($cut.pos, -1)), -1) : NodeSelection.create(tr2.doc, $cut.pos - before.nodeSize));
          dispatch(tr2.scrollIntoView());
        }
        return true;
      }
      if (depth == 1 || $cursor.node(depth - 1).childCount > 1)
        break;
    }
  }
  if (before.isAtom && $cut.depth == $cursor.depth - 1) {
    if (dispatch)
      dispatch(state.tr.delete($cut.pos - before.nodeSize, $cut.pos).scrollIntoView());
    return true;
  }
  return false;
};
const joinTextblockBackward$1 = (state, dispatch, view) => {
  let $cursor = atBlockStart(state, view);
  if (!$cursor)
    return false;
  let $cut = findCutBefore($cursor);
  return $cut ? joinTextblocksAround(state, $cut, dispatch) : false;
};
const joinTextblockForward$1 = (state, dispatch, view) => {
  let $cursor = atBlockEnd(state, view);
  if (!$cursor)
    return false;
  let $cut = findCutAfter($cursor);
  return $cut ? joinTextblocksAround(state, $cut, dispatch) : false;
};
function joinTextblocksAround(state, $cut, dispatch) {
  let before = $cut.nodeBefore, beforeText = before, beforePos = $cut.pos - 1;
  for (; !beforeText.isTextblock; beforePos--) {
    if (beforeText.type.spec.isolating)
      return false;
    let child = beforeText.lastChild;
    if (!child)
      return false;
    beforeText = child;
  }
  let after = $cut.nodeAfter, afterText = after, afterPos = $cut.pos + 1;
  for (; !afterText.isTextblock; afterPos++) {
    if (afterText.type.spec.isolating)
      return false;
    let child = afterText.firstChild;
    if (!child)
      return false;
    afterText = child;
  }
  let step = replaceStep(state.doc, beforePos, afterPos, Slice.empty);
  if (!step || step.from != beforePos || step instanceof ReplaceStep && step.slice.size >= afterPos - beforePos)
    return false;
  if (dispatch) {
    let tr2 = state.tr.step(step);
    tr2.setSelection(TextSelection.create(tr2.doc, beforePos));
    dispatch(tr2.scrollIntoView());
  }
  return true;
}
function textblockAt(node, side, only = false) {
  for (let scan = node; scan; scan = side == "start" ? scan.firstChild : scan.lastChild) {
    if (scan.isTextblock)
      return true;
    if (only && scan.childCount != 1)
      return false;
  }
  return false;
}
const selectNodeBackward$1 = (state, dispatch, view) => {
  let { $head, empty: empty2 } = state.selection, $cut = $head;
  if (!empty2)
    return false;
  if ($head.parent.isTextblock) {
    if (view ? !view.endOfTextblock("backward", state) : $head.parentOffset > 0)
      return false;
    $cut = findCutBefore($head);
  }
  let node = $cut && $cut.nodeBefore;
  if (!node || !NodeSelection.isSelectable(node))
    return false;
  if (dispatch)
    dispatch(state.tr.setSelection(NodeSelection.create(state.doc, $cut.pos - node.nodeSize)).scrollIntoView());
  return true;
};
function findCutBefore($pos) {
  if (!$pos.parent.type.spec.isolating)
    for (let i = $pos.depth - 1; i >= 0; i--) {
      if ($pos.index(i) > 0)
        return $pos.doc.resolve($pos.before(i + 1));
      if ($pos.node(i).type.spec.isolating)
        break;
    }
  return null;
}
function atBlockEnd(state, view) {
  let { $cursor } = state.selection;
  if (!$cursor || (view ? !view.endOfTextblock("forward", state) : $cursor.parentOffset < $cursor.parent.content.size))
    return null;
  return $cursor;
}
const joinForward$1 = (state, dispatch, view) => {
  let $cursor = atBlockEnd(state, view);
  if (!$cursor)
    return false;
  let $cut = findCutAfter($cursor);
  if (!$cut)
    return false;
  let after = $cut.nodeAfter;
  if (deleteBarrier(state, $cut, dispatch, 1))
    return true;
  if ($cursor.parent.content.size == 0 && (textblockAt(after, "start") || NodeSelection.isSelectable(after))) {
    let delStep = replaceStep(state.doc, $cursor.before(), $cursor.after(), Slice.empty);
    if (delStep && delStep.slice.size < delStep.to - delStep.from) {
      if (dispatch) {
        let tr2 = state.tr.step(delStep);
        tr2.setSelection(textblockAt(after, "start") ? Selection.findFrom(tr2.doc.resolve(tr2.mapping.map($cut.pos)), 1) : NodeSelection.create(tr2.doc, tr2.mapping.map($cut.pos)));
        dispatch(tr2.scrollIntoView());
      }
      return true;
    }
  }
  if (after.isAtom && $cut.depth == $cursor.depth - 1) {
    if (dispatch)
      dispatch(state.tr.delete($cut.pos, $cut.pos + after.nodeSize).scrollIntoView());
    return true;
  }
  return false;
};
const selectNodeForward$1 = (state, dispatch, view) => {
  let { $head, empty: empty2 } = state.selection, $cut = $head;
  if (!empty2)
    return false;
  if ($head.parent.isTextblock) {
    if (view ? !view.endOfTextblock("forward", state) : $head.parentOffset < $head.parent.content.size)
      return false;
    $cut = findCutAfter($head);
  }
  let node = $cut && $cut.nodeAfter;
  if (!node || !NodeSelection.isSelectable(node))
    return false;
  if (dispatch)
    dispatch(state.tr.setSelection(NodeSelection.create(state.doc, $cut.pos)).scrollIntoView());
  return true;
};
function findCutAfter($pos) {
  if (!$pos.parent.type.spec.isolating)
    for (let i = $pos.depth - 1; i >= 0; i--) {
      let parent = $pos.node(i);
      if ($pos.index(i) + 1 < parent.childCount)
        return $pos.doc.resolve($pos.after(i + 1));
      if (parent.type.spec.isolating)
        break;
    }
  return null;
}
const joinUp$1 = (state, dispatch) => {
  let sel = state.selection, nodeSel = sel instanceof NodeSelection, point;
  if (nodeSel) {
    if (sel.node.isTextblock || !canJoin(state.doc, sel.from))
      return false;
    point = sel.from;
  } else {
    point = joinPoint(state.doc, sel.from, -1);
    if (point == null)
      return false;
  }
  if (dispatch) {
    let tr2 = state.tr.join(point);
    if (nodeSel)
      tr2.setSelection(NodeSelection.create(tr2.doc, point - state.doc.resolve(point).nodeBefore.nodeSize));
    dispatch(tr2.scrollIntoView());
  }
  return true;
};
const joinDown$1 = (state, dispatch) => {
  let sel = state.selection, point;
  if (sel instanceof NodeSelection) {
    if (sel.node.isTextblock || !canJoin(state.doc, sel.to))
      return false;
    point = sel.to;
  } else {
    point = joinPoint(state.doc, sel.to, 1);
    if (point == null)
      return false;
  }
  if (dispatch)
    dispatch(state.tr.join(point).scrollIntoView());
  return true;
};
const lift$1 = (state, dispatch) => {
  let { $from, $to } = state.selection;
  let range = $from.blockRange($to), target = range && liftTarget(range);
  if (target == null)
    return false;
  if (dispatch)
    dispatch(state.tr.lift(range, target).scrollIntoView());
  return true;
};
const newlineInCode$1 = (state, dispatch) => {
  let { $head, $anchor } = state.selection;
  if (!$head.parent.type.spec.code || !$head.sameParent($anchor))
    return false;
  if (dispatch)
    dispatch(state.tr.insertText("\n").scrollIntoView());
  return true;
};
function defaultBlockAt$1(match) {
  for (let i = 0; i < match.edgeCount; i++) {
    let { type } = match.edge(i);
    if (type.isTextblock && !type.hasRequiredAttrs())
      return type;
  }
  return null;
}
const exitCode$1 = (state, dispatch) => {
  let { $head, $anchor } = state.selection;
  if (!$head.parent.type.spec.code || !$head.sameParent($anchor))
    return false;
  let above = $head.node(-1), after = $head.indexAfter(-1), type = defaultBlockAt$1(above.contentMatchAt(after));
  if (!type || !above.canReplaceWith(after, after, type))
    return false;
  if (dispatch) {
    let pos = $head.after(), tr2 = state.tr.replaceWith(pos, pos, type.createAndFill());
    tr2.setSelection(Selection.near(tr2.doc.resolve(pos), 1));
    dispatch(tr2.scrollIntoView());
  }
  return true;
};
const createParagraphNear$1 = (state, dispatch) => {
  let sel = state.selection, { $from, $to } = sel;
  if (sel instanceof AllSelection || $from.parent.inlineContent || $to.parent.inlineContent)
    return false;
  let type = defaultBlockAt$1($to.parent.contentMatchAt($to.indexAfter()));
  if (!type || !type.isTextblock)
    return false;
  if (dispatch) {
    let side = (!$from.parentOffset && $to.index() < $to.parent.childCount ? $from : $to).pos;
    let tr2 = state.tr.insert(side, type.createAndFill());
    tr2.setSelection(TextSelection.create(tr2.doc, side + 1));
    dispatch(tr2.scrollIntoView());
  }
  return true;
};
const liftEmptyBlock$1 = (state, dispatch) => {
  let { $cursor } = state.selection;
  if (!$cursor || $cursor.parent.content.size)
    return false;
  if ($cursor.depth > 1 && $cursor.after() != $cursor.end(-1)) {
    let before = $cursor.before();
    if (canSplit(state.doc, before)) {
      if (dispatch)
        dispatch(state.tr.split(before).scrollIntoView());
      return true;
    }
  }
  let range = $cursor.blockRange(), target = range && liftTarget(range);
  if (target == null)
    return false;
  if (dispatch)
    dispatch(state.tr.lift(range, target).scrollIntoView());
  return true;
};
function splitBlockAs(splitNode) {
  return (state, dispatch) => {
    let { $from, $to } = state.selection;
    if (state.selection instanceof NodeSelection && state.selection.node.isBlock) {
      if (!$from.parentOffset || !canSplit(state.doc, $from.pos))
        return false;
      if (dispatch)
        dispatch(state.tr.split($from.pos).scrollIntoView());
      return true;
    }
    if (!$from.depth)
      return false;
    let types = [];
    let splitDepth, deflt, atEnd = false, atStart = false;
    for (let d2 = $from.depth; ; d2--) {
      let node = $from.node(d2);
      if (node.isBlock) {
        atEnd = $from.end(d2) == $from.pos + ($from.depth - d2);
        atStart = $from.start(d2) == $from.pos - ($from.depth - d2);
        deflt = defaultBlockAt$1($from.node(d2 - 1).contentMatchAt($from.indexAfter(d2 - 1)));
        types.unshift(atEnd && deflt ? { type: deflt } : null);
        splitDepth = d2;
        break;
      } else {
        if (d2 == 1)
          return false;
        types.unshift(null);
      }
    }
    let tr2 = state.tr;
    if (state.selection instanceof TextSelection || state.selection instanceof AllSelection)
      tr2.deleteSelection();
    let splitPos = tr2.mapping.map($from.pos);
    let can = canSplit(tr2.doc, splitPos, types.length, types);
    if (!can) {
      types[0] = deflt ? { type: deflt } : null;
      can = canSplit(tr2.doc, splitPos, types.length, types);
    }
    if (!can)
      return false;
    tr2.split(splitPos, types.length, types);
    if (!atEnd && atStart && $from.node(splitDepth).type != deflt) {
      let first2 = tr2.mapping.map($from.before(splitDepth)), $first = tr2.doc.resolve(first2);
      if (deflt && $from.node(splitDepth - 1).canReplaceWith($first.index(), $first.index() + 1, deflt))
        tr2.setNodeMarkup(tr2.mapping.map($from.before(splitDepth)), deflt);
    }
    if (dispatch)
      dispatch(tr2.scrollIntoView());
    return true;
  };
}
const splitBlock$1 = splitBlockAs();
const selectParentNode$1 = (state, dispatch) => {
  let { $from, to } = state.selection, pos;
  let same = $from.sharedDepth(to);
  if (same == 0)
    return false;
  pos = $from.before(same);
  if (dispatch)
    dispatch(state.tr.setSelection(NodeSelection.create(state.doc, pos)));
  return true;
};
function joinMaybeClear(state, $pos, dispatch) {
  let before = $pos.nodeBefore, after = $pos.nodeAfter, index2 = $pos.index();
  if (!before || !after || !before.type.compatibleContent(after.type))
    return false;
  if (!before.content.size && $pos.parent.canReplace(index2 - 1, index2)) {
    if (dispatch)
      dispatch(state.tr.delete($pos.pos - before.nodeSize, $pos.pos).scrollIntoView());
    return true;
  }
  if (!$pos.parent.canReplace(index2, index2 + 1) || !(after.isTextblock || canJoin(state.doc, $pos.pos)))
    return false;
  if (dispatch)
    dispatch(state.tr.join($pos.pos).scrollIntoView());
  return true;
}
function deleteBarrier(state, $cut, dispatch, dir) {
  let before = $cut.nodeBefore, after = $cut.nodeAfter, conn, match;
  let isolated = before.type.spec.isolating || after.type.spec.isolating;
  if (!isolated && joinMaybeClear(state, $cut, dispatch))
    return true;
  let canDelAfter = !isolated && $cut.parent.canReplace($cut.index(), $cut.index() + 1);
  if (canDelAfter && (conn = (match = before.contentMatchAt(before.childCount)).findWrapping(after.type)) && match.matchType(conn[0] || after.type).validEnd) {
    if (dispatch) {
      let end = $cut.pos + after.nodeSize, wrap2 = Fragment.empty;
      for (let i = conn.length - 1; i >= 0; i--)
        wrap2 = Fragment.from(conn[i].create(null, wrap2));
      wrap2 = Fragment.from(before.copy(wrap2));
      let tr2 = state.tr.step(new ReplaceAroundStep($cut.pos - 1, end, $cut.pos, end, new Slice(wrap2, 1, 0), conn.length, true));
      let $joinAt = tr2.doc.resolve(end + 2 * conn.length);
      if ($joinAt.nodeAfter && $joinAt.nodeAfter.type == before.type && canJoin(tr2.doc, $joinAt.pos))
        tr2.join($joinAt.pos);
      dispatch(tr2.scrollIntoView());
    }
    return true;
  }
  let selAfter = after.type.spec.isolating || dir > 0 && isolated ? null : Selection.findFrom($cut, 1);
  let range = selAfter && selAfter.$from.blockRange(selAfter.$to), target = range && liftTarget(range);
  if (target != null && target >= $cut.depth) {
    if (dispatch)
      dispatch(state.tr.lift(range, target).scrollIntoView());
    return true;
  }
  if (canDelAfter && textblockAt(after, "start", true) && textblockAt(before, "end")) {
    let at2 = before, wrap2 = [];
    for (; ; ) {
      wrap2.push(at2);
      if (at2.isTextblock)
        break;
      at2 = at2.lastChild;
    }
    let afterText = after, afterDepth = 1;
    for (; !afterText.isTextblock; afterText = afterText.firstChild)
      afterDepth++;
    if (at2.canReplace(at2.childCount, at2.childCount, afterText.content)) {
      if (dispatch) {
        let end = Fragment.empty;
        for (let i = wrap2.length - 1; i >= 0; i--)
          end = Fragment.from(wrap2[i].copy(end));
        let tr2 = state.tr.step(new ReplaceAroundStep($cut.pos - wrap2.length, $cut.pos + after.nodeSize, $cut.pos + afterDepth, $cut.pos + after.nodeSize - afterDepth, new Slice(end, wrap2.length, 0), 0, true));
        dispatch(tr2.scrollIntoView());
      }
      return true;
    }
  }
  return false;
}
function selectTextblockSide(side) {
  return function(state, dispatch) {
    let sel = state.selection, $pos = side < 0 ? sel.$from : sel.$to;
    let depth = $pos.depth;
    while ($pos.node(depth).isInline) {
      if (!depth)
        return false;
      depth--;
    }
    if (!$pos.node(depth).isTextblock)
      return false;
    if (dispatch)
      dispatch(state.tr.setSelection(TextSelection.create(state.doc, side < 0 ? $pos.start(depth) : $pos.end(depth))));
    return true;
  };
}
const selectTextblockStart$1 = selectTextblockSide(-1);
const selectTextblockEnd$1 = selectTextblockSide(1);
function wrapIn$1(nodeType, attrs = null) {
  return function(state, dispatch) {
    let { $from, $to } = state.selection;
    let range = $from.blockRange($to), wrapping = range && findWrapping(range, nodeType, attrs);
    if (!wrapping)
      return false;
    if (dispatch)
      dispatch(state.tr.wrap(range, wrapping).scrollIntoView());
    return true;
  };
}
function setBlockType(nodeType, attrs = null) {
  return function(state, dispatch) {
    let applicable = false;
    for (let i = 0; i < state.selection.ranges.length && !applicable; i++) {
      let { $from: { pos: from2 }, $to: { pos: to } } = state.selection.ranges[i];
      state.doc.nodesBetween(from2, to, (node, pos) => {
        if (applicable)
          return false;
        if (!node.isTextblock || node.hasMarkup(nodeType, attrs))
          return;
        if (node.type == nodeType) {
          applicable = true;
        } else {
          let $pos = state.doc.resolve(pos), index2 = $pos.index();
          applicable = $pos.parent.canReplaceWith(index2, index2 + 1, nodeType);
        }
      });
    }
    if (!applicable)
      return false;
    if (dispatch) {
      let tr2 = state.tr;
      for (let i = 0; i < state.selection.ranges.length; i++) {
        let { $from: { pos: from2 }, $to: { pos: to } } = state.selection.ranges[i];
        tr2.setBlockType(from2, to, nodeType, attrs);
      }
      dispatch(tr2.scrollIntoView());
    }
    return true;
  };
}
function chainCommands(...commands) {
  return function(state, dispatch, view) {
    for (let i = 0; i < commands.length; i++)
      if (commands[i](state, dispatch, view))
        return true;
    return false;
  };
}
chainCommands(deleteSelection$1, joinBackward$1, selectNodeBackward$1);
chainCommands(deleteSelection$1, joinForward$1, selectNodeForward$1);
({
  "Enter": chainCommands(newlineInCode$1, createParagraphNear$1, liftEmptyBlock$1, splitBlock$1)
});
typeof navigator != "undefined" ? /Mac|iP(hone|[oa]d)/.test(navigator.platform) : typeof os != "undefined" && os.platform ? os.platform() == "darwin" : false;
function wrapInList$1(listType, attrs = null) {
  return function(state, dispatch) {
    let { $from, $to } = state.selection;
    let range = $from.blockRange($to);
    if (!range)
      return false;
    let tr2 = dispatch ? state.tr : null;
    if (!wrapRangeInList(tr2, range, listType, attrs))
      return false;
    if (dispatch)
      dispatch(tr2.scrollIntoView());
    return true;
  };
}
function wrapRangeInList(tr2, range, listType, attrs = null) {
  let doJoin = false, outerRange = range, doc2 = range.$from.doc;
  if (range.depth >= 2 && range.$from.node(range.depth - 1).type.compatibleContent(listType) && range.startIndex == 0) {
    if (range.$from.index(range.depth - 1) == 0)
      return false;
    let $insert = doc2.resolve(range.start - 2);
    outerRange = new NodeRange($insert, $insert, range.depth);
    if (range.endIndex < range.parent.childCount)
      range = new NodeRange(range.$from, doc2.resolve(range.$to.end(range.depth)), range.depth);
    doJoin = true;
  }
  let wrap2 = findWrapping(outerRange, listType, attrs, range);
  if (!wrap2)
    return false;
  if (tr2)
    doWrapInList(tr2, range, wrap2, doJoin, listType);
  return true;
}
function doWrapInList(tr2, range, wrappers, joinBefore, listType) {
  let content = Fragment.empty;
  for (let i = wrappers.length - 1; i >= 0; i--)
    content = Fragment.from(wrappers[i].type.create(wrappers[i].attrs, content));
  tr2.step(new ReplaceAroundStep(range.start - (joinBefore ? 2 : 0), range.end, range.start, range.end, new Slice(content, 0, 0), wrappers.length, true));
  let found2 = 0;
  for (let i = 0; i < wrappers.length; i++)
    if (wrappers[i].type == listType)
      found2 = i + 1;
  let splitDepth = wrappers.length - found2;
  let splitPos = range.start + wrappers.length - (joinBefore ? 2 : 0), parent = range.parent;
  for (let i = range.startIndex, e = range.endIndex, first2 = true; i < e; i++, first2 = false) {
    if (!first2 && canSplit(tr2.doc, splitPos, splitDepth)) {
      tr2.split(splitPos, splitDepth);
      splitPos += 2 * splitDepth;
    }
    splitPos += parent.child(i).nodeSize;
  }
  return tr2;
}
function liftListItem$1(itemType) {
  return function(state, dispatch) {
    let { $from, $to } = state.selection;
    let range = $from.blockRange($to, (node) => node.childCount > 0 && node.firstChild.type == itemType);
    if (!range)
      return false;
    if (!dispatch)
      return true;
    if ($from.node(range.depth - 1).type == itemType)
      return liftToOuterList(state, dispatch, itemType, range);
    else
      return liftOutOfList(state, dispatch, range);
  };
}
function liftToOuterList(state, dispatch, itemType, range) {
  let tr2 = state.tr, end = range.end, endOfList = range.$to.end(range.depth);
  if (end < endOfList) {
    tr2.step(new ReplaceAroundStep(end - 1, endOfList, end, endOfList, new Slice(Fragment.from(itemType.create(null, range.parent.copy())), 1, 0), 1, true));
    range = new NodeRange(tr2.doc.resolve(range.$from.pos), tr2.doc.resolve(endOfList), range.depth);
  }
  const target = liftTarget(range);
  if (target == null)
    return false;
  tr2.lift(range, target);
  let $after = tr2.doc.resolve(tr2.mapping.map(end, -1) - 1);
  if (canJoin(tr2.doc, $after.pos) && $after.nodeBefore.type == $after.nodeAfter.type)
    tr2.join($after.pos);
  dispatch(tr2.scrollIntoView());
  return true;
}
function liftOutOfList(state, dispatch, range) {
  let tr2 = state.tr, list = range.parent;
  for (let pos = range.end, i = range.endIndex - 1, e = range.startIndex; i > e; i--) {
    pos -= list.child(i).nodeSize;
    tr2.delete(pos - 1, pos + 1);
  }
  let $start = tr2.doc.resolve(range.start), item = $start.nodeAfter;
  if (tr2.mapping.map(range.end) != range.start + $start.nodeAfter.nodeSize)
    return false;
  let atStart = range.startIndex == 0, atEnd = range.endIndex == list.childCount;
  let parent = $start.node(-1), indexBefore = $start.index(-1);
  if (!parent.canReplace(indexBefore + (atStart ? 0 : 1), indexBefore + 1, item.content.append(atEnd ? Fragment.empty : Fragment.from(list))))
    return false;
  let start = $start.pos, end = start + item.nodeSize;
  tr2.step(new ReplaceAroundStep(start - (atStart ? 1 : 0), end + (atEnd ? 1 : 0), start + 1, end - 1, new Slice((atStart ? Fragment.empty : Fragment.from(list.copy(Fragment.empty))).append(atEnd ? Fragment.empty : Fragment.from(list.copy(Fragment.empty))), atStart ? 0 : 1, atEnd ? 0 : 1), atStart ? 0 : 1));
  dispatch(tr2.scrollIntoView());
  return true;
}
function sinkListItem$1(itemType) {
  return function(state, dispatch) {
    let { $from, $to } = state.selection;
    let range = $from.blockRange($to, (node) => node.childCount > 0 && node.firstChild.type == itemType);
    if (!range)
      return false;
    let startIndex = range.startIndex;
    if (startIndex == 0)
      return false;
    let parent = range.parent, nodeBefore = parent.child(startIndex - 1);
    if (nodeBefore.type != itemType)
      return false;
    if (dispatch) {
      let nestedBefore = nodeBefore.lastChild && nodeBefore.lastChild.type == parent.type;
      let inner = Fragment.from(nestedBefore ? itemType.create() : null);
      let slice2 = new Slice(Fragment.from(itemType.create(null, Fragment.from(parent.type.create(null, inner)))), nestedBefore ? 3 : 1, 0);
      let before = range.start, after = range.end;
      dispatch(state.tr.step(new ReplaceAroundStep(before - (nestedBefore ? 3 : 1), after, before, after, slice2, 1, true)).scrollIntoView());
    }
    return true;
  };
}
const domIndex = function(node) {
  for (var index2 = 0; ; index2++) {
    node = node.previousSibling;
    if (!node)
      return index2;
  }
};
const parentNode = function(node) {
  let parent = node.assignedSlot || node.parentNode;
  return parent && parent.nodeType == 11 ? parent.host : parent;
};
let reusedRange = null;
const textRange = function(node, from2, to) {
  let range = reusedRange || (reusedRange = document.createRange());
  range.setEnd(node, to == null ? node.nodeValue.length : to);
  range.setStart(node, from2 || 0);
  return range;
};
const clearReusedRange = function() {
  reusedRange = null;
};
const isEquivalentPosition = function(node, off, targetNode, targetOff) {
  return targetNode && (scanFor(node, off, targetNode, targetOff, -1) || scanFor(node, off, targetNode, targetOff, 1));
};
const atomElements = /^(img|br|input|textarea|hr)$/i;
function scanFor(node, off, targetNode, targetOff, dir) {
  var _a2;
  for (; ; ) {
    if (node == targetNode && off == targetOff)
      return true;
    if (off == (dir < 0 ? 0 : nodeSize(node))) {
      let parent = node.parentNode;
      if (!parent || parent.nodeType != 1 || hasBlockDesc(node) || atomElements.test(node.nodeName) || node.contentEditable == "false")
        return false;
      off = domIndex(node) + (dir < 0 ? 0 : 1);
      node = parent;
    } else if (node.nodeType == 1) {
      let child = node.childNodes[off + (dir < 0 ? -1 : 0)];
      if (child.nodeType == 1 && child.contentEditable == "false") {
        if ((_a2 = child.pmViewDesc) === null || _a2 === void 0 ? void 0 : _a2.ignoreForSelection)
          off += dir;
        else
          return false;
      } else {
        node = child;
        off = dir < 0 ? nodeSize(node) : 0;
      }
    } else {
      return false;
    }
  }
}
function nodeSize(node) {
  return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;
}
function textNodeBefore$1(node, offset2) {
  for (; ; ) {
    if (node.nodeType == 3 && offset2)
      return node;
    if (node.nodeType == 1 && offset2 > 0) {
      if (node.contentEditable == "false")
        return null;
      node = node.childNodes[offset2 - 1];
      offset2 = nodeSize(node);
    } else if (node.parentNode && !hasBlockDesc(node)) {
      offset2 = domIndex(node);
      node = node.parentNode;
    } else {
      return null;
    }
  }
}
function textNodeAfter$1(node, offset2) {
  for (; ; ) {
    if (node.nodeType == 3 && offset2 < node.nodeValue.length)
      return node;
    if (node.nodeType == 1 && offset2 < node.childNodes.length) {
      if (node.contentEditable == "false")
        return null;
      node = node.childNodes[offset2];
      offset2 = 0;
    } else if (node.parentNode && !hasBlockDesc(node)) {
      offset2 = domIndex(node) + 1;
      node = node.parentNode;
    } else {
      return null;
    }
  }
}
function isOnEdge(node, offset2, parent) {
  for (let atStart = offset2 == 0, atEnd = offset2 == nodeSize(node); atStart || atEnd; ) {
    if (node == parent)
      return true;
    let index2 = domIndex(node);
    node = node.parentNode;
    if (!node)
      return false;
    atStart = atStart && index2 == 0;
    atEnd = atEnd && index2 == nodeSize(node);
  }
}
function hasBlockDesc(dom) {
  let desc;
  for (let cur = dom; cur; cur = cur.parentNode)
    if (desc = cur.pmViewDesc)
      break;
  return desc && desc.node && desc.node.isBlock && (desc.dom == dom || desc.contentDOM == dom);
}
const selectionCollapsed = function(domSel) {
  return domSel.focusNode && isEquivalentPosition(domSel.focusNode, domSel.focusOffset, domSel.anchorNode, domSel.anchorOffset);
};
function keyEvent(keyCode, key) {
  let event = document.createEvent("Event");
  event.initEvent("keydown", true, true);
  event.keyCode = keyCode;
  event.key = event.code = key;
  return event;
}
function deepActiveElement(doc2) {
  let elt = doc2.activeElement;
  while (elt && elt.shadowRoot)
    elt = elt.shadowRoot.activeElement;
  return elt;
}
function caretFromPoint(doc2, x2, y2) {
  if (doc2.caretPositionFromPoint) {
    try {
      let pos = doc2.caretPositionFromPoint(x2, y2);
      if (pos)
        return { node: pos.offsetNode, offset: Math.min(nodeSize(pos.offsetNode), pos.offset) };
    } catch (_2) {
    }
  }
  if (doc2.caretRangeFromPoint) {
    let range = doc2.caretRangeFromPoint(x2, y2);
    if (range)
      return { node: range.startContainer, offset: Math.min(nodeSize(range.startContainer), range.startOffset) };
  }
}
const nav = typeof navigator != "undefined" ? navigator : null;
const doc = typeof document != "undefined" ? document : null;
const agent = nav && nav.userAgent || "";
const ie_edge = /Edge\/(\d+)/.exec(agent);
const ie_upto10 = /MSIE \d/.exec(agent);
const ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(agent);
const ie$1 = !!(ie_upto10 || ie_11up || ie_edge);
const ie_version = ie_upto10 ? document.documentMode : ie_11up ? +ie_11up[1] : ie_edge ? +ie_edge[1] : 0;
const gecko = !ie$1 && /gecko\/(\d+)/i.test(agent);
gecko && +(/Firefox\/(\d+)/.exec(agent) || [0, 0])[1];
const _chrome = !ie$1 && /Chrome\/(\d+)/.exec(agent);
const chrome = !!_chrome;
const chrome_version = _chrome ? +_chrome[1] : 0;
const safari = !ie$1 && !!nav && /Apple Computer/.test(nav.vendor);
const ios = safari && (/Mobile\/\w+/.test(agent) || !!nav && nav.maxTouchPoints > 2);
const mac$2 = ios || (nav ? /Mac/.test(nav.platform) : false);
const windows$1 = nav ? /Win/.test(nav.platform) : false;
const android = /Android \d/.test(agent);
const webkit = !!doc && "webkitFontSmoothing" in doc.documentElement.style;
const webkit_version = webkit ? +(/\bAppleWebKit\/(\d+)/.exec(navigator.userAgent) || [0, 0])[1] : 0;
function windowRect(doc2) {
  let vp = doc2.defaultView && doc2.defaultView.visualViewport;
  if (vp)
    return {
      left: 0,
      right: vp.width,
      top: 0,
      bottom: vp.height
    };
  return {
    left: 0,
    right: doc2.documentElement.clientWidth,
    top: 0,
    bottom: doc2.documentElement.clientHeight
  };
}
function getSide$1(value, side) {
  return typeof value == "number" ? value : value[side];
}
function clientRect(node) {
  let rect = node.getBoundingClientRect();
  let scaleX = rect.width / node.offsetWidth || 1;
  let scaleY = rect.height / node.offsetHeight || 1;
  return {
    left: rect.left,
    right: rect.left + node.clientWidth * scaleX,
    top: rect.top,
    bottom: rect.top + node.clientHeight * scaleY
  };
}
function scrollRectIntoView(view, rect, startDOM) {
  let scrollThreshold = view.someProp("scrollThreshold") || 0, scrollMargin = view.someProp("scrollMargin") || 5;
  let doc2 = view.dom.ownerDocument;
  for (let parent = startDOM || view.dom; ; ) {
    if (!parent)
      break;
    if (parent.nodeType != 1) {
      parent = parentNode(parent);
      continue;
    }
    let elt = parent;
    let atTop = elt == doc2.body;
    let bounding = atTop ? windowRect(doc2) : clientRect(elt);
    let moveX = 0, moveY = 0;
    if (rect.top < bounding.top + getSide$1(scrollThreshold, "top"))
      moveY = -(bounding.top - rect.top + getSide$1(scrollMargin, "top"));
    else if (rect.bottom > bounding.bottom - getSide$1(scrollThreshold, "bottom"))
      moveY = rect.bottom - rect.top > bounding.bottom - bounding.top ? rect.top + getSide$1(scrollMargin, "top") - bounding.top : rect.bottom - bounding.bottom + getSide$1(scrollMargin, "bottom");
    if (rect.left < bounding.left + getSide$1(scrollThreshold, "left"))
      moveX = -(bounding.left - rect.left + getSide$1(scrollMargin, "left"));
    else if (rect.right > bounding.right - getSide$1(scrollThreshold, "right"))
      moveX = rect.right - bounding.right + getSide$1(scrollMargin, "right");
    if (moveX || moveY) {
      if (atTop) {
        doc2.defaultView.scrollBy(moveX, moveY);
      } else {
        let startX = elt.scrollLeft, startY = elt.scrollTop;
        if (moveY)
          elt.scrollTop += moveY;
        if (moveX)
          elt.scrollLeft += moveX;
        let dX = elt.scrollLeft - startX, dY = elt.scrollTop - startY;
        rect = { left: rect.left - dX, top: rect.top - dY, right: rect.right - dX, bottom: rect.bottom - dY };
      }
    }
    let pos = atTop ? "fixed" : getComputedStyle(parent).position;
    if (/^(fixed|sticky)$/.test(pos))
      break;
    parent = pos == "absolute" ? parent.offsetParent : parentNode(parent);
  }
}
function storeScrollPos(view) {
  let rect = view.dom.getBoundingClientRect(), startY = Math.max(0, rect.top);
  let refDOM, refTop;
  for (let x2 = (rect.left + rect.right) / 2, y2 = startY + 1; y2 < Math.min(innerHeight, rect.bottom); y2 += 5) {
    let dom = view.root.elementFromPoint(x2, y2);
    if (!dom || dom == view.dom || !view.dom.contains(dom))
      continue;
    let localRect = dom.getBoundingClientRect();
    if (localRect.top >= startY - 20) {
      refDOM = dom;
      refTop = localRect.top;
      break;
    }
  }
  return { refDOM, refTop, stack: scrollStack(view.dom) };
}
function scrollStack(dom) {
  let stack2 = [], doc2 = dom.ownerDocument;
  for (let cur = dom; cur; cur = parentNode(cur)) {
    stack2.push({ dom: cur, top: cur.scrollTop, left: cur.scrollLeft });
    if (dom == doc2)
      break;
  }
  return stack2;
}
function resetScrollPos({ refDOM, refTop, stack: stack2 }) {
  let newRefTop = refDOM ? refDOM.getBoundingClientRect().top : 0;
  restoreScrollStack(stack2, newRefTop == 0 ? 0 : newRefTop - refTop);
}
function restoreScrollStack(stack2, dTop) {
  for (let i = 0; i < stack2.length; i++) {
    let { dom, top, left } = stack2[i];
    if (dom.scrollTop != top + dTop)
      dom.scrollTop = top + dTop;
    if (dom.scrollLeft != left)
      dom.scrollLeft = left;
  }
}
let preventScrollSupported = null;
function focusPreventScroll(dom) {
  if (dom.setActive)
    return dom.setActive();
  if (preventScrollSupported)
    return dom.focus(preventScrollSupported);
  let stored = scrollStack(dom);
  dom.focus(preventScrollSupported == null ? {
    get preventScroll() {
      preventScrollSupported = { preventScroll: true };
      return true;
    }
  } : void 0);
  if (!preventScrollSupported) {
    preventScrollSupported = false;
    restoreScrollStack(stored, 0);
  }
}
function findOffsetInNode(node, coords) {
  let closest, dxClosest = 2e8, coordsClosest, offset2 = 0;
  let rowBot = coords.top, rowTop = coords.top;
  let firstBelow, coordsBelow;
  for (let child = node.firstChild, childIndex = 0; child; child = child.nextSibling, childIndex++) {
    let rects;
    if (child.nodeType == 1)
      rects = child.getClientRects();
    else if (child.nodeType == 3)
      rects = textRange(child).getClientRects();
    else
      continue;
    for (let i = 0; i < rects.length; i++) {
      let rect = rects[i];
      if (rect.top <= rowBot && rect.bottom >= rowTop) {
        rowBot = Math.max(rect.bottom, rowBot);
        rowTop = Math.min(rect.top, rowTop);
        let dx = rect.left > coords.left ? rect.left - coords.left : rect.right < coords.left ? coords.left - rect.right : 0;
        if (dx < dxClosest) {
          closest = child;
          dxClosest = dx;
          coordsClosest = dx && closest.nodeType == 3 ? {
            left: rect.right < coords.left ? rect.right : rect.left,
            top: coords.top
          } : coords;
          if (child.nodeType == 1 && dx)
            offset2 = childIndex + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0);
          continue;
        }
      } else if (rect.top > coords.top && !firstBelow && rect.left <= coords.left && rect.right >= coords.left) {
        firstBelow = child;
        coordsBelow = { left: Math.max(rect.left, Math.min(rect.right, coords.left)), top: rect.top };
      }
      if (!closest && (coords.left >= rect.right && coords.top >= rect.top || coords.left >= rect.left && coords.top >= rect.bottom))
        offset2 = childIndex + 1;
    }
  }
  if (!closest && firstBelow) {
    closest = firstBelow;
    coordsClosest = coordsBelow;
    dxClosest = 0;
  }
  if (closest && closest.nodeType == 3)
    return findOffsetInText(closest, coordsClosest);
  if (!closest || dxClosest && closest.nodeType == 1)
    return { node, offset: offset2 };
  return findOffsetInNode(closest, coordsClosest);
}
function findOffsetInText(node, coords) {
  let len = node.nodeValue.length;
  let range = document.createRange(), result;
  for (let i = 0; i < len; i++) {
    range.setEnd(node, i + 1);
    range.setStart(node, i);
    let rect = singleRect(range, 1);
    if (rect.top == rect.bottom)
      continue;
    if (inRect(coords, rect)) {
      result = { node, offset: i + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0) };
      break;
    }
  }
  range.detach();
  return result || { node, offset: 0 };
}
function inRect(coords, rect) {
  return coords.left >= rect.left - 1 && coords.left <= rect.right + 1 && coords.top >= rect.top - 1 && coords.top <= rect.bottom + 1;
}
function targetKludge(dom, coords) {
  let parent = dom.parentNode;
  if (parent && /^li$/i.test(parent.nodeName) && coords.left < dom.getBoundingClientRect().left)
    return parent;
  return dom;
}
function posFromElement(view, elt, coords) {
  let { node, offset: offset2 } = findOffsetInNode(elt, coords), bias = -1;
  if (node.nodeType == 1 && !node.firstChild) {
    let rect = node.getBoundingClientRect();
    bias = rect.left != rect.right && coords.left > (rect.left + rect.right) / 2 ? 1 : -1;
  }
  return view.docView.posFromDOM(node, offset2, bias);
}
function posFromCaret(view, node, offset2, coords) {
  let outsideBlock = -1;
  for (let cur = node, sawBlock = false; ; ) {
    if (cur == view.dom)
      break;
    let desc = view.docView.nearestDesc(cur, true), rect;
    if (!desc)
      return null;
    if (desc.dom.nodeType == 1 && (desc.node.isBlock && desc.parent || !desc.contentDOM) && // Ignore elements with zero-size bounding rectangles
    ((rect = desc.dom.getBoundingClientRect()).width || rect.height)) {
      if (desc.node.isBlock && desc.parent && !/^T(R|BODY|HEAD|FOOT)$/.test(desc.dom.nodeName)) {
        if (!sawBlock && rect.left > coords.left || rect.top > coords.top)
          outsideBlock = desc.posBefore;
        else if (!sawBlock && rect.right < coords.left || rect.bottom < coords.top)
          outsideBlock = desc.posAfter;
        sawBlock = true;
      }
      if (!desc.contentDOM && outsideBlock < 0 && !desc.node.isText) {
        let before = desc.node.isBlock ? coords.top < (rect.top + rect.bottom) / 2 : coords.left < (rect.left + rect.right) / 2;
        return before ? desc.posBefore : desc.posAfter;
      }
    }
    cur = desc.dom.parentNode;
  }
  return outsideBlock > -1 ? outsideBlock : view.docView.posFromDOM(node, offset2, -1);
}
function elementFromPoint(element, coords, box) {
  let len = element.childNodes.length;
  if (len && box.top < box.bottom) {
    for (let startI = Math.max(0, Math.min(len - 1, Math.floor(len * (coords.top - box.top) / (box.bottom - box.top)) - 2)), i = startI; ; ) {
      let child = element.childNodes[i];
      if (child.nodeType == 1) {
        let rects = child.getClientRects();
        for (let j2 = 0; j2 < rects.length; j2++) {
          let rect = rects[j2];
          if (inRect(coords, rect))
            return elementFromPoint(child, coords, rect);
        }
      }
      if ((i = (i + 1) % len) == startI)
        break;
    }
  }
  return element;
}
function posAtCoords(view, coords) {
  let doc2 = view.dom.ownerDocument, node, offset2 = 0;
  let caret = caretFromPoint(doc2, coords.left, coords.top);
  if (caret)
    ({ node, offset: offset2 } = caret);
  let elt = (view.root.elementFromPoint ? view.root : doc2).elementFromPoint(coords.left, coords.top);
  let pos;
  if (!elt || !view.dom.contains(elt.nodeType != 1 ? elt.parentNode : elt)) {
    let box = view.dom.getBoundingClientRect();
    if (!inRect(coords, box))
      return null;
    elt = elementFromPoint(view.dom, coords, box);
    if (!elt)
      return null;
  }
  if (safari) {
    for (let p2 = elt; node && p2; p2 = parentNode(p2))
      if (p2.draggable)
        node = void 0;
  }
  elt = targetKludge(elt, coords);
  if (node) {
    if (gecko && node.nodeType == 1) {
      offset2 = Math.min(offset2, node.childNodes.length);
      if (offset2 < node.childNodes.length) {
        let next = node.childNodes[offset2], box;
        if (next.nodeName == "IMG" && (box = next.getBoundingClientRect()).right <= coords.left && box.bottom > coords.top)
          offset2++;
      }
    }
    let prev;
    if (webkit && offset2 && node.nodeType == 1 && (prev = node.childNodes[offset2 - 1]).nodeType == 1 && prev.contentEditable == "false" && prev.getBoundingClientRect().top >= coords.top)
      offset2--;
    if (node == view.dom && offset2 == node.childNodes.length - 1 && node.lastChild.nodeType == 1 && coords.top > node.lastChild.getBoundingClientRect().bottom)
      pos = view.state.doc.content.size;
    else if (offset2 == 0 || node.nodeType != 1 || node.childNodes[offset2 - 1].nodeName != "BR")
      pos = posFromCaret(view, node, offset2, coords);
  }
  if (pos == null)
    pos = posFromElement(view, elt, coords);
  let desc = view.docView.nearestDesc(elt, true);
  return { pos, inside: desc ? desc.posAtStart - desc.border : -1 };
}
function nonZero(rect) {
  return rect.top < rect.bottom || rect.left < rect.right;
}
function singleRect(target, bias) {
  let rects = target.getClientRects();
  if (rects.length) {
    let first2 = rects[bias < 0 ? 0 : rects.length - 1];
    if (nonZero(first2))
      return first2;
  }
  return Array.prototype.find.call(rects, nonZero) || target.getBoundingClientRect();
}
const BIDI = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/;
function coordsAtPos(view, pos, side) {
  let { node, offset: offset2, atom } = view.docView.domFromPos(pos, side < 0 ? -1 : 1);
  let supportEmptyRange = webkit || gecko;
  if (node.nodeType == 3) {
    if (supportEmptyRange && (BIDI.test(node.nodeValue) || (side < 0 ? !offset2 : offset2 == node.nodeValue.length))) {
      let rect = singleRect(textRange(node, offset2, offset2), side);
      if (gecko && offset2 && /\s/.test(node.nodeValue[offset2 - 1]) && offset2 < node.nodeValue.length) {
        let rectBefore = singleRect(textRange(node, offset2 - 1, offset2 - 1), -1);
        if (rectBefore.top == rect.top) {
          let rectAfter = singleRect(textRange(node, offset2, offset2 + 1), -1);
          if (rectAfter.top != rect.top)
            return flattenV(rectAfter, rectAfter.left < rectBefore.left);
        }
      }
      return rect;
    } else {
      let from2 = offset2, to = offset2, takeSide = side < 0 ? 1 : -1;
      if (side < 0 && !offset2) {
        to++;
        takeSide = -1;
      } else if (side >= 0 && offset2 == node.nodeValue.length) {
        from2--;
        takeSide = 1;
      } else if (side < 0) {
        from2--;
      } else {
        to++;
      }
      return flattenV(singleRect(textRange(node, from2, to), takeSide), takeSide < 0);
    }
  }
  let $dom = view.state.doc.resolve(pos - (atom || 0));
  if (!$dom.parent.inlineContent) {
    if (atom == null && offset2 && (side < 0 || offset2 == nodeSize(node))) {
      let before = node.childNodes[offset2 - 1];
      if (before.nodeType == 1)
        return flattenH(before.getBoundingClientRect(), false);
    }
    if (atom == null && offset2 < nodeSize(node)) {
      let after = node.childNodes[offset2];
      if (after.nodeType == 1)
        return flattenH(after.getBoundingClientRect(), true);
    }
    return flattenH(node.getBoundingClientRect(), side >= 0);
  }
  if (atom == null && offset2 && (side < 0 || offset2 == nodeSize(node))) {
    let before = node.childNodes[offset2 - 1];
    let target = before.nodeType == 3 ? textRange(before, nodeSize(before) - (supportEmptyRange ? 0 : 1)) : before.nodeType == 1 && (before.nodeName != "BR" || !before.nextSibling) ? before : null;
    if (target)
      return flattenV(singleRect(target, 1), false);
  }
  if (atom == null && offset2 < nodeSize(node)) {
    let after = node.childNodes[offset2];
    while (after.pmViewDesc && after.pmViewDesc.ignoreForCoords)
      after = after.nextSibling;
    let target = !after ? null : after.nodeType == 3 ? textRange(after, 0, supportEmptyRange ? 0 : 1) : after.nodeType == 1 ? after : null;
    if (target)
      return flattenV(singleRect(target, -1), true);
  }
  return flattenV(singleRect(node.nodeType == 3 ? textRange(node) : node, -side), side >= 0);
}
function flattenV(rect, left) {
  if (rect.width == 0)
    return rect;
  let x2 = left ? rect.left : rect.right;
  return { top: rect.top, bottom: rect.bottom, left: x2, right: x2 };
}
function flattenH(rect, top) {
  if (rect.height == 0)
    return rect;
  let y2 = top ? rect.top : rect.bottom;
  return { top: y2, bottom: y2, left: rect.left, right: rect.right };
}
function withFlushedState(view, state, f2) {
  let viewState = view.state, active = view.root.activeElement;
  if (viewState != state)
    view.updateState(state);
  if (active != view.dom)
    view.focus();
  try {
    return f2();
  } finally {
    if (viewState != state)
      view.updateState(viewState);
    if (active != view.dom && active)
      active.focus();
  }
}
function endOfTextblockVertical(view, state, dir) {
  let sel = state.selection;
  let $pos = dir == "up" ? sel.$from : sel.$to;
  return withFlushedState(view, state, () => {
    let { node: dom } = view.docView.domFromPos($pos.pos, dir == "up" ? -1 : 1);
    for (; ; ) {
      let nearest = view.docView.nearestDesc(dom, true);
      if (!nearest)
        break;
      if (nearest.node.isBlock) {
        dom = nearest.contentDOM || nearest.dom;
        break;
      }
      dom = nearest.dom.parentNode;
    }
    let coords = coordsAtPos(view, $pos.pos, 1);
    for (let child = dom.firstChild; child; child = child.nextSibling) {
      let boxes;
      if (child.nodeType == 1)
        boxes = child.getClientRects();
      else if (child.nodeType == 3)
        boxes = textRange(child, 0, child.nodeValue.length).getClientRects();
      else
        continue;
      for (let i = 0; i < boxes.length; i++) {
        let box = boxes[i];
        if (box.bottom > box.top + 1 && (dir == "up" ? coords.top - box.top > (box.bottom - coords.top) * 2 : box.bottom - coords.bottom > (coords.bottom - box.top) * 2))
          return false;
      }
    }
    return true;
  });
}
const maybeRTL = /[\u0590-\u08ac]/;
function endOfTextblockHorizontal(view, state, dir) {
  let { $head } = state.selection;
  if (!$head.parent.isTextblock)
    return false;
  let offset2 = $head.parentOffset, atStart = !offset2, atEnd = offset2 == $head.parent.content.size;
  let sel = view.domSelection();
  if (!sel)
    return $head.pos == $head.start() || $head.pos == $head.end();
  if (!maybeRTL.test($head.parent.textContent) || !sel.modify)
    return dir == "left" || dir == "backward" ? atStart : atEnd;
  return withFlushedState(view, state, () => {
    let { focusNode: oldNode, focusOffset: oldOff, anchorNode, anchorOffset } = view.domSelectionRange();
    let oldBidiLevel = sel.caretBidiLevel;
    sel.modify("move", dir, "character");
    let parentDOM = $head.depth ? view.docView.domAfterPos($head.before()) : view.dom;
    let { focusNode: newNode, focusOffset: newOff } = view.domSelectionRange();
    let result = newNode && !parentDOM.contains(newNode.nodeType == 1 ? newNode : newNode.parentNode) || oldNode == newNode && oldOff == newOff;
    try {
      sel.collapse(anchorNode, anchorOffset);
      if (oldNode && (oldNode != anchorNode || oldOff != anchorOffset) && sel.extend)
        sel.extend(oldNode, oldOff);
    } catch (_2) {
    }
    if (oldBidiLevel != null)
      sel.caretBidiLevel = oldBidiLevel;
    return result;
  });
}
let cachedState = null;
let cachedDir = null;
let cachedResult = false;
function endOfTextblock(view, state, dir) {
  if (cachedState == state && cachedDir == dir)
    return cachedResult;
  cachedState = state;
  cachedDir = dir;
  return cachedResult = dir == "up" || dir == "down" ? endOfTextblockVertical(view, state, dir) : endOfTextblockHorizontal(view, state, dir);
}
const NOT_DIRTY = 0, CHILD_DIRTY = 1, CONTENT_DIRTY = 2, NODE_DIRTY = 3;
class ViewDesc {
  constructor(parent, children, dom, contentDOM) {
    this.parent = parent;
    this.children = children;
    this.dom = dom;
    this.contentDOM = contentDOM;
    this.dirty = NOT_DIRTY;
    dom.pmViewDesc = this;
  }
  // Used to check whether a given description corresponds to a
  // widget/mark/node.
  matchesWidget(widget) {
    return false;
  }
  matchesMark(mark) {
    return false;
  }
  matchesNode(node, outerDeco, innerDeco) {
    return false;
  }
  matchesHack(nodeName) {
    return false;
  }
  // When parsing in-editor content (in domchange.js), we allow
  // descriptions to determine the parse rules that should be used to
  // parse them.
  parseRule() {
    return null;
  }
  // Used by the editor's event handler to ignore events that come
  // from certain descs.
  stopEvent(event) {
    return false;
  }
  // The size of the content represented by this desc.
  get size() {
    let size2 = 0;
    for (let i = 0; i < this.children.length; i++)
      size2 += this.children[i].size;
    return size2;
  }
  // For block nodes, this represents the space taken up by their
  // start/end tokens.
  get border() {
    return 0;
  }
  destroy() {
    this.parent = void 0;
    if (this.dom.pmViewDesc == this)
      this.dom.pmViewDesc = void 0;
    for (let i = 0; i < this.children.length; i++)
      this.children[i].destroy();
  }
  posBeforeChild(child) {
    for (let i = 0, pos = this.posAtStart; ; i++) {
      let cur = this.children[i];
      if (cur == child)
        return pos;
      pos += cur.size;
    }
  }
  get posBefore() {
    return this.parent.posBeforeChild(this);
  }
  get posAtStart() {
    return this.parent ? this.parent.posBeforeChild(this) + this.border : 0;
  }
  get posAfter() {
    return this.posBefore + this.size;
  }
  get posAtEnd() {
    return this.posAtStart + this.size - 2 * this.border;
  }
  localPosFromDOM(dom, offset2, bias) {
    if (this.contentDOM && this.contentDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode)) {
      if (bias < 0) {
        let domBefore, desc;
        if (dom == this.contentDOM) {
          domBefore = dom.childNodes[offset2 - 1];
        } else {
          while (dom.parentNode != this.contentDOM)
            dom = dom.parentNode;
          domBefore = dom.previousSibling;
        }
        while (domBefore && !((desc = domBefore.pmViewDesc) && desc.parent == this))
          domBefore = domBefore.previousSibling;
        return domBefore ? this.posBeforeChild(desc) + desc.size : this.posAtStart;
      } else {
        let domAfter, desc;
        if (dom == this.contentDOM) {
          domAfter = dom.childNodes[offset2];
        } else {
          while (dom.parentNode != this.contentDOM)
            dom = dom.parentNode;
          domAfter = dom.nextSibling;
        }
        while (domAfter && !((desc = domAfter.pmViewDesc) && desc.parent == this))
          domAfter = domAfter.nextSibling;
        return domAfter ? this.posBeforeChild(desc) : this.posAtEnd;
      }
    }
    let atEnd;
    if (dom == this.dom && this.contentDOM) {
      atEnd = offset2 > domIndex(this.contentDOM);
    } else if (this.contentDOM && this.contentDOM != this.dom && this.dom.contains(this.contentDOM)) {
      atEnd = dom.compareDocumentPosition(this.contentDOM) & 2;
    } else if (this.dom.firstChild) {
      if (offset2 == 0)
        for (let search = dom; ; search = search.parentNode) {
          if (search == this.dom) {
            atEnd = false;
            break;
          }
          if (search.previousSibling)
            break;
        }
      if (atEnd == null && offset2 == dom.childNodes.length)
        for (let search = dom; ; search = search.parentNode) {
          if (search == this.dom) {
            atEnd = true;
            break;
          }
          if (search.nextSibling)
            break;
        }
    }
    return (atEnd == null ? bias > 0 : atEnd) ? this.posAtEnd : this.posAtStart;
  }
  nearestDesc(dom, onlyNodes = false) {
    for (let first2 = true, cur = dom; cur; cur = cur.parentNode) {
      let desc = this.getDesc(cur), nodeDOM;
      if (desc && (!onlyNodes || desc.node)) {
        if (first2 && (nodeDOM = desc.nodeDOM) && !(nodeDOM.nodeType == 1 ? nodeDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode) : nodeDOM == dom))
          first2 = false;
        else
          return desc;
      }
    }
  }
  getDesc(dom) {
    let desc = dom.pmViewDesc;
    for (let cur = desc; cur; cur = cur.parent)
      if (cur == this)
        return desc;
  }
  posFromDOM(dom, offset2, bias) {
    for (let scan = dom; scan; scan = scan.parentNode) {
      let desc = this.getDesc(scan);
      if (desc)
        return desc.localPosFromDOM(dom, offset2, bias);
    }
    return -1;
  }
  // Find the desc for the node after the given pos, if any. (When a
  // parent node overrode rendering, there might not be one.)
  descAt(pos) {
    for (let i = 0, offset2 = 0; i < this.children.length; i++) {
      let child = this.children[i], end = offset2 + child.size;
      if (offset2 == pos && end != offset2) {
        while (!child.border && child.children.length) {
          for (let i2 = 0; i2 < child.children.length; i2++) {
            let inner = child.children[i2];
            if (inner.size) {
              child = inner;
              break;
            }
          }
        }
        return child;
      }
      if (pos < end)
        return child.descAt(pos - offset2 - child.border);
      offset2 = end;
    }
  }
  domFromPos(pos, side) {
    if (!this.contentDOM)
      return { node: this.dom, offset: 0, atom: pos + 1 };
    let i = 0, offset2 = 0;
    for (let curPos = 0; i < this.children.length; i++) {
      let child = this.children[i], end = curPos + child.size;
      if (end > pos || child instanceof TrailingHackViewDesc) {
        offset2 = pos - curPos;
        break;
      }
      curPos = end;
    }
    if (offset2)
      return this.children[i].domFromPos(offset2 - this.children[i].border, side);
    for (let prev; i && !(prev = this.children[i - 1]).size && prev instanceof WidgetViewDesc && prev.side >= 0; i--) {
    }
    if (side <= 0) {
      let prev, enter2 = true;
      for (; ; i--, enter2 = false) {
        prev = i ? this.children[i - 1] : null;
        if (!prev || prev.dom.parentNode == this.contentDOM)
          break;
      }
      if (prev && side && enter2 && !prev.border && !prev.domAtom)
        return prev.domFromPos(prev.size, side);
      return { node: this.contentDOM, offset: prev ? domIndex(prev.dom) + 1 : 0 };
    } else {
      let next, enter2 = true;
      for (; ; i++, enter2 = false) {
        next = i < this.children.length ? this.children[i] : null;
        if (!next || next.dom.parentNode == this.contentDOM)
          break;
      }
      if (next && enter2 && !next.border && !next.domAtom)
        return next.domFromPos(0, side);
      return { node: this.contentDOM, offset: next ? domIndex(next.dom) : this.contentDOM.childNodes.length };
    }
  }
  // Used to find a DOM range in a single parent for a given changed
  // range.
  parseRange(from2, to, base2 = 0) {
    if (this.children.length == 0)
      return { node: this.contentDOM, from: from2, to, fromOffset: 0, toOffset: this.contentDOM.childNodes.length };
    let fromOffset = -1, toOffset = -1;
    for (let offset2 = base2, i = 0; ; i++) {
      let child = this.children[i], end = offset2 + child.size;
      if (fromOffset == -1 && from2 <= end) {
        let childBase = offset2 + child.border;
        if (from2 >= childBase && to <= end - child.border && child.node && child.contentDOM && this.contentDOM.contains(child.contentDOM))
          return child.parseRange(from2, to, childBase);
        from2 = offset2;
        for (let j2 = i; j2 > 0; j2--) {
          let prev = this.children[j2 - 1];
          if (prev.size && prev.dom.parentNode == this.contentDOM && !prev.emptyChildAt(1)) {
            fromOffset = domIndex(prev.dom) + 1;
            break;
          }
          from2 -= prev.size;
        }
        if (fromOffset == -1)
          fromOffset = 0;
      }
      if (fromOffset > -1 && (end > to || i == this.children.length - 1)) {
        to = end;
        for (let j2 = i + 1; j2 < this.children.length; j2++) {
          let next = this.children[j2];
          if (next.size && next.dom.parentNode == this.contentDOM && !next.emptyChildAt(-1)) {
            toOffset = domIndex(next.dom);
            break;
          }
          to += next.size;
        }
        if (toOffset == -1)
          toOffset = this.contentDOM.childNodes.length;
        break;
      }
      offset2 = end;
    }
    return { node: this.contentDOM, from: from2, to, fromOffset, toOffset };
  }
  emptyChildAt(side) {
    if (this.border || !this.contentDOM || !this.children.length)
      return false;
    let child = this.children[side < 0 ? 0 : this.children.length - 1];
    return child.size == 0 || child.emptyChildAt(side);
  }
  domAfterPos(pos) {
    let { node, offset: offset2 } = this.domFromPos(pos, 0);
    if (node.nodeType != 1 || offset2 == node.childNodes.length)
      throw new RangeError("No node after pos " + pos);
    return node.childNodes[offset2];
  }
  // View descs are responsible for setting any selection that falls
  // entirely inside of them, so that custom implementations can do
  // custom things with the selection. Note that this falls apart when
  // a selection starts in such a node and ends in another, in which
  // case we just use whatever domFromPos produces as a best effort.
  setSelection(anchor, head, view, force = false) {
    let from2 = Math.min(anchor, head), to = Math.max(anchor, head);
    for (let i = 0, offset2 = 0; i < this.children.length; i++) {
      let child = this.children[i], end = offset2 + child.size;
      if (from2 > offset2 && to < end)
        return child.setSelection(anchor - offset2 - child.border, head - offset2 - child.border, view, force);
      offset2 = end;
    }
    let anchorDOM = this.domFromPos(anchor, anchor ? -1 : 1);
    let headDOM = head == anchor ? anchorDOM : this.domFromPos(head, head ? -1 : 1);
    let domSel = view.root.getSelection();
    let selRange = view.domSelectionRange();
    let brKludge = false;
    if ((gecko || safari) && anchor == head) {
      let { node, offset: offset2 } = anchorDOM;
      if (node.nodeType == 3) {
        brKludge = !!(offset2 && node.nodeValue[offset2 - 1] == "\n");
        if (brKludge && offset2 == node.nodeValue.length) {
          for (let scan = node, after; scan; scan = scan.parentNode) {
            if (after = scan.nextSibling) {
              if (after.nodeName == "BR")
                anchorDOM = headDOM = { node: after.parentNode, offset: domIndex(after) + 1 };
              break;
            }
            let desc = scan.pmViewDesc;
            if (desc && desc.node && desc.node.isBlock)
              break;
          }
        }
      } else {
        let prev = node.childNodes[offset2 - 1];
        brKludge = prev && (prev.nodeName == "BR" || prev.contentEditable == "false");
      }
    }
    if (gecko && selRange.focusNode && selRange.focusNode != headDOM.node && selRange.focusNode.nodeType == 1) {
      let after = selRange.focusNode.childNodes[selRange.focusOffset];
      if (after && after.contentEditable == "false")
        force = true;
    }
    if (!(force || brKludge && safari) && isEquivalentPosition(anchorDOM.node, anchorDOM.offset, selRange.anchorNode, selRange.anchorOffset) && isEquivalentPosition(headDOM.node, headDOM.offset, selRange.focusNode, selRange.focusOffset))
      return;
    let domSelExtended = false;
    if ((domSel.extend || anchor == head) && !(brKludge && gecko)) {
      domSel.collapse(anchorDOM.node, anchorDOM.offset);
      try {
        if (anchor != head)
          domSel.extend(headDOM.node, headDOM.offset);
        domSelExtended = true;
      } catch (_2) {
      }
    }
    if (!domSelExtended) {
      if (anchor > head) {
        let tmp = anchorDOM;
        anchorDOM = headDOM;
        headDOM = tmp;
      }
      let range = document.createRange();
      range.setEnd(headDOM.node, headDOM.offset);
      range.setStart(anchorDOM.node, anchorDOM.offset);
      domSel.removeAllRanges();
      domSel.addRange(range);
    }
  }
  ignoreMutation(mutation) {
    return !this.contentDOM && mutation.type != "selection";
  }
  get contentLost() {
    return this.contentDOM && this.contentDOM != this.dom && !this.dom.contains(this.contentDOM);
  }
  // Remove a subtree of the element tree that has been touched
  // by a DOM change, so that the next update will redraw it.
  markDirty(from2, to) {
    for (let offset2 = 0, i = 0; i < this.children.length; i++) {
      let child = this.children[i], end = offset2 + child.size;
      if (offset2 == end ? from2 <= end && to >= offset2 : from2 < end && to > offset2) {
        let startInside = offset2 + child.border, endInside = end - child.border;
        if (from2 >= startInside && to <= endInside) {
          this.dirty = from2 == offset2 || to == end ? CONTENT_DIRTY : CHILD_DIRTY;
          if (from2 == startInside && to == endInside && (child.contentLost || child.dom.parentNode != this.contentDOM))
            child.dirty = NODE_DIRTY;
          else
            child.markDirty(from2 - startInside, to - startInside);
          return;
        } else {
          child.dirty = child.dom == child.contentDOM && child.dom.parentNode == this.contentDOM && !child.children.length ? CONTENT_DIRTY : NODE_DIRTY;
        }
      }
      offset2 = end;
    }
    this.dirty = CONTENT_DIRTY;
  }
  markParentsDirty() {
    let level = 1;
    for (let node = this.parent; node; node = node.parent, level++) {
      let dirty = level == 1 ? CONTENT_DIRTY : CHILD_DIRTY;
      if (node.dirty < dirty)
        node.dirty = dirty;
    }
  }
  get domAtom() {
    return false;
  }
  get ignoreForCoords() {
    return false;
  }
  get ignoreForSelection() {
    return false;
  }
  isText(text) {
    return false;
  }
}
class WidgetViewDesc extends ViewDesc {
  constructor(parent, widget, view, pos) {
    let self2, dom = widget.type.toDOM;
    if (typeof dom == "function")
      dom = dom(view, () => {
        if (!self2)
          return pos;
        if (self2.parent)
          return self2.parent.posBeforeChild(self2);
      });
    if (!widget.type.spec.raw) {
      if (dom.nodeType != 1) {
        let wrap2 = document.createElement("span");
        wrap2.appendChild(dom);
        dom = wrap2;
      }
      dom.contentEditable = "false";
      dom.classList.add("ProseMirror-widget");
    }
    super(parent, [], dom, null);
    this.widget = widget;
    this.widget = widget;
    self2 = this;
  }
  matchesWidget(widget) {
    return this.dirty == NOT_DIRTY && widget.type.eq(this.widget.type);
  }
  parseRule() {
    return { ignore: true };
  }
  stopEvent(event) {
    let stop = this.widget.spec.stopEvent;
    return stop ? stop(event) : false;
  }
  ignoreMutation(mutation) {
    return mutation.type != "selection" || this.widget.spec.ignoreSelection;
  }
  destroy() {
    this.widget.type.destroy(this.dom);
    super.destroy();
  }
  get domAtom() {
    return true;
  }
  get ignoreForSelection() {
    return !!this.widget.type.spec.relaxedSide;
  }
  get side() {
    return this.widget.type.side;
  }
}
class CompositionViewDesc extends ViewDesc {
  constructor(parent, dom, textDOM, text) {
    super(parent, [], dom, null);
    this.textDOM = textDOM;
    this.text = text;
  }
  get size() {
    return this.text.length;
  }
  localPosFromDOM(dom, offset2) {
    if (dom != this.textDOM)
      return this.posAtStart + (offset2 ? this.size : 0);
    return this.posAtStart + offset2;
  }
  domFromPos(pos) {
    return { node: this.textDOM, offset: pos };
  }
  ignoreMutation(mut) {
    return mut.type === "characterData" && mut.target.nodeValue == mut.oldValue;
  }
}
class MarkViewDesc extends ViewDesc {
  constructor(parent, mark, dom, contentDOM, spec) {
    super(parent, [], dom, contentDOM);
    this.mark = mark;
    this.spec = spec;
  }
  static create(parent, mark, inline2, view) {
    let custom = view.nodeViews[mark.type.name];
    let spec = custom && custom(mark, view, inline2);
    if (!spec || !spec.dom)
      spec = DOMSerializer.renderSpec(document, mark.type.spec.toDOM(mark, inline2), null, mark.attrs);
    return new MarkViewDesc(parent, mark, spec.dom, spec.contentDOM || spec.dom, spec);
  }
  parseRule() {
    if (this.dirty & NODE_DIRTY || this.mark.type.spec.reparseInView)
      return null;
    return { mark: this.mark.type.name, attrs: this.mark.attrs, contentElement: this.contentDOM };
  }
  matchesMark(mark) {
    return this.dirty != NODE_DIRTY && this.mark.eq(mark);
  }
  markDirty(from2, to) {
    super.markDirty(from2, to);
    if (this.dirty != NOT_DIRTY) {
      let parent = this.parent;
      while (!parent.node)
        parent = parent.parent;
      if (parent.dirty < this.dirty)
        parent.dirty = this.dirty;
      this.dirty = NOT_DIRTY;
    }
  }
  slice(from2, to, view) {
    let copy2 = MarkViewDesc.create(this.parent, this.mark, true, view);
    let nodes = this.children, size2 = this.size;
    if (to < size2)
      nodes = replaceNodes(nodes, to, size2, view);
    if (from2 > 0)
      nodes = replaceNodes(nodes, 0, from2, view);
    for (let i = 0; i < nodes.length; i++)
      nodes[i].parent = copy2;
    copy2.children = nodes;
    return copy2;
  }
  ignoreMutation(mutation) {
    return this.spec.ignoreMutation ? this.spec.ignoreMutation(mutation) : super.ignoreMutation(mutation);
  }
  destroy() {
    if (this.spec.destroy)
      this.spec.destroy();
    super.destroy();
  }
}
class NodeViewDesc extends ViewDesc {
  constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos) {
    super(parent, [], dom, contentDOM);
    this.node = node;
    this.outerDeco = outerDeco;
    this.innerDeco = innerDeco;
    this.nodeDOM = nodeDOM;
  }
  // By default, a node is rendered using the `toDOM` method from the
  // node type spec. But client code can use the `nodeViews` spec to
  // supply a custom node view, which can influence various aspects of
  // the way the node works.
  //
  // (Using subclassing for this was intentionally decided against,
  // since it'd require exposing a whole slew of finicky
  // implementation details to the user code that they probably will
  // never need.)
  static create(parent, node, outerDeco, innerDeco, view, pos) {
    let custom = view.nodeViews[node.type.name], descObj;
    let spec = custom && custom(node, view, () => {
      if (!descObj)
        return pos;
      if (descObj.parent)
        return descObj.parent.posBeforeChild(descObj);
    }, outerDeco, innerDeco);
    let dom = spec && spec.dom, contentDOM = spec && spec.contentDOM;
    if (node.isText) {
      if (!dom)
        dom = document.createTextNode(node.text);
      else if (dom.nodeType != 3)
        throw new RangeError("Text must be rendered as a DOM text node");
    } else if (!dom) {
      let spec2 = DOMSerializer.renderSpec(document, node.type.spec.toDOM(node), null, node.attrs);
      ({ dom, contentDOM } = spec2);
    }
    if (!contentDOM && !node.isText && dom.nodeName != "BR") {
      if (!dom.hasAttribute("contenteditable"))
        dom.contentEditable = "false";
      if (node.type.spec.draggable)
        dom.draggable = true;
    }
    let nodeDOM = dom;
    dom = applyOuterDeco(dom, outerDeco, node);
    if (spec)
      return descObj = new CustomNodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, spec, view, pos + 1);
    else if (node.isText)
      return new TextViewDesc(parent, node, outerDeco, innerDeco, dom, nodeDOM, view);
    else
      return new NodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, view, pos + 1);
  }
  parseRule() {
    if (this.node.type.spec.reparseInView)
      return null;
    let rule = { node: this.node.type.name, attrs: this.node.attrs };
    if (this.node.type.whitespace == "pre")
      rule.preserveWhitespace = "full";
    if (!this.contentDOM) {
      rule.getContent = () => this.node.content;
    } else if (!this.contentLost) {
      rule.contentElement = this.contentDOM;
    } else {
      for (let i = this.children.length - 1; i >= 0; i--) {
        let child = this.children[i];
        if (this.dom.contains(child.dom.parentNode)) {
          rule.contentElement = child.dom.parentNode;
          break;
        }
      }
      if (!rule.contentElement)
        rule.getContent = () => Fragment.empty;
    }
    return rule;
  }
  matchesNode(node, outerDeco, innerDeco) {
    return this.dirty == NOT_DIRTY && node.eq(this.node) && sameOuterDeco(outerDeco, this.outerDeco) && innerDeco.eq(this.innerDeco);
  }
  get size() {
    return this.node.nodeSize;
  }
  get border() {
    return this.node.isLeaf ? 0 : 1;
  }
  // Syncs `this.children` to match `this.node.content` and the local
  // decorations, possibly introducing nesting for marks. Then, in a
  // separate step, syncs the DOM inside `this.contentDOM` to
  // `this.children`.
  updateChildren(view, pos) {
    let inline2 = this.node.inlineContent, off = pos;
    let composition = view.composing ? this.localCompositionInfo(view, pos) : null;
    let localComposition = composition && composition.pos > -1 ? composition : null;
    let compositionInChild = composition && composition.pos < 0;
    let updater = new ViewTreeUpdater(this, localComposition && localComposition.node, view);
    iterDeco(this.node, this.innerDeco, (widget, i, insideNode) => {
      if (widget.spec.marks)
        updater.syncToMarks(widget.spec.marks, inline2, view, i);
      else if (widget.type.side >= 0 && !insideNode)
        updater.syncToMarks(i == this.node.childCount ? Mark$1.none : this.node.child(i).marks, inline2, view, i);
      updater.placeWidget(widget, view, off);
    }, (child, outerDeco, innerDeco, i) => {
      updater.syncToMarks(child.marks, inline2, view, i);
      let compIndex;
      if (updater.findNodeMatch(child, outerDeco, innerDeco, i)) ;
      else if (compositionInChild && view.state.selection.from > off && view.state.selection.to < off + child.nodeSize && (compIndex = updater.findIndexWithChild(composition.node)) > -1 && updater.updateNodeAt(child, outerDeco, innerDeco, compIndex, view)) ;
      else if (updater.updateNextNode(child, outerDeco, innerDeco, view, i, off)) ;
      else {
        updater.addNode(child, outerDeco, innerDeco, view, off);
      }
      off += child.nodeSize;
    });
    updater.syncToMarks([], inline2, view, 0);
    if (this.node.isTextblock)
      updater.addTextblockHacks();
    updater.destroyRest();
    if (updater.changed || this.dirty == CONTENT_DIRTY) {
      if (localComposition)
        this.protectLocalComposition(view, localComposition);
      renderDescs(this.contentDOM, this.children, view);
      if (ios)
        iosHacks(this.dom);
    }
  }
  localCompositionInfo(view, pos) {
    let { from: from2, to } = view.state.selection;
    if (!(view.state.selection instanceof TextSelection) || from2 < pos || to > pos + this.node.content.size)
      return null;
    let textNode = view.input.compositionNode;
    if (!textNode || !this.dom.contains(textNode.parentNode))
      return null;
    if (this.node.inlineContent) {
      let text = textNode.nodeValue;
      let textPos = findTextInFragment(this.node.content, text, from2 - pos, to - pos);
      return textPos < 0 ? null : { node: textNode, pos: textPos, text };
    } else {
      return { node: textNode, pos: -1, text: "" };
    }
  }
  protectLocalComposition(view, { node, pos, text }) {
    if (this.getDesc(node))
      return;
    let topNode = node;
    for (; ; topNode = topNode.parentNode) {
      if (topNode.parentNode == this.contentDOM)
        break;
      while (topNode.previousSibling)
        topNode.parentNode.removeChild(topNode.previousSibling);
      while (topNode.nextSibling)
        topNode.parentNode.removeChild(topNode.nextSibling);
      if (topNode.pmViewDesc)
        topNode.pmViewDesc = void 0;
    }
    let desc = new CompositionViewDesc(this, topNode, node, text);
    view.input.compositionNodes.push(desc);
    this.children = replaceNodes(this.children, pos, pos + text.length, view, desc);
  }
  // If this desc must be updated to match the given node decoration,
  // do so and return true.
  update(node, outerDeco, innerDeco, view) {
    if (this.dirty == NODE_DIRTY || !node.sameMarkup(this.node))
      return false;
    this.updateInner(node, outerDeco, innerDeco, view);
    return true;
  }
  updateInner(node, outerDeco, innerDeco, view) {
    this.updateOuterDeco(outerDeco);
    this.node = node;
    this.innerDeco = innerDeco;
    if (this.contentDOM)
      this.updateChildren(view, this.posAtStart);
    this.dirty = NOT_DIRTY;
  }
  updateOuterDeco(outerDeco) {
    if (sameOuterDeco(outerDeco, this.outerDeco))
      return;
    let needsWrap = this.nodeDOM.nodeType != 1;
    let oldDOM = this.dom;
    this.dom = patchOuterDeco(this.dom, this.nodeDOM, computeOuterDeco(this.outerDeco, this.node, needsWrap), computeOuterDeco(outerDeco, this.node, needsWrap));
    if (this.dom != oldDOM) {
      oldDOM.pmViewDesc = void 0;
      this.dom.pmViewDesc = this;
    }
    this.outerDeco = outerDeco;
  }
  // Mark this node as being the selected node.
  selectNode() {
    if (this.nodeDOM.nodeType == 1) {
      this.nodeDOM.classList.add("ProseMirror-selectednode");
      if (this.contentDOM || !this.node.type.spec.draggable)
        this.nodeDOM.draggable = true;
    }
  }
  // Remove selected node marking from this node.
  deselectNode() {
    if (this.nodeDOM.nodeType == 1) {
      this.nodeDOM.classList.remove("ProseMirror-selectednode");
      if (this.contentDOM || !this.node.type.spec.draggable)
        this.nodeDOM.removeAttribute("draggable");
    }
  }
  get domAtom() {
    return this.node.isAtom;
  }
}
function docViewDesc(doc2, outerDeco, innerDeco, dom, view) {
  applyOuterDeco(dom, outerDeco, doc2);
  let docView = new NodeViewDesc(void 0, doc2, outerDeco, innerDeco, dom, dom, dom, view, 0);
  if (docView.contentDOM)
    docView.updateChildren(view, 0);
  return docView;
}
class TextViewDesc extends NodeViewDesc {
  constructor(parent, node, outerDeco, innerDeco, dom, nodeDOM, view) {
    super(parent, node, outerDeco, innerDeco, dom, null, nodeDOM, view, 0);
  }
  parseRule() {
    let skip = this.nodeDOM.parentNode;
    while (skip && skip != this.dom && !skip.pmIsDeco)
      skip = skip.parentNode;
    return { skip: skip || true };
  }
  update(node, outerDeco, innerDeco, view) {
    if (this.dirty == NODE_DIRTY || this.dirty != NOT_DIRTY && !this.inParent() || !node.sameMarkup(this.node))
      return false;
    this.updateOuterDeco(outerDeco);
    if ((this.dirty != NOT_DIRTY || node.text != this.node.text) && node.text != this.nodeDOM.nodeValue) {
      this.nodeDOM.nodeValue = node.text;
      if (view.trackWrites == this.nodeDOM)
        view.trackWrites = null;
    }
    this.node = node;
    this.dirty = NOT_DIRTY;
    return true;
  }
  inParent() {
    let parentDOM = this.parent.contentDOM;
    for (let n2 = this.nodeDOM; n2; n2 = n2.parentNode)
      if (n2 == parentDOM)
        return true;
    return false;
  }
  domFromPos(pos) {
    return { node: this.nodeDOM, offset: pos };
  }
  localPosFromDOM(dom, offset2, bias) {
    if (dom == this.nodeDOM)
      return this.posAtStart + Math.min(offset2, this.node.text.length);
    return super.localPosFromDOM(dom, offset2, bias);
  }
  ignoreMutation(mutation) {
    return mutation.type != "characterData" && mutation.type != "selection";
  }
  slice(from2, to, view) {
    let node = this.node.cut(from2, to), dom = document.createTextNode(node.text);
    return new TextViewDesc(this.parent, node, this.outerDeco, this.innerDeco, dom, dom, view);
  }
  markDirty(from2, to) {
    super.markDirty(from2, to);
    if (this.dom != this.nodeDOM && (from2 == 0 || to == this.nodeDOM.nodeValue.length))
      this.dirty = NODE_DIRTY;
  }
  get domAtom() {
    return false;
  }
  isText(text) {
    return this.node.text == text;
  }
}
class TrailingHackViewDesc extends ViewDesc {
  parseRule() {
    return { ignore: true };
  }
  matchesHack(nodeName) {
    return this.dirty == NOT_DIRTY && this.dom.nodeName == nodeName;
  }
  get domAtom() {
    return true;
  }
  get ignoreForCoords() {
    return this.dom.nodeName == "IMG";
  }
}
class CustomNodeViewDesc extends NodeViewDesc {
  constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, spec, view, pos) {
    super(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos);
    this.spec = spec;
  }
  // A custom `update` method gets to decide whether the update goes
  // through. If it does, and there's a `contentDOM` node, our logic
  // updates the children.
  update(node, outerDeco, innerDeco, view) {
    if (this.dirty == NODE_DIRTY)
      return false;
    if (this.spec.update && (this.node.type == node.type || this.spec.multiType)) {
      let result = this.spec.update(node, outerDeco, innerDeco);
      if (result)
        this.updateInner(node, outerDeco, innerDeco, view);
      return result;
    } else if (!this.contentDOM && !node.isLeaf) {
      return false;
    } else {
      return super.update(node, outerDeco, innerDeco, view);
    }
  }
  selectNode() {
    this.spec.selectNode ? this.spec.selectNode() : super.selectNode();
  }
  deselectNode() {
    this.spec.deselectNode ? this.spec.deselectNode() : super.deselectNode();
  }
  setSelection(anchor, head, view, force) {
    this.spec.setSelection ? this.spec.setSelection(anchor, head, view.root) : super.setSelection(anchor, head, view, force);
  }
  destroy() {
    if (this.spec.destroy)
      this.spec.destroy();
    super.destroy();
  }
  stopEvent(event) {
    return this.spec.stopEvent ? this.spec.stopEvent(event) : false;
  }
  ignoreMutation(mutation) {
    return this.spec.ignoreMutation ? this.spec.ignoreMutation(mutation) : super.ignoreMutation(mutation);
  }
}
function renderDescs(parentDOM, descs, view) {
  let dom = parentDOM.firstChild, written = false;
  for (let i = 0; i < descs.length; i++) {
    let desc = descs[i], childDOM = desc.dom;
    if (childDOM.parentNode == parentDOM) {
      while (childDOM != dom) {
        dom = rm(dom);
        written = true;
      }
      dom = dom.nextSibling;
    } else {
      written = true;
      parentDOM.insertBefore(childDOM, dom);
    }
    if (desc instanceof MarkViewDesc) {
      let pos = dom ? dom.previousSibling : parentDOM.lastChild;
      renderDescs(desc.contentDOM, desc.children, view);
      dom = pos ? pos.nextSibling : parentDOM.firstChild;
    }
  }
  while (dom) {
    dom = rm(dom);
    written = true;
  }
  if (written && view.trackWrites == parentDOM)
    view.trackWrites = null;
}
const OuterDecoLevel = function(nodeName) {
  if (nodeName)
    this.nodeName = nodeName;
};
OuterDecoLevel.prototype = /* @__PURE__ */ Object.create(null);
const noDeco = [new OuterDecoLevel()];
function computeOuterDeco(outerDeco, node, needsWrap) {
  if (outerDeco.length == 0)
    return noDeco;
  let top = needsWrap ? noDeco[0] : new OuterDecoLevel(), result = [top];
  for (let i = 0; i < outerDeco.length; i++) {
    let attrs = outerDeco[i].type.attrs;
    if (!attrs)
      continue;
    if (attrs.nodeName)
      result.push(top = new OuterDecoLevel(attrs.nodeName));
    for (let name in attrs) {
      let val = attrs[name];
      if (val == null)
        continue;
      if (needsWrap && result.length == 1)
        result.push(top = new OuterDecoLevel(node.isInline ? "span" : "div"));
      if (name == "class")
        top.class = (top.class ? top.class + " " : "") + val;
      else if (name == "style")
        top.style = (top.style ? top.style + ";" : "") + val;
      else if (name != "nodeName")
        top[name] = val;
    }
  }
  return result;
}
function patchOuterDeco(outerDOM, nodeDOM, prevComputed, curComputed) {
  if (prevComputed == noDeco && curComputed == noDeco)
    return nodeDOM;
  let curDOM = nodeDOM;
  for (let i = 0; i < curComputed.length; i++) {
    let deco = curComputed[i], prev = prevComputed[i];
    if (i) {
      let parent;
      if (prev && prev.nodeName == deco.nodeName && curDOM != outerDOM && (parent = curDOM.parentNode) && parent.nodeName.toLowerCase() == deco.nodeName) {
        curDOM = parent;
      } else {
        parent = document.createElement(deco.nodeName);
        parent.pmIsDeco = true;
        parent.appendChild(curDOM);
        prev = noDeco[0];
        curDOM = parent;
      }
    }
    patchAttributes(curDOM, prev || noDeco[0], deco);
  }
  return curDOM;
}
function patchAttributes(dom, prev, cur) {
  for (let name in prev)
    if (name != "class" && name != "style" && name != "nodeName" && !(name in cur))
      dom.removeAttribute(name);
  for (let name in cur)
    if (name != "class" && name != "style" && name != "nodeName" && cur[name] != prev[name])
      dom.setAttribute(name, cur[name]);
  if (prev.class != cur.class) {
    let prevList = prev.class ? prev.class.split(" ").filter(Boolean) : [];
    let curList = cur.class ? cur.class.split(" ").filter(Boolean) : [];
    for (let i = 0; i < prevList.length; i++)
      if (curList.indexOf(prevList[i]) == -1)
        dom.classList.remove(prevList[i]);
    for (let i = 0; i < curList.length; i++)
      if (prevList.indexOf(curList[i]) == -1)
        dom.classList.add(curList[i]);
    if (dom.classList.length == 0)
      dom.removeAttribute("class");
  }
  if (prev.style != cur.style) {
    if (prev.style) {
      let prop = /\s*([\w\-\xa1-\uffff]+)\s*:(?:"(?:\\.|[^"])*"|'(?:\\.|[^'])*'|\(.*?\)|[^;])*/g, m2;
      while (m2 = prop.exec(prev.style))
        dom.style.removeProperty(m2[1]);
    }
    if (cur.style)
      dom.style.cssText += cur.style;
  }
}
function applyOuterDeco(dom, deco, node) {
  return patchOuterDeco(dom, dom, noDeco, computeOuterDeco(deco, node, dom.nodeType != 1));
}
function sameOuterDeco(a2, b2) {
  if (a2.length != b2.length)
    return false;
  for (let i = 0; i < a2.length; i++)
    if (!a2[i].type.eq(b2[i].type))
      return false;
  return true;
}
function rm(dom) {
  let next = dom.nextSibling;
  dom.parentNode.removeChild(dom);
  return next;
}
class ViewTreeUpdater {
  constructor(top, lock, view) {
    this.lock = lock;
    this.view = view;
    this.index = 0;
    this.stack = [];
    this.changed = false;
    this.top = top;
    this.preMatch = preMatch(top.node.content, top);
  }
  // Destroy and remove the children between the given indices in
  // `this.top`.
  destroyBetween(start, end) {
    if (start == end)
      return;
    for (let i = start; i < end; i++)
      this.top.children[i].destroy();
    this.top.children.splice(start, end - start);
    this.changed = true;
  }
  // Destroy all remaining children in `this.top`.
  destroyRest() {
    this.destroyBetween(this.index, this.top.children.length);
  }
  // Sync the current stack of mark descs with the given array of
  // marks, reusing existing mark descs when possible.
  syncToMarks(marks, inline2, view, parentIndex) {
    let keep = 0, depth = this.stack.length >> 1;
    let maxKeep = Math.min(depth, marks.length);
    while (keep < maxKeep && (keep == depth - 1 ? this.top : this.stack[keep + 1 << 1]).matchesMark(marks[keep]) && marks[keep].type.spec.spanning !== false)
      keep++;
    while (keep < depth) {
      this.destroyRest();
      this.top.dirty = NOT_DIRTY;
      this.index = this.stack.pop();
      this.top = this.stack.pop();
      depth--;
    }
    while (depth < marks.length) {
      this.stack.push(this.top, this.index + 1);
      let found2 = -1, scanTo = this.top.children.length;
      if (parentIndex < this.preMatch.index)
        scanTo = Math.min(this.index + 3, scanTo);
      for (let i = this.index; i < scanTo; i++) {
        let next = this.top.children[i];
        if (next.matchesMark(marks[depth]) && !this.isLocked(next.dom)) {
          found2 = i;
          break;
        }
      }
      if (found2 > -1) {
        if (found2 > this.index) {
          this.changed = true;
          this.destroyBetween(this.index, found2);
        }
        this.top = this.top.children[this.index];
      } else {
        let markDesc = MarkViewDesc.create(this.top, marks[depth], inline2, view);
        this.top.children.splice(this.index, 0, markDesc);
        this.top = markDesc;
        this.changed = true;
      }
      this.index = 0;
      depth++;
    }
  }
  // Try to find a node desc matching the given data. Skip over it and
  // return true when successful.
  findNodeMatch(node, outerDeco, innerDeco, index2) {
    let found2 = -1, targetDesc;
    if (index2 >= this.preMatch.index && (targetDesc = this.preMatch.matches[index2 - this.preMatch.index]).parent == this.top && targetDesc.matchesNode(node, outerDeco, innerDeco)) {
      found2 = this.top.children.indexOf(targetDesc, this.index);
    } else {
      for (let i = this.index, e = Math.min(this.top.children.length, i + 5); i < e; i++) {
        let child = this.top.children[i];
        if (child.matchesNode(node, outerDeco, innerDeco) && !this.preMatch.matched.has(child)) {
          found2 = i;
          break;
        }
      }
    }
    if (found2 < 0)
      return false;
    this.destroyBetween(this.index, found2);
    this.index++;
    return true;
  }
  updateNodeAt(node, outerDeco, innerDeco, index2, view) {
    let child = this.top.children[index2];
    if (child.dirty == NODE_DIRTY && child.dom == child.contentDOM)
      child.dirty = CONTENT_DIRTY;
    if (!child.update(node, outerDeco, innerDeco, view))
      return false;
    this.destroyBetween(this.index, index2);
    this.index++;
    return true;
  }
  findIndexWithChild(domNode) {
    for (; ; ) {
      let parent = domNode.parentNode;
      if (!parent)
        return -1;
      if (parent == this.top.contentDOM) {
        let desc = domNode.pmViewDesc;
        if (desc)
          for (let i = this.index; i < this.top.children.length; i++) {
            if (this.top.children[i] == desc)
              return i;
          }
        return -1;
      }
      domNode = parent;
    }
  }
  // Try to update the next node, if any, to the given data. Checks
  // pre-matches to avoid overwriting nodes that could still be used.
  updateNextNode(node, outerDeco, innerDeco, view, index2, pos) {
    for (let i = this.index; i < this.top.children.length; i++) {
      let next = this.top.children[i];
      if (next instanceof NodeViewDesc) {
        let preMatch2 = this.preMatch.matched.get(next);
        if (preMatch2 != null && preMatch2 != index2)
          return false;
        let nextDOM = next.dom, updated;
        let locked = this.isLocked(nextDOM) && !(node.isText && next.node && next.node.isText && next.nodeDOM.nodeValue == node.text && next.dirty != NODE_DIRTY && sameOuterDeco(outerDeco, next.outerDeco));
        if (!locked && next.update(node, outerDeco, innerDeco, view)) {
          this.destroyBetween(this.index, i);
          if (next.dom != nextDOM)
            this.changed = true;
          this.index++;
          return true;
        } else if (!locked && (updated = this.recreateWrapper(next, node, outerDeco, innerDeco, view, pos))) {
          this.destroyBetween(this.index, i);
          this.top.children[this.index] = updated;
          if (updated.contentDOM) {
            updated.dirty = CONTENT_DIRTY;
            updated.updateChildren(view, pos + 1);
            updated.dirty = NOT_DIRTY;
          }
          this.changed = true;
          this.index++;
          return true;
        }
        break;
      }
    }
    return false;
  }
  // When a node with content is replaced by a different node with
  // identical content, move over its children.
  recreateWrapper(next, node, outerDeco, innerDeco, view, pos) {
    if (next.dirty || node.isAtom || !next.children.length || !next.node.content.eq(node.content) || !sameOuterDeco(outerDeco, next.outerDeco) || !innerDeco.eq(next.innerDeco))
      return null;
    let wrapper = NodeViewDesc.create(this.top, node, outerDeco, innerDeco, view, pos);
    if (wrapper.contentDOM) {
      wrapper.children = next.children;
      next.children = [];
      for (let ch of wrapper.children)
        ch.parent = wrapper;
    }
    next.destroy();
    return wrapper;
  }
  // Insert the node as a newly created node desc.
  addNode(node, outerDeco, innerDeco, view, pos) {
    let desc = NodeViewDesc.create(this.top, node, outerDeco, innerDeco, view, pos);
    if (desc.contentDOM)
      desc.updateChildren(view, pos + 1);
    this.top.children.splice(this.index++, 0, desc);
    this.changed = true;
  }
  placeWidget(widget, view, pos) {
    let next = this.index < this.top.children.length ? this.top.children[this.index] : null;
    if (next && next.matchesWidget(widget) && (widget == next.widget || !next.widget.type.toDOM.parentNode)) {
      this.index++;
    } else {
      let desc = new WidgetViewDesc(this.top, widget, view, pos);
      this.top.children.splice(this.index++, 0, desc);
      this.changed = true;
    }
  }
  // Make sure a textblock looks and behaves correctly in
  // contentEditable.
  addTextblockHacks() {
    let lastChild = this.top.children[this.index - 1], parent = this.top;
    while (lastChild instanceof MarkViewDesc) {
      parent = lastChild;
      lastChild = parent.children[parent.children.length - 1];
    }
    if (!lastChild || // Empty textblock
    !(lastChild instanceof TextViewDesc) || /\n$/.test(lastChild.node.text) || this.view.requiresGeckoHackNode && /\s$/.test(lastChild.node.text)) {
      if ((safari || chrome) && lastChild && lastChild.dom.contentEditable == "false")
        this.addHackNode("IMG", parent);
      this.addHackNode("BR", this.top);
    }
  }
  addHackNode(nodeName, parent) {
    if (parent == this.top && this.index < parent.children.length && parent.children[this.index].matchesHack(nodeName)) {
      this.index++;
    } else {
      let dom = document.createElement(nodeName);
      if (nodeName == "IMG") {
        dom.className = "ProseMirror-separator";
        dom.alt = "";
      }
      if (nodeName == "BR")
        dom.className = "ProseMirror-trailingBreak";
      let hack = new TrailingHackViewDesc(this.top, [], dom, null);
      if (parent != this.top)
        parent.children.push(hack);
      else
        parent.children.splice(this.index++, 0, hack);
      this.changed = true;
    }
  }
  isLocked(node) {
    return this.lock && (node == this.lock || node.nodeType == 1 && node.contains(this.lock.parentNode));
  }
}
function preMatch(frag, parentDesc) {
  let curDesc = parentDesc, descI = curDesc.children.length;
  let fI = frag.childCount, matched = /* @__PURE__ */ new Map(), matches2 = [];
  outer: while (fI > 0) {
    let desc;
    for (; ; ) {
      if (descI) {
        let next = curDesc.children[descI - 1];
        if (next instanceof MarkViewDesc) {
          curDesc = next;
          descI = next.children.length;
        } else {
          desc = next;
          descI--;
          break;
        }
      } else if (curDesc == parentDesc) {
        break outer;
      } else {
        descI = curDesc.parent.children.indexOf(curDesc);
        curDesc = curDesc.parent;
      }
    }
    let node = desc.node;
    if (!node)
      continue;
    if (node != frag.child(fI - 1))
      break;
    --fI;
    matched.set(desc, fI);
    matches2.push(desc);
  }
  return { index: fI, matched, matches: matches2.reverse() };
}
function compareSide(a2, b2) {
  return a2.type.side - b2.type.side;
}
function iterDeco(parent, deco, onWidget, onNode) {
  let locals = deco.locals(parent), offset2 = 0;
  if (locals.length == 0) {
    for (let i = 0; i < parent.childCount; i++) {
      let child = parent.child(i);
      onNode(child, locals, deco.forChild(offset2, child), i);
      offset2 += child.nodeSize;
    }
    return;
  }
  let decoIndex = 0, active = [], restNode = null;
  for (let parentIndex = 0; ; ) {
    let widget, widgets;
    while (decoIndex < locals.length && locals[decoIndex].to == offset2) {
      let next = locals[decoIndex++];
      if (next.widget) {
        if (!widget)
          widget = next;
        else
          (widgets || (widgets = [widget])).push(next);
      }
    }
    if (widget) {
      if (widgets) {
        widgets.sort(compareSide);
        for (let i = 0; i < widgets.length; i++)
          onWidget(widgets[i], parentIndex, !!restNode);
      } else {
        onWidget(widget, parentIndex, !!restNode);
      }
    }
    let child, index2;
    if (restNode) {
      index2 = -1;
      child = restNode;
      restNode = null;
    } else if (parentIndex < parent.childCount) {
      index2 = parentIndex;
      child = parent.child(parentIndex++);
    } else {
      break;
    }
    for (let i = 0; i < active.length; i++)
      if (active[i].to <= offset2)
        active.splice(i--, 1);
    while (decoIndex < locals.length && locals[decoIndex].from <= offset2 && locals[decoIndex].to > offset2)
      active.push(locals[decoIndex++]);
    let end = offset2 + child.nodeSize;
    if (child.isText) {
      let cutAt = end;
      if (decoIndex < locals.length && locals[decoIndex].from < cutAt)
        cutAt = locals[decoIndex].from;
      for (let i = 0; i < active.length; i++)
        if (active[i].to < cutAt)
          cutAt = active[i].to;
      if (cutAt < end) {
        restNode = child.cut(cutAt - offset2);
        child = child.cut(0, cutAt - offset2);
        end = cutAt;
        index2 = -1;
      }
    } else {
      while (decoIndex < locals.length && locals[decoIndex].to < end)
        decoIndex++;
    }
    let outerDeco = child.isInline && !child.isLeaf ? active.filter((d2) => !d2.inline) : active.slice();
    onNode(child, outerDeco, deco.forChild(offset2, child), index2);
    offset2 = end;
  }
}
function iosHacks(dom) {
  if (dom.nodeName == "UL" || dom.nodeName == "OL") {
    let oldCSS = dom.style.cssText;
    dom.style.cssText = oldCSS + "; list-style: square !important";
    window.getComputedStyle(dom).listStyle;
    dom.style.cssText = oldCSS;
  }
}
function findTextInFragment(frag, text, from2, to) {
  for (let i = 0, pos = 0; i < frag.childCount && pos <= to; ) {
    let child = frag.child(i++), childStart = pos;
    pos += child.nodeSize;
    if (!child.isText)
      continue;
    let str = child.text;
    while (i < frag.childCount) {
      let next = frag.child(i++);
      pos += next.nodeSize;
      if (!next.isText)
        break;
      str += next.text;
    }
    if (pos >= from2) {
      if (pos >= to && str.slice(to - text.length - childStart, to - childStart) == text)
        return to - text.length;
      let found2 = childStart < to ? str.lastIndexOf(text, to - childStart - 1) : -1;
      if (found2 >= 0 && found2 + text.length + childStart >= from2)
        return childStart + found2;
      if (from2 == to && str.length >= to + text.length - childStart && str.slice(to - childStart, to - childStart + text.length) == text)
        return to;
    }
  }
  return -1;
}
function replaceNodes(nodes, from2, to, view, replacement) {
  let result = [];
  for (let i = 0, off = 0; i < nodes.length; i++) {
    let child = nodes[i], start = off, end = off += child.size;
    if (start >= to || end <= from2) {
      result.push(child);
    } else {
      if (start < from2)
        result.push(child.slice(0, from2 - start, view));
      if (replacement) {
        result.push(replacement);
        replacement = void 0;
      }
      if (end > to)
        result.push(child.slice(to - start, child.size, view));
    }
  }
  return result;
}
function selectionFromDOM(view, origin = null) {
  let domSel = view.domSelectionRange(), doc2 = view.state.doc;
  if (!domSel.focusNode)
    return null;
  let nearestDesc = view.docView.nearestDesc(domSel.focusNode), inWidget = nearestDesc && nearestDesc.size == 0;
  let head = view.docView.posFromDOM(domSel.focusNode, domSel.focusOffset, 1);
  if (head < 0)
    return null;
  let $head = doc2.resolve(head), anchor, selection;
  if (selectionCollapsed(domSel)) {
    anchor = head;
    while (nearestDesc && !nearestDesc.node)
      nearestDesc = nearestDesc.parent;
    let nearestDescNode = nearestDesc.node;
    if (nearestDesc && nearestDescNode.isAtom && NodeSelection.isSelectable(nearestDescNode) && nearestDesc.parent && !(nearestDescNode.isInline && isOnEdge(domSel.focusNode, domSel.focusOffset, nearestDesc.dom))) {
      let pos = nearestDesc.posBefore;
      selection = new NodeSelection(head == pos ? $head : doc2.resolve(pos));
    }
  } else {
    if (domSel instanceof view.dom.ownerDocument.defaultView.Selection && domSel.rangeCount > 1) {
      let min2 = head, max2 = head;
      for (let i = 0; i < domSel.rangeCount; i++) {
        let range = domSel.getRangeAt(i);
        min2 = Math.min(min2, view.docView.posFromDOM(range.startContainer, range.startOffset, 1));
        max2 = Math.max(max2, view.docView.posFromDOM(range.endContainer, range.endOffset, -1));
      }
      if (min2 < 0)
        return null;
      [anchor, head] = max2 == view.state.selection.anchor ? [max2, min2] : [min2, max2];
      $head = doc2.resolve(head);
    } else {
      anchor = view.docView.posFromDOM(domSel.anchorNode, domSel.anchorOffset, 1);
    }
    if (anchor < 0)
      return null;
  }
  let $anchor = doc2.resolve(anchor);
  if (!selection) {
    let bias = origin == "pointer" || view.state.selection.head < $head.pos && !inWidget ? 1 : -1;
    selection = selectionBetween(view, $anchor, $head, bias);
  }
  return selection;
}
function editorOwnsSelection(view) {
  return view.editable ? view.hasFocus() : hasSelection(view) && document.activeElement && document.activeElement.contains(view.dom);
}
function selectionToDOM(view, force = false) {
  let sel = view.state.selection;
  syncNodeSelection(view, sel);
  if (!editorOwnsSelection(view))
    return;
  if (!force && view.input.mouseDown && view.input.mouseDown.allowDefault && chrome) {
    let domSel = view.domSelectionRange(), curSel = view.domObserver.currentSelection;
    if (domSel.anchorNode && curSel.anchorNode && isEquivalentPosition(domSel.anchorNode, domSel.anchorOffset, curSel.anchorNode, curSel.anchorOffset)) {
      view.input.mouseDown.delayedSelectionSync = true;
      view.domObserver.setCurSelection();
      return;
    }
  }
  view.domObserver.disconnectSelection();
  if (view.cursorWrapper) {
    selectCursorWrapper(view);
  } else {
    let { anchor, head } = sel, resetEditableFrom, resetEditableTo;
    if (brokenSelectBetweenUneditable && !(sel instanceof TextSelection)) {
      if (!sel.$from.parent.inlineContent)
        resetEditableFrom = temporarilyEditableNear(view, sel.from);
      if (!sel.empty && !sel.$from.parent.inlineContent)
        resetEditableTo = temporarilyEditableNear(view, sel.to);
    }
    view.docView.setSelection(anchor, head, view, force);
    if (brokenSelectBetweenUneditable) {
      if (resetEditableFrom)
        resetEditable(resetEditableFrom);
      if (resetEditableTo)
        resetEditable(resetEditableTo);
    }
    if (sel.visible) {
      view.dom.classList.remove("ProseMirror-hideselection");
    } else {
      view.dom.classList.add("ProseMirror-hideselection");
      if ("onselectionchange" in document)
        removeClassOnSelectionChange(view);
    }
  }
  view.domObserver.setCurSelection();
  view.domObserver.connectSelection();
}
const brokenSelectBetweenUneditable = safari || chrome && chrome_version < 63;
function temporarilyEditableNear(view, pos) {
  let { node, offset: offset2 } = view.docView.domFromPos(pos, 0);
  let after = offset2 < node.childNodes.length ? node.childNodes[offset2] : null;
  let before = offset2 ? node.childNodes[offset2 - 1] : null;
  if (safari && after && after.contentEditable == "false")
    return setEditable(after);
  if ((!after || after.contentEditable == "false") && (!before || before.contentEditable == "false")) {
    if (after)
      return setEditable(after);
    else if (before)
      return setEditable(before);
  }
}
function setEditable(element) {
  element.contentEditable = "true";
  if (safari && element.draggable) {
    element.draggable = false;
    element.wasDraggable = true;
  }
  return element;
}
function resetEditable(element) {
  element.contentEditable = "false";
  if (element.wasDraggable) {
    element.draggable = true;
    element.wasDraggable = null;
  }
}
function removeClassOnSelectionChange(view) {
  let doc2 = view.dom.ownerDocument;
  doc2.removeEventListener("selectionchange", view.input.hideSelectionGuard);
  let domSel = view.domSelectionRange();
  let node = domSel.anchorNode, offset2 = domSel.anchorOffset;
  doc2.addEventListener("selectionchange", view.input.hideSelectionGuard = () => {
    if (domSel.anchorNode != node || domSel.anchorOffset != offset2) {
      doc2.removeEventListener("selectionchange", view.input.hideSelectionGuard);
      setTimeout(() => {
        if (!editorOwnsSelection(view) || view.state.selection.visible)
          view.dom.classList.remove("ProseMirror-hideselection");
      }, 20);
    }
  });
}
function selectCursorWrapper(view) {
  let domSel = view.domSelection();
  if (!domSel)
    return;
  let node = view.cursorWrapper.dom, img = node.nodeName == "IMG";
  if (img)
    domSel.collapse(node.parentNode, domIndex(node) + 1);
  else
    domSel.collapse(node, 0);
  if (!img && !view.state.selection.visible && ie$1 && ie_version <= 11) {
    node.disabled = true;
    node.disabled = false;
  }
}
function syncNodeSelection(view, sel) {
  if (sel instanceof NodeSelection) {
    let desc = view.docView.descAt(sel.from);
    if (desc != view.lastSelectedViewDesc) {
      clearNodeSelection(view);
      if (desc)
        desc.selectNode();
      view.lastSelectedViewDesc = desc;
    }
  } else {
    clearNodeSelection(view);
  }
}
function clearNodeSelection(view) {
  if (view.lastSelectedViewDesc) {
    if (view.lastSelectedViewDesc.parent)
      view.lastSelectedViewDesc.deselectNode();
    view.lastSelectedViewDesc = void 0;
  }
}
function selectionBetween(view, $anchor, $head, bias) {
  return view.someProp("createSelectionBetween", (f2) => f2(view, $anchor, $head)) || TextSelection.between($anchor, $head, bias);
}
function hasFocusAndSelection(view) {
  if (view.editable && !view.hasFocus())
    return false;
  return hasSelection(view);
}
function hasSelection(view) {
  let sel = view.domSelectionRange();
  if (!sel.anchorNode)
    return false;
  try {
    return view.dom.contains(sel.anchorNode.nodeType == 3 ? sel.anchorNode.parentNode : sel.anchorNode) && (view.editable || view.dom.contains(sel.focusNode.nodeType == 3 ? sel.focusNode.parentNode : sel.focusNode));
  } catch (_2) {
    return false;
  }
}
function anchorInRightPlace(view) {
  let anchorDOM = view.docView.domFromPos(view.state.selection.anchor, 0);
  let domSel = view.domSelectionRange();
  return isEquivalentPosition(anchorDOM.node, anchorDOM.offset, domSel.anchorNode, domSel.anchorOffset);
}
function moveSelectionBlock(state, dir) {
  let { $anchor, $head } = state.selection;
  let $side = dir > 0 ? $anchor.max($head) : $anchor.min($head);
  let $start = !$side.parent.inlineContent ? $side : $side.depth ? state.doc.resolve(dir > 0 ? $side.after() : $side.before()) : null;
  return $start && Selection.findFrom($start, dir);
}
function apply(view, sel) {
  view.dispatch(view.state.tr.setSelection(sel).scrollIntoView());
  return true;
}
function selectHorizontally(view, dir, mods) {
  let sel = view.state.selection;
  if (sel instanceof TextSelection) {
    if (mods.indexOf("s") > -1) {
      let { $head } = sel, node = $head.textOffset ? null : dir < 0 ? $head.nodeBefore : $head.nodeAfter;
      if (!node || node.isText || !node.isLeaf)
        return false;
      let $newHead = view.state.doc.resolve($head.pos + node.nodeSize * (dir < 0 ? -1 : 1));
      return apply(view, new TextSelection(sel.$anchor, $newHead));
    } else if (!sel.empty) {
      return false;
    } else if (view.endOfTextblock(dir > 0 ? "forward" : "backward")) {
      let next = moveSelectionBlock(view.state, dir);
      if (next && next instanceof NodeSelection)
        return apply(view, next);
      return false;
    } else if (!(mac$2 && mods.indexOf("m") > -1)) {
      let $head = sel.$head, node = $head.textOffset ? null : dir < 0 ? $head.nodeBefore : $head.nodeAfter, desc;
      if (!node || node.isText)
        return false;
      let nodePos = dir < 0 ? $head.pos - node.nodeSize : $head.pos;
      if (!(node.isAtom || (desc = view.docView.descAt(nodePos)) && !desc.contentDOM))
        return false;
      if (NodeSelection.isSelectable(node)) {
        return apply(view, new NodeSelection(dir < 0 ? view.state.doc.resolve($head.pos - node.nodeSize) : $head));
      } else if (webkit) {
        return apply(view, new TextSelection(view.state.doc.resolve(dir < 0 ? nodePos : nodePos + node.nodeSize)));
      } else {
        return false;
      }
    }
  } else if (sel instanceof NodeSelection && sel.node.isInline) {
    return apply(view, new TextSelection(dir > 0 ? sel.$to : sel.$from));
  } else {
    let next = moveSelectionBlock(view.state, dir);
    if (next)
      return apply(view, next);
    return false;
  }
}
function nodeLen(node) {
  return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;
}
function isIgnorable(dom, dir) {
  let desc = dom.pmViewDesc;
  return desc && desc.size == 0 && (dir < 0 || dom.nextSibling || dom.nodeName != "BR");
}
function skipIgnoredNodes(view, dir) {
  return dir < 0 ? skipIgnoredNodesBefore(view) : skipIgnoredNodesAfter(view);
}
function skipIgnoredNodesBefore(view) {
  let sel = view.domSelectionRange();
  let node = sel.focusNode, offset2 = sel.focusOffset;
  if (!node)
    return;
  let moveNode, moveOffset, force = false;
  if (gecko && node.nodeType == 1 && offset2 < nodeLen(node) && isIgnorable(node.childNodes[offset2], -1))
    force = true;
  for (; ; ) {
    if (offset2 > 0) {
      if (node.nodeType != 1) {
        break;
      } else {
        let before = node.childNodes[offset2 - 1];
        if (isIgnorable(before, -1)) {
          moveNode = node;
          moveOffset = --offset2;
        } else if (before.nodeType == 3) {
          node = before;
          offset2 = node.nodeValue.length;
        } else
          break;
      }
    } else if (isBlockNode(node)) {
      break;
    } else {
      let prev = node.previousSibling;
      while (prev && isIgnorable(prev, -1)) {
        moveNode = node.parentNode;
        moveOffset = domIndex(prev);
        prev = prev.previousSibling;
      }
      if (!prev) {
        node = node.parentNode;
        if (node == view.dom)
          break;
        offset2 = 0;
      } else {
        node = prev;
        offset2 = nodeLen(node);
      }
    }
  }
  if (force)
    setSelFocus(view, node, offset2);
  else if (moveNode)
    setSelFocus(view, moveNode, moveOffset);
}
function skipIgnoredNodesAfter(view) {
  let sel = view.domSelectionRange();
  let node = sel.focusNode, offset2 = sel.focusOffset;
  if (!node)
    return;
  let len = nodeLen(node);
  let moveNode, moveOffset;
  for (; ; ) {
    if (offset2 < len) {
      if (node.nodeType != 1)
        break;
      let after = node.childNodes[offset2];
      if (isIgnorable(after, 1)) {
        moveNode = node;
        moveOffset = ++offset2;
      } else
        break;
    } else if (isBlockNode(node)) {
      break;
    } else {
      let next = node.nextSibling;
      while (next && isIgnorable(next, 1)) {
        moveNode = next.parentNode;
        moveOffset = domIndex(next) + 1;
        next = next.nextSibling;
      }
      if (!next) {
        node = node.parentNode;
        if (node == view.dom)
          break;
        offset2 = len = 0;
      } else {
        node = next;
        offset2 = 0;
        len = nodeLen(node);
      }
    }
  }
  if (moveNode)
    setSelFocus(view, moveNode, moveOffset);
}
function isBlockNode(dom) {
  let desc = dom.pmViewDesc;
  return desc && desc.node && desc.node.isBlock;
}
function textNodeAfter(node, offset2) {
  while (node && offset2 == node.childNodes.length && !hasBlockDesc(node)) {
    offset2 = domIndex(node) + 1;
    node = node.parentNode;
  }
  while (node && offset2 < node.childNodes.length) {
    let next = node.childNodes[offset2];
    if (next.nodeType == 3)
      return next;
    if (next.nodeType == 1 && next.contentEditable == "false")
      break;
    node = next;
    offset2 = 0;
  }
}
function textNodeBefore(node, offset2) {
  while (node && !offset2 && !hasBlockDesc(node)) {
    offset2 = domIndex(node);
    node = node.parentNode;
  }
  while (node && offset2) {
    let next = node.childNodes[offset2 - 1];
    if (next.nodeType == 3)
      return next;
    if (next.nodeType == 1 && next.contentEditable == "false")
      break;
    node = next;
    offset2 = node.childNodes.length;
  }
}
function setSelFocus(view, node, offset2) {
  if (node.nodeType != 3) {
    let before, after;
    if (after = textNodeAfter(node, offset2)) {
      node = after;
      offset2 = 0;
    } else if (before = textNodeBefore(node, offset2)) {
      node = before;
      offset2 = before.nodeValue.length;
    }
  }
  let sel = view.domSelection();
  if (!sel)
    return;
  if (selectionCollapsed(sel)) {
    let range = document.createRange();
    range.setEnd(node, offset2);
    range.setStart(node, offset2);
    sel.removeAllRanges();
    sel.addRange(range);
  } else if (sel.extend) {
    sel.extend(node, offset2);
  }
  view.domObserver.setCurSelection();
  let { state } = view;
  setTimeout(() => {
    if (view.state == state)
      selectionToDOM(view);
  }, 50);
}
function findDirection(view, pos) {
  let $pos = view.state.doc.resolve(pos);
  if (!(chrome || windows$1) && $pos.parent.inlineContent) {
    let coords = view.coordsAtPos(pos);
    if (pos > $pos.start()) {
      let before = view.coordsAtPos(pos - 1);
      let mid = (before.top + before.bottom) / 2;
      if (mid > coords.top && mid < coords.bottom && Math.abs(before.left - coords.left) > 1)
        return before.left < coords.left ? "ltr" : "rtl";
    }
    if (pos < $pos.end()) {
      let after = view.coordsAtPos(pos + 1);
      let mid = (after.top + after.bottom) / 2;
      if (mid > coords.top && mid < coords.bottom && Math.abs(after.left - coords.left) > 1)
        return after.left > coords.left ? "ltr" : "rtl";
    }
  }
  let computed2 = getComputedStyle(view.dom).direction;
  return computed2 == "rtl" ? "rtl" : "ltr";
}
function selectVertically(view, dir, mods) {
  let sel = view.state.selection;
  if (sel instanceof TextSelection && !sel.empty || mods.indexOf("s") > -1)
    return false;
  if (mac$2 && mods.indexOf("m") > -1)
    return false;
  let { $from, $to } = sel;
  if (!$from.parent.inlineContent || view.endOfTextblock(dir < 0 ? "up" : "down")) {
    let next = moveSelectionBlock(view.state, dir);
    if (next && next instanceof NodeSelection)
      return apply(view, next);
  }
  if (!$from.parent.inlineContent) {
    let side = dir < 0 ? $from : $to;
    let beyond = sel instanceof AllSelection ? Selection.near(side, dir) : Selection.findFrom(side, dir);
    return beyond ? apply(view, beyond) : false;
  }
  return false;
}
function stopNativeHorizontalDelete(view, dir) {
  if (!(view.state.selection instanceof TextSelection))
    return true;
  let { $head, $anchor, empty: empty2 } = view.state.selection;
  if (!$head.sameParent($anchor))
    return true;
  if (!empty2)
    return false;
  if (view.endOfTextblock(dir > 0 ? "forward" : "backward"))
    return true;
  let nextNode = !$head.textOffset && (dir < 0 ? $head.nodeBefore : $head.nodeAfter);
  if (nextNode && !nextNode.isText) {
    let tr2 = view.state.tr;
    if (dir < 0)
      tr2.delete($head.pos - nextNode.nodeSize, $head.pos);
    else
      tr2.delete($head.pos, $head.pos + nextNode.nodeSize);
    view.dispatch(tr2);
    return true;
  }
  return false;
}
function switchEditable(view, node, state) {
  view.domObserver.stop();
  node.contentEditable = state;
  view.domObserver.start();
}
function safariDownArrowBug(view) {
  if (!safari || view.state.selection.$head.parentOffset > 0)
    return false;
  let { focusNode, focusOffset } = view.domSelectionRange();
  if (focusNode && focusNode.nodeType == 1 && focusOffset == 0 && focusNode.firstChild && focusNode.firstChild.contentEditable == "false") {
    let child = focusNode.firstChild;
    switchEditable(view, child, "true");
    setTimeout(() => switchEditable(view, child, "false"), 20);
  }
  return false;
}
function getMods(event) {
  let result = "";
  if (event.ctrlKey)
    result += "c";
  if (event.metaKey)
    result += "m";
  if (event.altKey)
    result += "a";
  if (event.shiftKey)
    result += "s";
  return result;
}
function captureKeyDown(view, event) {
  let code = event.keyCode, mods = getMods(event);
  if (code == 8 || mac$2 && code == 72 && mods == "c") {
    return stopNativeHorizontalDelete(view, -1) || skipIgnoredNodes(view, -1);
  } else if (code == 46 && !event.shiftKey || mac$2 && code == 68 && mods == "c") {
    return stopNativeHorizontalDelete(view, 1) || skipIgnoredNodes(view, 1);
  } else if (code == 13 || code == 27) {
    return true;
  } else if (code == 37 || mac$2 && code == 66 && mods == "c") {
    let dir = code == 37 ? findDirection(view, view.state.selection.from) == "ltr" ? -1 : 1 : -1;
    return selectHorizontally(view, dir, mods) || skipIgnoredNodes(view, dir);
  } else if (code == 39 || mac$2 && code == 70 && mods == "c") {
    let dir = code == 39 ? findDirection(view, view.state.selection.from) == "ltr" ? 1 : -1 : 1;
    return selectHorizontally(view, dir, mods) || skipIgnoredNodes(view, dir);
  } else if (code == 38 || mac$2 && code == 80 && mods == "c") {
    return selectVertically(view, -1, mods) || skipIgnoredNodes(view, -1);
  } else if (code == 40 || mac$2 && code == 78 && mods == "c") {
    return safariDownArrowBug(view) || selectVertically(view, 1, mods) || skipIgnoredNodes(view, 1);
  } else if (mods == (mac$2 ? "m" : "c") && (code == 66 || code == 73 || code == 89 || code == 90)) {
    return true;
  }
  return false;
}
function serializeForClipboard(view, slice2) {
  view.someProp("transformCopied", (f2) => {
    slice2 = f2(slice2, view);
  });
  let context = [], { content, openStart, openEnd } = slice2;
  while (openStart > 1 && openEnd > 1 && content.childCount == 1 && content.firstChild.childCount == 1) {
    openStart--;
    openEnd--;
    let node = content.firstChild;
    context.push(node.type.name, node.attrs != node.type.defaultAttrs ? node.attrs : null);
    content = node.content;
  }
  let serializer = view.someProp("clipboardSerializer") || DOMSerializer.fromSchema(view.state.schema);
  let doc2 = detachedDoc(), wrap2 = doc2.createElement("div");
  wrap2.appendChild(serializer.serializeFragment(content, { document: doc2 }));
  let firstChild = wrap2.firstChild, needsWrap, wrappers = 0;
  while (firstChild && firstChild.nodeType == 1 && (needsWrap = wrapMap[firstChild.nodeName.toLowerCase()])) {
    for (let i = needsWrap.length - 1; i >= 0; i--) {
      let wrapper = doc2.createElement(needsWrap[i]);
      while (wrap2.firstChild)
        wrapper.appendChild(wrap2.firstChild);
      wrap2.appendChild(wrapper);
      wrappers++;
    }
    firstChild = wrap2.firstChild;
  }
  if (firstChild && firstChild.nodeType == 1)
    firstChild.setAttribute("data-pm-slice", `${openStart} ${openEnd}${wrappers ? ` -${wrappers}` : ""} ${JSON.stringify(context)}`);
  let text = view.someProp("clipboardTextSerializer", (f2) => f2(slice2, view)) || slice2.content.textBetween(0, slice2.content.size, "\n\n");
  return { dom: wrap2, text, slice: slice2 };
}
function parseFromClipboard(view, text, html, plainText, $context) {
  let inCode = $context.parent.type.spec.code;
  let dom, slice2;
  if (!html && !text)
    return null;
  let asText = !!text && (plainText || inCode || !html);
  if (asText) {
    view.someProp("transformPastedText", (f2) => {
      text = f2(text, inCode || plainText, view);
    });
    if (inCode) {
      slice2 = new Slice(Fragment.from(view.state.schema.text(text.replace(/\r\n?/g, "\n"))), 0, 0);
      view.someProp("transformPasted", (f2) => {
        slice2 = f2(slice2, view, true);
      });
      return slice2;
    }
    let parsed = view.someProp("clipboardTextParser", (f2) => f2(text, $context, plainText, view));
    if (parsed) {
      slice2 = parsed;
    } else {
      let marks = $context.marks();
      let { schema } = view.state, serializer = DOMSerializer.fromSchema(schema);
      dom = document.createElement("div");
      text.split(/(?:\r\n?|\n)+/).forEach((block) => {
        let p2 = dom.appendChild(document.createElement("p"));
        if (block)
          p2.appendChild(serializer.serializeNode(schema.text(block, marks)));
      });
    }
  } else {
    view.someProp("transformPastedHTML", (f2) => {
      html = f2(html, view);
    });
    dom = readHTML(html);
    if (webkit)
      restoreReplacedSpaces(dom);
  }
  let contextNode = dom && dom.querySelector("[data-pm-slice]");
  let sliceData = contextNode && /^(\d+) (\d+)(?: -(\d+))? (.*)/.exec(contextNode.getAttribute("data-pm-slice") || "");
  if (sliceData && sliceData[3])
    for (let i = +sliceData[3]; i > 0; i--) {
      let child = dom.firstChild;
      while (child && child.nodeType != 1)
        child = child.nextSibling;
      if (!child)
        break;
      dom = child;
    }
  if (!slice2) {
    let parser = view.someProp("clipboardParser") || view.someProp("domParser") || DOMParser.fromSchema(view.state.schema);
    slice2 = parser.parseSlice(dom, {
      preserveWhitespace: !!(asText || sliceData),
      context: $context,
      ruleFromNode(dom2) {
        if (dom2.nodeName == "BR" && !dom2.nextSibling && dom2.parentNode && !inlineParents.test(dom2.parentNode.nodeName))
          return { ignore: true };
        return null;
      }
    });
  }
  if (sliceData) {
    slice2 = addContext(closeSlice(slice2, +sliceData[1], +sliceData[2]), sliceData[4]);
  } else {
    slice2 = Slice.maxOpen(normalizeSiblings(slice2.content, $context), true);
    if (slice2.openStart || slice2.openEnd) {
      let openStart = 0, openEnd = 0;
      for (let node = slice2.content.firstChild; openStart < slice2.openStart && !node.type.spec.isolating; openStart++, node = node.firstChild) {
      }
      for (let node = slice2.content.lastChild; openEnd < slice2.openEnd && !node.type.spec.isolating; openEnd++, node = node.lastChild) {
      }
      slice2 = closeSlice(slice2, openStart, openEnd);
    }
  }
  view.someProp("transformPasted", (f2) => {
    slice2 = f2(slice2, view, asText);
  });
  return slice2;
}
const inlineParents = /^(a|abbr|acronym|b|cite|code|del|em|i|ins|kbd|label|output|q|ruby|s|samp|span|strong|sub|sup|time|u|tt|var)$/i;
function normalizeSiblings(fragment, $context) {
  if (fragment.childCount < 2)
    return fragment;
  for (let d2 = $context.depth; d2 >= 0; d2--) {
    let parent = $context.node(d2);
    let match = parent.contentMatchAt($context.index(d2));
    let lastWrap, result = [];
    fragment.forEach((node) => {
      if (!result)
        return;
      let wrap2 = match.findWrapping(node.type), inLast;
      if (!wrap2)
        return result = null;
      if (inLast = result.length && lastWrap.length && addToSibling(wrap2, lastWrap, node, result[result.length - 1], 0)) {
        result[result.length - 1] = inLast;
      } else {
        if (result.length)
          result[result.length - 1] = closeRight(result[result.length - 1], lastWrap.length);
        let wrapped = withWrappers(node, wrap2);
        result.push(wrapped);
        match = match.matchType(wrapped.type);
        lastWrap = wrap2;
      }
    });
    if (result)
      return Fragment.from(result);
  }
  return fragment;
}
function withWrappers(node, wrap2, from2 = 0) {
  for (let i = wrap2.length - 1; i >= from2; i--)
    node = wrap2[i].create(null, Fragment.from(node));
  return node;
}
function addToSibling(wrap2, lastWrap, node, sibling, depth) {
  if (depth < wrap2.length && depth < lastWrap.length && wrap2[depth] == lastWrap[depth]) {
    let inner = addToSibling(wrap2, lastWrap, node, sibling.lastChild, depth + 1);
    if (inner)
      return sibling.copy(sibling.content.replaceChild(sibling.childCount - 1, inner));
    let match = sibling.contentMatchAt(sibling.childCount);
    if (match.matchType(depth == wrap2.length - 1 ? node.type : wrap2[depth + 1]))
      return sibling.copy(sibling.content.append(Fragment.from(withWrappers(node, wrap2, depth + 1))));
  }
}
function closeRight(node, depth) {
  if (depth == 0)
    return node;
  let fragment = node.content.replaceChild(node.childCount - 1, closeRight(node.lastChild, depth - 1));
  let fill = node.contentMatchAt(node.childCount).fillBefore(Fragment.empty, true);
  return node.copy(fragment.append(fill));
}
function closeRange(fragment, side, from2, to, depth, openEnd) {
  let node = side < 0 ? fragment.firstChild : fragment.lastChild, inner = node.content;
  if (fragment.childCount > 1)
    openEnd = 0;
  if (depth < to - 1)
    inner = closeRange(inner, side, from2, to, depth + 1, openEnd);
  if (depth >= from2)
    inner = side < 0 ? node.contentMatchAt(0).fillBefore(inner, openEnd <= depth).append(inner) : inner.append(node.contentMatchAt(node.childCount).fillBefore(Fragment.empty, true));
  return fragment.replaceChild(side < 0 ? 0 : fragment.childCount - 1, node.copy(inner));
}
function closeSlice(slice2, openStart, openEnd) {
  if (openStart < slice2.openStart)
    slice2 = new Slice(closeRange(slice2.content, -1, openStart, slice2.openStart, 0, slice2.openEnd), openStart, slice2.openEnd);
  if (openEnd < slice2.openEnd)
    slice2 = new Slice(closeRange(slice2.content, 1, openEnd, slice2.openEnd, 0, 0), slice2.openStart, openEnd);
  return slice2;
}
const wrapMap = {
  thead: ["table"],
  tbody: ["table"],
  tfoot: ["table"],
  caption: ["table"],
  colgroup: ["table"],
  col: ["table", "colgroup"],
  tr: ["table", "tbody"],
  td: ["table", "tbody", "tr"],
  th: ["table", "tbody", "tr"]
};
let _detachedDoc = null;
function detachedDoc() {
  return _detachedDoc || (_detachedDoc = document.implementation.createHTMLDocument("title"));
}
let _policy = null;
function maybeWrapTrusted(html) {
  let trustedTypes = window.trustedTypes;
  if (!trustedTypes)
    return html;
  if (!_policy)
    _policy = trustedTypes.defaultPolicy || trustedTypes.createPolicy("ProseMirrorClipboard", { createHTML: (s2) => s2 });
  return _policy.createHTML(html);
}
function readHTML(html) {
  let metas = /^(\s*<meta [^>]*>)*/.exec(html);
  if (metas)
    html = html.slice(metas[0].length);
  let elt = detachedDoc().createElement("div");
  let firstTag = /<([a-z][^>\s]+)/i.exec(html), wrap2;
  if (wrap2 = firstTag && wrapMap[firstTag[1].toLowerCase()])
    html = wrap2.map((n2) => "<" + n2 + ">").join("") + html + wrap2.map((n2) => "</" + n2 + ">").reverse().join("");
  elt.innerHTML = maybeWrapTrusted(html);
  if (wrap2)
    for (let i = 0; i < wrap2.length; i++)
      elt = elt.querySelector(wrap2[i]) || elt;
  return elt;
}
function restoreReplacedSpaces(dom) {
  let nodes = dom.querySelectorAll(chrome ? "span:not([class]):not([style])" : "span.Apple-converted-space");
  for (let i = 0; i < nodes.length; i++) {
    let node = nodes[i];
    if (node.childNodes.length == 1 && node.textContent == " " && node.parentNode)
      node.parentNode.replaceChild(dom.ownerDocument.createTextNode(" "), node);
  }
}
function addContext(slice2, context) {
  if (!slice2.size)
    return slice2;
  let schema = slice2.content.firstChild.type.schema, array;
  try {
    array = JSON.parse(context);
  } catch (e) {
    return slice2;
  }
  let { content, openStart, openEnd } = slice2;
  for (let i = array.length - 2; i >= 0; i -= 2) {
    let type = schema.nodes[array[i]];
    if (!type || type.hasRequiredAttrs())
      break;
    content = Fragment.from(type.create(array[i + 1], content));
    openStart++;
    openEnd++;
  }
  return new Slice(content, openStart, openEnd);
}
const handlers = {};
const editHandlers = {};
const passiveHandlers = { touchstart: true, touchmove: true };
class InputState {
  constructor() {
    this.shiftKey = false;
    this.mouseDown = null;
    this.lastKeyCode = null;
    this.lastKeyCodeTime = 0;
    this.lastClick = { time: 0, x: 0, y: 0, type: "", button: 0 };
    this.lastSelectionOrigin = null;
    this.lastSelectionTime = 0;
    this.lastIOSEnter = 0;
    this.lastIOSEnterFallbackTimeout = -1;
    this.lastFocus = 0;
    this.lastTouch = 0;
    this.lastChromeDelete = 0;
    this.composing = false;
    this.compositionNode = null;
    this.composingTimeout = -1;
    this.compositionNodes = [];
    this.compositionEndedAt = -2e8;
    this.compositionID = 1;
    this.badSafariComposition = false;
    this.compositionPendingChanges = 0;
    this.domChangeCount = 0;
    this.eventHandlers = /* @__PURE__ */ Object.create(null);
    this.hideSelectionGuard = null;
  }
}
function initInput(view) {
  for (let event in handlers) {
    let handler = handlers[event];
    view.dom.addEventListener(event, view.input.eventHandlers[event] = (event2) => {
      if (eventBelongsToView(view, event2) && !runCustomHandler(view, event2) && (view.editable || !(event2.type in editHandlers)))
        handler(view, event2);
    }, passiveHandlers[event] ? { passive: true } : void 0);
  }
  if (safari)
    view.dom.addEventListener("input", () => null);
  ensureListeners(view);
}
function setSelectionOrigin(view, origin) {
  view.input.lastSelectionOrigin = origin;
  view.input.lastSelectionTime = Date.now();
}
function destroyInput(view) {
  view.domObserver.stop();
  for (let type in view.input.eventHandlers)
    view.dom.removeEventListener(type, view.input.eventHandlers[type]);
  clearTimeout(view.input.composingTimeout);
  clearTimeout(view.input.lastIOSEnterFallbackTimeout);
}
function ensureListeners(view) {
  view.someProp("handleDOMEvents", (currentHandlers) => {
    for (let type in currentHandlers)
      if (!view.input.eventHandlers[type])
        view.dom.addEventListener(type, view.input.eventHandlers[type] = (event) => runCustomHandler(view, event));
  });
}
function runCustomHandler(view, event) {
  return view.someProp("handleDOMEvents", (handlers2) => {
    let handler = handlers2[event.type];
    return handler ? handler(view, event) || event.defaultPrevented : false;
  });
}
function eventBelongsToView(view, event) {
  if (!event.bubbles)
    return true;
  if (event.defaultPrevented)
    return false;
  for (let node = event.target; node != view.dom; node = node.parentNode)
    if (!node || node.nodeType == 11 || node.pmViewDesc && node.pmViewDesc.stopEvent(event))
      return false;
  return true;
}
function dispatchEvent(view, event) {
  if (!runCustomHandler(view, event) && handlers[event.type] && (view.editable || !(event.type in editHandlers)))
    handlers[event.type](view, event);
}
editHandlers.keydown = (view, _event) => {
  let event = _event;
  view.input.shiftKey = event.keyCode == 16 || event.shiftKey;
  if (inOrNearComposition(view, event))
    return;
  view.input.lastKeyCode = event.keyCode;
  view.input.lastKeyCodeTime = Date.now();
  if (android && chrome && event.keyCode == 13)
    return;
  if (event.keyCode != 229)
    view.domObserver.forceFlush();
  if (ios && event.keyCode == 13 && !event.ctrlKey && !event.altKey && !event.metaKey) {
    let now = Date.now();
    view.input.lastIOSEnter = now;
    view.input.lastIOSEnterFallbackTimeout = setTimeout(() => {
      if (view.input.lastIOSEnter == now) {
        view.someProp("handleKeyDown", (f2) => f2(view, keyEvent(13, "Enter")));
        view.input.lastIOSEnter = 0;
      }
    }, 200);
  } else if (view.someProp("handleKeyDown", (f2) => f2(view, event)) || captureKeyDown(view, event)) {
    event.preventDefault();
  } else {
    setSelectionOrigin(view, "key");
  }
};
editHandlers.keyup = (view, event) => {
  if (event.keyCode == 16)
    view.input.shiftKey = false;
};
editHandlers.keypress = (view, _event) => {
  let event = _event;
  if (inOrNearComposition(view, event) || !event.charCode || event.ctrlKey && !event.altKey || mac$2 && event.metaKey)
    return;
  if (view.someProp("handleKeyPress", (f2) => f2(view, event))) {
    event.preventDefault();
    return;
  }
  let sel = view.state.selection;
  if (!(sel instanceof TextSelection) || !sel.$from.sameParent(sel.$to)) {
    let text = String.fromCharCode(event.charCode);
    let deflt = () => view.state.tr.insertText(text).scrollIntoView();
    if (!/[\r\n]/.test(text) && !view.someProp("handleTextInput", (f2) => f2(view, sel.$from.pos, sel.$to.pos, text, deflt)))
      view.dispatch(deflt());
    event.preventDefault();
  }
};
function eventCoords(event) {
  return { left: event.clientX, top: event.clientY };
}
function isNear(event, click) {
  let dx = click.x - event.clientX, dy = click.y - event.clientY;
  return dx * dx + dy * dy < 100;
}
function runHandlerOnContext(view, propName, pos, inside, event) {
  if (inside == -1)
    return false;
  let $pos = view.state.doc.resolve(inside);
  for (let i = $pos.depth + 1; i > 0; i--) {
    if (view.someProp(propName, (f2) => i > $pos.depth ? f2(view, pos, $pos.nodeAfter, $pos.before(i), event, true) : f2(view, pos, $pos.node(i), $pos.before(i), event, false)))
      return true;
  }
  return false;
}
function updateSelection(view, selection, origin) {
  if (!view.focused)
    view.focus();
  if (view.state.selection.eq(selection))
    return;
  let tr2 = view.state.tr.setSelection(selection);
  tr2.setMeta("pointer", true);
  view.dispatch(tr2);
}
function selectClickedLeaf(view, inside) {
  if (inside == -1)
    return false;
  let $pos = view.state.doc.resolve(inside), node = $pos.nodeAfter;
  if (node && node.isAtom && NodeSelection.isSelectable(node)) {
    updateSelection(view, new NodeSelection($pos));
    return true;
  }
  return false;
}
function selectClickedNode(view, inside) {
  if (inside == -1)
    return false;
  let sel = view.state.selection, selectedNode, selectAt;
  if (sel instanceof NodeSelection)
    selectedNode = sel.node;
  let $pos = view.state.doc.resolve(inside);
  for (let i = $pos.depth + 1; i > 0; i--) {
    let node = i > $pos.depth ? $pos.nodeAfter : $pos.node(i);
    if (NodeSelection.isSelectable(node)) {
      if (selectedNode && sel.$from.depth > 0 && i >= sel.$from.depth && $pos.before(sel.$from.depth + 1) == sel.$from.pos)
        selectAt = $pos.before(sel.$from.depth);
      else
        selectAt = $pos.before(i);
      break;
    }
  }
  if (selectAt != null) {
    updateSelection(view, NodeSelection.create(view.state.doc, selectAt));
    return true;
  } else {
    return false;
  }
}
function handleSingleClick(view, pos, inside, event, selectNode) {
  return runHandlerOnContext(view, "handleClickOn", pos, inside, event) || view.someProp("handleClick", (f2) => f2(view, pos, event)) || (selectNode ? selectClickedNode(view, inside) : selectClickedLeaf(view, inside));
}
function handleDoubleClick(view, pos, inside, event) {
  return runHandlerOnContext(view, "handleDoubleClickOn", pos, inside, event) || view.someProp("handleDoubleClick", (f2) => f2(view, pos, event));
}
function handleTripleClick(view, pos, inside, event) {
  return runHandlerOnContext(view, "handleTripleClickOn", pos, inside, event) || view.someProp("handleTripleClick", (f2) => f2(view, pos, event)) || defaultTripleClick(view, inside, event);
}
function defaultTripleClick(view, inside, event) {
  if (event.button != 0)
    return false;
  let doc2 = view.state.doc;
  if (inside == -1) {
    if (doc2.inlineContent) {
      updateSelection(view, TextSelection.create(doc2, 0, doc2.content.size));
      return true;
    }
    return false;
  }
  let $pos = doc2.resolve(inside);
  for (let i = $pos.depth + 1; i > 0; i--) {
    let node = i > $pos.depth ? $pos.nodeAfter : $pos.node(i);
    let nodePos = $pos.before(i);
    if (node.inlineContent)
      updateSelection(view, TextSelection.create(doc2, nodePos + 1, nodePos + 1 + node.content.size));
    else if (NodeSelection.isSelectable(node))
      updateSelection(view, NodeSelection.create(doc2, nodePos));
    else
      continue;
    return true;
  }
}
function forceDOMFlush(view) {
  return endComposition(view);
}
const selectNodeModifier = mac$2 ? "metaKey" : "ctrlKey";
handlers.mousedown = (view, _event) => {
  let event = _event;
  view.input.shiftKey = event.shiftKey;
  let flushed = forceDOMFlush(view);
  let now = Date.now(), type = "singleClick";
  if (now - view.input.lastClick.time < 500 && isNear(event, view.input.lastClick) && !event[selectNodeModifier] && view.input.lastClick.button == event.button) {
    if (view.input.lastClick.type == "singleClick")
      type = "doubleClick";
    else if (view.input.lastClick.type == "doubleClick")
      type = "tripleClick";
  }
  view.input.lastClick = { time: now, x: event.clientX, y: event.clientY, type, button: event.button };
  let pos = view.posAtCoords(eventCoords(event));
  if (!pos)
    return;
  if (type == "singleClick") {
    if (view.input.mouseDown)
      view.input.mouseDown.done();
    view.input.mouseDown = new MouseDown(view, pos, event, !!flushed);
  } else if ((type == "doubleClick" ? handleDoubleClick : handleTripleClick)(view, pos.pos, pos.inside, event)) {
    event.preventDefault();
  } else {
    setSelectionOrigin(view, "pointer");
  }
};
class MouseDown {
  constructor(view, pos, event, flushed) {
    this.view = view;
    this.pos = pos;
    this.event = event;
    this.flushed = flushed;
    this.delayedSelectionSync = false;
    this.mightDrag = null;
    this.startDoc = view.state.doc;
    this.selectNode = !!event[selectNodeModifier];
    this.allowDefault = event.shiftKey;
    let targetNode, targetPos;
    if (pos.inside > -1) {
      targetNode = view.state.doc.nodeAt(pos.inside);
      targetPos = pos.inside;
    } else {
      let $pos = view.state.doc.resolve(pos.pos);
      targetNode = $pos.parent;
      targetPos = $pos.depth ? $pos.before() : 0;
    }
    const target = flushed ? null : event.target;
    const targetDesc = target ? view.docView.nearestDesc(target, true) : null;
    this.target = targetDesc && targetDesc.nodeDOM.nodeType == 1 ? targetDesc.nodeDOM : null;
    let { selection } = view.state;
    if (event.button == 0 && targetNode.type.spec.draggable && targetNode.type.spec.selectable !== false || selection instanceof NodeSelection && selection.from <= targetPos && selection.to > targetPos)
      this.mightDrag = {
        node: targetNode,
        pos: targetPos,
        addAttr: !!(this.target && !this.target.draggable),
        setUneditable: !!(this.target && gecko && !this.target.hasAttribute("contentEditable"))
      };
    if (this.target && this.mightDrag && (this.mightDrag.addAttr || this.mightDrag.setUneditable)) {
      this.view.domObserver.stop();
      if (this.mightDrag.addAttr)
        this.target.draggable = true;
      if (this.mightDrag.setUneditable)
        setTimeout(() => {
          if (this.view.input.mouseDown == this)
            this.target.setAttribute("contentEditable", "false");
        }, 20);
      this.view.domObserver.start();
    }
    view.root.addEventListener("mouseup", this.up = this.up.bind(this));
    view.root.addEventListener("mousemove", this.move = this.move.bind(this));
    setSelectionOrigin(view, "pointer");
  }
  done() {
    this.view.root.removeEventListener("mouseup", this.up);
    this.view.root.removeEventListener("mousemove", this.move);
    if (this.mightDrag && this.target) {
      this.view.domObserver.stop();
      if (this.mightDrag.addAttr)
        this.target.removeAttribute("draggable");
      if (this.mightDrag.setUneditable)
        this.target.removeAttribute("contentEditable");
      this.view.domObserver.start();
    }
    if (this.delayedSelectionSync)
      setTimeout(() => selectionToDOM(this.view));
    this.view.input.mouseDown = null;
  }
  up(event) {
    this.done();
    if (!this.view.dom.contains(event.target))
      return;
    let pos = this.pos;
    if (this.view.state.doc != this.startDoc)
      pos = this.view.posAtCoords(eventCoords(event));
    this.updateAllowDefault(event);
    if (this.allowDefault || !pos) {
      setSelectionOrigin(this.view, "pointer");
    } else if (handleSingleClick(this.view, pos.pos, pos.inside, event, this.selectNode)) {
      event.preventDefault();
    } else if (event.button == 0 && (this.flushed || // Safari ignores clicks on draggable elements
    safari && this.mightDrag && !this.mightDrag.node.isAtom || // Chrome will sometimes treat a node selection as a
    // cursor, but still report that the node is selected
    // when asked through getSelection. You'll then get a
    // situation where clicking at the point where that
    // (hidden) cursor is doesn't change the selection, and
    // thus doesn't get a reaction from ProseMirror. This
    // works around that.
    chrome && !this.view.state.selection.visible && Math.min(Math.abs(pos.pos - this.view.state.selection.from), Math.abs(pos.pos - this.view.state.selection.to)) <= 2)) {
      updateSelection(this.view, Selection.near(this.view.state.doc.resolve(pos.pos)));
      event.preventDefault();
    } else {
      setSelectionOrigin(this.view, "pointer");
    }
  }
  move(event) {
    this.updateAllowDefault(event);
    setSelectionOrigin(this.view, "pointer");
    if (event.buttons == 0)
      this.done();
  }
  updateAllowDefault(event) {
    if (!this.allowDefault && (Math.abs(this.event.x - event.clientX) > 4 || Math.abs(this.event.y - event.clientY) > 4))
      this.allowDefault = true;
  }
}
handlers.touchstart = (view) => {
  view.input.lastTouch = Date.now();
  forceDOMFlush(view);
  setSelectionOrigin(view, "pointer");
};
handlers.touchmove = (view) => {
  view.input.lastTouch = Date.now();
  setSelectionOrigin(view, "pointer");
};
handlers.contextmenu = (view) => forceDOMFlush(view);
function inOrNearComposition(view, event) {
  if (view.composing)
    return true;
  if (safari && Math.abs(event.timeStamp - view.input.compositionEndedAt) < 500) {
    view.input.compositionEndedAt = -2e8;
    return true;
  }
  return false;
}
const timeoutComposition = android ? 5e3 : -1;
editHandlers.compositionstart = editHandlers.compositionupdate = (view) => {
  if (!view.composing) {
    view.domObserver.flush();
    let { state } = view, $pos = state.selection.$to;
    if (state.selection instanceof TextSelection && (state.storedMarks || !$pos.textOffset && $pos.parentOffset && $pos.nodeBefore.marks.some((m2) => m2.type.spec.inclusive === false) || chrome && windows$1 && selectionBeforeUneditable(view))) {
      view.markCursor = view.state.storedMarks || $pos.marks();
      endComposition(view, true);
      view.markCursor = null;
    } else {
      endComposition(view, !state.selection.empty);
      if (gecko && state.selection.empty && $pos.parentOffset && !$pos.textOffset && $pos.nodeBefore.marks.length) {
        let sel = view.domSelectionRange();
        for (let node = sel.focusNode, offset2 = sel.focusOffset; node && node.nodeType == 1 && offset2 != 0; ) {
          let before = offset2 < 0 ? node.lastChild : node.childNodes[offset2 - 1];
          if (!before)
            break;
          if (before.nodeType == 3) {
            let sel2 = view.domSelection();
            if (sel2)
              sel2.collapse(before, before.nodeValue.length);
            break;
          } else {
            node = before;
            offset2 = -1;
          }
        }
      }
    }
    view.input.composing = true;
  }
  scheduleComposeEnd(view, timeoutComposition);
};
function selectionBeforeUneditable(view) {
  let { focusNode, focusOffset } = view.domSelectionRange();
  if (!focusNode || focusNode.nodeType != 1 || focusOffset >= focusNode.childNodes.length)
    return false;
  let next = focusNode.childNodes[focusOffset];
  return next.nodeType == 1 && next.contentEditable == "false";
}
editHandlers.compositionend = (view, event) => {
  if (view.composing) {
    view.input.composing = false;
    view.input.compositionEndedAt = event.timeStamp;
    view.input.compositionPendingChanges = view.domObserver.pendingRecords().length ? view.input.compositionID : 0;
    view.input.compositionNode = null;
    if (view.input.badSafariComposition)
      view.domObserver.forceFlush();
    else if (view.input.compositionPendingChanges)
      Promise.resolve().then(() => view.domObserver.flush());
    view.input.compositionID++;
    scheduleComposeEnd(view, 20);
  }
};
function scheduleComposeEnd(view, delay) {
  clearTimeout(view.input.composingTimeout);
  if (delay > -1)
    view.input.composingTimeout = setTimeout(() => endComposition(view), delay);
}
function clearComposition(view) {
  if (view.composing) {
    view.input.composing = false;
    view.input.compositionEndedAt = timestampFromCustomEvent();
  }
  while (view.input.compositionNodes.length > 0)
    view.input.compositionNodes.pop().markParentsDirty();
}
function findCompositionNode(view) {
  let sel = view.domSelectionRange();
  if (!sel.focusNode)
    return null;
  let textBefore = textNodeBefore$1(sel.focusNode, sel.focusOffset);
  let textAfter = textNodeAfter$1(sel.focusNode, sel.focusOffset);
  if (textBefore && textAfter && textBefore != textAfter) {
    let descAfter = textAfter.pmViewDesc, lastChanged = view.domObserver.lastChangedTextNode;
    if (textBefore == lastChanged || textAfter == lastChanged)
      return lastChanged;
    if (!descAfter || !descAfter.isText(textAfter.nodeValue)) {
      return textAfter;
    } else if (view.input.compositionNode == textAfter) {
      let descBefore = textBefore.pmViewDesc;
      if (!(!descBefore || !descBefore.isText(textBefore.nodeValue)))
        return textAfter;
    }
  }
  return textBefore || textAfter;
}
function timestampFromCustomEvent() {
  let event = document.createEvent("Event");
  event.initEvent("event", true, true);
  return event.timeStamp;
}
function endComposition(view, restarting = false) {
  if (android && view.domObserver.flushingSoon >= 0)
    return;
  view.domObserver.forceFlush();
  clearComposition(view);
  if (restarting || view.docView && view.docView.dirty) {
    let sel = selectionFromDOM(view), cur = view.state.selection;
    if (sel && !sel.eq(cur))
      view.dispatch(view.state.tr.setSelection(sel));
    else if ((view.markCursor || restarting) && !cur.$from.node(cur.$from.sharedDepth(cur.to)).inlineContent)
      view.dispatch(view.state.tr.deleteSelection());
    else
      view.updateState(view.state);
    return true;
  }
  return false;
}
function captureCopy(view, dom) {
  if (!view.dom.parentNode)
    return;
  let wrap2 = view.dom.parentNode.appendChild(document.createElement("div"));
  wrap2.appendChild(dom);
  wrap2.style.cssText = "position: fixed; left: -10000px; top: 10px";
  let sel = getSelection(), range = document.createRange();
  range.selectNodeContents(dom);
  view.dom.blur();
  sel.removeAllRanges();
  sel.addRange(range);
  setTimeout(() => {
    if (wrap2.parentNode)
      wrap2.parentNode.removeChild(wrap2);
    view.focus();
  }, 50);
}
const brokenClipboardAPI = ie$1 && ie_version < 15 || ios && webkit_version < 604;
handlers.copy = editHandlers.cut = (view, _event) => {
  let event = _event;
  let sel = view.state.selection, cut2 = event.type == "cut";
  if (sel.empty)
    return;
  let data = brokenClipboardAPI ? null : event.clipboardData;
  let slice2 = sel.content(), { dom, text } = serializeForClipboard(view, slice2);
  if (data) {
    event.preventDefault();
    data.clearData();
    data.setData("text/html", dom.innerHTML);
    data.setData("text/plain", text);
  } else {
    captureCopy(view, dom);
  }
  if (cut2)
    view.dispatch(view.state.tr.deleteSelection().scrollIntoView().setMeta("uiEvent", "cut"));
};
function sliceSingleNode(slice2) {
  return slice2.openStart == 0 && slice2.openEnd == 0 && slice2.content.childCount == 1 ? slice2.content.firstChild : null;
}
function capturePaste(view, event) {
  if (!view.dom.parentNode)
    return;
  let plainText = view.input.shiftKey || view.state.selection.$from.parent.type.spec.code;
  let target = view.dom.parentNode.appendChild(document.createElement(plainText ? "textarea" : "div"));
  if (!plainText)
    target.contentEditable = "true";
  target.style.cssText = "position: fixed; left: -10000px; top: 10px";
  target.focus();
  let plain = view.input.shiftKey && view.input.lastKeyCode != 45;
  setTimeout(() => {
    view.focus();
    if (target.parentNode)
      target.parentNode.removeChild(target);
    if (plainText)
      doPaste(view, target.value, null, plain, event);
    else
      doPaste(view, target.textContent, target.innerHTML, plain, event);
  }, 50);
}
function doPaste(view, text, html, preferPlain, event) {
  let slice2 = parseFromClipboard(view, text, html, preferPlain, view.state.selection.$from);
  if (view.someProp("handlePaste", (f2) => f2(view, event, slice2 || Slice.empty)))
    return true;
  if (!slice2)
    return false;
  let singleNode = sliceSingleNode(slice2);
  let tr2 = singleNode ? view.state.tr.replaceSelectionWith(singleNode, preferPlain) : view.state.tr.replaceSelection(slice2);
  view.dispatch(tr2.scrollIntoView().setMeta("paste", true).setMeta("uiEvent", "paste"));
  return true;
}
function getText$1(clipboardData) {
  let text = clipboardData.getData("text/plain") || clipboardData.getData("Text");
  if (text)
    return text;
  let uris = clipboardData.getData("text/uri-list");
  return uris ? uris.replace(/\r?\n/g, " ") : "";
}
editHandlers.paste = (view, _event) => {
  let event = _event;
  if (view.composing && !android)
    return;
  let data = brokenClipboardAPI ? null : event.clipboardData;
  let plain = view.input.shiftKey && view.input.lastKeyCode != 45;
  if (data && doPaste(view, getText$1(data), data.getData("text/html"), plain, event))
    event.preventDefault();
  else
    capturePaste(view, event);
};
class Dragging {
  constructor(slice2, move, node) {
    this.slice = slice2;
    this.move = move;
    this.node = node;
  }
}
const dragCopyModifier = mac$2 ? "altKey" : "ctrlKey";
function dragMoves(view, event) {
  let moves = view.someProp("dragCopies", (test) => !test(event));
  return moves != null ? moves : !event[dragCopyModifier];
}
handlers.dragstart = (view, _event) => {
  let event = _event;
  let mouseDown = view.input.mouseDown;
  if (mouseDown)
    mouseDown.done();
  if (!event.dataTransfer)
    return;
  let sel = view.state.selection;
  let pos = sel.empty ? null : view.posAtCoords(eventCoords(event));
  let node;
  if (pos && pos.pos >= sel.from && pos.pos <= (sel instanceof NodeSelection ? sel.to - 1 : sel.to)) ;
  else if (mouseDown && mouseDown.mightDrag) {
    node = NodeSelection.create(view.state.doc, mouseDown.mightDrag.pos);
  } else if (event.target && event.target.nodeType == 1) {
    let desc = view.docView.nearestDesc(event.target, true);
    if (desc && desc.node.type.spec.draggable && desc != view.docView)
      node = NodeSelection.create(view.state.doc, desc.posBefore);
  }
  let draggedSlice = (node || view.state.selection).content();
  let { dom, text, slice: slice2 } = serializeForClipboard(view, draggedSlice);
  if (!event.dataTransfer.files.length || !chrome || chrome_version > 120)
    event.dataTransfer.clearData();
  event.dataTransfer.setData(brokenClipboardAPI ? "Text" : "text/html", dom.innerHTML);
  event.dataTransfer.effectAllowed = "copyMove";
  if (!brokenClipboardAPI)
    event.dataTransfer.setData("text/plain", text);
  view.dragging = new Dragging(slice2, dragMoves(view, event), node);
};
handlers.dragend = (view) => {
  let dragging = view.dragging;
  window.setTimeout(() => {
    if (view.dragging == dragging)
      view.dragging = null;
  }, 50);
};
editHandlers.dragover = editHandlers.dragenter = (_2, e) => e.preventDefault();
editHandlers.drop = (view, event) => {
  try {
    handleDrop(view, event, view.dragging);
  } finally {
    view.dragging = null;
  }
};
function handleDrop(view, event, dragging) {
  if (!event.dataTransfer)
    return;
  let eventPos = view.posAtCoords(eventCoords(event));
  if (!eventPos)
    return;
  let $mouse = view.state.doc.resolve(eventPos.pos);
  let slice2 = dragging && dragging.slice;
  if (slice2) {
    view.someProp("transformPasted", (f2) => {
      slice2 = f2(slice2, view, false);
    });
  } else {
    slice2 = parseFromClipboard(view, getText$1(event.dataTransfer), brokenClipboardAPI ? null : event.dataTransfer.getData("text/html"), false, $mouse);
  }
  let move = !!(dragging && dragMoves(view, event));
  if (view.someProp("handleDrop", (f2) => f2(view, event, slice2 || Slice.empty, move))) {
    event.preventDefault();
    return;
  }
  if (!slice2)
    return;
  event.preventDefault();
  let insertPos = slice2 ? dropPoint(view.state.doc, $mouse.pos, slice2) : $mouse.pos;
  if (insertPos == null)
    insertPos = $mouse.pos;
  let tr2 = view.state.tr;
  if (move) {
    let { node } = dragging;
    if (node)
      node.replace(tr2);
    else
      tr2.deleteSelection();
  }
  let pos = tr2.mapping.map(insertPos);
  let isNode2 = slice2.openStart == 0 && slice2.openEnd == 0 && slice2.content.childCount == 1;
  let beforeInsert = tr2.doc;
  if (isNode2)
    tr2.replaceRangeWith(pos, pos, slice2.content.firstChild);
  else
    tr2.replaceRange(pos, pos, slice2);
  if (tr2.doc.eq(beforeInsert))
    return;
  let $pos = tr2.doc.resolve(pos);
  if (isNode2 && NodeSelection.isSelectable(slice2.content.firstChild) && $pos.nodeAfter && $pos.nodeAfter.sameMarkup(slice2.content.firstChild)) {
    tr2.setSelection(new NodeSelection($pos));
  } else {
    let end = tr2.mapping.map(insertPos);
    tr2.mapping.maps[tr2.mapping.maps.length - 1].forEach((_from, _to, _newFrom, newTo) => end = newTo);
    tr2.setSelection(selectionBetween(view, $pos, tr2.doc.resolve(end)));
  }
  view.focus();
  view.dispatch(tr2.setMeta("uiEvent", "drop"));
}
handlers.focus = (view) => {
  view.input.lastFocus = Date.now();
  if (!view.focused) {
    view.domObserver.stop();
    view.dom.classList.add("ProseMirror-focused");
    view.domObserver.start();
    view.focused = true;
    setTimeout(() => {
      if (view.docView && view.hasFocus() && !view.domObserver.currentSelection.eq(view.domSelectionRange()))
        selectionToDOM(view);
    }, 20);
  }
};
handlers.blur = (view, _event) => {
  let event = _event;
  if (view.focused) {
    view.domObserver.stop();
    view.dom.classList.remove("ProseMirror-focused");
    view.domObserver.start();
    if (event.relatedTarget && view.dom.contains(event.relatedTarget))
      view.domObserver.currentSelection.clear();
    view.focused = false;
  }
};
handlers.beforeinput = (view, _event) => {
  let event = _event;
  if (chrome && android && event.inputType == "deleteContentBackward") {
    view.domObserver.flushSoon();
    let { domChangeCount } = view.input;
    setTimeout(() => {
      if (view.input.domChangeCount != domChangeCount)
        return;
      view.dom.blur();
      view.focus();
      if (view.someProp("handleKeyDown", (f2) => f2(view, keyEvent(8, "Backspace"))))
        return;
      let { $cursor } = view.state.selection;
      if ($cursor && $cursor.pos > 0)
        view.dispatch(view.state.tr.delete($cursor.pos - 1, $cursor.pos).scrollIntoView());
    }, 50);
  }
};
for (let prop in editHandlers)
  handlers[prop] = editHandlers[prop];
function compareObjs(a2, b2) {
  if (a2 == b2)
    return true;
  for (let p2 in a2)
    if (a2[p2] !== b2[p2])
      return false;
  for (let p2 in b2)
    if (!(p2 in a2))
      return false;
  return true;
}
class WidgetType {
  constructor(toDOM, spec) {
    this.toDOM = toDOM;
    this.spec = spec || noSpec;
    this.side = this.spec.side || 0;
  }
  map(mapping, span, offset2, oldOffset) {
    let { pos, deleted } = mapping.mapResult(span.from + oldOffset, this.side < 0 ? -1 : 1);
    return deleted ? null : new Decoration(pos - offset2, pos - offset2, this);
  }
  valid() {
    return true;
  }
  eq(other) {
    return this == other || other instanceof WidgetType && (this.spec.key && this.spec.key == other.spec.key || this.toDOM == other.toDOM && compareObjs(this.spec, other.spec));
  }
  destroy(node) {
    if (this.spec.destroy)
      this.spec.destroy(node);
  }
}
class InlineType {
  constructor(attrs, spec) {
    this.attrs = attrs;
    this.spec = spec || noSpec;
  }
  map(mapping, span, offset2, oldOffset) {
    let from2 = mapping.map(span.from + oldOffset, this.spec.inclusiveStart ? -1 : 1) - offset2;
    let to = mapping.map(span.to + oldOffset, this.spec.inclusiveEnd ? 1 : -1) - offset2;
    return from2 >= to ? null : new Decoration(from2, to, this);
  }
  valid(_2, span) {
    return span.from < span.to;
  }
  eq(other) {
    return this == other || other instanceof InlineType && compareObjs(this.attrs, other.attrs) && compareObjs(this.spec, other.spec);
  }
  static is(span) {
    return span.type instanceof InlineType;
  }
  destroy() {
  }
}
class NodeType2 {
  constructor(attrs, spec) {
    this.attrs = attrs;
    this.spec = spec || noSpec;
  }
  map(mapping, span, offset2, oldOffset) {
    let from2 = mapping.mapResult(span.from + oldOffset, 1);
    if (from2.deleted)
      return null;
    let to = mapping.mapResult(span.to + oldOffset, -1);
    if (to.deleted || to.pos <= from2.pos)
      return null;
    return new Decoration(from2.pos - offset2, to.pos - offset2, this);
  }
  valid(node, span) {
    let { index: index2, offset: offset2 } = node.content.findIndex(span.from), child;
    return offset2 == span.from && !(child = node.child(index2)).isText && offset2 + child.nodeSize == span.to;
  }
  eq(other) {
    return this == other || other instanceof NodeType2 && compareObjs(this.attrs, other.attrs) && compareObjs(this.spec, other.spec);
  }
  destroy() {
  }
}
class Decoration {
  /**
  @internal
  */
  constructor(from2, to, type) {
    this.from = from2;
    this.to = to;
    this.type = type;
  }
  /**
  @internal
  */
  copy(from2, to) {
    return new Decoration(from2, to, this.type);
  }
  /**
  @internal
  */
  eq(other, offset2 = 0) {
    return this.type.eq(other.type) && this.from + offset2 == other.from && this.to + offset2 == other.to;
  }
  /**
  @internal
  */
  map(mapping, offset2, oldOffset) {
    return this.type.map(mapping, this, offset2, oldOffset);
  }
  /**
  Creates a widget decoration, which is a DOM node that's shown in
  the document at the given position. It is recommended that you
  delay rendering the widget by passing a function that will be
  called when the widget is actually drawn in a view, but you can
  also directly pass a DOM node. `getPos` can be used to find the
  widget's current document position.
  */
  static widget(pos, toDOM, spec) {
    return new Decoration(pos, pos, new WidgetType(toDOM, spec));
  }
  /**
  Creates an inline decoration, which adds the given attributes to
  each inline node between `from` and `to`.
  */
  static inline(from2, to, attrs, spec) {
    return new Decoration(from2, to, new InlineType(attrs, spec));
  }
  /**
  Creates a node decoration. `from` and `to` should point precisely
  before and after a node in the document. That node, and only that
  node, will receive the given attributes.
  */
  static node(from2, to, attrs, spec) {
    return new Decoration(from2, to, new NodeType2(attrs, spec));
  }
  /**
  The spec provided when creating this decoration. Can be useful
  if you've stored extra information in that object.
  */
  get spec() {
    return this.type.spec;
  }
  /**
  @internal
  */
  get inline() {
    return this.type instanceof InlineType;
  }
  /**
  @internal
  */
  get widget() {
    return this.type instanceof WidgetType;
  }
}
const none = [], noSpec = {};
class DecorationSet {
  /**
  @internal
  */
  constructor(local, children) {
    this.local = local.length ? local : none;
    this.children = children.length ? children : none;
  }
  /**
  Create a set of decorations, using the structure of the given
  document. This will consume (modify) the `decorations` array, so
  you must make a copy if you want need to preserve that.
  */
  static create(doc2, decorations) {
    return decorations.length ? buildTree(decorations, doc2, 0, noSpec) : empty;
  }
  /**
  Find all decorations in this set which touch the given range
  (including decorations that start or end directly at the
  boundaries) and match the given predicate on their spec. When
  `start` and `end` are omitted, all decorations in the set are
  considered. When `predicate` isn't given, all decorations are
  assumed to match.
  */
  find(start, end, predicate) {
    let result = [];
    this.findInner(start == null ? 0 : start, end == null ? 1e9 : end, result, 0, predicate);
    return result;
  }
  findInner(start, end, result, offset2, predicate) {
    for (let i = 0; i < this.local.length; i++) {
      let span = this.local[i];
      if (span.from <= end && span.to >= start && (!predicate || predicate(span.spec)))
        result.push(span.copy(span.from + offset2, span.to + offset2));
    }
    for (let i = 0; i < this.children.length; i += 3) {
      if (this.children[i] < end && this.children[i + 1] > start) {
        let childOff = this.children[i] + 1;
        this.children[i + 2].findInner(start - childOff, end - childOff, result, offset2 + childOff, predicate);
      }
    }
  }
  /**
  Map the set of decorations in response to a change in the
  document.
  */
  map(mapping, doc2, options) {
    if (this == empty || mapping.maps.length == 0)
      return this;
    return this.mapInner(mapping, doc2, 0, 0, options || noSpec);
  }
  /**
  @internal
  */
  mapInner(mapping, node, offset2, oldOffset, options) {
    let newLocal;
    for (let i = 0; i < this.local.length; i++) {
      let mapped = this.local[i].map(mapping, offset2, oldOffset);
      if (mapped && mapped.type.valid(node, mapped))
        (newLocal || (newLocal = [])).push(mapped);
      else if (options.onRemove)
        options.onRemove(this.local[i].spec);
    }
    if (this.children.length)
      return mapChildren(this.children, newLocal || [], mapping, node, offset2, oldOffset, options);
    else
      return newLocal ? new DecorationSet(newLocal.sort(byPos), none) : empty;
  }
  /**
  Add the given array of decorations to the ones in the set,
  producing a new set. Consumes the `decorations` array. Needs
  access to the current document to create the appropriate tree
  structure.
  */
  add(doc2, decorations) {
    if (!decorations.length)
      return this;
    if (this == empty)
      return DecorationSet.create(doc2, decorations);
    return this.addInner(doc2, decorations, 0);
  }
  addInner(doc2, decorations, offset2) {
    let children, childIndex = 0;
    doc2.forEach((childNode, childOffset) => {
      let baseOffset = childOffset + offset2, found2;
      if (!(found2 = takeSpansForNode(decorations, childNode, baseOffset)))
        return;
      if (!children)
        children = this.children.slice();
      while (childIndex < children.length && children[childIndex] < childOffset)
        childIndex += 3;
      if (children[childIndex] == childOffset)
        children[childIndex + 2] = children[childIndex + 2].addInner(childNode, found2, baseOffset + 1);
      else
        children.splice(childIndex, 0, childOffset, childOffset + childNode.nodeSize, buildTree(found2, childNode, baseOffset + 1, noSpec));
      childIndex += 3;
    });
    let local = moveSpans(childIndex ? withoutNulls(decorations) : decorations, -offset2);
    for (let i = 0; i < local.length; i++)
      if (!local[i].type.valid(doc2, local[i]))
        local.splice(i--, 1);
    return new DecorationSet(local.length ? this.local.concat(local).sort(byPos) : this.local, children || this.children);
  }
  /**
  Create a new set that contains the decorations in this set, minus
  the ones in the given array.
  */
  remove(decorations) {
    if (decorations.length == 0 || this == empty)
      return this;
    return this.removeInner(decorations, 0);
  }
  removeInner(decorations, offset2) {
    let children = this.children, local = this.local;
    for (let i = 0; i < children.length; i += 3) {
      let found2;
      let from2 = children[i] + offset2, to = children[i + 1] + offset2;
      for (let j2 = 0, span; j2 < decorations.length; j2++)
        if (span = decorations[j2]) {
          if (span.from > from2 && span.to < to) {
            decorations[j2] = null;
            (found2 || (found2 = [])).push(span);
          }
        }
      if (!found2)
        continue;
      if (children == this.children)
        children = this.children.slice();
      let removed = children[i + 2].removeInner(found2, from2 + 1);
      if (removed != empty) {
        children[i + 2] = removed;
      } else {
        children.splice(i, 3);
        i -= 3;
      }
    }
    if (local.length) {
      for (let i = 0, span; i < decorations.length; i++)
        if (span = decorations[i]) {
          for (let j2 = 0; j2 < local.length; j2++)
            if (local[j2].eq(span, offset2)) {
              if (local == this.local)
                local = this.local.slice();
              local.splice(j2--, 1);
            }
        }
    }
    if (children == this.children && local == this.local)
      return this;
    return local.length || children.length ? new DecorationSet(local, children) : empty;
  }
  forChild(offset2, node) {
    if (this == empty)
      return this;
    if (node.isLeaf)
      return DecorationSet.empty;
    let child, local;
    for (let i = 0; i < this.children.length; i += 3)
      if (this.children[i] >= offset2) {
        if (this.children[i] == offset2)
          child = this.children[i + 2];
        break;
      }
    let start = offset2 + 1, end = start + node.content.size;
    for (let i = 0; i < this.local.length; i++) {
      let dec = this.local[i];
      if (dec.from < end && dec.to > start && dec.type instanceof InlineType) {
        let from2 = Math.max(start, dec.from) - start, to = Math.min(end, dec.to) - start;
        if (from2 < to)
          (local || (local = [])).push(dec.copy(from2, to));
      }
    }
    if (local) {
      let localSet = new DecorationSet(local.sort(byPos), none);
      return child ? new DecorationGroup([localSet, child]) : localSet;
    }
    return child || empty;
  }
  /**
  @internal
  */
  eq(other) {
    if (this == other)
      return true;
    if (!(other instanceof DecorationSet) || this.local.length != other.local.length || this.children.length != other.children.length)
      return false;
    for (let i = 0; i < this.local.length; i++)
      if (!this.local[i].eq(other.local[i]))
        return false;
    for (let i = 0; i < this.children.length; i += 3)
      if (this.children[i] != other.children[i] || this.children[i + 1] != other.children[i + 1] || !this.children[i + 2].eq(other.children[i + 2]))
        return false;
    return true;
  }
  /**
  @internal
  */
  locals(node) {
    return removeOverlap(this.localsInner(node));
  }
  /**
  @internal
  */
  localsInner(node) {
    if (this == empty)
      return none;
    if (node.inlineContent || !this.local.some(InlineType.is))
      return this.local;
    let result = [];
    for (let i = 0; i < this.local.length; i++) {
      if (!(this.local[i].type instanceof InlineType))
        result.push(this.local[i]);
    }
    return result;
  }
  forEachSet(f2) {
    f2(this);
  }
}
DecorationSet.empty = new DecorationSet([], []);
DecorationSet.removeOverlap = removeOverlap;
const empty = DecorationSet.empty;
class DecorationGroup {
  constructor(members) {
    this.members = members;
  }
  map(mapping, doc2) {
    const mappedDecos = this.members.map((member) => member.map(mapping, doc2, noSpec));
    return DecorationGroup.from(mappedDecos);
  }
  forChild(offset2, child) {
    if (child.isLeaf)
      return DecorationSet.empty;
    let found2 = [];
    for (let i = 0; i < this.members.length; i++) {
      let result = this.members[i].forChild(offset2, child);
      if (result == empty)
        continue;
      if (result instanceof DecorationGroup)
        found2 = found2.concat(result.members);
      else
        found2.push(result);
    }
    return DecorationGroup.from(found2);
  }
  eq(other) {
    if (!(other instanceof DecorationGroup) || other.members.length != this.members.length)
      return false;
    for (let i = 0; i < this.members.length; i++)
      if (!this.members[i].eq(other.members[i]))
        return false;
    return true;
  }
  locals(node) {
    let result, sorted = true;
    for (let i = 0; i < this.members.length; i++) {
      let locals = this.members[i].localsInner(node);
      if (!locals.length)
        continue;
      if (!result) {
        result = locals;
      } else {
        if (sorted) {
          result = result.slice();
          sorted = false;
        }
        for (let j2 = 0; j2 < locals.length; j2++)
          result.push(locals[j2]);
      }
    }
    return result ? removeOverlap(sorted ? result : result.sort(byPos)) : none;
  }
  // Create a group for the given array of decoration sets, or return
  // a single set when possible.
  static from(members) {
    switch (members.length) {
      case 0:
        return empty;
      case 1:
        return members[0];
      default:
        return new DecorationGroup(members.every((m2) => m2 instanceof DecorationSet) ? members : members.reduce((r2, m2) => r2.concat(m2 instanceof DecorationSet ? m2 : m2.members), []));
    }
  }
  forEachSet(f2) {
    for (let i = 0; i < this.members.length; i++)
      this.members[i].forEachSet(f2);
  }
}
function mapChildren(oldChildren, newLocal, mapping, node, offset2, oldOffset, options) {
  let children = oldChildren.slice();
  for (let i = 0, baseOffset = oldOffset; i < mapping.maps.length; i++) {
    let moved = 0;
    mapping.maps[i].forEach((oldStart, oldEnd, newStart, newEnd) => {
      let dSize = newEnd - newStart - (oldEnd - oldStart);
      for (let i2 = 0; i2 < children.length; i2 += 3) {
        let end = children[i2 + 1];
        if (end < 0 || oldStart > end + baseOffset - moved)
          continue;
        let start = children[i2] + baseOffset - moved;
        if (oldEnd >= start) {
          children[i2 + 1] = oldStart <= start ? -2 : -1;
        } else if (oldStart >= baseOffset && dSize) {
          children[i2] += dSize;
          children[i2 + 1] += dSize;
        }
      }
      moved += dSize;
    });
    baseOffset = mapping.maps[i].map(baseOffset, -1);
  }
  let mustRebuild = false;
  for (let i = 0; i < children.length; i += 3)
    if (children[i + 1] < 0) {
      if (children[i + 1] == -2) {
        mustRebuild = true;
        children[i + 1] = -1;
        continue;
      }
      let from2 = mapping.map(oldChildren[i] + oldOffset), fromLocal = from2 - offset2;
      if (fromLocal < 0 || fromLocal >= node.content.size) {
        mustRebuild = true;
        continue;
      }
      let to = mapping.map(oldChildren[i + 1] + oldOffset, -1), toLocal = to - offset2;
      let { index: index2, offset: childOffset } = node.content.findIndex(fromLocal);
      let childNode = node.maybeChild(index2);
      if (childNode && childOffset == fromLocal && childOffset + childNode.nodeSize == toLocal) {
        let mapped = children[i + 2].mapInner(mapping, childNode, from2 + 1, oldChildren[i] + oldOffset + 1, options);
        if (mapped != empty) {
          children[i] = fromLocal;
          children[i + 1] = toLocal;
          children[i + 2] = mapped;
        } else {
          children[i + 1] = -2;
          mustRebuild = true;
        }
      } else {
        mustRebuild = true;
      }
    }
  if (mustRebuild) {
    let decorations = mapAndGatherRemainingDecorations(children, oldChildren, newLocal, mapping, offset2, oldOffset, options);
    let built = buildTree(decorations, node, 0, options);
    newLocal = built.local;
    for (let i = 0; i < children.length; i += 3)
      if (children[i + 1] < 0) {
        children.splice(i, 3);
        i -= 3;
      }
    for (let i = 0, j2 = 0; i < built.children.length; i += 3) {
      let from2 = built.children[i];
      while (j2 < children.length && children[j2] < from2)
        j2 += 3;
      children.splice(j2, 0, built.children[i], built.children[i + 1], built.children[i + 2]);
    }
  }
  return new DecorationSet(newLocal.sort(byPos), children);
}
function moveSpans(spans, offset2) {
  if (!offset2 || !spans.length)
    return spans;
  let result = [];
  for (let i = 0; i < spans.length; i++) {
    let span = spans[i];
    result.push(new Decoration(span.from + offset2, span.to + offset2, span.type));
  }
  return result;
}
function mapAndGatherRemainingDecorations(children, oldChildren, decorations, mapping, offset2, oldOffset, options) {
  function gather(set, oldOffset2) {
    for (let i = 0; i < set.local.length; i++) {
      let mapped = set.local[i].map(mapping, offset2, oldOffset2);
      if (mapped)
        decorations.push(mapped);
      else if (options.onRemove)
        options.onRemove(set.local[i].spec);
    }
    for (let i = 0; i < set.children.length; i += 3)
      gather(set.children[i + 2], set.children[i] + oldOffset2 + 1);
  }
  for (let i = 0; i < children.length; i += 3)
    if (children[i + 1] == -1)
      gather(children[i + 2], oldChildren[i] + oldOffset + 1);
  return decorations;
}
function takeSpansForNode(spans, node, offset2) {
  if (node.isLeaf)
    return null;
  let end = offset2 + node.nodeSize, found2 = null;
  for (let i = 0, span; i < spans.length; i++) {
    if ((span = spans[i]) && span.from > offset2 && span.to < end) {
      (found2 || (found2 = [])).push(span);
      spans[i] = null;
    }
  }
  return found2;
}
function withoutNulls(array) {
  let result = [];
  for (let i = 0; i < array.length; i++)
    if (array[i] != null)
      result.push(array[i]);
  return result;
}
function buildTree(spans, node, offset2, options) {
  let children = [], hasNulls = false;
  node.forEach((childNode, localStart) => {
    let found2 = takeSpansForNode(spans, childNode, localStart + offset2);
    if (found2) {
      hasNulls = true;
      let subtree = buildTree(found2, childNode, offset2 + localStart + 1, options);
      if (subtree != empty)
        children.push(localStart, localStart + childNode.nodeSize, subtree);
    }
  });
  let locals = moveSpans(hasNulls ? withoutNulls(spans) : spans, -offset2).sort(byPos);
  for (let i = 0; i < locals.length; i++)
    if (!locals[i].type.valid(node, locals[i])) {
      if (options.onRemove)
        options.onRemove(locals[i].spec);
      locals.splice(i--, 1);
    }
  return locals.length || children.length ? new DecorationSet(locals, children) : empty;
}
function byPos(a2, b2) {
  return a2.from - b2.from || a2.to - b2.to;
}
function removeOverlap(spans) {
  let working = spans;
  for (let i = 0; i < working.length - 1; i++) {
    let span = working[i];
    if (span.from != span.to)
      for (let j2 = i + 1; j2 < working.length; j2++) {
        let next = working[j2];
        if (next.from == span.from) {
          if (next.to != span.to) {
            if (working == spans)
              working = spans.slice();
            working[j2] = next.copy(next.from, span.to);
            insertAhead(working, j2 + 1, next.copy(span.to, next.to));
          }
          continue;
        } else {
          if (next.from < span.to) {
            if (working == spans)
              working = spans.slice();
            working[i] = span.copy(span.from, next.from);
            insertAhead(working, j2, span.copy(next.from, span.to));
          }
          break;
        }
      }
  }
  return working;
}
function insertAhead(array, i, deco) {
  while (i < array.length && byPos(deco, array[i]) > 0)
    i++;
  array.splice(i, 0, deco);
}
function viewDecorations(view) {
  let found2 = [];
  view.someProp("decorations", (f2) => {
    let result = f2(view.state);
    if (result && result != empty)
      found2.push(result);
  });
  if (view.cursorWrapper)
    found2.push(DecorationSet.create(view.state.doc, [view.cursorWrapper.deco]));
  return DecorationGroup.from(found2);
}
const observeOptions = {
  childList: true,
  characterData: true,
  characterDataOldValue: true,
  attributes: true,
  attributeOldValue: true,
  subtree: true
};
const useCharData = ie$1 && ie_version <= 11;
class SelectionState {
  constructor() {
    this.anchorNode = null;
    this.anchorOffset = 0;
    this.focusNode = null;
    this.focusOffset = 0;
  }
  set(sel) {
    this.anchorNode = sel.anchorNode;
    this.anchorOffset = sel.anchorOffset;
    this.focusNode = sel.focusNode;
    this.focusOffset = sel.focusOffset;
  }
  clear() {
    this.anchorNode = this.focusNode = null;
  }
  eq(sel) {
    return sel.anchorNode == this.anchorNode && sel.anchorOffset == this.anchorOffset && sel.focusNode == this.focusNode && sel.focusOffset == this.focusOffset;
  }
}
class DOMObserver {
  constructor(view, handleDOMChange) {
    this.view = view;
    this.handleDOMChange = handleDOMChange;
    this.queue = [];
    this.flushingSoon = -1;
    this.observer = null;
    this.currentSelection = new SelectionState();
    this.onCharData = null;
    this.suppressingSelectionUpdates = false;
    this.lastChangedTextNode = null;
    this.observer = window.MutationObserver && new window.MutationObserver((mutations) => {
      for (let i = 0; i < mutations.length; i++)
        this.queue.push(mutations[i]);
      if (ie$1 && ie_version <= 11 && mutations.some((m2) => m2.type == "childList" && m2.removedNodes.length || m2.type == "characterData" && m2.oldValue.length > m2.target.nodeValue.length)) {
        this.flushSoon();
      } else if (safari && view.composing && mutations.some((m2) => m2.type == "childList" && m2.target.nodeName == "TR")) {
        view.input.badSafariComposition = true;
        this.flushSoon();
      } else {
        this.flush();
      }
    });
    if (useCharData) {
      this.onCharData = (e) => {
        this.queue.push({ target: e.target, type: "characterData", oldValue: e.prevValue });
        this.flushSoon();
      };
    }
    this.onSelectionChange = this.onSelectionChange.bind(this);
  }
  flushSoon() {
    if (this.flushingSoon < 0)
      this.flushingSoon = window.setTimeout(() => {
        this.flushingSoon = -1;
        this.flush();
      }, 20);
  }
  forceFlush() {
    if (this.flushingSoon > -1) {
      window.clearTimeout(this.flushingSoon);
      this.flushingSoon = -1;
      this.flush();
    }
  }
  start() {
    if (this.observer) {
      this.observer.takeRecords();
      this.observer.observe(this.view.dom, observeOptions);
    }
    if (this.onCharData)
      this.view.dom.addEventListener("DOMCharacterDataModified", this.onCharData);
    this.connectSelection();
  }
  stop() {
    if (this.observer) {
      let take = this.observer.takeRecords();
      if (take.length) {
        for (let i = 0; i < take.length; i++)
          this.queue.push(take[i]);
        window.setTimeout(() => this.flush(), 20);
      }
      this.observer.disconnect();
    }
    if (this.onCharData)
      this.view.dom.removeEventListener("DOMCharacterDataModified", this.onCharData);
    this.disconnectSelection();
  }
  connectSelection() {
    this.view.dom.ownerDocument.addEventListener("selectionchange", this.onSelectionChange);
  }
  disconnectSelection() {
    this.view.dom.ownerDocument.removeEventListener("selectionchange", this.onSelectionChange);
  }
  suppressSelectionUpdates() {
    this.suppressingSelectionUpdates = true;
    setTimeout(() => this.suppressingSelectionUpdates = false, 50);
  }
  onSelectionChange() {
    if (!hasFocusAndSelection(this.view))
      return;
    if (this.suppressingSelectionUpdates)
      return selectionToDOM(this.view);
    if (ie$1 && ie_version <= 11 && !this.view.state.selection.empty) {
      let sel = this.view.domSelectionRange();
      if (sel.focusNode && isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset))
        return this.flushSoon();
    }
    this.flush();
  }
  setCurSelection() {
    this.currentSelection.set(this.view.domSelectionRange());
  }
  ignoreSelectionChange(sel) {
    if (!sel.focusNode)
      return true;
    let ancestors = /* @__PURE__ */ new Set(), container;
    for (let scan = sel.focusNode; scan; scan = parentNode(scan))
      ancestors.add(scan);
    for (let scan = sel.anchorNode; scan; scan = parentNode(scan))
      if (ancestors.has(scan)) {
        container = scan;
        break;
      }
    let desc = container && this.view.docView.nearestDesc(container);
    if (desc && desc.ignoreMutation({
      type: "selection",
      target: container.nodeType == 3 ? container.parentNode : container
    })) {
      this.setCurSelection();
      return true;
    }
  }
  pendingRecords() {
    if (this.observer)
      for (let mut of this.observer.takeRecords())
        this.queue.push(mut);
    return this.queue;
  }
  flush() {
    let { view } = this;
    if (!view.docView || this.flushingSoon > -1)
      return;
    let mutations = this.pendingRecords();
    if (mutations.length)
      this.queue = [];
    let sel = view.domSelectionRange();
    let newSel = !this.suppressingSelectionUpdates && !this.currentSelection.eq(sel) && hasFocusAndSelection(view) && !this.ignoreSelectionChange(sel);
    let from2 = -1, to = -1, typeOver = false, added = [];
    if (view.editable) {
      for (let i = 0; i < mutations.length; i++) {
        let result = this.registerMutation(mutations[i], added);
        if (result) {
          from2 = from2 < 0 ? result.from : Math.min(result.from, from2);
          to = to < 0 ? result.to : Math.max(result.to, to);
          if (result.typeOver)
            typeOver = true;
        }
      }
    }
    if (added.some((n2) => n2.nodeName == "BR") && (view.input.lastKeyCode == 8 || view.input.lastKeyCode == 46)) {
      for (let node of added)
        if (node.nodeName == "BR" && node.parentNode) {
          let after = node.nextSibling;
          if (after && after.nodeType == 1 && after.contentEditable == "false")
            node.parentNode.removeChild(node);
        }
    } else if (gecko && added.length) {
      let brs = added.filter((n2) => n2.nodeName == "BR");
      if (brs.length == 2) {
        let [a2, b2] = brs;
        if (a2.parentNode && a2.parentNode.parentNode == b2.parentNode)
          b2.remove();
        else
          a2.remove();
      } else {
        let { focusNode } = this.currentSelection;
        for (let br2 of brs) {
          let parent = br2.parentNode;
          if (parent && parent.nodeName == "LI" && (!focusNode || blockParent(view, focusNode) != parent))
            br2.remove();
        }
      }
    }
    let readSel = null;
    if (from2 < 0 && newSel && view.input.lastFocus > Date.now() - 200 && Math.max(view.input.lastTouch, view.input.lastClick.time) < Date.now() - 300 && selectionCollapsed(sel) && (readSel = selectionFromDOM(view)) && readSel.eq(Selection.near(view.state.doc.resolve(0), 1))) {
      view.input.lastFocus = 0;
      selectionToDOM(view);
      this.currentSelection.set(sel);
      view.scrollToSelection();
    } else if (from2 > -1 || newSel) {
      if (from2 > -1) {
        view.docView.markDirty(from2, to);
        checkCSS(view);
      }
      if (view.input.badSafariComposition) {
        view.input.badSafariComposition = false;
        fixUpBadSafariComposition(view, added);
      }
      this.handleDOMChange(from2, to, typeOver, added);
      if (view.docView && view.docView.dirty)
        view.updateState(view.state);
      else if (!this.currentSelection.eq(sel))
        selectionToDOM(view);
      this.currentSelection.set(sel);
    }
  }
  registerMutation(mut, added) {
    if (added.indexOf(mut.target) > -1)
      return null;
    let desc = this.view.docView.nearestDesc(mut.target);
    if (mut.type == "attributes" && (desc == this.view.docView || mut.attributeName == "contenteditable" || // Firefox sometimes fires spurious events for null/empty styles
    mut.attributeName == "style" && !mut.oldValue && !mut.target.getAttribute("style")))
      return null;
    if (!desc || desc.ignoreMutation(mut))
      return null;
    if (mut.type == "childList") {
      for (let i = 0; i < mut.addedNodes.length; i++) {
        let node = mut.addedNodes[i];
        added.push(node);
        if (node.nodeType == 3)
          this.lastChangedTextNode = node;
      }
      if (desc.contentDOM && desc.contentDOM != desc.dom && !desc.contentDOM.contains(mut.target))
        return { from: desc.posBefore, to: desc.posAfter };
      let prev = mut.previousSibling, next = mut.nextSibling;
      if (ie$1 && ie_version <= 11 && mut.addedNodes.length) {
        for (let i = 0; i < mut.addedNodes.length; i++) {
          let { previousSibling, nextSibling } = mut.addedNodes[i];
          if (!previousSibling || Array.prototype.indexOf.call(mut.addedNodes, previousSibling) < 0)
            prev = previousSibling;
          if (!nextSibling || Array.prototype.indexOf.call(mut.addedNodes, nextSibling) < 0)
            next = nextSibling;
        }
      }
      let fromOffset = prev && prev.parentNode == mut.target ? domIndex(prev) + 1 : 0;
      let from2 = desc.localPosFromDOM(mut.target, fromOffset, -1);
      let toOffset = next && next.parentNode == mut.target ? domIndex(next) : mut.target.childNodes.length;
      let to = desc.localPosFromDOM(mut.target, toOffset, 1);
      return { from: from2, to };
    } else if (mut.type == "attributes") {
      return { from: desc.posAtStart - desc.border, to: desc.posAtEnd + desc.border };
    } else {
      this.lastChangedTextNode = mut.target;
      return {
        from: desc.posAtStart,
        to: desc.posAtEnd,
        // An event was generated for a text change that didn't change
        // any text. Mark the dom change to fall back to assuming the
        // selection was typed over with an identical value if it can't
        // find another change.
        typeOver: mut.target.nodeValue == mut.oldValue
      };
    }
  }
}
let cssChecked = /* @__PURE__ */ new WeakMap();
let cssCheckWarned = false;
function checkCSS(view) {
  if (cssChecked.has(view))
    return;
  cssChecked.set(view, null);
  if (["normal", "nowrap", "pre-line"].indexOf(getComputedStyle(view.dom).whiteSpace) !== -1) {
    view.requiresGeckoHackNode = gecko;
    if (cssCheckWarned)
      return;
    console["warn"]("ProseMirror expects the CSS white-space property to be set, preferably to 'pre-wrap'. It is recommended to load style/prosemirror.css from the prosemirror-view package.");
    cssCheckWarned = true;
  }
}
function rangeToSelectionRange(view, range) {
  let anchorNode = range.startContainer, anchorOffset = range.startOffset;
  let focusNode = range.endContainer, focusOffset = range.endOffset;
  let currentAnchor = view.domAtPos(view.state.selection.anchor);
  if (isEquivalentPosition(currentAnchor.node, currentAnchor.offset, focusNode, focusOffset))
    [anchorNode, anchorOffset, focusNode, focusOffset] = [focusNode, focusOffset, anchorNode, anchorOffset];
  return { anchorNode, anchorOffset, focusNode, focusOffset };
}
function safariShadowSelectionRange(view, selection) {
  if (selection.getComposedRanges) {
    let range = selection.getComposedRanges(view.root)[0];
    if (range)
      return rangeToSelectionRange(view, range);
  }
  let found2;
  function read(event) {
    event.preventDefault();
    event.stopImmediatePropagation();
    found2 = event.getTargetRanges()[0];
  }
  view.dom.addEventListener("beforeinput", read, true);
  document.execCommand("indent");
  view.dom.removeEventListener("beforeinput", read, true);
  return found2 ? rangeToSelectionRange(view, found2) : null;
}
function blockParent(view, node) {
  for (let p2 = node.parentNode; p2 && p2 != view.dom; p2 = p2.parentNode) {
    let desc = view.docView.nearestDesc(p2, true);
    if (desc && desc.node.isBlock)
      return p2;
  }
  return null;
}
function fixUpBadSafariComposition(view, addedNodes) {
  var _a2;
  let { focusNode, focusOffset } = view.domSelectionRange();
  for (let node of addedNodes) {
    if (((_a2 = node.parentNode) === null || _a2 === void 0 ? void 0 : _a2.nodeName) == "TR") {
      let nextCell2 = node.nextSibling;
      while (nextCell2 && (nextCell2.nodeName != "TD" && nextCell2.nodeName != "TH"))
        nextCell2 = nextCell2.nextSibling;
      if (nextCell2) {
        let parent = nextCell2;
        for (; ; ) {
          let first2 = parent.firstChild;
          if (!first2 || first2.nodeType != 1 || first2.contentEditable == "false" || /^(BR|IMG)$/.test(first2.nodeName))
            break;
          parent = first2;
        }
        parent.insertBefore(node, parent.firstChild);
        if (focusNode == node)
          view.domSelection().collapse(node, focusOffset);
      } else {
        node.parentNode.removeChild(node);
      }
    }
  }
}
function parseBetween(view, from_, to_) {
  let { node: parent, fromOffset, toOffset, from: from2, to } = view.docView.parseRange(from_, to_);
  let domSel = view.domSelectionRange();
  let find2;
  let anchor = domSel.anchorNode;
  if (anchor && view.dom.contains(anchor.nodeType == 1 ? anchor : anchor.parentNode)) {
    find2 = [{ node: anchor, offset: domSel.anchorOffset }];
    if (!selectionCollapsed(domSel))
      find2.push({ node: domSel.focusNode, offset: domSel.focusOffset });
  }
  if (chrome && view.input.lastKeyCode === 8) {
    for (let off = toOffset; off > fromOffset; off--) {
      let node = parent.childNodes[off - 1], desc = node.pmViewDesc;
      if (node.nodeName == "BR" && !desc) {
        toOffset = off;
        break;
      }
      if (!desc || desc.size)
        break;
    }
  }
  let startDoc = view.state.doc;
  let parser = view.someProp("domParser") || DOMParser.fromSchema(view.state.schema);
  let $from = startDoc.resolve(from2);
  let sel = null, doc2 = parser.parse(parent, {
    topNode: $from.parent,
    topMatch: $from.parent.contentMatchAt($from.index()),
    topOpen: true,
    from: fromOffset,
    to: toOffset,
    preserveWhitespace: $from.parent.type.whitespace == "pre" ? "full" : true,
    findPositions: find2,
    ruleFromNode,
    context: $from
  });
  if (find2 && find2[0].pos != null) {
    let anchor2 = find2[0].pos, head = find2[1] && find2[1].pos;
    if (head == null)
      head = anchor2;
    sel = { anchor: anchor2 + from2, head: head + from2 };
  }
  return { doc: doc2, sel, from: from2, to };
}
function ruleFromNode(dom) {
  let desc = dom.pmViewDesc;
  if (desc) {
    return desc.parseRule();
  } else if (dom.nodeName == "BR" && dom.parentNode) {
    if (safari && /^(ul|ol)$/i.test(dom.parentNode.nodeName)) {
      let skip = document.createElement("div");
      skip.appendChild(document.createElement("li"));
      return { skip };
    } else if (dom.parentNode.lastChild == dom || safari && /^(tr|table)$/i.test(dom.parentNode.nodeName)) {
      return { ignore: true };
    }
  } else if (dom.nodeName == "IMG" && dom.getAttribute("mark-placeholder")) {
    return { ignore: true };
  }
  return null;
}
const isInline = /^(a|abbr|acronym|b|bd[io]|big|br|button|cite|code|data(list)?|del|dfn|em|i|img|ins|kbd|label|map|mark|meter|output|q|ruby|s|samp|small|span|strong|su[bp]|time|u|tt|var)$/i;
function readDOMChange(view, from2, to, typeOver, addedNodes) {
  let compositionID = view.input.compositionPendingChanges || (view.composing ? view.input.compositionID : 0);
  view.input.compositionPendingChanges = 0;
  if (from2 < 0) {
    let origin = view.input.lastSelectionTime > Date.now() - 50 ? view.input.lastSelectionOrigin : null;
    let newSel = selectionFromDOM(view, origin);
    if (newSel && !view.state.selection.eq(newSel)) {
      if (chrome && android && view.input.lastKeyCode === 13 && Date.now() - 100 < view.input.lastKeyCodeTime && view.someProp("handleKeyDown", (f2) => f2(view, keyEvent(13, "Enter"))))
        return;
      let tr2 = view.state.tr.setSelection(newSel);
      if (origin == "pointer")
        tr2.setMeta("pointer", true);
      else if (origin == "key")
        tr2.scrollIntoView();
      if (compositionID)
        tr2.setMeta("composition", compositionID);
      view.dispatch(tr2);
    }
    return;
  }
  let $before = view.state.doc.resolve(from2);
  let shared = $before.sharedDepth(to);
  from2 = $before.before(shared + 1);
  to = view.state.doc.resolve(to).after(shared + 1);
  let sel = view.state.selection;
  let parse = parseBetween(view, from2, to);
  let doc2 = view.state.doc, compare = doc2.slice(parse.from, parse.to);
  let preferredPos, preferredSide;
  if (view.input.lastKeyCode === 8 && Date.now() - 100 < view.input.lastKeyCodeTime) {
    preferredPos = view.state.selection.to;
    preferredSide = "end";
  } else {
    preferredPos = view.state.selection.from;
    preferredSide = "start";
  }
  view.input.lastKeyCode = null;
  let change = findDiff(compare.content, parse.doc.content, parse.from, preferredPos, preferredSide);
  if (change)
    view.input.domChangeCount++;
  if ((ios && view.input.lastIOSEnter > Date.now() - 225 || android) && addedNodes.some((n2) => n2.nodeType == 1 && !isInline.test(n2.nodeName)) && (!change || change.endA >= change.endB) && view.someProp("handleKeyDown", (f2) => f2(view, keyEvent(13, "Enter")))) {
    view.input.lastIOSEnter = 0;
    return;
  }
  if (!change) {
    if (typeOver && sel instanceof TextSelection && !sel.empty && sel.$head.sameParent(sel.$anchor) && !view.composing && !(parse.sel && parse.sel.anchor != parse.sel.head)) {
      change = { start: sel.from, endA: sel.to, endB: sel.to };
    } else {
      if (parse.sel) {
        let sel2 = resolveSelection(view, view.state.doc, parse.sel);
        if (sel2 && !sel2.eq(view.state.selection)) {
          let tr2 = view.state.tr.setSelection(sel2);
          if (compositionID)
            tr2.setMeta("composition", compositionID);
          view.dispatch(tr2);
        }
      }
      return;
    }
  }
  if (view.state.selection.from < view.state.selection.to && change.start == change.endB && view.state.selection instanceof TextSelection) {
    if (change.start > view.state.selection.from && change.start <= view.state.selection.from + 2 && view.state.selection.from >= parse.from) {
      change.start = view.state.selection.from;
    } else if (change.endA < view.state.selection.to && change.endA >= view.state.selection.to - 2 && view.state.selection.to <= parse.to) {
      change.endB += view.state.selection.to - change.endA;
      change.endA = view.state.selection.to;
    }
  }
  if (ie$1 && ie_version <= 11 && change.endB == change.start + 1 && change.endA == change.start && change.start > parse.from && parse.doc.textBetween(change.start - parse.from - 1, change.start - parse.from + 1) == "  ") {
    change.start--;
    change.endA--;
    change.endB--;
  }
  let $from = parse.doc.resolveNoCache(change.start - parse.from);
  let $to = parse.doc.resolveNoCache(change.endB - parse.from);
  let $fromA = doc2.resolve(change.start);
  let inlineChange = $from.sameParent($to) && $from.parent.inlineContent && $fromA.end() >= change.endA;
  if ((ios && view.input.lastIOSEnter > Date.now() - 225 && (!inlineChange || addedNodes.some((n2) => n2.nodeName == "DIV" || n2.nodeName == "P")) || !inlineChange && $from.pos < parse.doc.content.size && (!$from.sameParent($to) || !$from.parent.inlineContent) && $from.pos < $to.pos && !/\S/.test(parse.doc.textBetween($from.pos, $to.pos, "", ""))) && view.someProp("handleKeyDown", (f2) => f2(view, keyEvent(13, "Enter")))) {
    view.input.lastIOSEnter = 0;
    return;
  }
  if (view.state.selection.anchor > change.start && looksLikeBackspace(doc2, change.start, change.endA, $from, $to) && view.someProp("handleKeyDown", (f2) => f2(view, keyEvent(8, "Backspace")))) {
    if (android && chrome)
      view.domObserver.suppressSelectionUpdates();
    return;
  }
  if (chrome && change.endB == change.start)
    view.input.lastChromeDelete = Date.now();
  if (android && !inlineChange && $from.start() != $to.start() && $to.parentOffset == 0 && $from.depth == $to.depth && parse.sel && parse.sel.anchor == parse.sel.head && parse.sel.head == change.endA) {
    change.endB -= 2;
    $to = parse.doc.resolveNoCache(change.endB - parse.from);
    setTimeout(() => {
      view.someProp("handleKeyDown", function(f2) {
        return f2(view, keyEvent(13, "Enter"));
      });
    }, 20);
  }
  let chFrom = change.start, chTo = change.endA;
  let mkTr = (base2) => {
    let tr2 = base2 || view.state.tr.replace(chFrom, chTo, parse.doc.slice(change.start - parse.from, change.endB - parse.from));
    if (parse.sel) {
      let sel2 = resolveSelection(view, tr2.doc, parse.sel);
      if (sel2 && !(chrome && view.composing && sel2.empty && (change.start != change.endB || view.input.lastChromeDelete < Date.now() - 100) && (sel2.head == chFrom || sel2.head == tr2.mapping.map(chTo) - 1) || ie$1 && sel2.empty && sel2.head == chFrom))
        tr2.setSelection(sel2);
    }
    if (compositionID)
      tr2.setMeta("composition", compositionID);
    return tr2.scrollIntoView();
  };
  let markChange;
  if (inlineChange) {
    if ($from.pos == $to.pos) {
      if (ie$1 && ie_version <= 11 && $from.parentOffset == 0) {
        view.domObserver.suppressSelectionUpdates();
        setTimeout(() => selectionToDOM(view), 20);
      }
      let tr2 = mkTr(view.state.tr.delete(chFrom, chTo));
      let marks = doc2.resolve(change.start).marksAcross(doc2.resolve(change.endA));
      if (marks)
        tr2.ensureMarks(marks);
      view.dispatch(tr2);
    } else if (
      // Adding or removing a mark
      change.endA == change.endB && (markChange = isMarkChange($from.parent.content.cut($from.parentOffset, $to.parentOffset), $fromA.parent.content.cut($fromA.parentOffset, change.endA - $fromA.start())))
    ) {
      let tr2 = mkTr(view.state.tr);
      if (markChange.type == "add")
        tr2.addMark(chFrom, chTo, markChange.mark);
      else
        tr2.removeMark(chFrom, chTo, markChange.mark);
      view.dispatch(tr2);
    } else if ($from.parent.child($from.index()).isText && $from.index() == $to.index() - ($to.textOffset ? 0 : 1)) {
      let text = $from.parent.textBetween($from.parentOffset, $to.parentOffset);
      let deflt = () => mkTr(view.state.tr.insertText(text, chFrom, chTo));
      if (!view.someProp("handleTextInput", (f2) => f2(view, chFrom, chTo, text, deflt)))
        view.dispatch(deflt());
    } else {
      view.dispatch(mkTr());
    }
  } else {
    view.dispatch(mkTr());
  }
}
function resolveSelection(view, doc2, parsedSel) {
  if (Math.max(parsedSel.anchor, parsedSel.head) > doc2.content.size)
    return null;
  return selectionBetween(view, doc2.resolve(parsedSel.anchor), doc2.resolve(parsedSel.head));
}
function isMarkChange(cur, prev) {
  let curMarks = cur.firstChild.marks, prevMarks = prev.firstChild.marks;
  let added = curMarks, removed = prevMarks, type, mark, update;
  for (let i = 0; i < prevMarks.length; i++)
    added = prevMarks[i].removeFromSet(added);
  for (let i = 0; i < curMarks.length; i++)
    removed = curMarks[i].removeFromSet(removed);
  if (added.length == 1 && removed.length == 0) {
    mark = added[0];
    type = "add";
    update = (node) => node.mark(mark.addToSet(node.marks));
  } else if (added.length == 0 && removed.length == 1) {
    mark = removed[0];
    type = "remove";
    update = (node) => node.mark(mark.removeFromSet(node.marks));
  } else {
    return null;
  }
  let updated = [];
  for (let i = 0; i < prev.childCount; i++)
    updated.push(update(prev.child(i)));
  if (Fragment.from(updated).eq(cur))
    return { mark, type };
}
function looksLikeBackspace(old, start, end, $newStart, $newEnd) {
  if (
    // The content must have shrunk
    end - start <= $newEnd.pos - $newStart.pos || // newEnd must point directly at or after the end of the block that newStart points into
    skipClosingAndOpening($newStart, true, false) < $newEnd.pos
  )
    return false;
  let $start = old.resolve(start);
  if (!$newStart.parent.isTextblock) {
    let after = $start.nodeAfter;
    return after != null && end == start + after.nodeSize;
  }
  if ($start.parentOffset < $start.parent.content.size || !$start.parent.isTextblock)
    return false;
  let $next = old.resolve(skipClosingAndOpening($start, true, true));
  if (!$next.parent.isTextblock || $next.pos > end || skipClosingAndOpening($next, true, false) < end)
    return false;
  return $newStart.parent.content.cut($newStart.parentOffset).eq($next.parent.content);
}
function skipClosingAndOpening($pos, fromEnd, mayOpen) {
  let depth = $pos.depth, end = fromEnd ? $pos.end() : $pos.pos;
  while (depth > 0 && (fromEnd || $pos.indexAfter(depth) == $pos.node(depth).childCount)) {
    depth--;
    end++;
    fromEnd = false;
  }
  if (mayOpen) {
    let next = $pos.node(depth).maybeChild($pos.indexAfter(depth));
    while (next && !next.isLeaf) {
      next = next.firstChild;
      end++;
    }
  }
  return end;
}
function findDiff(a2, b2, pos, preferredPos, preferredSide) {
  let start = a2.findDiffStart(b2, pos);
  if (start == null)
    return null;
  let { a: endA, b: endB } = a2.findDiffEnd(b2, pos + a2.size, pos + b2.size);
  if (preferredSide == "end") {
    let adjust = Math.max(0, start - Math.min(endA, endB));
    preferredPos -= endA + adjust - start;
  }
  if (endA < start && a2.size < b2.size) {
    let move = preferredPos <= start && preferredPos >= endA ? start - preferredPos : 0;
    start -= move;
    if (start && start < b2.size && isSurrogatePair(b2.textBetween(start - 1, start + 1)))
      start += move ? 1 : -1;
    endB = start + (endB - endA);
    endA = start;
  } else if (endB < start) {
    let move = preferredPos <= start && preferredPos >= endB ? start - preferredPos : 0;
    start -= move;
    if (start && start < a2.size && isSurrogatePair(a2.textBetween(start - 1, start + 1)))
      start += move ? 1 : -1;
    endA = start + (endA - endB);
    endB = start;
  }
  return { start, endA, endB };
}
function isSurrogatePair(str) {
  if (str.length != 2)
    return false;
  let a2 = str.charCodeAt(0), b2 = str.charCodeAt(1);
  return a2 >= 56320 && a2 <= 57343 && b2 >= 55296 && b2 <= 56319;
}
class EditorView {
  /**
  Create a view. `place` may be a DOM node that the editor should
  be appended to, a function that will place it into the document,
  or an object whose `mount` property holds the node to use as the
  document container. If it is `null`, the editor will not be
  added to the document.
  */
  constructor(place, props) {
    this._root = null;
    this.focused = false;
    this.trackWrites = null;
    this.mounted = false;
    this.markCursor = null;
    this.cursorWrapper = null;
    this.lastSelectedViewDesc = void 0;
    this.input = new InputState();
    this.prevDirectPlugins = [];
    this.pluginViews = [];
    this.requiresGeckoHackNode = false;
    this.dragging = null;
    this._props = props;
    this.state = props.state;
    this.directPlugins = props.plugins || [];
    this.directPlugins.forEach(checkStateComponent);
    this.dispatch = this.dispatch.bind(this);
    this.dom = place && place.mount || document.createElement("div");
    if (place) {
      if (place.appendChild)
        place.appendChild(this.dom);
      else if (typeof place == "function")
        place(this.dom);
      else if (place.mount)
        this.mounted = true;
    }
    this.editable = getEditable(this);
    updateCursorWrapper(this);
    this.nodeViews = buildNodeViews(this);
    this.docView = docViewDesc(this.state.doc, computeDocDeco(this), viewDecorations(this), this.dom, this);
    this.domObserver = new DOMObserver(this, (from2, to, typeOver, added) => readDOMChange(this, from2, to, typeOver, added));
    this.domObserver.start();
    initInput(this);
    this.updatePluginViews();
  }
  /**
  Holds `true` when a
  [composition](https://w3c.github.io/uievents/#events-compositionevents)
  is active.
  */
  get composing() {
    return this.input.composing;
  }
  /**
  The view's current [props](https://prosemirror.net/docs/ref/#view.EditorProps).
  */
  get props() {
    if (this._props.state != this.state) {
      let prev = this._props;
      this._props = {};
      for (let name in prev)
        this._props[name] = prev[name];
      this._props.state = this.state;
    }
    return this._props;
  }
  /**
  Update the view's props. Will immediately cause an update to
  the DOM.
  */
  update(props) {
    if (props.handleDOMEvents != this._props.handleDOMEvents)
      ensureListeners(this);
    let prevProps = this._props;
    this._props = props;
    if (props.plugins) {
      props.plugins.forEach(checkStateComponent);
      this.directPlugins = props.plugins;
    }
    this.updateStateInner(props.state, prevProps);
  }
  /**
  Update the view by updating existing props object with the object
  given as argument. Equivalent to `view.update(Object.assign({},
  view.props, props))`.
  */
  setProps(props) {
    let updated = {};
    for (let name in this._props)
      updated[name] = this._props[name];
    updated.state = this.state;
    for (let name in props)
      updated[name] = props[name];
    this.update(updated);
  }
  /**
  Update the editor's `state` prop, without touching any of the
  other props.
  */
  updateState(state) {
    this.updateStateInner(state, this._props);
  }
  updateStateInner(state, prevProps) {
    var _a2;
    let prev = this.state, redraw = false, updateSel = false;
    if (state.storedMarks && this.composing) {
      clearComposition(this);
      updateSel = true;
    }
    this.state = state;
    let pluginsChanged = prev.plugins != state.plugins || this._props.plugins != prevProps.plugins;
    if (pluginsChanged || this._props.plugins != prevProps.plugins || this._props.nodeViews != prevProps.nodeViews) {
      let nodeViews = buildNodeViews(this);
      if (changedNodeViews(nodeViews, this.nodeViews)) {
        this.nodeViews = nodeViews;
        redraw = true;
      }
    }
    if (pluginsChanged || prevProps.handleDOMEvents != this._props.handleDOMEvents) {
      ensureListeners(this);
    }
    this.editable = getEditable(this);
    updateCursorWrapper(this);
    let innerDeco = viewDecorations(this), outerDeco = computeDocDeco(this);
    let scroll = prev.plugins != state.plugins && !prev.doc.eq(state.doc) ? "reset" : state.scrollToSelection > prev.scrollToSelection ? "to selection" : "preserve";
    let updateDoc = redraw || !this.docView.matchesNode(state.doc, outerDeco, innerDeco);
    if (updateDoc || !state.selection.eq(prev.selection))
      updateSel = true;
    let oldScrollPos = scroll == "preserve" && updateSel && this.dom.style.overflowAnchor == null && storeScrollPos(this);
    if (updateSel) {
      this.domObserver.stop();
      let forceSelUpdate = updateDoc && (ie$1 || chrome) && !this.composing && !prev.selection.empty && !state.selection.empty && selectionContextChanged(prev.selection, state.selection);
      if (updateDoc) {
        let chromeKludge = chrome ? this.trackWrites = this.domSelectionRange().focusNode : null;
        if (this.composing)
          this.input.compositionNode = findCompositionNode(this);
        if (redraw || !this.docView.update(state.doc, outerDeco, innerDeco, this)) {
          this.docView.updateOuterDeco(outerDeco);
          this.docView.destroy();
          this.docView = docViewDesc(state.doc, outerDeco, innerDeco, this.dom, this);
        }
        if (chromeKludge && (!this.trackWrites || !this.dom.contains(this.trackWrites)))
          forceSelUpdate = true;
      }
      if (forceSelUpdate || !(this.input.mouseDown && this.domObserver.currentSelection.eq(this.domSelectionRange()) && anchorInRightPlace(this))) {
        selectionToDOM(this, forceSelUpdate);
      } else {
        syncNodeSelection(this, state.selection);
        this.domObserver.setCurSelection();
      }
      this.domObserver.start();
    }
    this.updatePluginViews(prev);
    if (((_a2 = this.dragging) === null || _a2 === void 0 ? void 0 : _a2.node) && !prev.doc.eq(state.doc))
      this.updateDraggedNode(this.dragging, prev);
    if (scroll == "reset") {
      this.dom.scrollTop = 0;
    } else if (scroll == "to selection") {
      this.scrollToSelection();
    } else if (oldScrollPos) {
      resetScrollPos(oldScrollPos);
    }
  }
  /**
  @internal
  */
  scrollToSelection() {
    let startDOM = this.domSelectionRange().focusNode;
    if (!startDOM || !this.dom.contains(startDOM.nodeType == 1 ? startDOM : startDOM.parentNode)) ;
    else if (this.someProp("handleScrollToSelection", (f2) => f2(this))) ;
    else if (this.state.selection instanceof NodeSelection) {
      let target = this.docView.domAfterPos(this.state.selection.from);
      if (target.nodeType == 1)
        scrollRectIntoView(this, target.getBoundingClientRect(), startDOM);
    } else {
      scrollRectIntoView(this, this.coordsAtPos(this.state.selection.head, 1), startDOM);
    }
  }
  destroyPluginViews() {
    let view;
    while (view = this.pluginViews.pop())
      if (view.destroy)
        view.destroy();
  }
  updatePluginViews(prevState) {
    if (!prevState || prevState.plugins != this.state.plugins || this.directPlugins != this.prevDirectPlugins) {
      this.prevDirectPlugins = this.directPlugins;
      this.destroyPluginViews();
      for (let i = 0; i < this.directPlugins.length; i++) {
        let plugin = this.directPlugins[i];
        if (plugin.spec.view)
          this.pluginViews.push(plugin.spec.view(this));
      }
      for (let i = 0; i < this.state.plugins.length; i++) {
        let plugin = this.state.plugins[i];
        if (plugin.spec.view)
          this.pluginViews.push(plugin.spec.view(this));
      }
    } else {
      for (let i = 0; i < this.pluginViews.length; i++) {
        let pluginView = this.pluginViews[i];
        if (pluginView.update)
          pluginView.update(this, prevState);
      }
    }
  }
  updateDraggedNode(dragging, prev) {
    let sel = dragging.node, found2 = -1;
    if (this.state.doc.nodeAt(sel.from) == sel.node) {
      found2 = sel.from;
    } else {
      let movedPos = sel.from + (this.state.doc.content.size - prev.doc.content.size);
      let moved = movedPos > 0 && this.state.doc.nodeAt(movedPos);
      if (moved == sel.node)
        found2 = movedPos;
    }
    this.dragging = new Dragging(dragging.slice, dragging.move, found2 < 0 ? void 0 : NodeSelection.create(this.state.doc, found2));
  }
  someProp(propName, f2) {
    let prop = this._props && this._props[propName], value;
    if (prop != null && (value = f2 ? f2(prop) : prop))
      return value;
    for (let i = 0; i < this.directPlugins.length; i++) {
      let prop2 = this.directPlugins[i].props[propName];
      if (prop2 != null && (value = f2 ? f2(prop2) : prop2))
        return value;
    }
    let plugins = this.state.plugins;
    if (plugins)
      for (let i = 0; i < plugins.length; i++) {
        let prop2 = plugins[i].props[propName];
        if (prop2 != null && (value = f2 ? f2(prop2) : prop2))
          return value;
      }
  }
  /**
  Query whether the view has focus.
  */
  hasFocus() {
    if (ie$1) {
      let node = this.root.activeElement;
      if (node == this.dom)
        return true;
      if (!node || !this.dom.contains(node))
        return false;
      while (node && this.dom != node && this.dom.contains(node)) {
        if (node.contentEditable == "false")
          return false;
        node = node.parentElement;
      }
      return true;
    }
    return this.root.activeElement == this.dom;
  }
  /**
  Focus the editor.
  */
  focus() {
    this.domObserver.stop();
    if (this.editable)
      focusPreventScroll(this.dom);
    selectionToDOM(this);
    this.domObserver.start();
  }
  /**
  Get the document root in which the editor exists. This will
  usually be the top-level `document`, but might be a [shadow
  DOM](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Shadow_DOM)
  root if the editor is inside one.
  */
  get root() {
    let cached = this._root;
    if (cached == null)
      for (let search = this.dom.parentNode; search; search = search.parentNode) {
        if (search.nodeType == 9 || search.nodeType == 11 && search.host) {
          if (!search.getSelection)
            Object.getPrototypeOf(search).getSelection = () => search.ownerDocument.getSelection();
          return this._root = search;
        }
      }
    return cached || document;
  }
  /**
  When an existing editor view is moved to a new document or
  shadow tree, call this to make it recompute its root.
  */
  updateRoot() {
    this._root = null;
  }
  /**
  Given a pair of viewport coordinates, return the document
  position that corresponds to them. May return null if the given
  coordinates aren't inside of the editor. When an object is
  returned, its `pos` property is the position nearest to the
  coordinates, and its `inside` property holds the position of the
  inner node that the position falls inside of, or -1 if it is at
  the top level, not in any node.
  */
  posAtCoords(coords) {
    return posAtCoords(this, coords);
  }
  /**
  Returns the viewport rectangle at a given document position.
  `left` and `right` will be the same number, as this returns a
  flat cursor-ish rectangle. If the position is between two things
  that aren't directly adjacent, `side` determines which element
  is used. When < 0, the element before the position is used,
  otherwise the element after.
  */
  coordsAtPos(pos, side = 1) {
    return coordsAtPos(this, pos, side);
  }
  /**
  Find the DOM position that corresponds to the given document
  position. When `side` is negative, find the position as close as
  possible to the content before the position. When positive,
  prefer positions close to the content after the position. When
  zero, prefer as shallow a position as possible.
  
  Note that you should **not** mutate the editor's internal DOM,
  only inspect it (and even that is usually not necessary).
  */
  domAtPos(pos, side = 0) {
    return this.docView.domFromPos(pos, side);
  }
  /**
  Find the DOM node that represents the document node after the
  given position. May return `null` when the position doesn't point
  in front of a node or if the node is inside an opaque node view.
  
  This is intended to be able to call things like
  `getBoundingClientRect` on that DOM node. Do **not** mutate the
  editor DOM directly, or add styling this way, since that will be
  immediately overriden by the editor as it redraws the node.
  */
  nodeDOM(pos) {
    let desc = this.docView.descAt(pos);
    return desc ? desc.nodeDOM : null;
  }
  /**
  Find the document position that corresponds to a given DOM
  position. (Whenever possible, it is preferable to inspect the
  document structure directly, rather than poking around in the
  DOM, but sometimes—for example when interpreting an event
  target—you don't have a choice.)
  
  The `bias` parameter can be used to influence which side of a DOM
  node to use when the position is inside a leaf node.
  */
  posAtDOM(node, offset2, bias = -1) {
    let pos = this.docView.posFromDOM(node, offset2, bias);
    if (pos == null)
      throw new RangeError("DOM position not inside the editor");
    return pos;
  }
  /**
  Find out whether the selection is at the end of a textblock when
  moving in a given direction. When, for example, given `"left"`,
  it will return true if moving left from the current cursor
  position would leave that position's parent textblock. Will apply
  to the view's current state by default, but it is possible to
  pass a different state.
  */
  endOfTextblock(dir, state) {
    return endOfTextblock(this, state || this.state, dir);
  }
  /**
  Run the editor's paste logic with the given HTML string. The
  `event`, if given, will be passed to the
  [`handlePaste`](https://prosemirror.net/docs/ref/#view.EditorProps.handlePaste) hook.
  */
  pasteHTML(html, event) {
    return doPaste(this, "", html, false, event || new ClipboardEvent("paste"));
  }
  /**
  Run the editor's paste logic with the given plain-text input.
  */
  pasteText(text, event) {
    return doPaste(this, text, null, true, event || new ClipboardEvent("paste"));
  }
  /**
  Serialize the given slice as it would be if it was copied from
  this editor. Returns a DOM element that contains a
  representation of the slice as its children, a textual
  representation, and the transformed slice (which can be
  different from the given input due to hooks like
  [`transformCopied`](https://prosemirror.net/docs/ref/#view.EditorProps.transformCopied)).
  */
  serializeForClipboard(slice2) {
    return serializeForClipboard(this, slice2);
  }
  /**
  Removes the editor from the DOM and destroys all [node
  views](https://prosemirror.net/docs/ref/#view.NodeView).
  */
  destroy() {
    if (!this.docView)
      return;
    destroyInput(this);
    this.destroyPluginViews();
    if (this.mounted) {
      this.docView.update(this.state.doc, [], viewDecorations(this), this);
      this.dom.textContent = "";
    } else if (this.dom.parentNode) {
      this.dom.parentNode.removeChild(this.dom);
    }
    this.docView.destroy();
    this.docView = null;
    clearReusedRange();
  }
  /**
  This is true when the view has been
  [destroyed](https://prosemirror.net/docs/ref/#view.EditorView.destroy) (and thus should not be
  used anymore).
  */
  get isDestroyed() {
    return this.docView == null;
  }
  /**
  Used for testing.
  */
  dispatchEvent(event) {
    return dispatchEvent(this, event);
  }
  /**
  @internal
  */
  domSelectionRange() {
    let sel = this.domSelection();
    if (!sel)
      return { focusNode: null, focusOffset: 0, anchorNode: null, anchorOffset: 0 };
    return safari && this.root.nodeType === 11 && deepActiveElement(this.dom.ownerDocument) == this.dom && safariShadowSelectionRange(this, sel) || sel;
  }
  /**
  @internal
  */
  domSelection() {
    return this.root.getSelection();
  }
}
EditorView.prototype.dispatch = function(tr2) {
  let dispatchTransaction = this._props.dispatchTransaction;
  if (dispatchTransaction)
    dispatchTransaction.call(this, tr2);
  else
    this.updateState(this.state.apply(tr2));
};
function computeDocDeco(view) {
  let attrs = /* @__PURE__ */ Object.create(null);
  attrs.class = "ProseMirror";
  attrs.contenteditable = String(view.editable);
  view.someProp("attributes", (value) => {
    if (typeof value == "function")
      value = value(view.state);
    if (value)
      for (let attr in value) {
        if (attr == "class")
          attrs.class += " " + value[attr];
        else if (attr == "style")
          attrs.style = (attrs.style ? attrs.style + ";" : "") + value[attr];
        else if (!attrs[attr] && attr != "contenteditable" && attr != "nodeName")
          attrs[attr] = String(value[attr]);
      }
  });
  if (!attrs.translate)
    attrs.translate = "no";
  return [Decoration.node(0, view.state.doc.content.size, attrs)];
}
function updateCursorWrapper(view) {
  if (view.markCursor) {
    let dom = document.createElement("img");
    dom.className = "ProseMirror-separator";
    dom.setAttribute("mark-placeholder", "true");
    dom.setAttribute("alt", "");
    view.cursorWrapper = { dom, deco: Decoration.widget(view.state.selection.from, dom, { raw: true, marks: view.markCursor }) };
  } else {
    view.cursorWrapper = null;
  }
}
function getEditable(view) {
  return !view.someProp("editable", (value) => value(view.state) === false);
}
function selectionContextChanged(sel1, sel2) {
  let depth = Math.min(sel1.$anchor.sharedDepth(sel1.head), sel2.$anchor.sharedDepth(sel2.head));
  return sel1.$anchor.start(depth) != sel2.$anchor.start(depth);
}
function buildNodeViews(view) {
  let result = /* @__PURE__ */ Object.create(null);
  function add(obj) {
    for (let prop in obj)
      if (!Object.prototype.hasOwnProperty.call(result, prop))
        result[prop] = obj[prop];
  }
  view.someProp("nodeViews", add);
  view.someProp("markViews", add);
  return result;
}
function changedNodeViews(a2, b2) {
  let nA = 0, nB = 0;
  for (let prop in a2) {
    if (a2[prop] != b2[prop])
      return true;
    nA++;
  }
  for (let _2 in b2)
    nB++;
  return nA != nB;
}
function checkStateComponent(plugin) {
  if (plugin.spec.state || plugin.spec.filterTransaction || plugin.spec.appendTransaction)
    throw new RangeError("Plugins passed directly to the view must not have a state component");
}
var base = {
  8: "Backspace",
  9: "Tab",
  10: "Enter",
  12: "NumLock",
  13: "Enter",
  16: "Shift",
  17: "Control",
  18: "Alt",
  20: "CapsLock",
  27: "Escape",
  32: " ",
  33: "PageUp",
  34: "PageDown",
  35: "End",
  36: "Home",
  37: "ArrowLeft",
  38: "ArrowUp",
  39: "ArrowRight",
  40: "ArrowDown",
  44: "PrintScreen",
  45: "Insert",
  46: "Delete",
  59: ";",
  61: "=",
  91: "Meta",
  92: "Meta",
  106: "*",
  107: "+",
  108: ",",
  109: "-",
  110: ".",
  111: "/",
  144: "NumLock",
  145: "ScrollLock",
  160: "Shift",
  161: "Shift",
  162: "Control",
  163: "Control",
  164: "Alt",
  165: "Alt",
  173: "-",
  186: ";",
  187: "=",
  188: ",",
  189: "-",
  190: ".",
  191: "/",
  192: "`",
  219: "[",
  220: "\\",
  221: "]",
  222: "'"
};
var shift$2 = {
  48: ")",
  49: "!",
  50: "@",
  51: "#",
  52: "$",
  53: "%",
  54: "^",
  55: "&",
  56: "*",
  57: "(",
  59: ":",
  61: "+",
  173: "_",
  186: ":",
  187: "+",
  188: "<",
  189: "_",
  190: ">",
  191: "?",
  192: "~",
  219: "{",
  220: "|",
  221: "}",
  222: '"'
};
var mac$1 = typeof navigator != "undefined" && /Mac/.test(navigator.platform);
var ie = typeof navigator != "undefined" && /MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);
for (var i = 0; i < 10; i++) base[48 + i] = base[96 + i] = String(i);
for (var i = 1; i <= 24; i++) base[i + 111] = "F" + i;
for (var i = 65; i <= 90; i++) {
  base[i] = String.fromCharCode(i + 32);
  shift$2[i] = String.fromCharCode(i);
}
for (var code in base) if (!shift$2.hasOwnProperty(code)) shift$2[code] = base[code];
function keyName(event) {
  var ignoreKey = mac$1 && event.metaKey && event.shiftKey && !event.ctrlKey && !event.altKey || ie && event.shiftKey && event.key && event.key.length == 1 || event.key == "Unidentified";
  var name = !ignoreKey && event.key || (event.shiftKey ? shift$2 : base)[event.keyCode] || event.key || "Unidentified";
  if (name == "Esc") name = "Escape";
  if (name == "Del") name = "Delete";
  if (name == "Left") name = "ArrowLeft";
  if (name == "Up") name = "ArrowUp";
  if (name == "Right") name = "ArrowRight";
  if (name == "Down") name = "ArrowDown";
  return name;
}
const mac = typeof navigator != "undefined" && /Mac|iP(hone|[oa]d)/.test(navigator.platform);
const windows = typeof navigator != "undefined" && /Win/.test(navigator.platform);
function normalizeKeyName$1(name) {
  let parts = name.split(/-(?!$)/), result = parts[parts.length - 1];
  if (result == "Space")
    result = " ";
  let alt, ctrl, shift2, meta;
  for (let i = 0; i < parts.length - 1; i++) {
    let mod = parts[i];
    if (/^(cmd|meta|m)$/i.test(mod))
      meta = true;
    else if (/^a(lt)?$/i.test(mod))
      alt = true;
    else if (/^(c|ctrl|control)$/i.test(mod))
      ctrl = true;
    else if (/^s(hift)?$/i.test(mod))
      shift2 = true;
    else if (/^mod$/i.test(mod)) {
      if (mac)
        meta = true;
      else
        ctrl = true;
    } else
      throw new Error("Unrecognized modifier name: " + mod);
  }
  if (alt)
    result = "Alt-" + result;
  if (ctrl)
    result = "Ctrl-" + result;
  if (meta)
    result = "Meta-" + result;
  if (shift2)
    result = "Shift-" + result;
  return result;
}
function normalize(map2) {
  let copy2 = /* @__PURE__ */ Object.create(null);
  for (let prop in map2)
    copy2[normalizeKeyName$1(prop)] = map2[prop];
  return copy2;
}
function modifiers(name, event, shift2 = true) {
  if (event.altKey)
    name = "Alt-" + name;
  if (event.ctrlKey)
    name = "Ctrl-" + name;
  if (event.metaKey)
    name = "Meta-" + name;
  if (shift2 && event.shiftKey)
    name = "Shift-" + name;
  return name;
}
function keymap(bindings) {
  return new Plugin({ props: { handleKeyDown: keydownHandler(bindings) } });
}
function keydownHandler(bindings) {
  let map2 = normalize(bindings);
  return function(view, event) {
    let name = keyName(event), baseName, direct = map2[modifiers(name, event)];
    if (direct && direct(view.state, view.dispatch, view))
      return true;
    if (name.length == 1 && name != " ") {
      if (event.shiftKey) {
        let noShift = map2[modifiers(name, event, false)];
        if (noShift && noShift(view.state, view.dispatch, view))
          return true;
      }
      if ((event.altKey || event.metaKey || event.ctrlKey) && // Ctrl-Alt may be used for AltGr on Windows
      !(windows && event.ctrlKey && event.altKey) && (baseName = base[event.keyCode]) && baseName != name) {
        let fromCode = map2[modifiers(baseName, event)];
        if (fromCode && fromCode(view.state, view.dispatch, view))
          return true;
      }
    }
    return false;
  };
}
var __defProp$1 = Object.defineProperty;
var __export$1 = (target, all) => {
  for (var name in all)
    __defProp$1(target, name, { get: all[name], enumerable: true });
};
function createChainableState(config) {
  const { state, transaction } = config;
  let { selection } = transaction;
  let { doc: doc2 } = transaction;
  let { storedMarks } = transaction;
  return {
    ...state,
    apply: state.apply.bind(state),
    applyTransaction: state.applyTransaction.bind(state),
    plugins: state.plugins,
    schema: state.schema,
    reconfigure: state.reconfigure.bind(state),
    toJSON: state.toJSON.bind(state),
    get storedMarks() {
      return storedMarks;
    },
    get selection() {
      return selection;
    },
    get doc() {
      return doc2;
    },
    get tr() {
      selection = transaction.selection;
      doc2 = transaction.doc;
      storedMarks = transaction.storedMarks;
      return transaction;
    }
  };
}
var CommandManager = class {
  constructor(props) {
    this.editor = props.editor;
    this.rawCommands = this.editor.extensionManager.commands;
    this.customState = props.state;
  }
  get hasCustomState() {
    return !!this.customState;
  }
  get state() {
    return this.customState || this.editor.state;
  }
  get commands() {
    const { rawCommands, editor, state } = this;
    const { view } = editor;
    const { tr: tr2 } = state;
    const props = this.buildProps(tr2);
    return Object.fromEntries(
      Object.entries(rawCommands).map(([name, command2]) => {
        const method = (...args) => {
          const callback = command2(...args)(props);
          if (!tr2.getMeta("preventDispatch") && !this.hasCustomState) {
            view.dispatch(tr2);
          }
          return callback;
        };
        return [name, method];
      })
    );
  }
  get chain() {
    return () => this.createChain();
  }
  get can() {
    return () => this.createCan();
  }
  createChain(startTr, shouldDispatch = true) {
    const { rawCommands, editor, state } = this;
    const { view } = editor;
    const callbacks = [];
    const hasStartTransaction = !!startTr;
    const tr2 = startTr || state.tr;
    const run3 = () => {
      if (!hasStartTransaction && shouldDispatch && !tr2.getMeta("preventDispatch") && !this.hasCustomState) {
        view.dispatch(tr2);
      }
      return callbacks.every((callback) => callback === true);
    };
    const chain = {
      ...Object.fromEntries(
        Object.entries(rawCommands).map(([name, command2]) => {
          const chainedCommand = (...args) => {
            const props = this.buildProps(tr2, shouldDispatch);
            const callback = command2(...args)(props);
            callbacks.push(callback);
            return chain;
          };
          return [name, chainedCommand];
        })
      ),
      run: run3
    };
    return chain;
  }
  createCan(startTr) {
    const { rawCommands, state } = this;
    const dispatch = false;
    const tr2 = startTr || state.tr;
    const props = this.buildProps(tr2, dispatch);
    const formattedCommands = Object.fromEntries(
      Object.entries(rawCommands).map(([name, command2]) => {
        return [name, (...args) => command2(...args)({ ...props, dispatch: void 0 })];
      })
    );
    return {
      ...formattedCommands,
      chain: () => this.createChain(tr2, dispatch)
    };
  }
  buildProps(tr2, shouldDispatch = true) {
    const { rawCommands, editor, state } = this;
    const { view } = editor;
    const props = {
      tr: tr2,
      editor,
      view,
      state: createChainableState({
        state,
        transaction: tr2
      }),
      dispatch: shouldDispatch ? () => void 0 : void 0,
      chain: () => this.createChain(tr2, shouldDispatch),
      can: () => this.createCan(tr2),
      get commands() {
        return Object.fromEntries(
          Object.entries(rawCommands).map(([name, command2]) => {
            return [name, (...args) => command2(...args)(props)];
          })
        );
      }
    };
    return props;
  }
};
var commands_exports = {};
__export$1(commands_exports, {
  blur: () => blur,
  clearContent: () => clearContent,
  clearNodes: () => clearNodes,
  command: () => command,
  createParagraphNear: () => createParagraphNear,
  cut: () => cut,
  deleteCurrentNode: () => deleteCurrentNode,
  deleteNode: () => deleteNode,
  deleteRange: () => deleteRange,
  deleteSelection: () => deleteSelection,
  enter: () => enter,
  exitCode: () => exitCode,
  extendMarkRange: () => extendMarkRange,
  first: () => first,
  focus: () => focus,
  forEach: () => forEach,
  insertContent: () => insertContent,
  insertContentAt: () => insertContentAt,
  joinBackward: () => joinBackward,
  joinDown: () => joinDown,
  joinForward: () => joinForward,
  joinItemBackward: () => joinItemBackward,
  joinItemForward: () => joinItemForward,
  joinTextblockBackward: () => joinTextblockBackward,
  joinTextblockForward: () => joinTextblockForward,
  joinUp: () => joinUp,
  keyboardShortcut: () => keyboardShortcut,
  lift: () => lift,
  liftEmptyBlock: () => liftEmptyBlock,
  liftListItem: () => liftListItem,
  newlineInCode: () => newlineInCode,
  resetAttributes: () => resetAttributes,
  scrollIntoView: () => scrollIntoView,
  selectAll: () => selectAll,
  selectNodeBackward: () => selectNodeBackward,
  selectNodeForward: () => selectNodeForward,
  selectParentNode: () => selectParentNode,
  selectTextblockEnd: () => selectTextblockEnd,
  selectTextblockStart: () => selectTextblockStart,
  setContent: () => setContent,
  setMark: () => setMark,
  setMeta: () => setMeta,
  setNode: () => setNode,
  setNodeSelection: () => setNodeSelection,
  setTextDirection: () => setTextDirection,
  setTextSelection: () => setTextSelection,
  sinkListItem: () => sinkListItem,
  splitBlock: () => splitBlock,
  splitListItem: () => splitListItem,
  toggleList: () => toggleList,
  toggleMark: () => toggleMark,
  toggleNode: () => toggleNode,
  toggleWrap: () => toggleWrap,
  undoInputRule: () => undoInputRule,
  unsetAllMarks: () => unsetAllMarks,
  unsetMark: () => unsetMark,
  unsetTextDirection: () => unsetTextDirection,
  updateAttributes: () => updateAttributes,
  wrapIn: () => wrapIn,
  wrapInList: () => wrapInList
});
var blur = () => ({ editor, view }) => {
  requestAnimationFrame(() => {
    var _a2;
    if (!editor.isDestroyed) {
      view.dom.blur();
      (_a2 = window == null ? void 0 : window.getSelection()) == null ? void 0 : _a2.removeAllRanges();
    }
  });
  return true;
};
var clearContent = (emitUpdate = true) => ({ commands }) => {
  return commands.setContent("", { emitUpdate });
};
var clearNodes = () => ({ state, tr: tr2, dispatch }) => {
  const { selection } = tr2;
  const { ranges } = selection;
  if (!dispatch) {
    return true;
  }
  ranges.forEach(({ $from, $to }) => {
    state.doc.nodesBetween($from.pos, $to.pos, (node, pos) => {
      if (node.type.isText) {
        return;
      }
      const { doc: doc2, mapping } = tr2;
      const $mappedFrom = doc2.resolve(mapping.map(pos));
      const $mappedTo = doc2.resolve(mapping.map(pos + node.nodeSize));
      const nodeRange = $mappedFrom.blockRange($mappedTo);
      if (!nodeRange) {
        return;
      }
      const targetLiftDepth = liftTarget(nodeRange);
      if (node.type.isTextblock) {
        const { defaultType } = $mappedFrom.parent.contentMatchAt($mappedFrom.index());
        tr2.setNodeMarkup(nodeRange.start, defaultType);
      }
      if (targetLiftDepth || targetLiftDepth === 0) {
        tr2.lift(nodeRange, targetLiftDepth);
      }
    });
  });
  return true;
};
var command = (fn) => (props) => {
  return fn(props);
};
var createParagraphNear = () => ({ state, dispatch }) => {
  return createParagraphNear$1(state, dispatch);
};
var cut = (originRange, targetPos) => ({ editor, tr: tr2 }) => {
  const { state } = editor;
  const contentSlice = state.doc.slice(originRange.from, originRange.to);
  tr2.deleteRange(originRange.from, originRange.to);
  const newPos = tr2.mapping.map(targetPos);
  tr2.insert(newPos, contentSlice.content);
  tr2.setSelection(new TextSelection(tr2.doc.resolve(Math.max(newPos - 1, 0))));
  return true;
};
var deleteCurrentNode = () => ({ tr: tr2, dispatch }) => {
  const { selection } = tr2;
  const currentNode = selection.$anchor.node();
  if (currentNode.content.size > 0) {
    return false;
  }
  const $pos = tr2.selection.$anchor;
  for (let depth = $pos.depth; depth > 0; depth -= 1) {
    const node = $pos.node(depth);
    if (node.type === currentNode.type) {
      if (dispatch) {
        const from2 = $pos.before(depth);
        const to = $pos.after(depth);
        tr2.delete(from2, to).scrollIntoView();
      }
      return true;
    }
  }
  return false;
};
function getNodeType(nameOrType, schema) {
  if (typeof nameOrType === "string") {
    if (!schema.nodes[nameOrType]) {
      throw Error(`There is no node type named '${nameOrType}'. Maybe you forgot to add the extension?`);
    }
    return schema.nodes[nameOrType];
  }
  return nameOrType;
}
var deleteNode = (typeOrName) => ({ tr: tr2, state, dispatch }) => {
  const type = getNodeType(typeOrName, state.schema);
  const $pos = tr2.selection.$anchor;
  for (let depth = $pos.depth; depth > 0; depth -= 1) {
    const node = $pos.node(depth);
    if (node.type === type) {
      if (dispatch) {
        const from2 = $pos.before(depth);
        const to = $pos.after(depth);
        tr2.delete(from2, to).scrollIntoView();
      }
      return true;
    }
  }
  return false;
};
var deleteRange = (range) => ({ tr: tr2, dispatch }) => {
  const { from: from2, to } = range;
  if (dispatch) {
    tr2.delete(from2, to);
  }
  return true;
};
var deleteSelection = () => ({ state, dispatch }) => {
  return deleteSelection$1(state, dispatch);
};
var enter = () => ({ commands }) => {
  return commands.keyboardShortcut("Enter");
};
var exitCode = () => ({ state, dispatch }) => {
  return exitCode$1(state, dispatch);
};
function isRegExp(value) {
  return Object.prototype.toString.call(value) === "[object RegExp]";
}
function objectIncludes(object1, object2, options = { strict: true }) {
  const keys2 = Object.keys(object2);
  if (!keys2.length) {
    return true;
  }
  return keys2.every((key) => {
    if (options.strict) {
      return object2[key] === object1[key];
    }
    if (isRegExp(object2[key])) {
      return object2[key].test(object1[key]);
    }
    return object2[key] === object1[key];
  });
}
function findMarkInSet(marks, type, attributes = {}) {
  return marks.find((item) => {
    return item.type === type && objectIncludes(
      // Only check equality for the attributes that are provided
      Object.fromEntries(Object.keys(attributes).map((k2) => [k2, item.attrs[k2]])),
      attributes
    );
  });
}
function isMarkInSet(marks, type, attributes = {}) {
  return !!findMarkInSet(marks, type, attributes);
}
function getMarkRange($pos, type, attributes) {
  var _a2;
  if (!$pos || !type) {
    return;
  }
  let start = $pos.parent.childAfter($pos.parentOffset);
  if (!start.node || !start.node.marks.some((mark2) => mark2.type === type)) {
    start = $pos.parent.childBefore($pos.parentOffset);
  }
  if (!start.node || !start.node.marks.some((mark2) => mark2.type === type)) {
    return;
  }
  attributes = attributes || ((_a2 = start.node.marks[0]) == null ? void 0 : _a2.attrs);
  const mark = findMarkInSet([...start.node.marks], type, attributes);
  if (!mark) {
    return;
  }
  let startIndex = start.index;
  let startPos = $pos.start() + start.offset;
  let endIndex = startIndex + 1;
  let endPos = startPos + start.node.nodeSize;
  while (startIndex > 0 && isMarkInSet([...$pos.parent.child(startIndex - 1).marks], type, attributes)) {
    startIndex -= 1;
    startPos -= $pos.parent.child(startIndex).nodeSize;
  }
  while (endIndex < $pos.parent.childCount && isMarkInSet([...$pos.parent.child(endIndex).marks], type, attributes)) {
    endPos += $pos.parent.child(endIndex).nodeSize;
    endIndex += 1;
  }
  return {
    from: startPos,
    to: endPos
  };
}
function getMarkType(nameOrType, schema) {
  if (typeof nameOrType === "string") {
    if (!schema.marks[nameOrType]) {
      throw Error(`There is no mark type named '${nameOrType}'. Maybe you forgot to add the extension?`);
    }
    return schema.marks[nameOrType];
  }
  return nameOrType;
}
var extendMarkRange = (typeOrName, attributes = {}) => ({ tr: tr2, state, dispatch }) => {
  const type = getMarkType(typeOrName, state.schema);
  const { doc: doc2, selection } = tr2;
  const { $from, from: from2, to } = selection;
  if (dispatch) {
    const range = getMarkRange($from, type, attributes);
    if (range && range.from <= from2 && range.to >= to) {
      const newSelection = TextSelection.create(doc2, range.from, range.to);
      tr2.setSelection(newSelection);
    }
  }
  return true;
};
var first = (commands) => (props) => {
  const items = typeof commands === "function" ? commands(props) : commands;
  for (let i = 0; i < items.length; i += 1) {
    if (items[i](props)) {
      return true;
    }
  }
  return false;
};
function isTextSelection(value) {
  return value instanceof TextSelection;
}
function minMax(value = 0, min2 = 0, max2 = 0) {
  return Math.min(Math.max(value, min2), max2);
}
function resolveFocusPosition(doc2, position = null) {
  if (!position) {
    return null;
  }
  const selectionAtStart = Selection.atStart(doc2);
  const selectionAtEnd = Selection.atEnd(doc2);
  if (position === "start" || position === true) {
    return selectionAtStart;
  }
  if (position === "end") {
    return selectionAtEnd;
  }
  const minPos = selectionAtStart.from;
  const maxPos = selectionAtEnd.to;
  if (position === "all") {
    return TextSelection.create(doc2, minMax(0, minPos, maxPos), minMax(doc2.content.size, minPos, maxPos));
  }
  return TextSelection.create(doc2, minMax(position, minPos, maxPos), minMax(position, minPos, maxPos));
}
function isAndroid() {
  return navigator.platform === "Android" || /android/i.test(navigator.userAgent);
}
function isiOS() {
  return ["iPad Simulator", "iPhone Simulator", "iPod Simulator", "iPad", "iPhone", "iPod"].includes(navigator.platform) || // iPad on iOS 13 detection
  navigator.userAgent.includes("Mac") && "ontouchend" in document;
}
function isSafari() {
  return typeof navigator !== "undefined" ? /^((?!chrome|android).)*safari/i.test(navigator.userAgent) : false;
}
var focus = (position = null, options = {}) => ({ editor, view, tr: tr2, dispatch }) => {
  options = {
    scrollIntoView: true,
    ...options
  };
  const delayedFocus = () => {
    if (isiOS() || isAndroid()) {
      view.dom.focus();
    }
    if (isSafari() && !isiOS() && !isAndroid()) {
      view.dom.focus({ preventScroll: true });
    }
    requestAnimationFrame(() => {
      if (!editor.isDestroyed) {
        view.focus();
        if (options == null ? void 0 : options.scrollIntoView) {
          editor.commands.scrollIntoView();
        }
      }
    });
  };
  try {
    if (view.hasFocus() && position === null || position === false) {
      return true;
    }
  } catch {
    return false;
  }
  if (dispatch && position === null && !isTextSelection(editor.state.selection)) {
    delayedFocus();
    return true;
  }
  const selection = resolveFocusPosition(tr2.doc, position) || editor.state.selection;
  const isSameSelection = editor.state.selection.eq(selection);
  if (dispatch) {
    if (!isSameSelection) {
      tr2.setSelection(selection);
    }
    if (isSameSelection && tr2.storedMarks) {
      tr2.setStoredMarks(tr2.storedMarks);
    }
    delayedFocus();
  }
  return true;
};
var forEach = (items, fn) => (props) => {
  return items.every((item, index2) => fn(item, { ...props, index: index2 }));
};
var insertContent = (value, options) => ({ tr: tr2, commands }) => {
  return commands.insertContentAt({ from: tr2.selection.from, to: tr2.selection.to }, value, options);
};
var removeWhitespaces = (node) => {
  const children = node.childNodes;
  for (let i = children.length - 1; i >= 0; i -= 1) {
    const child = children[i];
    if (child.nodeType === 3 && child.nodeValue && /^(\n\s\s|\n)$/.test(child.nodeValue)) {
      node.removeChild(child);
    } else if (child.nodeType === 1) {
      removeWhitespaces(child);
    }
  }
  return node;
};
function elementFromString(value) {
  if (typeof window === "undefined") {
    throw new Error("[tiptap error]: there is no window object available, so this function cannot be used");
  }
  const wrappedValue = `<body>${value}</body>`;
  const html = new window.DOMParser().parseFromString(wrappedValue, "text/html").body;
  return removeWhitespaces(html);
}
function createNodeFromContent(content, schema, options) {
  if (content instanceof Node$1 || content instanceof Fragment) {
    return content;
  }
  options = {
    slice: true,
    parseOptions: {},
    ...options
  };
  const isJSONContent = typeof content === "object" && content !== null;
  const isTextContent = typeof content === "string";
  if (isJSONContent) {
    try {
      const isArrayContent = Array.isArray(content) && content.length > 0;
      if (isArrayContent) {
        return Fragment.fromArray(content.map((item) => schema.nodeFromJSON(item)));
      }
      const node = schema.nodeFromJSON(content);
      if (options.errorOnInvalidContent) {
        node.check();
      }
      return node;
    } catch (error) {
      if (options.errorOnInvalidContent) {
        throw new Error("[tiptap error]: Invalid JSON content", { cause: error });
      }
      console.warn("[tiptap warn]: Invalid content.", "Passed value:", content, "Error:", error);
      return createNodeFromContent("", schema, options);
    }
  }
  if (isTextContent) {
    if (options.errorOnInvalidContent) {
      let hasInvalidContent = false;
      let invalidContent = "";
      const contentCheckSchema = new Schema({
        topNode: schema.spec.topNode,
        marks: schema.spec.marks,
        // Prosemirror's schemas are executed such that: the last to execute, matches last
        // This means that we can add a catch-all node at the end of the schema to catch any content that we don't know how to handle
        nodes: schema.spec.nodes.append({
          __tiptap__private__unknown__catch__all__node: {
            content: "inline*",
            group: "block",
            parseDOM: [
              {
                tag: "*",
                getAttrs: (e) => {
                  hasInvalidContent = true;
                  invalidContent = typeof e === "string" ? e : e.outerHTML;
                  return null;
                }
              }
            ]
          }
        })
      });
      if (options.slice) {
        DOMParser.fromSchema(contentCheckSchema).parseSlice(elementFromString(content), options.parseOptions);
      } else {
        DOMParser.fromSchema(contentCheckSchema).parse(elementFromString(content), options.parseOptions);
      }
      if (options.errorOnInvalidContent && hasInvalidContent) {
        throw new Error("[tiptap error]: Invalid HTML content", {
          cause: new Error(`Invalid element found: ${invalidContent}`)
        });
      }
    }
    const parser = DOMParser.fromSchema(schema);
    if (options.slice) {
      return parser.parseSlice(elementFromString(content), options.parseOptions).content;
    }
    return parser.parse(elementFromString(content), options.parseOptions);
  }
  return createNodeFromContent("", schema, options);
}
function selectionToInsertionEnd(tr2, startLen, bias) {
  const last = tr2.steps.length - 1;
  if (last < startLen) {
    return;
  }
  const step = tr2.steps[last];
  if (!(step instanceof ReplaceStep || step instanceof ReplaceAroundStep)) {
    return;
  }
  const map2 = tr2.mapping.maps[last];
  let end = 0;
  map2.forEach((_from, _to, _newFrom, newTo) => {
    if (end === 0) {
      end = newTo;
    }
  });
  tr2.setSelection(Selection.near(tr2.doc.resolve(end), bias));
}
var isFragment = (nodeOrFragment) => {
  return !("type" in nodeOrFragment);
};
var insertContentAt = (position, value, options) => ({ tr: tr2, dispatch, editor }) => {
  var _a2;
  if (dispatch) {
    options = {
      parseOptions: editor.options.parseOptions,
      updateSelection: true,
      applyInputRules: false,
      applyPasteRules: false,
      ...options
    };
    let content;
    const emitContentError = (error) => {
      editor.emit("contentError", {
        editor,
        error,
        disableCollaboration: () => {
          if ("collaboration" in editor.storage && typeof editor.storage.collaboration === "object" && editor.storage.collaboration) {
            editor.storage.collaboration.isDisabled = true;
          }
        }
      });
    };
    const parseOptions = {
      preserveWhitespace: "full",
      ...options.parseOptions
    };
    if (!options.errorOnInvalidContent && !editor.options.enableContentCheck && editor.options.emitContentError) {
      try {
        createNodeFromContent(value, editor.schema, {
          parseOptions,
          errorOnInvalidContent: true
        });
      } catch (e) {
        emitContentError(e);
      }
    }
    try {
      content = createNodeFromContent(value, editor.schema, {
        parseOptions,
        errorOnInvalidContent: (_a2 = options.errorOnInvalidContent) != null ? _a2 : editor.options.enableContentCheck
      });
    } catch (e) {
      emitContentError(e);
      return false;
    }
    let { from: from2, to } = typeof position === "number" ? { from: position, to: position } : { from: position.from, to: position.to };
    let isOnlyTextContent = true;
    let isOnlyBlockContent = true;
    const nodes = isFragment(content) ? content : [content];
    nodes.forEach((node) => {
      node.check();
      isOnlyTextContent = isOnlyTextContent ? node.isText && node.marks.length === 0 : false;
      isOnlyBlockContent = isOnlyBlockContent ? node.isBlock : false;
    });
    if (from2 === to && isOnlyBlockContent) {
      const { parent } = tr2.doc.resolve(from2);
      const isEmptyTextBlock = parent.isTextblock && !parent.type.spec.code && !parent.childCount;
      if (isEmptyTextBlock) {
        from2 -= 1;
        to += 1;
      }
    }
    let newContent;
    if (isOnlyTextContent) {
      if (Array.isArray(value)) {
        newContent = value.map((v2) => v2.text || "").join("");
      } else if (value instanceof Fragment) {
        let text = "";
        value.forEach((node) => {
          if (node.text) {
            text += node.text;
          }
        });
        newContent = text;
      } else if (typeof value === "object" && !!value && !!value.text) {
        newContent = value.text;
      } else {
        newContent = value;
      }
      tr2.insertText(newContent, from2, to);
    } else {
      newContent = content;
      const $from = tr2.doc.resolve(from2);
      const $fromNode = $from.node();
      const fromSelectionAtStart = $from.parentOffset === 0;
      const isTextSelection2 = $fromNode.isText || $fromNode.isTextblock;
      const hasContent = $fromNode.content.size > 0;
      if (fromSelectionAtStart && isTextSelection2 && hasContent) {
        from2 = Math.max(0, from2 - 1);
      }
      tr2.replaceWith(from2, to, newContent);
    }
    if (options.updateSelection) {
      selectionToInsertionEnd(tr2, tr2.steps.length - 1, -1);
    }
    if (options.applyInputRules) {
      tr2.setMeta("applyInputRules", { from: from2, text: newContent });
    }
    if (options.applyPasteRules) {
      tr2.setMeta("applyPasteRules", { from: from2, text: newContent });
    }
  }
  return true;
};
var joinUp = () => ({ state, dispatch }) => {
  return joinUp$1(state, dispatch);
};
var joinDown = () => ({ state, dispatch }) => {
  return joinDown$1(state, dispatch);
};
var joinBackward = () => ({ state, dispatch }) => {
  return joinBackward$1(state, dispatch);
};
var joinForward = () => ({ state, dispatch }) => {
  return joinForward$1(state, dispatch);
};
var joinItemBackward = () => ({ state, dispatch, tr: tr2 }) => {
  try {
    const point = joinPoint(state.doc, state.selection.$from.pos, -1);
    if (point === null || point === void 0) {
      return false;
    }
    tr2.join(point, 2);
    if (dispatch) {
      dispatch(tr2);
    }
    return true;
  } catch {
    return false;
  }
};
var joinItemForward = () => ({ state, dispatch, tr: tr2 }) => {
  try {
    const point = joinPoint(state.doc, state.selection.$from.pos, 1);
    if (point === null || point === void 0) {
      return false;
    }
    tr2.join(point, 2);
    if (dispatch) {
      dispatch(tr2);
    }
    return true;
  } catch {
    return false;
  }
};
var joinTextblockBackward = () => ({ state, dispatch }) => {
  return joinTextblockBackward$1(state, dispatch);
};
var joinTextblockForward = () => ({ state, dispatch }) => {
  return joinTextblockForward$1(state, dispatch);
};
function isMacOS() {
  return typeof navigator !== "undefined" ? /Mac/.test(navigator.platform) : false;
}
function normalizeKeyName(name) {
  const parts = name.split(/-(?!$)/);
  let result = parts[parts.length - 1];
  if (result === "Space") {
    result = " ";
  }
  let alt;
  let ctrl;
  let shift2;
  let meta;
  for (let i = 0; i < parts.length - 1; i += 1) {
    const mod = parts[i];
    if (/^(cmd|meta|m)$/i.test(mod)) {
      meta = true;
    } else if (/^a(lt)?$/i.test(mod)) {
      alt = true;
    } else if (/^(c|ctrl|control)$/i.test(mod)) {
      ctrl = true;
    } else if (/^s(hift)?$/i.test(mod)) {
      shift2 = true;
    } else if (/^mod$/i.test(mod)) {
      if (isiOS() || isMacOS()) {
        meta = true;
      } else {
        ctrl = true;
      }
    } else {
      throw new Error(`Unrecognized modifier name: ${mod}`);
    }
  }
  if (alt) {
    result = `Alt-${result}`;
  }
  if (ctrl) {
    result = `Ctrl-${result}`;
  }
  if (meta) {
    result = `Meta-${result}`;
  }
  if (shift2) {
    result = `Shift-${result}`;
  }
  return result;
}
var keyboardShortcut = (name) => ({ editor, view, tr: tr2, dispatch }) => {
  const keys2 = normalizeKeyName(name).split(/-(?!$)/);
  const key = keys2.find((item) => !["Alt", "Ctrl", "Meta", "Shift"].includes(item));
  const event = new KeyboardEvent("keydown", {
    key: key === "Space" ? " " : key,
    altKey: keys2.includes("Alt"),
    ctrlKey: keys2.includes("Ctrl"),
    metaKey: keys2.includes("Meta"),
    shiftKey: keys2.includes("Shift"),
    bubbles: true,
    cancelable: true
  });
  const capturedTransaction = editor.captureTransaction(() => {
    view.someProp("handleKeyDown", (f2) => f2(view, event));
  });
  capturedTransaction == null ? void 0 : capturedTransaction.steps.forEach((step) => {
    const newStep = step.map(tr2.mapping);
    if (newStep && dispatch) {
      tr2.maybeStep(newStep);
    }
  });
  return true;
};
function isNodeActive(state, typeOrName, attributes = {}) {
  const { from: from2, to, empty: empty2 } = state.selection;
  const type = typeOrName ? getNodeType(typeOrName, state.schema) : null;
  const nodeRanges = [];
  state.doc.nodesBetween(from2, to, (node, pos) => {
    if (node.isText) {
      return;
    }
    const relativeFrom = Math.max(from2, pos);
    const relativeTo = Math.min(to, pos + node.nodeSize);
    nodeRanges.push({
      node,
      from: relativeFrom,
      to: relativeTo
    });
  });
  const selectionRange = to - from2;
  const matchedNodeRanges = nodeRanges.filter((nodeRange) => {
    if (!type) {
      return true;
    }
    return type.name === nodeRange.node.type.name;
  }).filter((nodeRange) => objectIncludes(nodeRange.node.attrs, attributes, { strict: false }));
  if (empty2) {
    return !!matchedNodeRanges.length;
  }
  const range = matchedNodeRanges.reduce((sum, nodeRange) => sum + nodeRange.to - nodeRange.from, 0);
  return range >= selectionRange;
}
var lift = (typeOrName, attributes = {}) => ({ state, dispatch }) => {
  const type = getNodeType(typeOrName, state.schema);
  const isActive2 = isNodeActive(state, type, attributes);
  if (!isActive2) {
    return false;
  }
  return lift$1(state, dispatch);
};
var liftEmptyBlock = () => ({ state, dispatch }) => {
  return liftEmptyBlock$1(state, dispatch);
};
var liftListItem = (typeOrName) => ({ state, dispatch }) => {
  const type = getNodeType(typeOrName, state.schema);
  return liftListItem$1(type)(state, dispatch);
};
var newlineInCode = () => ({ state, dispatch }) => {
  return newlineInCode$1(state, dispatch);
};
function getSchemaTypeNameByName(name, schema) {
  if (schema.nodes[name]) {
    return "node";
  }
  if (schema.marks[name]) {
    return "mark";
  }
  return null;
}
function deleteProps(obj, propOrProps) {
  const props = typeof propOrProps === "string" ? [propOrProps] : propOrProps;
  return Object.keys(obj).reduce((newObj, prop) => {
    if (!props.includes(prop)) {
      newObj[prop] = obj[prop];
    }
    return newObj;
  }, {});
}
var resetAttributes = (typeOrName, attributes) => ({ tr: tr2, state, dispatch }) => {
  let nodeType = null;
  let markType = null;
  const schemaType = getSchemaTypeNameByName(
    typeof typeOrName === "string" ? typeOrName : typeOrName.name,
    state.schema
  );
  if (!schemaType) {
    return false;
  }
  if (schemaType === "node") {
    nodeType = getNodeType(typeOrName, state.schema);
  }
  if (schemaType === "mark") {
    markType = getMarkType(typeOrName, state.schema);
  }
  let canReset = false;
  tr2.selection.ranges.forEach((range) => {
    state.doc.nodesBetween(range.$from.pos, range.$to.pos, (node, pos) => {
      if (nodeType && nodeType === node.type) {
        canReset = true;
        if (dispatch) {
          tr2.setNodeMarkup(pos, void 0, deleteProps(node.attrs, attributes));
        }
      }
      if (markType && node.marks.length) {
        node.marks.forEach((mark) => {
          if (markType === mark.type) {
            canReset = true;
            if (dispatch) {
              tr2.addMark(pos, pos + node.nodeSize, markType.create(deleteProps(mark.attrs, attributes)));
            }
          }
        });
      }
    });
  });
  return canReset;
};
var scrollIntoView = () => ({ tr: tr2, dispatch }) => {
  if (dispatch) {
    tr2.scrollIntoView();
  }
  return true;
};
var selectAll = () => ({ tr: tr2, dispatch }) => {
  if (dispatch) {
    const selection = new AllSelection(tr2.doc);
    tr2.setSelection(selection);
  }
  return true;
};
var selectNodeBackward = () => ({ state, dispatch }) => {
  return selectNodeBackward$1(state, dispatch);
};
var selectNodeForward = () => ({ state, dispatch }) => {
  return selectNodeForward$1(state, dispatch);
};
var selectParentNode = () => ({ state, dispatch }) => {
  return selectParentNode$1(state, dispatch);
};
var selectTextblockEnd = () => ({ state, dispatch }) => {
  return selectTextblockEnd$1(state, dispatch);
};
var selectTextblockStart = () => ({ state, dispatch }) => {
  return selectTextblockStart$1(state, dispatch);
};
function createDocument(content, schema, parseOptions = {}, options = {}) {
  return createNodeFromContent(content, schema, {
    slice: false,
    parseOptions,
    errorOnInvalidContent: options.errorOnInvalidContent
  });
}
var setContent = (content, { errorOnInvalidContent, emitUpdate = true, parseOptions = {} } = {}) => ({ editor, tr: tr2, dispatch, commands }) => {
  const { doc: doc2 } = tr2;
  if (parseOptions.preserveWhitespace !== "full") {
    const document2 = createDocument(content, editor.schema, parseOptions, {
      errorOnInvalidContent: errorOnInvalidContent != null ? errorOnInvalidContent : editor.options.enableContentCheck
    });
    if (dispatch) {
      tr2.replaceWith(0, doc2.content.size, document2).setMeta("preventUpdate", !emitUpdate);
    }
    return true;
  }
  if (dispatch) {
    tr2.setMeta("preventUpdate", !emitUpdate);
  }
  return commands.insertContentAt({ from: 0, to: doc2.content.size }, content, {
    parseOptions,
    errorOnInvalidContent: errorOnInvalidContent != null ? errorOnInvalidContent : editor.options.enableContentCheck
  });
};
function getMarkAttributes(state, typeOrName) {
  const type = getMarkType(typeOrName, state.schema);
  const { from: from2, to, empty: empty2 } = state.selection;
  const marks = [];
  if (empty2) {
    if (state.storedMarks) {
      marks.push(...state.storedMarks);
    }
    marks.push(...state.selection.$head.marks());
  } else {
    state.doc.nodesBetween(from2, to, (node) => {
      marks.push(...node.marks);
    });
  }
  const mark = marks.find((markItem) => markItem.type.name === type.name);
  if (!mark) {
    return {};
  }
  return { ...mark.attrs };
}
function combineTransactionSteps(oldDoc, transactions) {
  const transform = new Transform(oldDoc);
  transactions.forEach((transaction) => {
    transaction.steps.forEach((step) => {
      transform.step(step);
    });
  });
  return transform;
}
function defaultBlockAt(match) {
  for (let i = 0; i < match.edgeCount; i += 1) {
    const { type } = match.edge(i);
    if (type.isTextblock && !type.hasRequiredAttrs()) {
      return type;
    }
  }
  return null;
}
function findChildren(node, predicate) {
  const nodesWithPos = [];
  node.descendants((child, pos) => {
    if (predicate(child)) {
      nodesWithPos.push({
        node: child,
        pos
      });
    }
  });
  return nodesWithPos;
}
function findChildrenInRange(node, range, predicate) {
  const nodesWithPos = [];
  node.nodesBetween(range.from, range.to, (child, pos) => {
    if (predicate(child)) {
      nodesWithPos.push({
        node: child,
        pos
      });
    }
  });
  return nodesWithPos;
}
function findParentNodeClosestToPos($pos, predicate) {
  for (let i = $pos.depth; i > 0; i -= 1) {
    const node = $pos.node(i);
    if (predicate(node)) {
      return {
        pos: i > 0 ? $pos.before(i) : 0,
        start: $pos.start(i),
        depth: i,
        node
      };
    }
  }
}
function findParentNode(predicate) {
  return (selection) => findParentNodeClosestToPos(selection.$from, predicate);
}
function getExtensionField(extension, field, context) {
  if (extension.config[field] === void 0 && extension.parent) {
    return getExtensionField(extension.parent, field, context);
  }
  if (typeof extension.config[field] === "function") {
    const value = extension.config[field].bind({
      ...context,
      parent: extension.parent ? getExtensionField(extension.parent, field, context) : null
    });
    return value;
  }
  return extension.config[field];
}
function flattenExtensions(extensions) {
  return extensions.map((extension) => {
    const context = {
      name: extension.name,
      options: extension.options,
      storage: extension.storage
    };
    const addExtensions = getExtensionField(extension, "addExtensions", context);
    if (addExtensions) {
      return [extension, ...flattenExtensions(addExtensions())];
    }
    return extension;
  }).flat(10);
}
function getHTMLFromFragment(fragment, schema) {
  const documentFragment = DOMSerializer.fromSchema(schema).serializeFragment(fragment);
  const temporaryDocument = document.implementation.createHTMLDocument();
  const container = temporaryDocument.createElement("div");
  container.appendChild(documentFragment);
  return container.innerHTML;
}
function isFunction$1(value) {
  return typeof value === "function";
}
function callOrReturn(value, context = void 0, ...props) {
  if (isFunction$1(value)) {
    if (context) {
      return value.bind(context)(...props);
    }
    return value(...props);
  }
  return value;
}
function isEmptyObject(value = {}) {
  return Object.keys(value).length === 0 && value.constructor === Object;
}
function splitExtensions(extensions) {
  const baseExtensions = extensions.filter((extension) => extension.type === "extension");
  const nodeExtensions = extensions.filter((extension) => extension.type === "node");
  const markExtensions = extensions.filter((extension) => extension.type === "mark");
  return {
    baseExtensions,
    nodeExtensions,
    markExtensions
  };
}
function getAttributesFromExtensions(extensions) {
  const extensionAttributes = [];
  const { nodeExtensions, markExtensions } = splitExtensions(extensions);
  const nodeAndMarkExtensions = [...nodeExtensions, ...markExtensions];
  const defaultAttribute = {
    default: null,
    validate: void 0,
    rendered: true,
    renderHTML: null,
    parseHTML: null,
    keepOnSplit: true,
    isRequired: false
  };
  const nodeExtensionTypes = nodeExtensions.filter((ext) => ext.name !== "text").map((ext) => ext.name);
  const markExtensionTypes = markExtensions.map((ext) => ext.name);
  const allExtensionTypes = [...nodeExtensionTypes, ...markExtensionTypes];
  extensions.forEach((extension) => {
    const context = {
      name: extension.name,
      options: extension.options,
      storage: extension.storage,
      extensions: nodeAndMarkExtensions
    };
    const addGlobalAttributes = getExtensionField(
      extension,
      "addGlobalAttributes",
      context
    );
    if (!addGlobalAttributes) {
      return;
    }
    const globalAttributes = addGlobalAttributes();
    globalAttributes.forEach((globalAttribute) => {
      let resolvedTypes;
      if (Array.isArray(globalAttribute.types)) {
        resolvedTypes = globalAttribute.types;
      } else if (globalAttribute.types === "*") {
        resolvedTypes = allExtensionTypes;
      } else if (globalAttribute.types === "nodes") {
        resolvedTypes = nodeExtensionTypes;
      } else if (globalAttribute.types === "marks") {
        resolvedTypes = markExtensionTypes;
      } else {
        resolvedTypes = [];
      }
      resolvedTypes.forEach((type) => {
        Object.entries(globalAttribute.attributes).forEach(([name, attribute]) => {
          extensionAttributes.push({
            type,
            name,
            attribute: {
              ...defaultAttribute,
              ...attribute
            }
          });
        });
      });
    });
  });
  nodeAndMarkExtensions.forEach((extension) => {
    const context = {
      name: extension.name,
      options: extension.options,
      storage: extension.storage
    };
    const addAttributes = getExtensionField(
      extension,
      "addAttributes",
      context
    );
    if (!addAttributes) {
      return;
    }
    const attributes = addAttributes();
    Object.entries(attributes).forEach(([name, attribute]) => {
      const mergedAttr = {
        ...defaultAttribute,
        ...attribute
      };
      if (typeof (mergedAttr == null ? void 0 : mergedAttr.default) === "function") {
        mergedAttr.default = mergedAttr.default();
      }
      if ((mergedAttr == null ? void 0 : mergedAttr.isRequired) && (mergedAttr == null ? void 0 : mergedAttr.default) === void 0) {
        delete mergedAttr.default;
      }
      extensionAttributes.push({
        type: extension.name,
        name,
        attribute: mergedAttr
      });
    });
  });
  return extensionAttributes;
}
function mergeAttributes(...objects) {
  return objects.filter((item) => !!item).reduce((items, item) => {
    const mergedAttributes = { ...items };
    Object.entries(item).forEach(([key, value]) => {
      const exists = mergedAttributes[key];
      if (!exists) {
        mergedAttributes[key] = value;
        return;
      }
      if (key === "class") {
        const valueClasses = value ? String(value).split(" ") : [];
        const existingClasses = mergedAttributes[key] ? mergedAttributes[key].split(" ") : [];
        const insertClasses = valueClasses.filter((valueClass) => !existingClasses.includes(valueClass));
        mergedAttributes[key] = [...existingClasses, ...insertClasses].join(" ");
      } else if (key === "style") {
        const newStyles = value ? value.split(";").map((style2) => style2.trim()).filter(Boolean) : [];
        const existingStyles = mergedAttributes[key] ? mergedAttributes[key].split(";").map((style2) => style2.trim()).filter(Boolean) : [];
        const styleMap = /* @__PURE__ */ new Map();
        existingStyles.forEach((style2) => {
          const [property, val] = style2.split(":").map((part) => part.trim());
          styleMap.set(property, val);
        });
        newStyles.forEach((style2) => {
          const [property, val] = style2.split(":").map((part) => part.trim());
          styleMap.set(property, val);
        });
        mergedAttributes[key] = Array.from(styleMap.entries()).map(([property, val]) => `${property}: ${val}`).join("; ");
      } else {
        mergedAttributes[key] = value;
      }
    });
    return mergedAttributes;
  }, {});
}
function getRenderedAttributes(nodeOrMark, extensionAttributes) {
  return extensionAttributes.filter((attribute) => attribute.type === nodeOrMark.type.name).filter((item) => item.attribute.rendered).map((item) => {
    if (!item.attribute.renderHTML) {
      return {
        [item.name]: nodeOrMark.attrs[item.name]
      };
    }
    return item.attribute.renderHTML(nodeOrMark.attrs) || {};
  }).reduce((attributes, attribute) => mergeAttributes(attributes, attribute), {});
}
function fromString(value) {
  if (typeof value !== "string") {
    return value;
  }
  if (value.match(/^[+-]?(?:\d*\.)?\d+$/)) {
    return Number(value);
  }
  if (value === "true") {
    return true;
  }
  if (value === "false") {
    return false;
  }
  return value;
}
function injectExtensionAttributesToParseRule(parseRule, extensionAttributes) {
  if ("style" in parseRule) {
    return parseRule;
  }
  return {
    ...parseRule,
    getAttrs: (node) => {
      const oldAttributes = parseRule.getAttrs ? parseRule.getAttrs(node) : parseRule.attrs;
      if (oldAttributes === false) {
        return false;
      }
      const newAttributes = extensionAttributes.reduce((items, item) => {
        const value = item.attribute.parseHTML ? item.attribute.parseHTML(node) : fromString(node.getAttribute(item.name));
        if (value === null || value === void 0) {
          return items;
        }
        return {
          ...items,
          [item.name]: value
        };
      }, {});
      return { ...oldAttributes, ...newAttributes };
    }
  };
}
function cleanUpSchemaItem(data) {
  return Object.fromEntries(
    // @ts-ignore
    Object.entries(data).filter(([key, value]) => {
      if (key === "attrs" && isEmptyObject(value)) {
        return false;
      }
      return value !== null && value !== void 0;
    })
  );
}
function buildAttributeSpec(extensionAttribute) {
  var _a2, _b;
  const spec = {};
  if (!((_a2 = extensionAttribute == null ? void 0 : extensionAttribute.attribute) == null ? void 0 : _a2.isRequired) && "default" in ((extensionAttribute == null ? void 0 : extensionAttribute.attribute) || {})) {
    spec.default = extensionAttribute.attribute.default;
  }
  if (((_b = extensionAttribute == null ? void 0 : extensionAttribute.attribute) == null ? void 0 : _b.validate) !== void 0) {
    spec.validate = extensionAttribute.attribute.validate;
  }
  return [extensionAttribute.name, spec];
}
function getSchemaByResolvedExtensions(extensions, editor) {
  var _a2;
  const allAttributes = getAttributesFromExtensions(extensions);
  const { nodeExtensions, markExtensions } = splitExtensions(extensions);
  const topNode = (_a2 = nodeExtensions.find((extension) => getExtensionField(extension, "topNode"))) == null ? void 0 : _a2.name;
  const nodes = Object.fromEntries(
    nodeExtensions.map((extension) => {
      const extensionAttributes = allAttributes.filter((attribute) => attribute.type === extension.name);
      const context = {
        name: extension.name,
        options: extension.options,
        storage: extension.storage,
        editor
      };
      const extraNodeFields = extensions.reduce((fields, e) => {
        const extendNodeSchema = getExtensionField(e, "extendNodeSchema", context);
        return {
          ...fields,
          ...extendNodeSchema ? extendNodeSchema(extension) : {}
        };
      }, {});
      const schema = cleanUpSchemaItem({
        ...extraNodeFields,
        content: callOrReturn(getExtensionField(extension, "content", context)),
        marks: callOrReturn(getExtensionField(extension, "marks", context)),
        group: callOrReturn(getExtensionField(extension, "group", context)),
        inline: callOrReturn(getExtensionField(extension, "inline", context)),
        atom: callOrReturn(getExtensionField(extension, "atom", context)),
        selectable: callOrReturn(getExtensionField(extension, "selectable", context)),
        draggable: callOrReturn(getExtensionField(extension, "draggable", context)),
        code: callOrReturn(getExtensionField(extension, "code", context)),
        whitespace: callOrReturn(getExtensionField(extension, "whitespace", context)),
        linebreakReplacement: callOrReturn(
          getExtensionField(extension, "linebreakReplacement", context)
        ),
        defining: callOrReturn(getExtensionField(extension, "defining", context)),
        isolating: callOrReturn(getExtensionField(extension, "isolating", context)),
        attrs: Object.fromEntries(extensionAttributes.map(buildAttributeSpec))
      });
      const parseHTML = callOrReturn(getExtensionField(extension, "parseHTML", context));
      if (parseHTML) {
        schema.parseDOM = parseHTML.map(
          (parseRule) => injectExtensionAttributesToParseRule(parseRule, extensionAttributes)
        );
      }
      const renderHTML = getExtensionField(extension, "renderHTML", context);
      if (renderHTML) {
        schema.toDOM = (node) => renderHTML({
          node,
          HTMLAttributes: getRenderedAttributes(node, extensionAttributes)
        });
      }
      const renderText = getExtensionField(extension, "renderText", context);
      if (renderText) {
        schema.toText = renderText;
      }
      return [extension.name, schema];
    })
  );
  const marks = Object.fromEntries(
    markExtensions.map((extension) => {
      const extensionAttributes = allAttributes.filter((attribute) => attribute.type === extension.name);
      const context = {
        name: extension.name,
        options: extension.options,
        storage: extension.storage,
        editor
      };
      const extraMarkFields = extensions.reduce((fields, e) => {
        const extendMarkSchema = getExtensionField(e, "extendMarkSchema", context);
        return {
          ...fields,
          ...extendMarkSchema ? extendMarkSchema(extension) : {}
        };
      }, {});
      const schema = cleanUpSchemaItem({
        ...extraMarkFields,
        inclusive: callOrReturn(getExtensionField(extension, "inclusive", context)),
        excludes: callOrReturn(getExtensionField(extension, "excludes", context)),
        group: callOrReturn(getExtensionField(extension, "group", context)),
        spanning: callOrReturn(getExtensionField(extension, "spanning", context)),
        code: callOrReturn(getExtensionField(extension, "code", context)),
        attrs: Object.fromEntries(extensionAttributes.map(buildAttributeSpec))
      });
      const parseHTML = callOrReturn(getExtensionField(extension, "parseHTML", context));
      if (parseHTML) {
        schema.parseDOM = parseHTML.map(
          (parseRule) => injectExtensionAttributesToParseRule(parseRule, extensionAttributes)
        );
      }
      const renderHTML = getExtensionField(extension, "renderHTML", context);
      if (renderHTML) {
        schema.toDOM = (mark) => renderHTML({
          mark,
          HTMLAttributes: getRenderedAttributes(mark, extensionAttributes)
        });
      }
      return [extension.name, schema];
    })
  );
  return new Schema({
    topNode,
    nodes,
    marks
  });
}
function findDuplicates(items) {
  const filtered = items.filter((el, index2) => items.indexOf(el) !== index2);
  return Array.from(new Set(filtered));
}
function sortExtensions(extensions) {
  const defaultPriority = 100;
  return extensions.sort((a2, b2) => {
    const priorityA = getExtensionField(a2, "priority") || defaultPriority;
    const priorityB = getExtensionField(b2, "priority") || defaultPriority;
    if (priorityA > priorityB) {
      return -1;
    }
    if (priorityA < priorityB) {
      return 1;
    }
    return 0;
  });
}
function resolveExtensions(extensions) {
  const resolvedExtensions = sortExtensions(flattenExtensions(extensions));
  const duplicatedNames = findDuplicates(resolvedExtensions.map((extension) => extension.name));
  if (duplicatedNames.length) {
    console.warn(
      `[tiptap warn]: Duplicate extension names found: [${duplicatedNames.map((item) => `'${item}'`).join(", ")}]. This can lead to issues.`
    );
  }
  return resolvedExtensions;
}
function getTextBetween(startNode, range, options) {
  const { from: from2, to } = range;
  const { blockSeparator = "\n\n", textSerializers = {} } = options || {};
  let text = "";
  startNode.nodesBetween(from2, to, (node, pos, parent, index2) => {
    var _a2;
    if (node.isBlock && pos > from2) {
      text += blockSeparator;
    }
    const textSerializer = textSerializers == null ? void 0 : textSerializers[node.type.name];
    if (textSerializer) {
      if (parent) {
        text += textSerializer({
          node,
          pos,
          parent,
          index: index2,
          range
        });
      }
      return false;
    }
    if (node.isText) {
      text += (_a2 = node == null ? void 0 : node.text) == null ? void 0 : _a2.slice(Math.max(from2, pos) - pos, to - pos);
    }
  });
  return text;
}
function getText(node, options) {
  const range = {
    from: 0,
    to: node.content.size
  };
  return getTextBetween(node, range, options);
}
function getTextSerializersFromSchema(schema) {
  return Object.fromEntries(
    Object.entries(schema.nodes).filter(([, node]) => node.spec.toText).map(([name, node]) => [name, node.spec.toText])
  );
}
function getNodeAttributes(state, typeOrName) {
  const type = getNodeType(typeOrName, state.schema);
  const { from: from2, to } = state.selection;
  const nodes = [];
  state.doc.nodesBetween(from2, to, (node2) => {
    nodes.push(node2);
  });
  const node = nodes.reverse().find((nodeItem) => nodeItem.type.name === type.name);
  if (!node) {
    return {};
  }
  return { ...node.attrs };
}
function getAttributes(state, typeOrName) {
  const schemaType = getSchemaTypeNameByName(
    typeof typeOrName === "string" ? typeOrName : typeOrName.name,
    state.schema
  );
  if (schemaType === "node") {
    return getNodeAttributes(state, typeOrName);
  }
  if (schemaType === "mark") {
    return getMarkAttributes(state, typeOrName);
  }
  return {};
}
function removeDuplicates(array, by = JSON.stringify) {
  const seen2 = {};
  return array.filter((item) => {
    const key = by(item);
    return Object.prototype.hasOwnProperty.call(seen2, key) ? false : seen2[key] = true;
  });
}
function simplifyChangedRanges(changes) {
  const uniqueChanges = removeDuplicates(changes);
  return uniqueChanges.length === 1 ? uniqueChanges : uniqueChanges.filter((change, index2) => {
    const rest = uniqueChanges.filter((_2, i) => i !== index2);
    return !rest.some((otherChange) => {
      return change.oldRange.from >= otherChange.oldRange.from && change.oldRange.to <= otherChange.oldRange.to && change.newRange.from >= otherChange.newRange.from && change.newRange.to <= otherChange.newRange.to;
    });
  });
}
function getChangedRanges(transform) {
  const { mapping, steps } = transform;
  const changes = [];
  mapping.maps.forEach((stepMap, index2) => {
    const ranges = [];
    if (!stepMap.ranges.length) {
      const { from: from2, to } = steps[index2];
      if (from2 === void 0 || to === void 0) {
        return;
      }
      ranges.push({ from: from2, to });
    } else {
      stepMap.forEach((from2, to) => {
        ranges.push({ from: from2, to });
      });
    }
    ranges.forEach(({ from: from2, to }) => {
      const newStart = mapping.slice(index2).map(from2, -1);
      const newEnd = mapping.slice(index2).map(to);
      const oldStart = mapping.invert().map(newStart, -1);
      const oldEnd = mapping.invert().map(newEnd);
      changes.push({
        oldRange: {
          from: oldStart,
          to: oldEnd
        },
        newRange: {
          from: newStart,
          to: newEnd
        }
      });
    });
  });
  return simplifyChangedRanges(changes);
}
function getMarksBetween(from2, to, doc2) {
  const marks = [];
  if (from2 === to) {
    doc2.resolve(from2).marks().forEach((mark) => {
      const $pos = doc2.resolve(from2);
      const range = getMarkRange($pos, mark.type);
      if (!range) {
        return;
      }
      marks.push({
        mark,
        ...range
      });
    });
  } else {
    doc2.nodesBetween(from2, to, (node, pos) => {
      if (!node || (node == null ? void 0 : node.nodeSize) === void 0) {
        return;
      }
      marks.push(
        ...node.marks.map((mark) => ({
          from: pos,
          to: pos + node.nodeSize,
          mark
        }))
      );
    });
  }
  return marks;
}
var getNodeAtPosition = (state, typeOrName, pos, maxDepth = 20) => {
  const $pos = state.doc.resolve(pos);
  let currentDepth = maxDepth;
  let node = null;
  while (currentDepth > 0 && node === null) {
    const currentNode = $pos.node(currentDepth);
    if ((currentNode == null ? void 0 : currentNode.type.name) === typeOrName) {
      node = currentNode;
    } else {
      currentDepth -= 1;
    }
  }
  return [node, currentDepth];
};
function getSchemaTypeByName(name, schema) {
  return schema.nodes[name] || schema.marks[name] || null;
}
function getSplittedAttributes(extensionAttributes, typeName, attributes) {
  return Object.fromEntries(
    Object.entries(attributes).filter(([name]) => {
      const extensionAttribute = extensionAttributes.find((item) => {
        return item.type === typeName && item.name === name;
      });
      if (!extensionAttribute) {
        return false;
      }
      return extensionAttribute.attribute.keepOnSplit;
    })
  );
}
var getTextContentFromNodes = ($from, maxMatch = 500) => {
  let textBefore = "";
  const sliceEndPos = $from.parentOffset;
  $from.parent.nodesBetween(Math.max(0, sliceEndPos - maxMatch), sliceEndPos, (node, pos, parent, index2) => {
    var _a2, _b;
    const chunk = ((_b = (_a2 = node.type.spec).toText) == null ? void 0 : _b.call(_a2, {
      node,
      pos,
      parent,
      index: index2
    })) || node.textContent || "%leaf%";
    textBefore += node.isAtom && !node.isText ? chunk : chunk.slice(0, Math.max(0, sliceEndPos - pos));
  });
  return textBefore;
};
function isMarkActive(state, typeOrName, attributes = {}) {
  const { empty: empty2, ranges } = state.selection;
  const type = typeOrName ? getMarkType(typeOrName, state.schema) : null;
  if (empty2) {
    return !!(state.storedMarks || state.selection.$from.marks()).filter((mark) => {
      if (!type) {
        return true;
      }
      return type.name === mark.type.name;
    }).find((mark) => objectIncludes(mark.attrs, attributes, { strict: false }));
  }
  let selectionRange = 0;
  const markRanges = [];
  ranges.forEach(({ $from, $to }) => {
    const from2 = $from.pos;
    const to = $to.pos;
    state.doc.nodesBetween(from2, to, (node, pos) => {
      if (type && node.inlineContent && !node.type.allowsMarkType(type)) {
        return false;
      }
      if (!node.isText && !node.marks.length) {
        return;
      }
      const relativeFrom = Math.max(from2, pos);
      const relativeTo = Math.min(to, pos + node.nodeSize);
      const range2 = relativeTo - relativeFrom;
      selectionRange += range2;
      markRanges.push(
        ...node.marks.map((mark) => ({
          mark,
          from: relativeFrom,
          to: relativeTo
        }))
      );
    });
  });
  if (selectionRange === 0) {
    return false;
  }
  const matchedRange = markRanges.filter((markRange) => {
    if (!type) {
      return true;
    }
    return type.name === markRange.mark.type.name;
  }).filter((markRange) => objectIncludes(markRange.mark.attrs, attributes, { strict: false })).reduce((sum, markRange) => sum + markRange.to - markRange.from, 0);
  const excludedRange = markRanges.filter((markRange) => {
    if (!type) {
      return true;
    }
    return markRange.mark.type !== type && markRange.mark.type.excludes(type);
  }).reduce((sum, markRange) => sum + markRange.to - markRange.from, 0);
  const range = matchedRange > 0 ? matchedRange + excludedRange : matchedRange;
  return range >= selectionRange;
}
function isActive(state, name, attributes = {}) {
  if (!name) {
    return isNodeActive(state, null, attributes) || isMarkActive(state, null, attributes);
  }
  const schemaType = getSchemaTypeNameByName(name, state.schema);
  if (schemaType === "node") {
    return isNodeActive(state, name, attributes);
  }
  if (schemaType === "mark") {
    return isMarkActive(state, name, attributes);
  }
  return false;
}
var isAtEndOfNode = (state, nodeType) => {
  const { $from, $to, $anchor } = state.selection;
  if (nodeType) {
    const parentNode2 = findParentNode((node) => node.type.name === nodeType)(state.selection);
    if (!parentNode2) {
      return false;
    }
    const $parentPos = state.doc.resolve(parentNode2.pos + 1);
    if ($anchor.pos + 1 === $parentPos.end()) {
      return true;
    }
    return false;
  }
  if ($to.parentOffset < $to.parent.nodeSize - 2 || $from.pos !== $to.pos) {
    return false;
  }
  return true;
};
var isAtStartOfNode = (state) => {
  const { $from, $to } = state.selection;
  if ($from.parentOffset > 0 || $from.pos !== $to.pos) {
    return false;
  }
  return true;
};
function isExtensionRulesEnabled(extension, enabled) {
  if (Array.isArray(enabled)) {
    return enabled.some((enabledExtension) => {
      const name = typeof enabledExtension === "string" ? enabledExtension : enabledExtension.name;
      return name === extension.name;
    });
  }
  return enabled;
}
function isList(name, extensions) {
  const { nodeExtensions } = splitExtensions(extensions);
  const extension = nodeExtensions.find((item) => item.name === name);
  if (!extension) {
    return false;
  }
  const context = {
    name: extension.name,
    options: extension.options,
    storage: extension.storage
  };
  const group = callOrReturn(getExtensionField(extension, "group", context));
  if (typeof group !== "string") {
    return false;
  }
  return group.split(" ").includes("list");
}
function isNodeEmpty(node, {
  checkChildren = true,
  ignoreWhitespace = false
} = {}) {
  var _a2;
  if (ignoreWhitespace) {
    if (node.type.name === "hardBreak") {
      return true;
    }
    if (node.isText) {
      return /^\s*$/m.test((_a2 = node.text) != null ? _a2 : "");
    }
  }
  if (node.isText) {
    return !node.text;
  }
  if (node.isAtom || node.isLeaf) {
    return false;
  }
  if (node.content.childCount === 0) {
    return true;
  }
  if (checkChildren) {
    let isContentEmpty = true;
    node.content.forEach((childNode) => {
      if (isContentEmpty === false) {
        return;
      }
      if (!isNodeEmpty(childNode, { ignoreWhitespace, checkChildren })) {
        isContentEmpty = false;
      }
    });
    return isContentEmpty;
  }
  return false;
}
function isNodeSelection(value) {
  return value instanceof NodeSelection;
}
var MappablePosition = class _MappablePosition {
  constructor(position) {
    this.position = position;
  }
  /**
   * Creates a MappablePosition from a JSON object.
   */
  static fromJSON(json2) {
    return new _MappablePosition(json2.position);
  }
  /**
   * Converts the MappablePosition to a JSON object.
   */
  toJSON() {
    return {
      position: this.position
    };
  }
};
function getUpdatedPosition(position, transaction) {
  const mapResult = transaction.mapping.mapResult(position.position);
  return {
    position: new MappablePosition(mapResult.pos),
    mapResult
  };
}
function createMappablePosition(position) {
  return new MappablePosition(position);
}
function posToDOMRect(view, from2, to) {
  const minPos = 0;
  const maxPos = view.state.doc.content.size;
  const resolvedFrom = minMax(from2, minPos, maxPos);
  const resolvedEnd = minMax(to, minPos, maxPos);
  const start = view.coordsAtPos(resolvedFrom);
  const end = view.coordsAtPos(resolvedEnd, -1);
  const top = Math.min(start.top, end.top);
  const bottom = Math.max(start.bottom, end.bottom);
  const left = Math.min(start.left, end.left);
  const right = Math.max(start.right, end.right);
  const width = right - left;
  const height = bottom - top;
  const x2 = left;
  const y2 = top;
  const data = {
    top,
    bottom,
    left,
    right,
    width,
    height,
    x: x2,
    y: y2
  };
  return {
    ...data,
    toJSON: () => data
  };
}
function canSetMark(state, tr2, newMarkType) {
  var _a2;
  const { selection } = tr2;
  let cursor = null;
  if (isTextSelection(selection)) {
    cursor = selection.$cursor;
  }
  if (cursor) {
    const currentMarks = (_a2 = state.storedMarks) != null ? _a2 : cursor.marks();
    const parentAllowsMarkType = cursor.parent.type.allowsMarkType(newMarkType);
    return parentAllowsMarkType && (!!newMarkType.isInSet(currentMarks) || !currentMarks.some((mark) => mark.type.excludes(newMarkType)));
  }
  const { ranges } = selection;
  return ranges.some(({ $from, $to }) => {
    let someNodeSupportsMark = $from.depth === 0 ? state.doc.inlineContent && state.doc.type.allowsMarkType(newMarkType) : false;
    state.doc.nodesBetween($from.pos, $to.pos, (node, _pos, parent) => {
      if (someNodeSupportsMark) {
        return false;
      }
      if (node.isInline) {
        const parentAllowsMarkType = !parent || parent.type.allowsMarkType(newMarkType);
        const currentMarksAllowMarkType = !!newMarkType.isInSet(node.marks) || !node.marks.some((otherMark) => otherMark.type.excludes(newMarkType));
        someNodeSupportsMark = parentAllowsMarkType && currentMarksAllowMarkType;
      }
      return !someNodeSupportsMark;
    });
    return someNodeSupportsMark;
  });
}
var setMark = (typeOrName, attributes = {}) => ({ tr: tr2, state, dispatch }) => {
  const { selection } = tr2;
  const { empty: empty2, ranges } = selection;
  const type = getMarkType(typeOrName, state.schema);
  if (dispatch) {
    if (empty2) {
      const oldAttributes = getMarkAttributes(state, type);
      tr2.addStoredMark(
        type.create({
          ...oldAttributes,
          ...attributes
        })
      );
    } else {
      ranges.forEach((range) => {
        const from2 = range.$from.pos;
        const to = range.$to.pos;
        state.doc.nodesBetween(from2, to, (node, pos) => {
          const trimmedFrom = Math.max(pos, from2);
          const trimmedTo = Math.min(pos + node.nodeSize, to);
          const someHasMark = node.marks.find((mark) => mark.type === type);
          if (someHasMark) {
            node.marks.forEach((mark) => {
              if (type === mark.type) {
                tr2.addMark(
                  trimmedFrom,
                  trimmedTo,
                  type.create({
                    ...mark.attrs,
                    ...attributes
                  })
                );
              }
            });
          } else {
            tr2.addMark(trimmedFrom, trimmedTo, type.create(attributes));
          }
        });
      });
    }
  }
  return canSetMark(state, tr2, type);
};
var setMeta = (key, value) => ({ tr: tr2 }) => {
  tr2.setMeta(key, value);
  return true;
};
var setNode = (typeOrName, attributes = {}) => ({ state, dispatch, chain }) => {
  const type = getNodeType(typeOrName, state.schema);
  let attributesToCopy;
  if (state.selection.$anchor.sameParent(state.selection.$head)) {
    attributesToCopy = state.selection.$anchor.parent.attrs;
  }
  if (!type.isTextblock) {
    console.warn('[tiptap warn]: Currently "setNode()" only supports text block nodes.');
    return false;
  }
  return chain().command(({ commands }) => {
    const canSetBlock = setBlockType(type, { ...attributesToCopy, ...attributes })(state);
    if (canSetBlock) {
      return true;
    }
    return commands.clearNodes();
  }).command(({ state: updatedState }) => {
    return setBlockType(type, { ...attributesToCopy, ...attributes })(updatedState, dispatch);
  }).run();
};
var setNodeSelection = (position) => ({ tr: tr2, dispatch }) => {
  if (dispatch) {
    const { doc: doc2 } = tr2;
    const from2 = minMax(position, 0, doc2.content.size);
    const selection = NodeSelection.create(doc2, from2);
    tr2.setSelection(selection);
  }
  return true;
};
var setTextDirection = (direction, position) => ({ tr: tr2, state, dispatch }) => {
  const { selection } = state;
  let from2;
  let to;
  if (typeof position === "number") {
    from2 = position;
    to = position;
  } else if (position && "from" in position && "to" in position) {
    from2 = position.from;
    to = position.to;
  } else {
    from2 = selection.from;
    to = selection.to;
  }
  if (dispatch) {
    tr2.doc.nodesBetween(from2, to, (node, pos) => {
      if (node.isText) {
        return;
      }
      tr2.setNodeMarkup(pos, void 0, {
        ...node.attrs,
        dir: direction
      });
    });
  }
  return true;
};
var setTextSelection = (position) => ({ tr: tr2, dispatch }) => {
  if (dispatch) {
    const { doc: doc2 } = tr2;
    const { from: from2, to } = typeof position === "number" ? { from: position, to: position } : position;
    const minPos = TextSelection.atStart(doc2).from;
    const maxPos = TextSelection.atEnd(doc2).to;
    const resolvedFrom = minMax(from2, minPos, maxPos);
    const resolvedEnd = minMax(to, minPos, maxPos);
    const selection = TextSelection.create(doc2, resolvedFrom, resolvedEnd);
    tr2.setSelection(selection);
  }
  return true;
};
var sinkListItem = (typeOrName) => ({ state, dispatch }) => {
  const type = getNodeType(typeOrName, state.schema);
  return sinkListItem$1(type)(state, dispatch);
};
function ensureMarks(state, splittableMarks) {
  const marks = state.storedMarks || state.selection.$to.parentOffset && state.selection.$from.marks();
  if (marks) {
    const filteredMarks = marks.filter((mark) => splittableMarks == null ? void 0 : splittableMarks.includes(mark.type.name));
    state.tr.ensureMarks(filteredMarks);
  }
}
var splitBlock = ({ keepMarks = true } = {}) => ({ tr: tr2, state, dispatch, editor }) => {
  const { selection, doc: doc2 } = tr2;
  const { $from, $to } = selection;
  const extensionAttributes = editor.extensionManager.attributes;
  const newAttributes = getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs);
  if (selection instanceof NodeSelection && selection.node.isBlock) {
    if (!$from.parentOffset || !canSplit(doc2, $from.pos)) {
      return false;
    }
    if (dispatch) {
      if (keepMarks) {
        ensureMarks(state, editor.extensionManager.splittableMarks);
      }
      tr2.split($from.pos).scrollIntoView();
    }
    return true;
  }
  if (!$from.parent.isBlock) {
    return false;
  }
  const atEnd = $to.parentOffset === $to.parent.content.size;
  const deflt = $from.depth === 0 ? void 0 : defaultBlockAt($from.node(-1).contentMatchAt($from.indexAfter(-1)));
  let types = atEnd && deflt ? [
    {
      type: deflt,
      attrs: newAttributes
    }
  ] : void 0;
  let can = canSplit(tr2.doc, tr2.mapping.map($from.pos), 1, types);
  if (!types && !can && canSplit(tr2.doc, tr2.mapping.map($from.pos), 1, deflt ? [{ type: deflt }] : void 0)) {
    can = true;
    types = deflt ? [
      {
        type: deflt,
        attrs: newAttributes
      }
    ] : void 0;
  }
  if (dispatch) {
    if (can) {
      if (selection instanceof TextSelection) {
        tr2.deleteSelection();
      }
      tr2.split(tr2.mapping.map($from.pos), 1, types);
      if (deflt && !atEnd && !$from.parentOffset && $from.parent.type !== deflt) {
        const first2 = tr2.mapping.map($from.before());
        const $first = tr2.doc.resolve(first2);
        if ($from.node(-1).canReplaceWith($first.index(), $first.index() + 1, deflt)) {
          tr2.setNodeMarkup(tr2.mapping.map($from.before()), deflt);
        }
      }
    }
    if (keepMarks) {
      ensureMarks(state, editor.extensionManager.splittableMarks);
    }
    tr2.scrollIntoView();
  }
  return can;
};
var splitListItem = (typeOrName, overrideAttrs = {}) => ({ tr: tr2, state, dispatch, editor }) => {
  var _a2;
  const type = getNodeType(typeOrName, state.schema);
  const { $from, $to } = state.selection;
  const node = state.selection.node;
  if (node && node.isBlock || $from.depth < 2 || !$from.sameParent($to)) {
    return false;
  }
  const grandParent = $from.node(-1);
  if (grandParent.type !== type) {
    return false;
  }
  const extensionAttributes = editor.extensionManager.attributes;
  if ($from.parent.content.size === 0 && $from.node(-1).childCount === $from.indexAfter(-1)) {
    if ($from.depth === 2 || $from.node(-3).type !== type || $from.index(-2) !== $from.node(-2).childCount - 1) {
      return false;
    }
    if (dispatch) {
      let wrap2 = Fragment.empty;
      const depthBefore = $from.index(-1) ? 1 : $from.index(-2) ? 2 : 3;
      for (let d2 = $from.depth - depthBefore; d2 >= $from.depth - 3; d2 -= 1) {
        wrap2 = Fragment.from($from.node(d2).copy(wrap2));
      }
      const depthAfter = (
        // eslint-disable-next-line no-nested-ternary
        $from.indexAfter(-1) < $from.node(-2).childCount ? 1 : $from.indexAfter(-2) < $from.node(-3).childCount ? 2 : 3
      );
      const newNextTypeAttributes2 = {
        ...getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs),
        ...overrideAttrs
      };
      const nextType2 = ((_a2 = type.contentMatch.defaultType) == null ? void 0 : _a2.createAndFill(newNextTypeAttributes2)) || void 0;
      wrap2 = wrap2.append(Fragment.from(type.createAndFill(null, nextType2) || void 0));
      const start = $from.before($from.depth - (depthBefore - 1));
      tr2.replace(start, $from.after(-depthAfter), new Slice(wrap2, 4 - depthBefore, 0));
      let sel = -1;
      tr2.doc.nodesBetween(start, tr2.doc.content.size, (n2, pos) => {
        if (sel > -1) {
          return false;
        }
        if (n2.isTextblock && n2.content.size === 0) {
          sel = pos + 1;
        }
      });
      if (sel > -1) {
        tr2.setSelection(TextSelection.near(tr2.doc.resolve(sel)));
      }
      tr2.scrollIntoView();
    }
    return true;
  }
  const nextType = $to.pos === $from.end() ? grandParent.contentMatchAt(0).defaultType : null;
  const newTypeAttributes = {
    ...getSplittedAttributes(extensionAttributes, grandParent.type.name, grandParent.attrs),
    ...overrideAttrs
  };
  const newNextTypeAttributes = {
    ...getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs),
    ...overrideAttrs
  };
  tr2.delete($from.pos, $to.pos);
  const types = nextType ? [
    { type, attrs: newTypeAttributes },
    { type: nextType, attrs: newNextTypeAttributes }
  ] : [{ type, attrs: newTypeAttributes }];
  if (!canSplit(tr2.doc, $from.pos, 2)) {
    return false;
  }
  if (dispatch) {
    const { selection, storedMarks } = state;
    const { splittableMarks } = editor.extensionManager;
    const marks = storedMarks || selection.$to.parentOffset && selection.$from.marks();
    tr2.split($from.pos, 2, types).scrollIntoView();
    if (!marks || !dispatch) {
      return true;
    }
    const filteredMarks = marks.filter((mark) => splittableMarks.includes(mark.type.name));
    tr2.ensureMarks(filteredMarks);
  }
  return true;
};
var joinListBackwards = (tr2, listType) => {
  const list = findParentNode((node) => node.type === listType)(tr2.selection);
  if (!list) {
    return true;
  }
  const before = tr2.doc.resolve(Math.max(0, list.pos - 1)).before(list.depth);
  if (before === void 0) {
    return true;
  }
  const nodeBefore = tr2.doc.nodeAt(before);
  const canJoinBackwards = list.node.type === (nodeBefore == null ? void 0 : nodeBefore.type) && canJoin(tr2.doc, list.pos);
  if (!canJoinBackwards) {
    return true;
  }
  tr2.join(list.pos);
  return true;
};
var joinListForwards = (tr2, listType) => {
  const list = findParentNode((node) => node.type === listType)(tr2.selection);
  if (!list) {
    return true;
  }
  const after = tr2.doc.resolve(list.start).after(list.depth);
  if (after === void 0) {
    return true;
  }
  const nodeAfter = tr2.doc.nodeAt(after);
  const canJoinForwards = list.node.type === (nodeAfter == null ? void 0 : nodeAfter.type) && canJoin(tr2.doc, after);
  if (!canJoinForwards) {
    return true;
  }
  tr2.join(after);
  return true;
};
var toggleList = (listTypeOrName, itemTypeOrName, keepMarks, attributes = {}) => ({ editor, tr: tr2, state, dispatch, chain, commands, can }) => {
  const { extensions, splittableMarks } = editor.extensionManager;
  const listType = getNodeType(listTypeOrName, state.schema);
  const itemType = getNodeType(itemTypeOrName, state.schema);
  const { selection, storedMarks } = state;
  const { $from, $to } = selection;
  const range = $from.blockRange($to);
  const marks = storedMarks || selection.$to.parentOffset && selection.$from.marks();
  if (!range) {
    return false;
  }
  const parentList = findParentNode((node) => isList(node.type.name, extensions))(selection);
  if (range.depth >= 1 && parentList && range.depth - parentList.depth <= 1) {
    if (parentList.node.type === listType) {
      return commands.liftListItem(itemType);
    }
    if (isList(parentList.node.type.name, extensions) && listType.validContent(parentList.node.content) && dispatch) {
      return chain().command(() => {
        tr2.setNodeMarkup(parentList.pos, listType);
        return true;
      }).command(() => joinListBackwards(tr2, listType)).command(() => joinListForwards(tr2, listType)).run();
    }
  }
  if (!keepMarks || !marks || !dispatch) {
    return chain().command(() => {
      const canWrapInList = can().wrapInList(listType, attributes);
      if (canWrapInList) {
        return true;
      }
      return commands.clearNodes();
    }).wrapInList(listType, attributes).command(() => joinListBackwards(tr2, listType)).command(() => joinListForwards(tr2, listType)).run();
  }
  return chain().command(() => {
    const canWrapInList = can().wrapInList(listType, attributes);
    const filteredMarks = marks.filter((mark) => splittableMarks.includes(mark.type.name));
    tr2.ensureMarks(filteredMarks);
    if (canWrapInList) {
      return true;
    }
    return commands.clearNodes();
  }).wrapInList(listType, attributes).command(() => joinListBackwards(tr2, listType)).command(() => joinListForwards(tr2, listType)).run();
};
var toggleMark = (typeOrName, attributes = {}, options = {}) => ({ state, commands }) => {
  const { extendEmptyMarkRange = false } = options;
  const type = getMarkType(typeOrName, state.schema);
  const isActive2 = isMarkActive(state, type, attributes);
  if (isActive2) {
    return commands.unsetMark(type, { extendEmptyMarkRange });
  }
  return commands.setMark(type, attributes);
};
var toggleNode = (typeOrName, toggleTypeOrName, attributes = {}) => ({ state, commands }) => {
  const type = getNodeType(typeOrName, state.schema);
  const toggleType = getNodeType(toggleTypeOrName, state.schema);
  const isActive2 = isNodeActive(state, type, attributes);
  let attributesToCopy;
  if (state.selection.$anchor.sameParent(state.selection.$head)) {
    attributesToCopy = state.selection.$anchor.parent.attrs;
  }
  if (isActive2) {
    return commands.setNode(toggleType, attributesToCopy);
  }
  return commands.setNode(type, { ...attributesToCopy, ...attributes });
};
var toggleWrap = (typeOrName, attributes = {}) => ({ state, commands }) => {
  const type = getNodeType(typeOrName, state.schema);
  const isActive2 = isNodeActive(state, type, attributes);
  if (isActive2) {
    return commands.lift(type);
  }
  return commands.wrapIn(type, attributes);
};
var undoInputRule = () => ({ state, dispatch }) => {
  const plugins = state.plugins;
  for (let i = 0; i < plugins.length; i += 1) {
    const plugin = plugins[i];
    let undoable;
    if (plugin.spec.isInputRules && (undoable = plugin.getState(state))) {
      if (dispatch) {
        const tr2 = state.tr;
        const toUndo = undoable.transform;
        for (let j2 = toUndo.steps.length - 1; j2 >= 0; j2 -= 1) {
          tr2.step(toUndo.steps[j2].invert(toUndo.docs[j2]));
        }
        if (undoable.text) {
          const marks = tr2.doc.resolve(undoable.from).marks();
          tr2.replaceWith(undoable.from, undoable.to, state.schema.text(undoable.text, marks));
        } else {
          tr2.delete(undoable.from, undoable.to);
        }
      }
      return true;
    }
  }
  return false;
};
var unsetAllMarks = () => ({ tr: tr2, dispatch }) => {
  const { selection } = tr2;
  const { empty: empty2, ranges } = selection;
  if (empty2) {
    return true;
  }
  if (dispatch) {
    ranges.forEach((range) => {
      tr2.removeMark(range.$from.pos, range.$to.pos);
    });
  }
  return true;
};
var unsetMark = (typeOrName, options = {}) => ({ tr: tr2, state, dispatch }) => {
  var _a2;
  const { extendEmptyMarkRange = false } = options;
  const { selection } = tr2;
  const type = getMarkType(typeOrName, state.schema);
  const { $from, empty: empty2, ranges } = selection;
  if (!dispatch) {
    return true;
  }
  if (empty2 && extendEmptyMarkRange) {
    let { from: from2, to } = selection;
    const attrs = (_a2 = $from.marks().find((mark) => mark.type === type)) == null ? void 0 : _a2.attrs;
    const range = getMarkRange($from, type, attrs);
    if (range) {
      from2 = range.from;
      to = range.to;
    }
    tr2.removeMark(from2, to, type);
  } else {
    ranges.forEach((range) => {
      tr2.removeMark(range.$from.pos, range.$to.pos, type);
    });
  }
  tr2.removeStoredMark(type);
  return true;
};
var unsetTextDirection = (position) => ({ tr: tr2, state, dispatch }) => {
  const { selection } = state;
  let from2;
  let to;
  if (typeof position === "number") {
    from2 = position;
    to = position;
  } else if (position && "from" in position && "to" in position) {
    from2 = position.from;
    to = position.to;
  } else {
    from2 = selection.from;
    to = selection.to;
  }
  if (dispatch) {
    tr2.doc.nodesBetween(from2, to, (node, pos) => {
      if (node.isText) {
        return;
      }
      const newAttrs = { ...node.attrs };
      delete newAttrs.dir;
      tr2.setNodeMarkup(pos, void 0, newAttrs);
    });
  }
  return true;
};
var updateAttributes = (typeOrName, attributes = {}) => ({ tr: tr2, state, dispatch }) => {
  let nodeType = null;
  let markType = null;
  const schemaType = getSchemaTypeNameByName(
    typeof typeOrName === "string" ? typeOrName : typeOrName.name,
    state.schema
  );
  if (!schemaType) {
    return false;
  }
  if (schemaType === "node") {
    nodeType = getNodeType(typeOrName, state.schema);
  }
  if (schemaType === "mark") {
    markType = getMarkType(typeOrName, state.schema);
  }
  let canUpdate = false;
  tr2.selection.ranges.forEach((range) => {
    const from2 = range.$from.pos;
    const to = range.$to.pos;
    let lastPos;
    let lastNode;
    let trimmedFrom;
    let trimmedTo;
    if (tr2.selection.empty) {
      state.doc.nodesBetween(from2, to, (node, pos) => {
        if (nodeType && nodeType === node.type) {
          canUpdate = true;
          trimmedFrom = Math.max(pos, from2);
          trimmedTo = Math.min(pos + node.nodeSize, to);
          lastPos = pos;
          lastNode = node;
        }
      });
    } else {
      state.doc.nodesBetween(from2, to, (node, pos) => {
        if (pos < from2 && nodeType && nodeType === node.type) {
          canUpdate = true;
          trimmedFrom = Math.max(pos, from2);
          trimmedTo = Math.min(pos + node.nodeSize, to);
          lastPos = pos;
          lastNode = node;
        }
        if (pos >= from2 && pos <= to) {
          if (nodeType && nodeType === node.type) {
            canUpdate = true;
            if (dispatch) {
              tr2.setNodeMarkup(pos, void 0, {
                ...node.attrs,
                ...attributes
              });
            }
          }
          if (markType && node.marks.length) {
            node.marks.forEach((mark) => {
              if (markType === mark.type) {
                canUpdate = true;
                if (dispatch) {
                  const trimmedFrom2 = Math.max(pos, from2);
                  const trimmedTo2 = Math.min(pos + node.nodeSize, to);
                  tr2.addMark(
                    trimmedFrom2,
                    trimmedTo2,
                    markType.create({
                      ...mark.attrs,
                      ...attributes
                    })
                  );
                }
              }
            });
          }
        }
      });
    }
    if (lastNode) {
      if (lastPos !== void 0 && dispatch) {
        tr2.setNodeMarkup(lastPos, void 0, {
          ...lastNode.attrs,
          ...attributes
        });
      }
      if (markType && lastNode.marks.length) {
        lastNode.marks.forEach((mark) => {
          if (markType === mark.type && dispatch) {
            tr2.addMark(
              trimmedFrom,
              trimmedTo,
              markType.create({
                ...mark.attrs,
                ...attributes
              })
            );
          }
        });
      }
    }
  });
  return canUpdate;
};
var wrapIn = (typeOrName, attributes = {}) => ({ state, dispatch }) => {
  const type = getNodeType(typeOrName, state.schema);
  return wrapIn$1(type, attributes)(state, dispatch);
};
var wrapInList = (typeOrName, attributes = {}) => ({ state, dispatch }) => {
  const type = getNodeType(typeOrName, state.schema);
  return wrapInList$1(type, attributes)(state, dispatch);
};
var EventEmitter = class {
  constructor() {
    this.callbacks = {};
  }
  on(event, fn) {
    if (!this.callbacks[event]) {
      this.callbacks[event] = [];
    }
    this.callbacks[event].push(fn);
    return this;
  }
  emit(event, ...args) {
    const callbacks = this.callbacks[event];
    if (callbacks) {
      callbacks.forEach((callback) => callback.apply(this, args));
    }
    return this;
  }
  off(event, fn) {
    const callbacks = this.callbacks[event];
    if (callbacks) {
      if (fn) {
        this.callbacks[event] = callbacks.filter((callback) => callback !== fn);
      } else {
        delete this.callbacks[event];
      }
    }
    return this;
  }
  once(event, fn) {
    const onceFn = (...args) => {
      this.off(event, onceFn);
      fn.apply(this, args);
    };
    return this.on(event, onceFn);
  }
  removeAllListeners() {
    this.callbacks = {};
  }
};
var InputRule = class {
  constructor(config) {
    var _a2;
    this.find = config.find;
    this.handler = config.handler;
    this.undoable = (_a2 = config.undoable) != null ? _a2 : true;
  }
};
var inputRuleMatcherHandler = (text, find2) => {
  if (isRegExp(find2)) {
    return find2.exec(text);
  }
  const inputRuleMatch = find2(text);
  if (!inputRuleMatch) {
    return null;
  }
  const result = [inputRuleMatch.text];
  result.index = inputRuleMatch.index;
  result.input = text;
  result.data = inputRuleMatch.data;
  if (inputRuleMatch.replaceWith) {
    if (!inputRuleMatch.text.includes(inputRuleMatch.replaceWith)) {
      console.warn('[tiptap warn]: "inputRuleMatch.replaceWith" must be part of "inputRuleMatch.text".');
    }
    result.push(inputRuleMatch.replaceWith);
  }
  return result;
};
function run$2(config) {
  var _a2;
  const { editor, from: from2, to, text, rules, plugin } = config;
  const { view } = editor;
  if (view.composing) {
    return false;
  }
  const $from = view.state.doc.resolve(from2);
  if (
    // check for code node
    $from.parent.type.spec.code || // check for code mark
    !!((_a2 = $from.nodeBefore || $from.nodeAfter) == null ? void 0 : _a2.marks.find((mark) => mark.type.spec.code))
  ) {
    return false;
  }
  let matched = false;
  const textBefore = getTextContentFromNodes($from) + text;
  rules.forEach((rule) => {
    if (matched) {
      return;
    }
    const match = inputRuleMatcherHandler(textBefore, rule.find);
    if (!match) {
      return;
    }
    const tr2 = view.state.tr;
    const state = createChainableState({
      state: view.state,
      transaction: tr2
    });
    const range = {
      from: from2 - (match[0].length - text.length),
      to
    };
    const { commands, chain, can } = new CommandManager({
      editor,
      state
    });
    const handler = rule.handler({
      state,
      range,
      match,
      commands,
      chain,
      can
    });
    if (handler === null || !tr2.steps.length) {
      return;
    }
    if (rule.undoable) {
      tr2.setMeta(plugin, {
        transform: tr2,
        from: from2,
        to,
        text
      });
    }
    view.dispatch(tr2);
    matched = true;
  });
  return matched;
}
function inputRulesPlugin(props) {
  const { editor, rules } = props;
  const plugin = new Plugin({
    state: {
      init() {
        return null;
      },
      apply(tr2, prev, state) {
        const stored = tr2.getMeta(plugin);
        if (stored) {
          return stored;
        }
        const simulatedInputMeta = tr2.getMeta("applyInputRules");
        const isSimulatedInput = !!simulatedInputMeta;
        if (isSimulatedInput) {
          setTimeout(() => {
            let { text } = simulatedInputMeta;
            if (typeof text === "string") {
              text = text;
            } else {
              text = getHTMLFromFragment(Fragment.from(text), state.schema);
            }
            const { from: from2 } = simulatedInputMeta;
            const to = from2 + text.length;
            run$2({
              editor,
              from: from2,
              to,
              text,
              rules,
              plugin
            });
          });
        }
        return tr2.selectionSet || tr2.docChanged ? null : prev;
      }
    },
    props: {
      handleTextInput(view, from2, to, text) {
        return run$2({
          editor,
          from: from2,
          to,
          text,
          rules,
          plugin
        });
      },
      handleDOMEvents: {
        compositionend: (view) => {
          setTimeout(() => {
            const { $cursor } = view.state.selection;
            if ($cursor) {
              run$2({
                editor,
                from: $cursor.pos,
                to: $cursor.pos,
                text: "",
                rules,
                plugin
              });
            }
          });
          return false;
        }
      },
      // add support for input rules to trigger on enter
      // this is useful for example for code blocks
      handleKeyDown(view, event) {
        if (event.key !== "Enter") {
          return false;
        }
        const { $cursor } = view.state.selection;
        if ($cursor) {
          return run$2({
            editor,
            from: $cursor.pos,
            to: $cursor.pos,
            text: "\n",
            rules,
            plugin
          });
        }
        return false;
      }
    },
    // @ts-ignore
    isInputRules: true
  });
  return plugin;
}
function getType(value) {
  return Object.prototype.toString.call(value).slice(8, -1);
}
function isPlainObject(value) {
  if (getType(value) !== "Object") {
    return false;
  }
  return value.constructor === Object && Object.getPrototypeOf(value) === Object.prototype;
}
function mergeDeep(target, source2) {
  const output = { ...target };
  if (isPlainObject(target) && isPlainObject(source2)) {
    Object.keys(source2).forEach((key) => {
      if (isPlainObject(source2[key]) && isPlainObject(target[key])) {
        output[key] = mergeDeep(target[key], source2[key]);
      } else {
        output[key] = source2[key];
      }
    });
  }
  return output;
}
var Extendable = class {
  constructor(config = {}) {
    this.type = "extendable";
    this.parent = null;
    this.child = null;
    this.name = "";
    this.config = {
      name: this.name
    };
    this.config = {
      ...this.config,
      ...config
    };
    this.name = this.config.name;
  }
  get options() {
    return {
      ...callOrReturn(
        getExtensionField(this, "addOptions", {
          name: this.name
        })
      ) || {}
    };
  }
  get storage() {
    return {
      ...callOrReturn(
        getExtensionField(this, "addStorage", {
          name: this.name,
          options: this.options
        })
      ) || {}
    };
  }
  configure(options = {}) {
    const extension = this.extend({
      ...this.config,
      addOptions: () => {
        return mergeDeep(this.options, options);
      }
    });
    extension.name = this.name;
    extension.parent = this.parent;
    return extension;
  }
  extend(extendedConfig = {}) {
    const extension = new this.constructor({ ...this.config, ...extendedConfig });
    extension.parent = this;
    this.child = extension;
    extension.name = "name" in extendedConfig ? extendedConfig.name : extension.parent.name;
    return extension;
  }
};
var Mark2 = class _Mark extends Extendable {
  constructor() {
    super(...arguments);
    this.type = "mark";
  }
  /**
   * Create a new Mark instance
   * @param config - Mark configuration object or a function that returns a configuration object
   */
  static create(config = {}) {
    const resolvedConfig = typeof config === "function" ? config() : config;
    return new _Mark(resolvedConfig);
  }
  static handleExit({ editor, mark }) {
    const { tr: tr2 } = editor.state;
    const currentPos = editor.state.selection.$from;
    const isAtEnd = currentPos.pos === currentPos.end();
    if (isAtEnd) {
      const currentMarks = currentPos.marks();
      const isInMark = !!currentMarks.find((m2) => (m2 == null ? void 0 : m2.type.name) === mark.name);
      if (!isInMark) {
        return false;
      }
      const removeMark2 = currentMarks.find((m2) => (m2 == null ? void 0 : m2.type.name) === mark.name);
      if (removeMark2) {
        tr2.removeStoredMark(removeMark2);
      }
      tr2.insertText(" ", currentPos.pos);
      editor.view.dispatch(tr2);
      return true;
    }
    return false;
  }
  configure(options) {
    return super.configure(options);
  }
  extend(extendedConfig) {
    const resolvedConfig = typeof extendedConfig === "function" ? extendedConfig() : extendedConfig;
    return super.extend(resolvedConfig);
  }
};
function isNumber(value) {
  return typeof value === "number";
}
var PasteRule = class {
  constructor(config) {
    this.find = config.find;
    this.handler = config.handler;
  }
};
var pasteRuleMatcherHandler = (text, find2, event) => {
  if (isRegExp(find2)) {
    return [...text.matchAll(find2)];
  }
  const matches2 = find2(text, event);
  if (!matches2) {
    return [];
  }
  return matches2.map((pasteRuleMatch) => {
    const result = [pasteRuleMatch.text];
    result.index = pasteRuleMatch.index;
    result.input = text;
    result.data = pasteRuleMatch.data;
    if (pasteRuleMatch.replaceWith) {
      if (!pasteRuleMatch.text.includes(pasteRuleMatch.replaceWith)) {
        console.warn('[tiptap warn]: "pasteRuleMatch.replaceWith" must be part of "pasteRuleMatch.text".');
      }
      result.push(pasteRuleMatch.replaceWith);
    }
    return result;
  });
};
function run2(config) {
  const { editor, state, from: from2, to, rule, pasteEvent, dropEvent } = config;
  const { commands, chain, can } = new CommandManager({
    editor,
    state
  });
  const handlers2 = [];
  state.doc.nodesBetween(from2, to, (node, pos) => {
    var _a2, _b, _c, _d, _e2;
    if (((_b = (_a2 = node.type) == null ? void 0 : _a2.spec) == null ? void 0 : _b.code) || !(node.isText || node.isTextblock || node.isInline)) {
      return;
    }
    const contentSize = (_e2 = (_d = (_c = node.content) == null ? void 0 : _c.size) != null ? _d : node.nodeSize) != null ? _e2 : 0;
    const resolvedFrom = Math.max(from2, pos);
    const resolvedTo = Math.min(to, pos + contentSize);
    if (resolvedFrom >= resolvedTo) {
      return;
    }
    const textToMatch = node.isText ? node.text || "" : node.textBetween(resolvedFrom - pos, resolvedTo - pos, void 0, "￼");
    const matches2 = pasteRuleMatcherHandler(textToMatch, rule.find, pasteEvent);
    matches2.forEach((match) => {
      if (match.index === void 0) {
        return;
      }
      const start = resolvedFrom + match.index + 1;
      const end = start + match[0].length;
      const range = {
        from: state.tr.mapping.map(start),
        to: state.tr.mapping.map(end)
      };
      const handler = rule.handler({
        state,
        range,
        match,
        commands,
        chain,
        can,
        pasteEvent,
        dropEvent
      });
      handlers2.push(handler);
    });
  });
  const success = handlers2.every((handler) => handler !== null);
  return success;
}
var tiptapDragFromOtherEditor = null;
var createClipboardPasteEvent = (text) => {
  var _a2;
  const event = new ClipboardEvent("paste", {
    clipboardData: new DataTransfer()
  });
  (_a2 = event.clipboardData) == null ? void 0 : _a2.setData("text/html", text);
  return event;
};
function pasteRulesPlugin(props) {
  const { editor, rules } = props;
  let dragSourceElement = null;
  let isPastedFromProseMirror = false;
  let isDroppedFromProseMirror = false;
  let pasteEvent = typeof ClipboardEvent !== "undefined" ? new ClipboardEvent("paste") : null;
  let dropEvent;
  try {
    dropEvent = typeof DragEvent !== "undefined" ? new DragEvent("drop") : null;
  } catch {
    dropEvent = null;
  }
  const processEvent = ({
    state,
    from: from2,
    to,
    rule,
    pasteEvt
  }) => {
    const tr2 = state.tr;
    const chainableState = createChainableState({
      state,
      transaction: tr2
    });
    const handler = run2({
      editor,
      state: chainableState,
      from: Math.max(from2 - 1, 0),
      to: to.b - 1,
      rule,
      pasteEvent: pasteEvt,
      dropEvent
    });
    if (!handler || !tr2.steps.length) {
      return;
    }
    try {
      dropEvent = typeof DragEvent !== "undefined" ? new DragEvent("drop") : null;
    } catch {
      dropEvent = null;
    }
    pasteEvent = typeof ClipboardEvent !== "undefined" ? new ClipboardEvent("paste") : null;
    return tr2;
  };
  const plugins = rules.map((rule) => {
    return new Plugin({
      // we register a global drag handler to track the current drag source element
      view(view) {
        const handleDragstart = (event) => {
          var _a2;
          dragSourceElement = ((_a2 = view.dom.parentElement) == null ? void 0 : _a2.contains(event.target)) ? view.dom.parentElement : null;
          if (dragSourceElement) {
            tiptapDragFromOtherEditor = editor;
          }
        };
        const handleDragend = () => {
          if (tiptapDragFromOtherEditor) {
            tiptapDragFromOtherEditor = null;
          }
        };
        window.addEventListener("dragstart", handleDragstart);
        window.addEventListener("dragend", handleDragend);
        return {
          destroy() {
            window.removeEventListener("dragstart", handleDragstart);
            window.removeEventListener("dragend", handleDragend);
          }
        };
      },
      props: {
        handleDOMEvents: {
          drop: (view, event) => {
            isDroppedFromProseMirror = dragSourceElement === view.dom.parentElement;
            dropEvent = event;
            if (!isDroppedFromProseMirror) {
              const dragFromOtherEditor = tiptapDragFromOtherEditor;
              if (dragFromOtherEditor == null ? void 0 : dragFromOtherEditor.isEditable) {
                setTimeout(() => {
                  const selection = dragFromOtherEditor.state.selection;
                  if (selection) {
                    dragFromOtherEditor.commands.deleteRange({ from: selection.from, to: selection.to });
                  }
                }, 10);
              }
            }
            return false;
          },
          paste: (_view, event) => {
            var _a2;
            const html = (_a2 = event.clipboardData) == null ? void 0 : _a2.getData("text/html");
            pasteEvent = event;
            isPastedFromProseMirror = !!(html == null ? void 0 : html.includes("data-pm-slice"));
            return false;
          }
        }
      },
      appendTransaction: (transactions, oldState, state) => {
        const transaction = transactions[0];
        const isPaste = transaction.getMeta("uiEvent") === "paste" && !isPastedFromProseMirror;
        const isDrop = transaction.getMeta("uiEvent") === "drop" && !isDroppedFromProseMirror;
        const simulatedPasteMeta = transaction.getMeta("applyPasteRules");
        const isSimulatedPaste = !!simulatedPasteMeta;
        if (!isPaste && !isDrop && !isSimulatedPaste) {
          return;
        }
        if (isSimulatedPaste) {
          let { text } = simulatedPasteMeta;
          if (typeof text === "string") {
            text = text;
          } else {
            text = getHTMLFromFragment(Fragment.from(text), state.schema);
          }
          const { from: from22 } = simulatedPasteMeta;
          const to2 = from22 + text.length;
          const pasteEvt = createClipboardPasteEvent(text);
          return processEvent({
            rule,
            state,
            from: from22,
            to: { b: to2 },
            pasteEvt
          });
        }
        const from2 = oldState.doc.content.findDiffStart(state.doc.content);
        const to = oldState.doc.content.findDiffEnd(state.doc.content);
        if (!isNumber(from2) || !to || from2 === to.b) {
          return;
        }
        return processEvent({
          rule,
          state,
          from: from2,
          to,
          pasteEvt: pasteEvent
        });
      }
    });
  });
  return plugins;
}
var ExtensionManager = class {
  constructor(extensions, editor) {
    this.splittableMarks = [];
    this.editor = editor;
    this.baseExtensions = extensions;
    this.extensions = resolveExtensions(extensions);
    this.schema = getSchemaByResolvedExtensions(this.extensions, editor);
    this.setupExtensions();
  }
  /**
   * Get all commands from the extensions.
   * @returns An object with all commands where the key is the command name and the value is the command function
   */
  get commands() {
    return this.extensions.reduce((commands, extension) => {
      const context = {
        name: extension.name,
        options: extension.options,
        storage: this.editor.extensionStorage[extension.name],
        editor: this.editor,
        type: getSchemaTypeByName(extension.name, this.schema)
      };
      const addCommands = getExtensionField(extension, "addCommands", context);
      if (!addCommands) {
        return commands;
      }
      return {
        ...commands,
        ...addCommands()
      };
    }, {});
  }
  /**
   * Get all registered Prosemirror plugins from the extensions.
   * @returns An array of Prosemirror plugins
   */
  get plugins() {
    const { editor } = this;
    const extensions = sortExtensions([...this.extensions].reverse());
    const allPlugins = extensions.flatMap((extension) => {
      const context = {
        name: extension.name,
        options: extension.options,
        storage: this.editor.extensionStorage[extension.name],
        editor,
        type: getSchemaTypeByName(extension.name, this.schema)
      };
      const plugins = [];
      const addKeyboardShortcuts = getExtensionField(
        extension,
        "addKeyboardShortcuts",
        context
      );
      let defaultBindings = {};
      if (extension.type === "mark" && getExtensionField(extension, "exitable", context)) {
        defaultBindings.ArrowRight = () => Mark2.handleExit({ editor, mark: extension });
      }
      if (addKeyboardShortcuts) {
        const bindings = Object.fromEntries(
          Object.entries(addKeyboardShortcuts()).map(([shortcut, method]) => {
            return [shortcut, () => method({ editor })];
          })
        );
        defaultBindings = { ...defaultBindings, ...bindings };
      }
      const keyMapPlugin = keymap(defaultBindings);
      plugins.push(keyMapPlugin);
      const addInputRules = getExtensionField(extension, "addInputRules", context);
      if (isExtensionRulesEnabled(extension, editor.options.enableInputRules) && addInputRules) {
        const rules = addInputRules();
        if (rules && rules.length) {
          const inputResult = inputRulesPlugin({
            editor,
            rules
          });
          const inputPlugins = Array.isArray(inputResult) ? inputResult : [inputResult];
          plugins.push(...inputPlugins);
        }
      }
      const addPasteRules = getExtensionField(extension, "addPasteRules", context);
      if (isExtensionRulesEnabled(extension, editor.options.enablePasteRules) && addPasteRules) {
        const rules = addPasteRules();
        if (rules && rules.length) {
          const pasteRules = pasteRulesPlugin({ editor, rules });
          plugins.push(...pasteRules);
        }
      }
      const addProseMirrorPlugins = getExtensionField(
        extension,
        "addProseMirrorPlugins",
        context
      );
      if (addProseMirrorPlugins) {
        const proseMirrorPlugins = addProseMirrorPlugins();
        plugins.push(...proseMirrorPlugins);
      }
      return plugins;
    });
    return allPlugins;
  }
  /**
   * Get all attributes from the extensions.
   * @returns An array of attributes
   */
  get attributes() {
    return getAttributesFromExtensions(this.extensions);
  }
  /**
   * Get all node views from the extensions.
   * @returns An object with all node views where the key is the node name and the value is the node view function
   */
  get nodeViews() {
    const { editor } = this;
    const { nodeExtensions } = splitExtensions(this.extensions);
    return Object.fromEntries(
      nodeExtensions.filter((extension) => !!getExtensionField(extension, "addNodeView")).map((extension) => {
        const extensionAttributes = this.attributes.filter((attribute) => attribute.type === extension.name);
        const context = {
          name: extension.name,
          options: extension.options,
          storage: this.editor.extensionStorage[extension.name],
          editor,
          type: getNodeType(extension.name, this.schema)
        };
        const addNodeView = getExtensionField(extension, "addNodeView", context);
        if (!addNodeView) {
          return [];
        }
        const nodeViewResult = addNodeView();
        if (!nodeViewResult) {
          return [];
        }
        const nodeview = (node, view, getPos, decorations, innerDecorations) => {
          const HTMLAttributes = getRenderedAttributes(node, extensionAttributes);
          return nodeViewResult({
            // pass-through
            node,
            view,
            getPos,
            decorations,
            innerDecorations,
            // tiptap-specific
            editor,
            extension,
            HTMLAttributes
          });
        };
        return [extension.name, nodeview];
      })
    );
  }
  /**
   * Get the composed dispatchTransaction function from all extensions.
   * @param baseDispatch The base dispatch function (e.g. from the editor or user props)
   * @returns A composed dispatch function
   */
  dispatchTransaction(baseDispatch) {
    const { editor } = this;
    const extensions = sortExtensions([...this.extensions].reverse());
    return extensions.reduceRight((next, extension) => {
      const context = {
        name: extension.name,
        options: extension.options,
        storage: this.editor.extensionStorage[extension.name],
        editor,
        type: getSchemaTypeByName(extension.name, this.schema)
      };
      const dispatchTransaction = getExtensionField(
        extension,
        "dispatchTransaction",
        context
      );
      if (!dispatchTransaction) {
        return next;
      }
      return (transaction) => {
        dispatchTransaction.call(context, { transaction, next });
      };
    }, baseDispatch);
  }
  /**
   * Get the composed transformPastedHTML function from all extensions.
   * @param baseTransform The base transform function (e.g. from the editor props)
   * @returns A composed transform function that chains all extension transforms
   */
  transformPastedHTML(baseTransform) {
    const { editor } = this;
    const extensions = sortExtensions([...this.extensions]);
    return extensions.reduce(
      (transform, extension) => {
        const context = {
          name: extension.name,
          options: extension.options,
          storage: this.editor.extensionStorage[extension.name],
          editor,
          type: getSchemaTypeByName(extension.name, this.schema)
        };
        const extensionTransform = getExtensionField(
          extension,
          "transformPastedHTML",
          context
        );
        if (!extensionTransform) {
          return transform;
        }
        return (html, view) => {
          const transformedHtml = transform(html, view);
          return extensionTransform.call(context, transformedHtml);
        };
      },
      baseTransform || ((html) => html)
    );
  }
  get markViews() {
    const { editor } = this;
    const { markExtensions } = splitExtensions(this.extensions);
    return Object.fromEntries(
      markExtensions.filter((extension) => !!getExtensionField(extension, "addMarkView")).map((extension) => {
        const extensionAttributes = this.attributes.filter((attribute) => attribute.type === extension.name);
        const context = {
          name: extension.name,
          options: extension.options,
          storage: this.editor.extensionStorage[extension.name],
          editor,
          type: getMarkType(extension.name, this.schema)
        };
        const addMarkView = getExtensionField(extension, "addMarkView", context);
        if (!addMarkView) {
          return [];
        }
        const markView = (mark, view, inline2) => {
          const HTMLAttributes = getRenderedAttributes(mark, extensionAttributes);
          return addMarkView()({
            // pass-through
            mark,
            view,
            inline: inline2,
            // tiptap-specific
            editor,
            extension,
            HTMLAttributes,
            updateAttributes: (attrs) => {
              updateMarkViewAttributes(mark, editor, attrs);
            }
          });
        };
        return [extension.name, markView];
      })
    );
  }
  /**
   * Go through all extensions, create extension storages & setup marks
   * & bind editor event listener.
   */
  setupExtensions() {
    const extensions = this.extensions;
    this.editor.extensionStorage = Object.fromEntries(
      extensions.map((extension) => [extension.name, extension.storage])
    );
    extensions.forEach((extension) => {
      var _a2;
      const context = {
        name: extension.name,
        options: extension.options,
        storage: this.editor.extensionStorage[extension.name],
        editor: this.editor,
        type: getSchemaTypeByName(extension.name, this.schema)
      };
      if (extension.type === "mark") {
        const keepOnSplit = (_a2 = callOrReturn(getExtensionField(extension, "keepOnSplit", context))) != null ? _a2 : true;
        if (keepOnSplit) {
          this.splittableMarks.push(extension.name);
        }
      }
      const onBeforeCreate = getExtensionField(extension, "onBeforeCreate", context);
      const onCreate = getExtensionField(extension, "onCreate", context);
      const onUpdate = getExtensionField(extension, "onUpdate", context);
      const onSelectionUpdate = getExtensionField(
        extension,
        "onSelectionUpdate",
        context
      );
      const onTransaction = getExtensionField(extension, "onTransaction", context);
      const onFocus = getExtensionField(extension, "onFocus", context);
      const onBlur = getExtensionField(extension, "onBlur", context);
      const onDestroy = getExtensionField(extension, "onDestroy", context);
      if (onBeforeCreate) {
        this.editor.on("beforeCreate", onBeforeCreate);
      }
      if (onCreate) {
        this.editor.on("create", onCreate);
      }
      if (onUpdate) {
        this.editor.on("update", onUpdate);
      }
      if (onSelectionUpdate) {
        this.editor.on("selectionUpdate", onSelectionUpdate);
      }
      if (onTransaction) {
        this.editor.on("transaction", onTransaction);
      }
      if (onFocus) {
        this.editor.on("focus", onFocus);
      }
      if (onBlur) {
        this.editor.on("blur", onBlur);
      }
      if (onDestroy) {
        this.editor.on("destroy", onDestroy);
      }
    });
  }
};
ExtensionManager.resolve = resolveExtensions;
ExtensionManager.sort = sortExtensions;
ExtensionManager.flatten = flattenExtensions;
var extensions_exports = {};
__export$1(extensions_exports, {
  ClipboardTextSerializer: () => ClipboardTextSerializer,
  Commands: () => Commands,
  Delete: () => Delete,
  Drop: () => Drop,
  Editable: () => Editable,
  FocusEvents: () => FocusEvents,
  Keymap: () => Keymap,
  Paste: () => Paste,
  Tabindex: () => Tabindex,
  TextDirection: () => TextDirection,
  focusEventsPluginKey: () => focusEventsPluginKey
});
var Extension = class _Extension extends Extendable {
  constructor() {
    super(...arguments);
    this.type = "extension";
  }
  /**
   * Create a new Extension instance
   * @param config - Extension configuration object or a function that returns a configuration object
   */
  static create(config = {}) {
    const resolvedConfig = typeof config === "function" ? config() : config;
    return new _Extension(resolvedConfig);
  }
  configure(options) {
    return super.configure(options);
  }
  extend(extendedConfig) {
    const resolvedConfig = typeof extendedConfig === "function" ? extendedConfig() : extendedConfig;
    return super.extend(resolvedConfig);
  }
};
var ClipboardTextSerializer = Extension.create({
  name: "clipboardTextSerializer",
  addOptions() {
    return {
      blockSeparator: void 0
    };
  },
  addProseMirrorPlugins() {
    return [
      new Plugin({
        key: new PluginKey("clipboardTextSerializer"),
        props: {
          clipboardTextSerializer: () => {
            const { editor } = this;
            const { state, schema } = editor;
            const { doc: doc2, selection } = state;
            const { ranges } = selection;
            const from2 = Math.min(...ranges.map((range2) => range2.$from.pos));
            const to = Math.max(...ranges.map((range2) => range2.$to.pos));
            const textSerializers = getTextSerializersFromSchema(schema);
            const range = { from: from2, to };
            return getTextBetween(doc2, range, {
              ...this.options.blockSeparator !== void 0 ? { blockSeparator: this.options.blockSeparator } : {},
              textSerializers
            });
          }
        }
      })
    ];
  }
});
var Commands = Extension.create({
  name: "commands",
  addCommands() {
    return {
      ...commands_exports
    };
  }
});
var Delete = Extension.create({
  name: "delete",
  onUpdate({ transaction, appendedTransactions }) {
    var _a2, _b, _c;
    const callback = () => {
      var _a22, _b2, _c2, _d;
      if ((_d = (_c2 = (_b2 = (_a22 = this.editor.options.coreExtensionOptions) == null ? void 0 : _a22.delete) == null ? void 0 : _b2.filterTransaction) == null ? void 0 : _c2.call(_b2, transaction)) != null ? _d : transaction.getMeta("y-sync$")) {
        return;
      }
      const nextTransaction = combineTransactionSteps(transaction.before, [transaction, ...appendedTransactions]);
      const changes = getChangedRanges(nextTransaction);
      changes.forEach((change) => {
        if (nextTransaction.mapping.mapResult(change.oldRange.from).deletedAfter && nextTransaction.mapping.mapResult(change.oldRange.to).deletedBefore) {
          nextTransaction.before.nodesBetween(change.oldRange.from, change.oldRange.to, (node, from2) => {
            const to = from2 + node.nodeSize - 2;
            const isFullyWithinRange = change.oldRange.from <= from2 && to <= change.oldRange.to;
            this.editor.emit("delete", {
              type: "node",
              node,
              from: from2,
              to,
              newFrom: nextTransaction.mapping.map(from2),
              newTo: nextTransaction.mapping.map(to),
              deletedRange: change.oldRange,
              newRange: change.newRange,
              partial: !isFullyWithinRange,
              editor: this.editor,
              transaction,
              combinedTransform: nextTransaction
            });
          });
        }
      });
      const mapping = nextTransaction.mapping;
      nextTransaction.steps.forEach((step, index2) => {
        var _a3, _b3;
        if (step instanceof RemoveMarkStep) {
          const newStart = mapping.slice(index2).map(step.from, -1);
          const newEnd = mapping.slice(index2).map(step.to);
          const oldStart = mapping.invert().map(newStart, -1);
          const oldEnd = mapping.invert().map(newEnd);
          const foundBeforeMark = (_a3 = nextTransaction.doc.nodeAt(newStart - 1)) == null ? void 0 : _a3.marks.some((mark) => mark.eq(step.mark));
          const foundAfterMark = (_b3 = nextTransaction.doc.nodeAt(newEnd)) == null ? void 0 : _b3.marks.some((mark) => mark.eq(step.mark));
          this.editor.emit("delete", {
            type: "mark",
            mark: step.mark,
            from: step.from,
            to: step.to,
            deletedRange: {
              from: oldStart,
              to: oldEnd
            },
            newRange: {
              from: newStart,
              to: newEnd
            },
            partial: Boolean(foundAfterMark || foundBeforeMark),
            editor: this.editor,
            transaction,
            combinedTransform: nextTransaction
          });
        }
      });
    };
    if ((_c = (_b = (_a2 = this.editor.options.coreExtensionOptions) == null ? void 0 : _a2.delete) == null ? void 0 : _b.async) != null ? _c : true) {
      setTimeout(callback, 0);
    } else {
      callback();
    }
  }
});
var Drop = Extension.create({
  name: "drop",
  addProseMirrorPlugins() {
    return [
      new Plugin({
        key: new PluginKey("tiptapDrop"),
        props: {
          handleDrop: (_2, e, slice2, moved) => {
            this.editor.emit("drop", {
              editor: this.editor,
              event: e,
              slice: slice2,
              moved
            });
          }
        }
      })
    ];
  }
});
var Editable = Extension.create({
  name: "editable",
  addProseMirrorPlugins() {
    return [
      new Plugin({
        key: new PluginKey("editable"),
        props: {
          editable: () => this.editor.options.editable
        }
      })
    ];
  }
});
var focusEventsPluginKey = new PluginKey("focusEvents");
var FocusEvents = Extension.create({
  name: "focusEvents",
  addProseMirrorPlugins() {
    const { editor } = this;
    return [
      new Plugin({
        key: focusEventsPluginKey,
        props: {
          handleDOMEvents: {
            focus: (view, event) => {
              editor.isFocused = true;
              const transaction = editor.state.tr.setMeta("focus", { event }).setMeta("addToHistory", false);
              view.dispatch(transaction);
              return false;
            },
            blur: (view, event) => {
              editor.isFocused = false;
              const transaction = editor.state.tr.setMeta("blur", { event }).setMeta("addToHistory", false);
              view.dispatch(transaction);
              return false;
            }
          }
        }
      })
    ];
  }
});
var Keymap = Extension.create({
  name: "keymap",
  addKeyboardShortcuts() {
    const handleBackspace2 = () => this.editor.commands.first(({ commands }) => [
      () => commands.undoInputRule(),
      // maybe convert first text block node to default node
      () => commands.command(({ tr: tr2 }) => {
        const { selection, doc: doc2 } = tr2;
        const { empty: empty2, $anchor } = selection;
        const { pos, parent } = $anchor;
        const $parentPos = $anchor.parent.isTextblock && pos > 0 ? tr2.doc.resolve(pos - 1) : $anchor;
        const parentIsIsolating = $parentPos.parent.type.spec.isolating;
        const parentPos = $anchor.pos - $anchor.parentOffset;
        const isAtStart = parentIsIsolating && $parentPos.parent.childCount === 1 ? parentPos === $anchor.pos : Selection.atStart(doc2).from === pos;
        if (!empty2 || !parent.type.isTextblock || parent.textContent.length || !isAtStart || isAtStart && $anchor.parent.type.name === "paragraph") {
          return false;
        }
        return commands.clearNodes();
      }),
      () => commands.deleteSelection(),
      () => commands.joinBackward(),
      () => commands.selectNodeBackward()
    ]);
    const handleDelete2 = () => this.editor.commands.first(({ commands }) => [
      () => commands.deleteSelection(),
      () => commands.deleteCurrentNode(),
      () => commands.joinForward(),
      () => commands.selectNodeForward()
    ]);
    const handleEnter = () => this.editor.commands.first(({ commands }) => [
      () => commands.newlineInCode(),
      () => commands.createParagraphNear(),
      () => commands.liftEmptyBlock(),
      () => commands.splitBlock()
    ]);
    const baseKeymap = {
      Enter: handleEnter,
      "Mod-Enter": () => this.editor.commands.exitCode(),
      Backspace: handleBackspace2,
      "Mod-Backspace": handleBackspace2,
      "Shift-Backspace": handleBackspace2,
      Delete: handleDelete2,
      "Mod-Delete": handleDelete2,
      "Mod-a": () => this.editor.commands.selectAll()
    };
    const pcKeymap = {
      ...baseKeymap
    };
    const macKeymap = {
      ...baseKeymap,
      "Ctrl-h": handleBackspace2,
      "Alt-Backspace": handleBackspace2,
      "Ctrl-d": handleDelete2,
      "Ctrl-Alt-Backspace": handleDelete2,
      "Alt-Delete": handleDelete2,
      "Alt-d": handleDelete2,
      "Ctrl-a": () => this.editor.commands.selectTextblockStart(),
      "Ctrl-e": () => this.editor.commands.selectTextblockEnd()
    };
    if (isiOS() || isMacOS()) {
      return macKeymap;
    }
    return pcKeymap;
  },
  addProseMirrorPlugins() {
    return [
      // With this plugin we check if the whole document was selected and deleted.
      // In this case we will additionally call `clearNodes()` to convert e.g. a heading
      // to a paragraph if necessary.
      // This is an alternative to ProseMirror's `AllSelection`, which doesn’t work well
      // with many other commands.
      new Plugin({
        key: new PluginKey("clearDocument"),
        appendTransaction: (transactions, oldState, newState) => {
          if (transactions.some((tr22) => tr22.getMeta("composition"))) {
            return;
          }
          const docChanges = transactions.some((transaction) => transaction.docChanged) && !oldState.doc.eq(newState.doc);
          const ignoreTr = transactions.some((transaction) => transaction.getMeta("preventClearDocument"));
          if (!docChanges || ignoreTr) {
            return;
          }
          const { empty: empty2, from: from2, to } = oldState.selection;
          const allFrom = Selection.atStart(oldState.doc).from;
          const allEnd = Selection.atEnd(oldState.doc).to;
          const allWasSelected = from2 === allFrom && to === allEnd;
          if (empty2 || !allWasSelected) {
            return;
          }
          const isEmpty = isNodeEmpty(newState.doc);
          if (!isEmpty) {
            return;
          }
          const tr2 = newState.tr;
          const state = createChainableState({
            state: newState,
            transaction: tr2
          });
          const { commands } = new CommandManager({
            editor: this.editor,
            state
          });
          commands.clearNodes();
          if (!tr2.steps.length) {
            return;
          }
          return tr2;
        }
      })
    ];
  }
});
var Paste = Extension.create({
  name: "paste",
  addProseMirrorPlugins() {
    return [
      new Plugin({
        key: new PluginKey("tiptapPaste"),
        props: {
          handlePaste: (_view, e, slice2) => {
            this.editor.emit("paste", {
              editor: this.editor,
              event: e,
              slice: slice2
            });
          }
        }
      })
    ];
  }
});
var Tabindex = Extension.create({
  name: "tabindex",
  addProseMirrorPlugins() {
    return [
      new Plugin({
        key: new PluginKey("tabindex"),
        props: {
          attributes: () => this.editor.isEditable ? { tabindex: "0" } : {}
        }
      })
    ];
  }
});
var TextDirection = Extension.create({
  name: "textDirection",
  addOptions() {
    return {
      direction: void 0
    };
  },
  addGlobalAttributes() {
    if (!this.options.direction) {
      return [];
    }
    const { nodeExtensions } = splitExtensions(this.extensions);
    return [
      {
        types: nodeExtensions.filter((extension) => extension.name !== "text").map((extension) => extension.name),
        attributes: {
          dir: {
            default: this.options.direction,
            parseHTML: (element) => {
              const dir = element.getAttribute("dir");
              if (dir && (dir === "ltr" || dir === "rtl" || dir === "auto")) {
                return dir;
              }
              return this.options.direction;
            },
            renderHTML: (attributes) => {
              if (!attributes.dir) {
                return {};
              }
              return {
                dir: attributes.dir
              };
            }
          }
        }
      }
    ];
  },
  addProseMirrorPlugins() {
    return [
      new Plugin({
        key: new PluginKey("textDirection"),
        props: {
          attributes: () => {
            const direction = this.options.direction;
            if (!direction) {
              return {};
            }
            return {
              dir: direction
            };
          }
        }
      })
    ];
  }
});
var NodePos = class _NodePos {
  constructor(pos, editor, isBlock = false, node = null) {
    this.currentNode = null;
    this.actualDepth = null;
    this.isBlock = isBlock;
    this.resolvedPos = pos;
    this.editor = editor;
    this.currentNode = node;
  }
  get name() {
    return this.node.type.name;
  }
  get node() {
    return this.currentNode || this.resolvedPos.node();
  }
  get element() {
    return this.editor.view.domAtPos(this.pos).node;
  }
  get depth() {
    var _a2;
    return (_a2 = this.actualDepth) != null ? _a2 : this.resolvedPos.depth;
  }
  get pos() {
    return this.resolvedPos.pos;
  }
  get content() {
    return this.node.content;
  }
  set content(content) {
    let from2 = this.from;
    let to = this.to;
    if (this.isBlock) {
      if (this.content.size === 0) {
        console.error(`You can’t set content on a block node. Tried to set content on ${this.name} at ${this.pos}`);
        return;
      }
      from2 = this.from + 1;
      to = this.to - 1;
    }
    this.editor.commands.insertContentAt({ from: from2, to }, content);
  }
  get attributes() {
    return this.node.attrs;
  }
  get textContent() {
    return this.node.textContent;
  }
  get size() {
    return this.node.nodeSize;
  }
  get from() {
    if (this.isBlock) {
      return this.pos;
    }
    return this.resolvedPos.start(this.resolvedPos.depth);
  }
  get range() {
    return {
      from: this.from,
      to: this.to
    };
  }
  get to() {
    if (this.isBlock) {
      return this.pos + this.size;
    }
    return this.resolvedPos.end(this.resolvedPos.depth) + (this.node.isText ? 0 : 1);
  }
  get parent() {
    if (this.depth === 0) {
      return null;
    }
    const parentPos = this.resolvedPos.start(this.resolvedPos.depth - 1);
    const $pos = this.resolvedPos.doc.resolve(parentPos);
    return new _NodePos($pos, this.editor);
  }
  get before() {
    let $pos = this.resolvedPos.doc.resolve(this.from - (this.isBlock ? 1 : 2));
    if ($pos.depth !== this.depth) {
      $pos = this.resolvedPos.doc.resolve(this.from - 3);
    }
    return new _NodePos($pos, this.editor);
  }
  get after() {
    let $pos = this.resolvedPos.doc.resolve(this.to + (this.isBlock ? 2 : 1));
    if ($pos.depth !== this.depth) {
      $pos = this.resolvedPos.doc.resolve(this.to + 3);
    }
    return new _NodePos($pos, this.editor);
  }
  get children() {
    const children = [];
    this.node.content.forEach((node, offset2) => {
      const isBlock = node.isBlock && !node.isTextblock;
      const isNonTextAtom = node.isAtom && !node.isText;
      const isInline2 = node.isInline;
      const targetPos = this.pos + offset2 + (isNonTextAtom ? 0 : 1);
      if (targetPos < 0 || targetPos > this.resolvedPos.doc.nodeSize - 2) {
        return;
      }
      const $pos = this.resolvedPos.doc.resolve(targetPos);
      if (!isBlock && !isInline2 && $pos.depth <= this.depth) {
        return;
      }
      const childNodePos = new _NodePos($pos, this.editor, isBlock, isBlock || isInline2 ? node : null);
      if (isBlock) {
        childNodePos.actualDepth = this.depth + 1;
      }
      children.push(childNodePos);
    });
    return children;
  }
  get firstChild() {
    return this.children[0] || null;
  }
  get lastChild() {
    const children = this.children;
    return children[children.length - 1] || null;
  }
  closest(selector, attributes = {}) {
    let node = null;
    let currentNode = this.parent;
    while (currentNode && !node) {
      if (currentNode.node.type.name === selector) {
        if (Object.keys(attributes).length > 0) {
          const nodeAttributes = currentNode.node.attrs;
          const attrKeys = Object.keys(attributes);
          for (let index2 = 0; index2 < attrKeys.length; index2 += 1) {
            const key = attrKeys[index2];
            if (nodeAttributes[key] !== attributes[key]) {
              break;
            }
          }
        } else {
          node = currentNode;
        }
      }
      currentNode = currentNode.parent;
    }
    return node;
  }
  querySelector(selector, attributes = {}) {
    return this.querySelectorAll(selector, attributes, true)[0] || null;
  }
  querySelectorAll(selector, attributes = {}, firstItemOnly = false) {
    let nodes = [];
    if (!this.children || this.children.length === 0) {
      return nodes;
    }
    const attrKeys = Object.keys(attributes);
    this.children.forEach((childPos) => {
      if (firstItemOnly && nodes.length > 0) {
        return;
      }
      if (childPos.node.type.name === selector) {
        const doesAllAttributesMatch = attrKeys.every((key) => attributes[key] === childPos.node.attrs[key]);
        if (doesAllAttributesMatch) {
          nodes.push(childPos);
        }
      }
      if (firstItemOnly && nodes.length > 0) {
        return;
      }
      nodes = nodes.concat(childPos.querySelectorAll(selector, attributes, firstItemOnly));
    });
    return nodes;
  }
  setAttribute(attributes) {
    const { tr: tr2 } = this.editor.state;
    tr2.setNodeMarkup(this.from, void 0, {
      ...this.node.attrs,
      ...attributes
    });
    this.editor.view.dispatch(tr2);
  }
};
var style = `.ProseMirror {
  position: relative;
}

.ProseMirror {
  word-wrap: break-word;
  white-space: pre-wrap;
  white-space: break-spaces;
  -webkit-font-variant-ligatures: none;
  font-variant-ligatures: none;
  font-feature-settings: "liga" 0; /* the above doesn't seem to work in Edge */
}

.ProseMirror [contenteditable="false"] {
  white-space: normal;
}

.ProseMirror [contenteditable="false"] [contenteditable="true"] {
  white-space: pre-wrap;
}

.ProseMirror pre {
  white-space: pre-wrap;
}

img.ProseMirror-separator {
  display: inline !important;
  border: none !important;
  margin: 0 !important;
  width: 0 !important;
  height: 0 !important;
}

.ProseMirror-gapcursor {
  display: none;
  pointer-events: none;
  position: absolute;
  margin: 0;
}

.ProseMirror-gapcursor:after {
  content: "";
  display: block;
  position: absolute;
  top: -2px;
  width: 20px;
  border-top: 1px solid black;
  animation: ProseMirror-cursor-blink 1.1s steps(2, start) infinite;
}

@keyframes ProseMirror-cursor-blink {
  to {
    visibility: hidden;
  }
}

.ProseMirror-hideselection *::selection {
  background: transparent;
}

.ProseMirror-hideselection *::-moz-selection {
  background: transparent;
}

.ProseMirror-hideselection * {
  caret-color: transparent;
}

.ProseMirror-focused .ProseMirror-gapcursor {
  display: block;
}`;
function createStyleTag(style2, nonce, suffix) {
  const tiptapStyleTag = document.querySelector(`style[data-tiptap-style${""}]`);
  if (tiptapStyleTag !== null) {
    return tiptapStyleTag;
  }
  const styleNode = document.createElement("style");
  if (nonce) {
    styleNode.setAttribute("nonce", nonce);
  }
  styleNode.setAttribute(`data-tiptap-style${""}`, "");
  styleNode.innerHTML = style2;
  document.getElementsByTagName("head")[0].appendChild(styleNode);
  return styleNode;
}
var Editor$1 = class Editor extends EventEmitter {
  constructor(options = {}) {
    super();
    this.css = null;
    this.className = "tiptap";
    this.editorView = null;
    this.isFocused = false;
    this.isInitialized = false;
    this.extensionStorage = {};
    this.instanceId = Math.random().toString(36).slice(2, 9);
    this.options = {
      element: typeof document !== "undefined" ? document.createElement("div") : null,
      content: "",
      injectCSS: true,
      injectNonce: void 0,
      extensions: [],
      autofocus: false,
      editable: true,
      textDirection: void 0,
      editorProps: {},
      parseOptions: {},
      coreExtensionOptions: {},
      enableInputRules: true,
      enablePasteRules: true,
      enableCoreExtensions: true,
      enableContentCheck: false,
      emitContentError: false,
      onBeforeCreate: () => null,
      onCreate: () => null,
      onMount: () => null,
      onUnmount: () => null,
      onUpdate: () => null,
      onSelectionUpdate: () => null,
      onTransaction: () => null,
      onFocus: () => null,
      onBlur: () => null,
      onDestroy: () => null,
      onContentError: ({ error }) => {
        throw error;
      },
      onPaste: () => null,
      onDrop: () => null,
      onDelete: () => null,
      enableExtensionDispatchTransaction: true
    };
    this.isCapturingTransaction = false;
    this.capturedTransaction = null;
    this.utils = {
      getUpdatedPosition,
      createMappablePosition
    };
    this.setOptions(options);
    this.createExtensionManager();
    this.createCommandManager();
    this.createSchema();
    this.on("beforeCreate", this.options.onBeforeCreate);
    this.emit("beforeCreate", { editor: this });
    this.on("mount", this.options.onMount);
    this.on("unmount", this.options.onUnmount);
    this.on("contentError", this.options.onContentError);
    this.on("create", this.options.onCreate);
    this.on("update", this.options.onUpdate);
    this.on("selectionUpdate", this.options.onSelectionUpdate);
    this.on("transaction", this.options.onTransaction);
    this.on("focus", this.options.onFocus);
    this.on("blur", this.options.onBlur);
    this.on("destroy", this.options.onDestroy);
    this.on("drop", ({ event, slice: slice2, moved }) => this.options.onDrop(event, slice2, moved));
    this.on("paste", ({ event, slice: slice2 }) => this.options.onPaste(event, slice2));
    this.on("delete", this.options.onDelete);
    const initialDoc = this.createDoc();
    const selection = resolveFocusPosition(initialDoc, this.options.autofocus);
    this.editorState = EditorState.create({
      doc: initialDoc,
      schema: this.schema,
      selection: selection || void 0
    });
    if (this.options.element) {
      this.mount(this.options.element);
    }
  }
  /**
   * Attach the editor to the DOM, creating a new editor view.
   */
  mount(el) {
    if (typeof document === "undefined") {
      throw new Error(
        `[tiptap error]: The editor cannot be mounted because there is no 'document' defined in this environment.`
      );
    }
    this.createView(el);
    this.emit("mount", { editor: this });
    if (this.css && !document.head.contains(this.css)) {
      document.head.appendChild(this.css);
    }
    window.setTimeout(() => {
      if (this.isDestroyed) {
        return;
      }
      if (this.options.autofocus !== false && this.options.autofocus !== null) {
        this.commands.focus(this.options.autofocus);
      }
      this.emit("create", { editor: this });
      this.isInitialized = true;
    }, 0);
  }
  /**
   * Remove the editor from the DOM, but still allow remounting at a different point in time
   */
  unmount() {
    if (this.editorView) {
      const dom = this.editorView.dom;
      if (dom == null ? void 0 : dom.editor) {
        delete dom.editor;
      }
      this.editorView.destroy();
    }
    this.editorView = null;
    this.isInitialized = false;
    if (this.css && !document.querySelectorAll(`.${this.className}`).length) {
      try {
        if (typeof this.css.remove === "function") {
          this.css.remove();
        } else if (this.css.parentNode) {
          this.css.parentNode.removeChild(this.css);
        }
      } catch (error) {
        console.warn("Failed to remove CSS element:", error);
      }
    }
    this.css = null;
    this.emit("unmount", { editor: this });
  }
  /**
   * Returns the editor storage.
   */
  get storage() {
    return this.extensionStorage;
  }
  /**
   * An object of all registered commands.
   */
  get commands() {
    return this.commandManager.commands;
  }
  /**
   * Create a command chain to call multiple commands at once.
   */
  chain() {
    return this.commandManager.chain();
  }
  /**
   * Check if a command or a command chain can be executed. Without executing it.
   */
  can() {
    return this.commandManager.can();
  }
  /**
   * Inject CSS styles.
   */
  injectCSS() {
    if (this.options.injectCSS && typeof document !== "undefined") {
      this.css = createStyleTag(style, this.options.injectNonce);
    }
  }
  /**
   * Update editor options.
   *
   * @param options A list of options
   */
  setOptions(options = {}) {
    this.options = {
      ...this.options,
      ...options
    };
    if (!this.editorView || !this.state || this.isDestroyed) {
      return;
    }
    if (this.options.editorProps) {
      this.view.setProps(this.options.editorProps);
    }
    this.view.updateState(this.state);
  }
  /**
   * Update editable state of the editor.
   */
  setEditable(editable, emitUpdate = true) {
    this.setOptions({ editable });
    if (emitUpdate) {
      this.emit("update", { editor: this, transaction: this.state.tr, appendedTransactions: [] });
    }
  }
  /**
   * Returns whether the editor is editable.
   */
  get isEditable() {
    return this.options.editable && this.view && this.view.editable;
  }
  /**
   * Returns the editor view.
   */
  get view() {
    if (this.editorView) {
      return this.editorView;
    }
    return new Proxy(
      {
        state: this.editorState,
        updateState: (state) => {
          this.editorState = state;
        },
        dispatch: (tr2) => {
          this.dispatchTransaction(tr2);
        },
        // Stub some commonly accessed properties to prevent errors
        composing: false,
        dragging: null,
        editable: true,
        isDestroyed: false
      },
      {
        get: (obj, key) => {
          if (this.editorView) {
            return this.editorView[key];
          }
          if (key === "state") {
            return this.editorState;
          }
          if (key in obj) {
            return Reflect.get(obj, key);
          }
          throw new Error(
            `[tiptap error]: The editor view is not available. Cannot access view['${key}']. The editor may not be mounted yet.`
          );
        }
      }
    );
  }
  /**
   * Returns the editor state.
   */
  get state() {
    if (this.editorView) {
      this.editorState = this.view.state;
    }
    return this.editorState;
  }
  /**
   * Register a ProseMirror plugin.
   *
   * @param plugin A ProseMirror plugin
   * @param handlePlugins Control how to merge the plugin into the existing plugins.
   * @returns The new editor state
   */
  registerPlugin(plugin, handlePlugins) {
    const plugins = isFunction$1(handlePlugins) ? handlePlugins(plugin, [...this.state.plugins]) : [...this.state.plugins, plugin];
    const state = this.state.reconfigure({ plugins });
    this.view.updateState(state);
    return state;
  }
  /**
   * Unregister a ProseMirror plugin.
   *
   * @param nameOrPluginKeyToRemove The plugins name
   * @returns The new editor state or undefined if the editor is destroyed
   */
  unregisterPlugin(nameOrPluginKeyToRemove) {
    if (this.isDestroyed) {
      return void 0;
    }
    const prevPlugins = this.state.plugins;
    let plugins = prevPlugins;
    [].concat(nameOrPluginKeyToRemove).forEach((nameOrPluginKey) => {
      const name = typeof nameOrPluginKey === "string" ? `${nameOrPluginKey}$` : nameOrPluginKey.key;
      plugins = plugins.filter((plugin) => !plugin.key.startsWith(name));
    });
    if (prevPlugins.length === plugins.length) {
      return void 0;
    }
    const state = this.state.reconfigure({
      plugins
    });
    this.view.updateState(state);
    return state;
  }
  /**
   * Creates an extension manager.
   */
  createExtensionManager() {
    var _a2, _b;
    const coreExtensions = this.options.enableCoreExtensions ? [
      Editable,
      ClipboardTextSerializer.configure({
        blockSeparator: (_b = (_a2 = this.options.coreExtensionOptions) == null ? void 0 : _a2.clipboardTextSerializer) == null ? void 0 : _b.blockSeparator
      }),
      Commands,
      FocusEvents,
      Keymap,
      Tabindex,
      Drop,
      Paste,
      Delete,
      TextDirection.configure({
        direction: this.options.textDirection
      })
    ].filter((ext) => {
      if (typeof this.options.enableCoreExtensions === "object") {
        return this.options.enableCoreExtensions[ext.name] !== false;
      }
      return true;
    }) : [];
    const allExtensions = [...coreExtensions, ...this.options.extensions].filter((extension) => {
      return ["extension", "node", "mark"].includes(extension == null ? void 0 : extension.type);
    });
    this.extensionManager = new ExtensionManager(allExtensions, this);
  }
  /**
   * Creates an command manager.
   */
  createCommandManager() {
    this.commandManager = new CommandManager({
      editor: this
    });
  }
  /**
   * Creates a ProseMirror schema.
   */
  createSchema() {
    this.schema = this.extensionManager.schema;
  }
  /**
   * Creates the initial document.
   */
  createDoc() {
    let doc2;
    try {
      doc2 = createDocument(this.options.content, this.schema, this.options.parseOptions, {
        errorOnInvalidContent: this.options.enableContentCheck
      });
    } catch (e) {
      if (!(e instanceof Error) || !["[tiptap error]: Invalid JSON content", "[tiptap error]: Invalid HTML content"].includes(e.message)) {
        throw e;
      }
      this.emit("contentError", {
        editor: this,
        error: e,
        disableCollaboration: () => {
          if ("collaboration" in this.storage && typeof this.storage.collaboration === "object" && this.storage.collaboration) {
            this.storage.collaboration.isDisabled = true;
          }
          this.options.extensions = this.options.extensions.filter((extension) => extension.name !== "collaboration");
          this.createExtensionManager();
        }
      });
      doc2 = createDocument(this.options.content, this.schema, this.options.parseOptions, {
        errorOnInvalidContent: false
      });
    }
    return doc2;
  }
  /**
   * Creates a ProseMirror view.
   */
  createView(element) {
    const { editorProps, enableExtensionDispatchTransaction } = this.options;
    const baseDispatch = editorProps.dispatchTransaction || this.dispatchTransaction.bind(this);
    const dispatch = enableExtensionDispatchTransaction ? this.extensionManager.dispatchTransaction(baseDispatch) : baseDispatch;
    const baseTransformPastedHTML = editorProps.transformPastedHTML;
    const transformPastedHTML = this.extensionManager.transformPastedHTML(baseTransformPastedHTML);
    this.editorView = new EditorView(element, {
      ...editorProps,
      attributes: {
        // add `role="textbox"` to the editor element
        role: "textbox",
        ...editorProps == null ? void 0 : editorProps.attributes
      },
      dispatchTransaction: dispatch,
      transformPastedHTML,
      state: this.editorState,
      markViews: this.extensionManager.markViews,
      nodeViews: this.extensionManager.nodeViews
    });
    const newState = this.state.reconfigure({
      plugins: this.extensionManager.plugins
    });
    this.view.updateState(newState);
    this.prependClass();
    this.injectCSS();
    const dom = this.view.dom;
    dom.editor = this;
  }
  /**
   * Creates all node and mark views.
   */
  createNodeViews() {
    if (this.view.isDestroyed) {
      return;
    }
    this.view.setProps({
      markViews: this.extensionManager.markViews,
      nodeViews: this.extensionManager.nodeViews
    });
  }
  /**
   * Prepend class name to element.
   */
  prependClass() {
    this.view.dom.className = `${this.className} ${this.view.dom.className}`;
  }
  captureTransaction(fn) {
    this.isCapturingTransaction = true;
    fn();
    this.isCapturingTransaction = false;
    const tr2 = this.capturedTransaction;
    this.capturedTransaction = null;
    return tr2;
  }
  /**
   * The callback over which to send transactions (state updates) produced by the view.
   *
   * @param transaction An editor state transaction
   */
  dispatchTransaction(transaction) {
    if (this.view.isDestroyed) {
      return;
    }
    if (this.isCapturingTransaction) {
      if (!this.capturedTransaction) {
        this.capturedTransaction = transaction;
        return;
      }
      transaction.steps.forEach((step) => {
        var _a2;
        return (_a2 = this.capturedTransaction) == null ? void 0 : _a2.step(step);
      });
      return;
    }
    const { state, transactions } = this.state.applyTransaction(transaction);
    const selectionHasChanged = !this.state.selection.eq(state.selection);
    const rootTrWasApplied = transactions.includes(transaction);
    const prevState = this.state;
    this.emit("beforeTransaction", {
      editor: this,
      transaction,
      nextState: state
    });
    if (!rootTrWasApplied) {
      return;
    }
    this.view.updateState(state);
    this.emit("transaction", {
      editor: this,
      transaction,
      appendedTransactions: transactions.slice(1)
    });
    if (selectionHasChanged) {
      this.emit("selectionUpdate", {
        editor: this,
        transaction
      });
    }
    const mostRecentFocusTr = transactions.findLast((tr2) => tr2.getMeta("focus") || tr2.getMeta("blur"));
    const focus2 = mostRecentFocusTr == null ? void 0 : mostRecentFocusTr.getMeta("focus");
    const blur2 = mostRecentFocusTr == null ? void 0 : mostRecentFocusTr.getMeta("blur");
    if (focus2) {
      this.emit("focus", {
        editor: this,
        event: focus2.event,
        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
        transaction: mostRecentFocusTr
      });
    }
    if (blur2) {
      this.emit("blur", {
        editor: this,
        event: blur2.event,
        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
        transaction: mostRecentFocusTr
      });
    }
    if (transaction.getMeta("preventUpdate") || !transactions.some((tr2) => tr2.docChanged) || prevState.doc.eq(state.doc)) {
      return;
    }
    this.emit("update", {
      editor: this,
      transaction,
      appendedTransactions: transactions.slice(1)
    });
  }
  /**
   * Get attributes of the currently selected node or mark.
   */
  getAttributes(nameOrType) {
    return getAttributes(this.state, nameOrType);
  }
  isActive(nameOrAttributes, attributesOrUndefined) {
    const name = typeof nameOrAttributes === "string" ? nameOrAttributes : null;
    const attributes = typeof nameOrAttributes === "string" ? attributesOrUndefined : nameOrAttributes;
    return isActive(this.state, name, attributes);
  }
  /**
   * Get the document as JSON.
   */
  getJSON() {
    return this.state.doc.toJSON();
  }
  /**
   * Get the document as HTML.
   */
  getHTML() {
    return getHTMLFromFragment(this.state.doc.content, this.schema);
  }
  /**
   * Get the document as text.
   */
  getText(options) {
    const { blockSeparator = "\n\n", textSerializers = {} } = options || {};
    return getText(this.state.doc, {
      blockSeparator,
      textSerializers: {
        ...getTextSerializersFromSchema(this.schema),
        ...textSerializers
      }
    });
  }
  /**
   * Check if there is no content.
   */
  get isEmpty() {
    return isNodeEmpty(this.state.doc);
  }
  /**
   * Destroy the editor.
   */
  destroy() {
    this.emit("destroy");
    this.unmount();
    this.removeAllListeners();
  }
  /**
   * Check if the editor is already destroyed.
   */
  get isDestroyed() {
    var _a2, _b;
    return (_b = (_a2 = this.editorView) == null ? void 0 : _a2.isDestroyed) != null ? _b : true;
  }
  $node(selector, attributes) {
    var _a2;
    return ((_a2 = this.$doc) == null ? void 0 : _a2.querySelector(selector, attributes)) || null;
  }
  $nodes(selector, attributes) {
    var _a2;
    return ((_a2 = this.$doc) == null ? void 0 : _a2.querySelectorAll(selector, attributes)) || null;
  }
  $pos(pos) {
    const $pos = this.state.doc.resolve(pos);
    return new NodePos($pos, this);
  }
  get $doc() {
    return this.$pos(0);
  }
};
function markInputRule(config) {
  return new InputRule({
    find: config.find,
    handler: ({ state, range, match }) => {
      const attributes = callOrReturn(config.getAttributes, void 0, match);
      if (attributes === false || attributes === null) {
        return null;
      }
      const { tr: tr2 } = state;
      const captureGroup = match[match.length - 1];
      const fullMatch = match[0];
      if (captureGroup) {
        const startSpaces = fullMatch.search(/\S/);
        const textStart = range.from + fullMatch.indexOf(captureGroup);
        const textEnd = textStart + captureGroup.length;
        const excludedMarks = getMarksBetween(range.from, range.to, state.doc).filter((item) => {
          const excluded = item.mark.type.excluded;
          return excluded.find((type) => type === config.type && type !== item.mark.type);
        }).filter((item) => item.to > textStart);
        if (excludedMarks.length) {
          return null;
        }
        if (textEnd < range.to) {
          tr2.delete(textEnd, range.to);
        }
        if (textStart > range.from) {
          tr2.delete(range.from + startSpaces, textStart);
        }
        const markEnd = range.from + startSpaces + captureGroup.length;
        tr2.addMark(range.from + startSpaces, markEnd, config.type.create(attributes || {}));
        tr2.removeStoredMark(config.type);
      }
    },
    undoable: config.undoable
  });
}
function nodeInputRule(config) {
  return new InputRule({
    find: config.find,
    handler: ({ state, range, match }) => {
      const attributes = callOrReturn(config.getAttributes, void 0, match) || {};
      const { tr: tr2 } = state;
      const start = range.from;
      let end = range.to;
      const newNode = config.type.create(attributes);
      if (match[1]) {
        const offset2 = match[0].lastIndexOf(match[1]);
        let matchStart = start + offset2;
        if (matchStart > end) {
          matchStart = end;
        } else {
          end = matchStart + match[1].length;
        }
        const lastChar = match[0][match[0].length - 1];
        tr2.insertText(lastChar, start + match[0].length - 1);
        tr2.replaceWith(matchStart, end, newNode);
      } else if (match[0]) {
        const insertionStart = config.type.isInline ? start : start - 1;
        tr2.insert(insertionStart, config.type.create(attributes)).delete(tr2.mapping.map(start), tr2.mapping.map(end));
      }
      tr2.scrollIntoView();
    },
    undoable: config.undoable
  });
}
function textblockTypeInputRule(config) {
  return new InputRule({
    find: config.find,
    handler: ({ state, range, match }) => {
      const $start = state.doc.resolve(range.from);
      const attributes = callOrReturn(config.getAttributes, void 0, match) || {};
      if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), config.type)) {
        return null;
      }
      state.tr.delete(range.from, range.to).setBlockType(range.from, range.from, config.type, attributes);
    },
    undoable: config.undoable
  });
}
function wrappingInputRule(config) {
  return new InputRule({
    find: config.find,
    handler: ({ state, range, match, chain }) => {
      const attributes = callOrReturn(config.getAttributes, void 0, match) || {};
      const tr2 = state.tr.delete(range.from, range.to);
      const $start = tr2.doc.resolve(range.from);
      const blockRange = $start.blockRange();
      const wrapping = blockRange && findWrapping(blockRange, config.type, attributes);
      if (!wrapping) {
        return null;
      }
      tr2.wrap(blockRange, wrapping);
      if (config.keepMarks && config.editor) {
        const { selection, storedMarks } = state;
        const { splittableMarks } = config.editor.extensionManager;
        const marks = storedMarks || selection.$to.parentOffset && selection.$from.marks();
        if (marks) {
          const filteredMarks = marks.filter((mark) => splittableMarks.includes(mark.type.name));
          tr2.ensureMarks(filteredMarks);
        }
      }
      if (config.keepAttributes) {
        const nodeType = config.type.name === "bulletList" || config.type.name === "orderedList" ? "listItem" : "taskList";
        chain().updateAttributes(nodeType, attributes).run();
      }
      const before = tr2.doc.resolve(range.from - 1).nodeBefore;
      if (before && before.type === config.type && canJoin(tr2.doc, range.from - 1) && (!config.joinPredicate || config.joinPredicate(match, before))) {
        tr2.join(range.from - 1);
      }
    },
    undoable: config.undoable
  });
}
function canInsertNode(state, nodeType) {
  const { selection } = state;
  const { $from } = selection;
  if (selection instanceof NodeSelection) {
    const index2 = $from.index();
    const parent = $from.parent;
    return parent.canReplaceWith(index2, index2 + 1, nodeType);
  }
  let depth = $from.depth;
  while (depth >= 0) {
    const index2 = $from.index(depth);
    const parent = $from.node(depth);
    const match = parent.contentMatchAt(index2);
    if (match.matchType(nodeType)) {
      return true;
    }
    depth -= 1;
  }
  return false;
}
var markdown_exports = {};
__export$1(markdown_exports, {
  createAtomBlockMarkdownSpec: () => createAtomBlockMarkdownSpec,
  createBlockMarkdownSpec: () => createBlockMarkdownSpec,
  createInlineMarkdownSpec: () => createInlineMarkdownSpec,
  parseAttributes: () => parseAttributes,
  parseIndentedBlocks: () => parseIndentedBlocks,
  renderNestedMarkdownContent: () => renderNestedMarkdownContent,
  serializeAttributes: () => serializeAttributes
});
function parseAttributes(attrString) {
  if (!(attrString == null ? void 0 : attrString.trim())) {
    return {};
  }
  const attributes = {};
  const quotedStrings = [];
  const tempString = attrString.replace(/["']([^"']*)["']/g, (match) => {
    quotedStrings.push(match);
    return `__QUOTED_${quotedStrings.length - 1}__`;
  });
  const classMatches = tempString.match(/(?:^|\s)\.([a-zA-Z][\w-]*)/g);
  if (classMatches) {
    const classes = classMatches.map((match) => match.trim().slice(1));
    attributes.class = classes.join(" ");
  }
  const idMatch = tempString.match(/(?:^|\s)#([a-zA-Z][\w-]*)/);
  if (idMatch) {
    attributes.id = idMatch[1];
  }
  const kvRegex = /([a-zA-Z][\w-]*)\s*=\s*(__QUOTED_\d+__)/g;
  const kvMatches = Array.from(tempString.matchAll(kvRegex));
  kvMatches.forEach(([, key, quotedRef]) => {
    var _a2;
    const quotedIndex = parseInt(((_a2 = quotedRef.match(/__QUOTED_(\d+)__/)) == null ? void 0 : _a2[1]) || "0", 10);
    const quotedValue = quotedStrings[quotedIndex];
    if (quotedValue) {
      attributes[key] = quotedValue.slice(1, -1);
    }
  });
  const cleanString = tempString.replace(/(?:^|\s)\.([a-zA-Z][\w-]*)/g, "").replace(/(?:^|\s)#([a-zA-Z][\w-]*)/g, "").replace(/([a-zA-Z][\w-]*)\s*=\s*__QUOTED_\d+__/g, "").trim();
  if (cleanString) {
    const booleanAttrs = cleanString.split(/\s+/).filter(Boolean);
    booleanAttrs.forEach((attr) => {
      if (attr.match(/^[a-zA-Z][\w-]*$/)) {
        attributes[attr] = true;
      }
    });
  }
  return attributes;
}
function serializeAttributes(attributes) {
  if (!attributes || Object.keys(attributes).length === 0) {
    return "";
  }
  const parts = [];
  if (attributes.class) {
    const classes = String(attributes.class).split(/\s+/).filter(Boolean);
    classes.forEach((cls) => parts.push(`.${cls}`));
  }
  if (attributes.id) {
    parts.push(`#${attributes.id}`);
  }
  Object.entries(attributes).forEach(([key, value]) => {
    if (key === "class" || key === "id") {
      return;
    }
    if (value === true) {
      parts.push(key);
    } else if (value !== false && value != null) {
      parts.push(`${key}="${String(value)}"`);
    }
  });
  return parts.join(" ");
}
function createAtomBlockMarkdownSpec(options) {
  const {
    nodeName,
    name: markdownName,
    parseAttributes: parseAttributes2 = parseAttributes,
    serializeAttributes: serializeAttributes2 = serializeAttributes,
    defaultAttributes = {},
    requiredAttributes = [],
    allowedAttributes
  } = options;
  const blockName = markdownName || nodeName;
  const filterAttributes = (attrs) => {
    if (!allowedAttributes) {
      return attrs;
    }
    const filtered = {};
    allowedAttributes.forEach((key) => {
      if (key in attrs) {
        filtered[key] = attrs[key];
      }
    });
    return filtered;
  };
  return {
    parseMarkdown: (token2, h2) => {
      const attrs = { ...defaultAttributes, ...token2.attributes };
      return h2.createNode(nodeName, attrs, []);
    },
    markdownTokenizer: {
      name: nodeName,
      level: "block",
      start(src) {
        var _a2;
        const regex = new RegExp(`^:::${blockName}(?:\\s|$)`, "m");
        const index2 = (_a2 = src.match(regex)) == null ? void 0 : _a2.index;
        return index2 !== void 0 ? index2 : -1;
      },
      tokenize(src, _tokens, _lexer) {
        const regex = new RegExp(`^:::${blockName}(?:\\s+\\{([^}]*)\\})?\\s*:::(?:\\n|$)`);
        const match = src.match(regex);
        if (!match) {
          return void 0;
        }
        const attrString = match[1] || "";
        const attributes = parseAttributes2(attrString);
        const missingRequired = requiredAttributes.find((required) => !(required in attributes));
        if (missingRequired) {
          return void 0;
        }
        return {
          type: nodeName,
          raw: match[0],
          attributes
        };
      }
    },
    renderMarkdown: (node) => {
      const filteredAttrs = filterAttributes(node.attrs || {});
      const attrs = serializeAttributes2(filteredAttrs);
      const attrString = attrs ? ` {${attrs}}` : "";
      return `:::${blockName}${attrString} :::`;
    }
  };
}
function createBlockMarkdownSpec(options) {
  const {
    nodeName,
    name: markdownName,
    getContent,
    parseAttributes: parseAttributes2 = parseAttributes,
    serializeAttributes: serializeAttributes2 = serializeAttributes,
    defaultAttributes = {},
    content = "block",
    allowedAttributes
  } = options;
  const blockName = markdownName || nodeName;
  const filterAttributes = (attrs) => {
    if (!allowedAttributes) {
      return attrs;
    }
    const filtered = {};
    allowedAttributes.forEach((key) => {
      if (key in attrs) {
        filtered[key] = attrs[key];
      }
    });
    return filtered;
  };
  return {
    parseMarkdown: (token2, h2) => {
      let nodeContent;
      if (getContent) {
        const contentResult = getContent(token2);
        nodeContent = typeof contentResult === "string" ? [{ type: "text", text: contentResult }] : contentResult;
      } else if (content === "block") {
        nodeContent = h2.parseChildren(token2.tokens || []);
      } else {
        nodeContent = h2.parseInline(token2.tokens || []);
      }
      const attrs = { ...defaultAttributes, ...token2.attributes };
      return h2.createNode(nodeName, attrs, nodeContent);
    },
    markdownTokenizer: {
      name: nodeName,
      level: "block",
      start(src) {
        var _a2;
        const regex = new RegExp(`^:::${blockName}`, "m");
        const index2 = (_a2 = src.match(regex)) == null ? void 0 : _a2.index;
        return index2 !== void 0 ? index2 : -1;
      },
      tokenize(src, _tokens, lexer) {
        var _a2;
        const openingRegex = new RegExp(`^:::${blockName}(?:\\s+\\{([^}]*)\\})?\\s*\\n`);
        const openingMatch = src.match(openingRegex);
        if (!openingMatch) {
          return void 0;
        }
        const [openingTag, attrString = ""] = openingMatch;
        const attributes = parseAttributes2(attrString);
        let level = 1;
        const position = openingTag.length;
        let matchedContent = "";
        const blockPattern = /^:::([\w-]*)(\s.*)?/gm;
        const remaining = src.slice(position);
        blockPattern.lastIndex = 0;
        for (; ; ) {
          const match = blockPattern.exec(remaining);
          if (match === null) {
            break;
          }
          const matchPos = match.index;
          const blockType = match[1];
          if ((_a2 = match[2]) == null ? void 0 : _a2.endsWith(":::")) {
            continue;
          }
          if (blockType) {
            level += 1;
          } else {
            level -= 1;
            if (level === 0) {
              const rawContent = remaining.slice(0, matchPos);
              matchedContent = rawContent.trim();
              const fullMatch = src.slice(0, position + matchPos + match[0].length);
              let contentTokens = [];
              if (matchedContent) {
                if (content === "block") {
                  contentTokens = lexer.blockTokens(rawContent);
                  contentTokens.forEach((token2) => {
                    if (token2.text && (!token2.tokens || token2.tokens.length === 0)) {
                      token2.tokens = lexer.inlineTokens(token2.text);
                    }
                  });
                  while (contentTokens.length > 0) {
                    const lastToken = contentTokens[contentTokens.length - 1];
                    if (lastToken.type === "paragraph" && (!lastToken.text || lastToken.text.trim() === "")) {
                      contentTokens.pop();
                    } else {
                      break;
                    }
                  }
                } else {
                  contentTokens = lexer.inlineTokens(matchedContent);
                }
              }
              return {
                type: nodeName,
                raw: fullMatch,
                attributes,
                content: matchedContent,
                tokens: contentTokens
              };
            }
          }
        }
        return void 0;
      }
    },
    renderMarkdown: (node, h2) => {
      const filteredAttrs = filterAttributes(node.attrs || {});
      const attrs = serializeAttributes2(filteredAttrs);
      const attrString = attrs ? ` {${attrs}}` : "";
      const renderedContent = h2.renderChildren(node.content || [], "\n\n");
      return `:::${blockName}${attrString}

${renderedContent}

:::`;
    }
  };
}
function parseShortcodeAttributes(attrString) {
  if (!attrString.trim()) {
    return {};
  }
  const attributes = {};
  const regex = /(\w+)=(?:"([^"]*)"|'([^']*)')/g;
  let match = regex.exec(attrString);
  while (match !== null) {
    const [, key, doubleQuoted, singleQuoted] = match;
    attributes[key] = doubleQuoted || singleQuoted;
    match = regex.exec(attrString);
  }
  return attributes;
}
function serializeShortcodeAttributes(attrs) {
  return Object.entries(attrs).filter(([, value]) => value !== void 0 && value !== null).map(([key, value]) => `${key}="${value}"`).join(" ");
}
function createInlineMarkdownSpec(options) {
  const {
    nodeName,
    name: shortcodeName,
    getContent,
    parseAttributes: parseAttributes2 = parseShortcodeAttributes,
    serializeAttributes: serializeAttributes2 = serializeShortcodeAttributes,
    defaultAttributes = {},
    selfClosing = false,
    allowedAttributes
  } = options;
  const shortcode = shortcodeName || nodeName;
  const filterAttributes = (attrs) => {
    if (!allowedAttributes) {
      return attrs;
    }
    const filtered = {};
    allowedAttributes.forEach((attr) => {
      const attrName = typeof attr === "string" ? attr : attr.name;
      const skipIfDefault = typeof attr === "string" ? void 0 : attr.skipIfDefault;
      if (attrName in attrs) {
        const value = attrs[attrName];
        if (skipIfDefault !== void 0 && value === skipIfDefault) {
          return;
        }
        filtered[attrName] = value;
      }
    });
    return filtered;
  };
  const escapedShortcode = shortcode.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
  return {
    parseMarkdown: (token2, h2) => {
      const attrs = { ...defaultAttributes, ...token2.attributes };
      if (selfClosing) {
        return h2.createNode(nodeName, attrs);
      }
      const content = getContent ? getContent(token2) : token2.content || "";
      if (content) {
        return h2.createNode(nodeName, attrs, [h2.createTextNode(content)]);
      }
      return h2.createNode(nodeName, attrs, []);
    },
    markdownTokenizer: {
      name: nodeName,
      level: "inline",
      start(src) {
        const startPattern = selfClosing ? new RegExp(`\\[${escapedShortcode}\\s*[^\\]]*\\]`) : new RegExp(`\\[${escapedShortcode}\\s*[^\\]]*\\][\\s\\S]*?\\[\\/${escapedShortcode}\\]`);
        const match = src.match(startPattern);
        const index2 = match == null ? void 0 : match.index;
        return index2 !== void 0 ? index2 : -1;
      },
      tokenize(src, _tokens, _lexer) {
        const tokenPattern = selfClosing ? new RegExp(`^\\[${escapedShortcode}\\s*([^\\]]*)\\]`) : new RegExp(`^\\[${escapedShortcode}\\s*([^\\]]*)\\]([\\s\\S]*?)\\[\\/${escapedShortcode}\\]`);
        const match = src.match(tokenPattern);
        if (!match) {
          return void 0;
        }
        let content = "";
        let attrString = "";
        if (selfClosing) {
          const [, attrs] = match;
          attrString = attrs;
        } else {
          const [, attrs, contentMatch] = match;
          attrString = attrs;
          content = contentMatch || "";
        }
        const attributes = parseAttributes2(attrString.trim());
        return {
          type: nodeName,
          raw: match[0],
          content: content.trim(),
          attributes
        };
      }
    },
    renderMarkdown: (node) => {
      let content = "";
      if (getContent) {
        content = getContent(node);
      } else if (node.content && node.content.length > 0) {
        content = node.content.filter((child) => child.type === "text").map((child) => child.text).join("");
      }
      const filteredAttrs = filterAttributes(node.attrs || {});
      const attrs = serializeAttributes2(filteredAttrs);
      const attrString = attrs ? ` ${attrs}` : "";
      if (selfClosing) {
        return `[${shortcode}${attrString}]`;
      }
      return `[${shortcode}${attrString}]${content}[/${shortcode}]`;
    }
  };
}
function parseIndentedBlocks(src, config, lexer) {
  var _a2, _b, _c, _d;
  const lines = src.split("\n");
  const items = [];
  let totalRaw = "";
  let i = 0;
  const baseIndentSize = config.baseIndentSize || 2;
  while (i < lines.length) {
    const currentLine = lines[i];
    const itemMatch = currentLine.match(config.itemPattern);
    if (!itemMatch) {
      if (items.length > 0) {
        break;
      } else if (currentLine.trim() === "") {
        i += 1;
        totalRaw = `${totalRaw}${currentLine}
`;
        continue;
      } else {
        return void 0;
      }
    }
    const itemData = config.extractItemData(itemMatch);
    const { indentLevel, mainContent } = itemData;
    totalRaw = `${totalRaw}${currentLine}
`;
    const itemContent = [mainContent];
    i += 1;
    while (i < lines.length) {
      const nextLine = lines[i];
      if (nextLine.trim() === "") {
        const nextNonEmptyIndex = lines.slice(i + 1).findIndex((l2) => l2.trim() !== "");
        if (nextNonEmptyIndex === -1) {
          break;
        }
        const nextNonEmpty = lines[i + 1 + nextNonEmptyIndex];
        const nextIndent2 = ((_b = (_a2 = nextNonEmpty.match(/^(\s*)/)) == null ? void 0 : _a2[1]) == null ? void 0 : _b.length) || 0;
        if (nextIndent2 > indentLevel) {
          itemContent.push(nextLine);
          totalRaw = `${totalRaw}${nextLine}
`;
          i += 1;
          continue;
        } else {
          break;
        }
      }
      const nextIndent = ((_d = (_c = nextLine.match(/^(\s*)/)) == null ? void 0 : _c[1]) == null ? void 0 : _d.length) || 0;
      if (nextIndent > indentLevel) {
        itemContent.push(nextLine);
        totalRaw = `${totalRaw}${nextLine}
`;
        i += 1;
      } else {
        break;
      }
    }
    let nestedTokens;
    const nestedContent = itemContent.slice(1);
    if (nestedContent.length > 0) {
      const dedentedNested = nestedContent.map((nestedLine) => nestedLine.slice(indentLevel + baseIndentSize)).join("\n");
      if (dedentedNested.trim()) {
        if (config.customNestedParser) {
          nestedTokens = config.customNestedParser(dedentedNested);
        } else {
          nestedTokens = lexer.blockTokens(dedentedNested);
        }
      }
    }
    const token2 = config.createToken(itemData, nestedTokens);
    items.push(token2);
  }
  if (items.length === 0) {
    return void 0;
  }
  return {
    items,
    raw: totalRaw
  };
}
function renderNestedMarkdownContent(node, h2, prefixOrGenerator, ctx) {
  if (!node || !Array.isArray(node.content)) {
    return "";
  }
  const prefix = typeof prefixOrGenerator === "function" ? prefixOrGenerator(ctx) : prefixOrGenerator;
  const [content, ...children] = node.content;
  const mainContent = h2.renderChildren([content]);
  const output = [`${prefix}${mainContent}`];
  if (children && children.length > 0) {
    children.forEach((child) => {
      const childContent = h2.renderChildren([child]);
      if (childContent) {
        const indentedChild = childContent.split("\n").map((line) => line ? h2.indent(line) : "").join("\n");
        output.push(indentedChild);
      }
    });
  }
  return output.join("\n");
}
function updateMarkViewAttributes(checkMark, editor, attrs = {}) {
  const { state } = editor;
  const { doc: doc2, tr: tr2 } = state;
  const thisMark = checkMark;
  doc2.descendants((node, pos) => {
    const from2 = tr2.mapping.map(pos);
    const to = tr2.mapping.map(pos) + node.nodeSize;
    let foundMark = null;
    node.marks.forEach((mark) => {
      if (mark !== thisMark) {
        return false;
      }
      foundMark = mark;
    });
    if (!foundMark) {
      return;
    }
    let needsUpdate = false;
    Object.keys(attrs).forEach((k2) => {
      if (attrs[k2] !== foundMark.attrs[k2]) {
        needsUpdate = true;
      }
    });
    if (needsUpdate) {
      const updatedMark = checkMark.type.create({
        ...checkMark.attrs,
        ...attrs
      });
      tr2.removeMark(from2, to, checkMark.type);
      tr2.addMark(from2, to, updatedMark);
    }
  });
  if (tr2.docChanged) {
    editor.view.dispatch(tr2);
  }
}
var Node3 = class _Node extends Extendable {
  constructor() {
    super(...arguments);
    this.type = "node";
  }
  /**
   * Create a new Node instance
   * @param config - Node configuration object or a function that returns a configuration object
   */
  static create(config = {}) {
    const resolvedConfig = typeof config === "function" ? config() : config;
    return new _Node(resolvedConfig);
  }
  configure(options) {
    return super.configure(options);
  }
  extend(extendedConfig) {
    const resolvedConfig = typeof extendedConfig === "function" ? extendedConfig() : extendedConfig;
    return super.extend(resolvedConfig);
  }
};
function markPasteRule(config) {
  return new PasteRule({
    find: config.find,
    handler: ({ state, range, match, pasteEvent }) => {
      const attributes = callOrReturn(config.getAttributes, void 0, match, pasteEvent);
      if (attributes === false || attributes === null) {
        return null;
      }
      const { tr: tr2 } = state;
      const captureGroup = match[match.length - 1];
      const fullMatch = match[0];
      let markEnd = range.to;
      if (captureGroup) {
        const startSpaces = fullMatch.search(/\S/);
        const textStart = range.from + fullMatch.indexOf(captureGroup);
        const textEnd = textStart + captureGroup.length;
        const excludedMarks = getMarksBetween(range.from, range.to, state.doc).filter((item) => {
          const excluded = item.mark.type.excluded;
          return excluded.find((type) => type === config.type && type !== item.mark.type);
        }).filter((item) => item.to > textStart);
        if (excludedMarks.length) {
          return null;
        }
        if (textEnd < range.to) {
          tr2.delete(textEnd, range.to);
        }
        if (textStart > range.from) {
          tr2.delete(range.from + startSpaces, textStart);
        }
        markEnd = range.from + startSpaces + captureGroup.length;
        tr2.addMark(range.from + startSpaces, markEnd, config.type.create(attributes || {}));
        tr2.removeStoredMark(config.type);
      }
    }
  });
}
var DEFAULT_TAB_SIZE = 4;
var backtickInputRegex = /^```([a-z]+)?[\s\n]$/;
var tildeInputRegex = /^~~~([a-z]+)?[\s\n]$/;
var CodeBlock = Node3.create({
  name: "codeBlock",
  addOptions() {
    return {
      languageClassPrefix: "language-",
      exitOnTripleEnter: true,
      exitOnArrowDown: true,
      defaultLanguage: null,
      enableTabIndentation: false,
      tabSize: DEFAULT_TAB_SIZE,
      HTMLAttributes: {}
    };
  },
  content: "text*",
  marks: "",
  group: "block",
  code: true,
  defining: true,
  addAttributes() {
    return {
      language: {
        default: this.options.defaultLanguage,
        parseHTML: (element) => {
          var _a2;
          const { languageClassPrefix } = this.options;
          if (!languageClassPrefix) {
            return null;
          }
          const classNames = [...((_a2 = element.firstElementChild) == null ? void 0 : _a2.classList) || []];
          const languages = classNames.filter((className) => className.startsWith(languageClassPrefix)).map((className) => className.replace(languageClassPrefix, ""));
          const language = languages[0];
          if (!language) {
            return null;
          }
          return language;
        },
        rendered: false
      }
    };
  },
  parseHTML() {
    return [
      {
        tag: "pre",
        preserveWhitespace: "full"
      }
    ];
  },
  renderHTML({ node, HTMLAttributes }) {
    return [
      "pre",
      mergeAttributes(this.options.HTMLAttributes, HTMLAttributes),
      [
        "code",
        {
          class: node.attrs.language ? this.options.languageClassPrefix + node.attrs.language : null
        },
        0
      ]
    ];
  },
  markdownTokenName: "code",
  parseMarkdown: (token2, helpers) => {
    var _a2;
    if (((_a2 = token2.raw) == null ? void 0 : _a2.startsWith("```")) === false && token2.codeBlockStyle !== "indented") {
      return [];
    }
    return helpers.createNode(
      "codeBlock",
      { language: token2.lang || null },
      token2.text ? [helpers.createTextNode(token2.text)] : []
    );
  },
  renderMarkdown: (node, h2) => {
    var _a2;
    let output = "";
    const language = ((_a2 = node.attrs) == null ? void 0 : _a2.language) || "";
    if (!node.content) {
      output = `\`\`\`${language}

\`\`\``;
    } else {
      const lines = [`\`\`\`${language}`, h2.renderChildren(node.content), "```"];
      output = lines.join("\n");
    }
    return output;
  },
  addCommands() {
    return {
      setCodeBlock: (attributes) => ({ commands }) => {
        return commands.setNode(this.name, attributes);
      },
      toggleCodeBlock: (attributes) => ({ commands }) => {
        return commands.toggleNode(this.name, "paragraph", attributes);
      }
    };
  },
  addKeyboardShortcuts() {
    return {
      "Mod-Alt-c": () => this.editor.commands.toggleCodeBlock(),
      // remove code block when at start of document or code block is empty
      Backspace: () => {
        const { empty: empty2, $anchor } = this.editor.state.selection;
        const isAtStart = $anchor.pos === 1;
        if (!empty2 || $anchor.parent.type.name !== this.name) {
          return false;
        }
        if (isAtStart || !$anchor.parent.textContent.length) {
          return this.editor.commands.clearNodes();
        }
        return false;
      },
      // handle tab indentation
      Tab: ({ editor }) => {
        var _a2;
        if (!this.options.enableTabIndentation) {
          return false;
        }
        const tabSize = (_a2 = this.options.tabSize) != null ? _a2 : DEFAULT_TAB_SIZE;
        const { state } = editor;
        const { selection } = state;
        const { $from, empty: empty2 } = selection;
        if ($from.parent.type !== this.type) {
          return false;
        }
        const indent = " ".repeat(tabSize);
        if (empty2) {
          return editor.commands.insertContent(indent);
        }
        return editor.commands.command(({ tr: tr2 }) => {
          const { from: from2, to } = selection;
          const text = state.doc.textBetween(from2, to, "\n", "\n");
          const lines = text.split("\n");
          const indentedText = lines.map((line) => indent + line).join("\n");
          tr2.replaceWith(from2, to, state.schema.text(indentedText));
          return true;
        });
      },
      // handle shift+tab reverse indentation
      "Shift-Tab": ({ editor }) => {
        var _a2;
        if (!this.options.enableTabIndentation) {
          return false;
        }
        const tabSize = (_a2 = this.options.tabSize) != null ? _a2 : DEFAULT_TAB_SIZE;
        const { state } = editor;
        const { selection } = state;
        const { $from, empty: empty2 } = selection;
        if ($from.parent.type !== this.type) {
          return false;
        }
        if (empty2) {
          return editor.commands.command(({ tr: tr2 }) => {
            var _a22;
            const { pos } = $from;
            const codeBlockStart = $from.start();
            const codeBlockEnd = $from.end();
            const allText = state.doc.textBetween(codeBlockStart, codeBlockEnd, "\n", "\n");
            const lines = allText.split("\n");
            let currentLineIndex = 0;
            let charCount = 0;
            const relativeCursorPos = pos - codeBlockStart;
            for (let i = 0; i < lines.length; i += 1) {
              if (charCount + lines[i].length >= relativeCursorPos) {
                currentLineIndex = i;
                break;
              }
              charCount += lines[i].length + 1;
            }
            const currentLine = lines[currentLineIndex];
            const leadingSpaces = ((_a22 = currentLine.match(/^ */)) == null ? void 0 : _a22[0]) || "";
            const spacesToRemove = Math.min(leadingSpaces.length, tabSize);
            if (spacesToRemove === 0) {
              return true;
            }
            let lineStartPos = codeBlockStart;
            for (let i = 0; i < currentLineIndex; i += 1) {
              lineStartPos += lines[i].length + 1;
            }
            tr2.delete(lineStartPos, lineStartPos + spacesToRemove);
            const cursorPosInLine = pos - lineStartPos;
            if (cursorPosInLine <= spacesToRemove) {
              tr2.setSelection(TextSelection.create(tr2.doc, lineStartPos));
            }
            return true;
          });
        }
        return editor.commands.command(({ tr: tr2 }) => {
          const { from: from2, to } = selection;
          const text = state.doc.textBetween(from2, to, "\n", "\n");
          const lines = text.split("\n");
          const reverseIndentText = lines.map((line) => {
            var _a22;
            const leadingSpaces = ((_a22 = line.match(/^ */)) == null ? void 0 : _a22[0]) || "";
            const spacesToRemove = Math.min(leadingSpaces.length, tabSize);
            return line.slice(spacesToRemove);
          }).join("\n");
          tr2.replaceWith(from2, to, state.schema.text(reverseIndentText));
          return true;
        });
      },
      // exit node on triple enter
      Enter: ({ editor }) => {
        if (!this.options.exitOnTripleEnter) {
          return false;
        }
        const { state } = editor;
        const { selection } = state;
        const { $from, empty: empty2 } = selection;
        if (!empty2 || $from.parent.type !== this.type) {
          return false;
        }
        const isAtEnd = $from.parentOffset === $from.parent.nodeSize - 2;
        const endsWithDoubleNewline = $from.parent.textContent.endsWith("\n\n");
        if (!isAtEnd || !endsWithDoubleNewline) {
          return false;
        }
        return editor.chain().command(({ tr: tr2 }) => {
          tr2.delete($from.pos - 2, $from.pos);
          return true;
        }).exitCode().run();
      },
      // exit node on arrow down
      ArrowDown: ({ editor }) => {
        if (!this.options.exitOnArrowDown) {
          return false;
        }
        const { state } = editor;
        const { selection, doc: doc2 } = state;
        const { $from, empty: empty2 } = selection;
        if (!empty2 || $from.parent.type !== this.type) {
          return false;
        }
        const isAtEnd = $from.parentOffset === $from.parent.nodeSize - 2;
        if (!isAtEnd) {
          return false;
        }
        const after = $from.after();
        if (after === void 0) {
          return false;
        }
        const nodeAfter = doc2.nodeAt(after);
        if (nodeAfter) {
          return editor.commands.command(({ tr: tr2 }) => {
            tr2.setSelection(Selection.near(doc2.resolve(after)));
            return true;
          });
        }
        return editor.commands.exitCode();
      }
    };
  },
  addInputRules() {
    return [
      textblockTypeInputRule({
        find: backtickInputRegex,
        type: this.type,
        getAttributes: (match) => ({
          language: match[1]
        })
      }),
      textblockTypeInputRule({
        find: tildeInputRegex,
        type: this.type,
        getAttributes: (match) => ({
          language: match[1]
        })
      })
    ];
  },
  addProseMirrorPlugins() {
    return [
      // this plugin creates a code block for pasted content from VS Code
      // we can also detect the copied code language
      new Plugin({
        key: new PluginKey("codeBlockVSCodeHandler"),
        props: {
          handlePaste: (view, event) => {
            if (!event.clipboardData) {
              return false;
            }
            if (this.editor.isActive(this.type.name)) {
              return false;
            }
            const text = event.clipboardData.getData("text/plain");
            const vscode = event.clipboardData.getData("vscode-editor-data");
            const vscodeData = vscode ? JSON.parse(vscode) : void 0;
            const language = vscodeData == null ? void 0 : vscodeData.mode;
            if (!text || !language) {
              return false;
            }
            const { tr: tr2, schema } = view.state;
            const textNode = schema.text(text.replace(/\r\n?/g, "\n"));
            tr2.replaceSelectionWith(this.type.create({ language }, textNode));
            if (tr2.selection.$from.parent.type !== this.type) {
              tr2.setSelection(TextSelection.near(tr2.doc.resolve(Math.max(0, tr2.selection.from - 2))));
            }
            tr2.setMeta("paste", true);
            view.dispatch(tr2);
            return true;
          }
        }
      })
    ];
  }
});
var core;
var hasRequiredCore;
function requireCore() {
  if (hasRequiredCore) return core;
  hasRequiredCore = 1;
  function deepFreeze(obj) {
    if (obj instanceof Map) {
      obj.clear = obj.delete = obj.set = function() {
        throw new Error("map is read-only");
      };
    } else if (obj instanceof Set) {
      obj.add = obj.clear = obj.delete = function() {
        throw new Error("set is read-only");
      };
    }
    Object.freeze(obj);
    Object.getOwnPropertyNames(obj).forEach((name) => {
      const prop = obj[name];
      const type = typeof prop;
      if ((type === "object" || type === "function") && !Object.isFrozen(prop)) {
        deepFreeze(prop);
      }
    });
    return obj;
  }
  class Response {
    /**
     * @param {CompiledMode} mode
     */
    constructor(mode) {
      if (mode.data === void 0) mode.data = {};
      this.data = mode.data;
      this.isMatchIgnored = false;
    }
    ignoreMatch() {
      this.isMatchIgnored = true;
    }
  }
  function escapeHTML(value) {
    return value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#x27;");
  }
  function inherit$1(original, ...objects) {
    const result = /* @__PURE__ */ Object.create(null);
    for (const key in original) {
      result[key] = original[key];
    }
    objects.forEach(function(obj) {
      for (const key in obj) {
        result[key] = obj[key];
      }
    });
    return (
      /** @type {T} */
      result
    );
  }
  const SPAN_CLOSE = "</span>";
  const emitsWrappingTags = (node) => {
    return !!node.scope;
  };
  const scopeToCSSClass = (name, { prefix }) => {
    if (name.startsWith("language:")) {
      return name.replace("language:", "language-");
    }
    if (name.includes(".")) {
      const pieces = name.split(".");
      return [
        `${prefix}${pieces.shift()}`,
        ...pieces.map((x2, i) => `${x2}${"_".repeat(i + 1)}`)
      ].join(" ");
    }
    return `${prefix}${name}`;
  };
  class HTMLRenderer {
    /**
     * Creates a new HTMLRenderer
     *
     * @param {Tree} parseTree - the parse tree (must support `walk` API)
     * @param {{classPrefix: string}} options
     */
    constructor(parseTree, options) {
      this.buffer = "";
      this.classPrefix = options.classPrefix;
      parseTree.walk(this);
    }
    /**
     * Adds texts to the output stream
     *
     * @param {string} text */
    addText(text) {
      this.buffer += escapeHTML(text);
    }
    /**
     * Adds a node open to the output stream (if needed)
     *
     * @param {Node} node */
    openNode(node) {
      if (!emitsWrappingTags(node)) return;
      const className = scopeToCSSClass(
        node.scope,
        { prefix: this.classPrefix }
      );
      this.span(className);
    }
    /**
     * Adds a node close to the output stream (if needed)
     *
     * @param {Node} node */
    closeNode(node) {
      if (!emitsWrappingTags(node)) return;
      this.buffer += SPAN_CLOSE;
    }
    /**
     * returns the accumulated buffer
    */
    value() {
      return this.buffer;
    }
    // helpers
    /**
     * Builds a span element
     *
     * @param {string} className */
    span(className) {
      this.buffer += `<span class="${className}">`;
    }
  }
  const newNode = (opts = {}) => {
    const result = { children: [] };
    Object.assign(result, opts);
    return result;
  };
  class TokenTree {
    constructor() {
      this.rootNode = newNode();
      this.stack = [this.rootNode];
    }
    get top() {
      return this.stack[this.stack.length - 1];
    }
    get root() {
      return this.rootNode;
    }
    /** @param {Node} node */
    add(node) {
      this.top.children.push(node);
    }
    /** @param {string} scope */
    openNode(scope) {
      const node = newNode({ scope });
      this.add(node);
      this.stack.push(node);
    }
    closeNode() {
      if (this.stack.length > 1) {
        return this.stack.pop();
      }
      return void 0;
    }
    closeAllNodes() {
      while (this.closeNode()) ;
    }
    toJSON() {
      return JSON.stringify(this.rootNode, null, 4);
    }
    /**
     * @typedef { import("./html_renderer").Renderer } Renderer
     * @param {Renderer} builder
     */
    walk(builder) {
      return this.constructor._walk(builder, this.rootNode);
    }
    /**
     * @param {Renderer} builder
     * @param {Node} node
     */
    static _walk(builder, node) {
      if (typeof node === "string") {
        builder.addText(node);
      } else if (node.children) {
        builder.openNode(node);
        node.children.forEach((child) => this._walk(builder, child));
        builder.closeNode(node);
      }
      return builder;
    }
    /**
     * @param {Node} node
     */
    static _collapse(node) {
      if (typeof node === "string") return;
      if (!node.children) return;
      if (node.children.every((el) => typeof el === "string")) {
        node.children = [node.children.join("")];
      } else {
        node.children.forEach((child) => {
          TokenTree._collapse(child);
        });
      }
    }
  }
  class TokenTreeEmitter extends TokenTree {
    /**
     * @param {*} options
     */
    constructor(options) {
      super();
      this.options = options;
    }
    /**
     * @param {string} text
     */
    addText(text) {
      if (text === "") {
        return;
      }
      this.add(text);
    }
    /** @param {string} scope */
    startScope(scope) {
      this.openNode(scope);
    }
    endScope() {
      this.closeNode();
    }
    /**
     * @param {Emitter & {root: DataNode}} emitter
     * @param {string} name
     */
    __addSublanguage(emitter, name) {
      const node = emitter.root;
      if (name) node.scope = `language:${name}`;
      this.add(node);
    }
    toHTML() {
      const renderer2 = new HTMLRenderer(this, this.options);
      return renderer2.value();
    }
    finalize() {
      this.closeAllNodes();
      return true;
    }
  }
  function source2(re2) {
    if (!re2) return null;
    if (typeof re2 === "string") return re2;
    return re2.source;
  }
  function lookahead2(re2) {
    return concat2("(?=", re2, ")");
  }
  function anyNumberOfTimes(re2) {
    return concat2("(?:", re2, ")*");
  }
  function optional(re2) {
    return concat2("(?:", re2, ")?");
  }
  function concat2(...args) {
    const joined = args.map((x2) => source2(x2)).join("");
    return joined;
  }
  function stripOptionsFromArgs2(args) {
    const opts = args[args.length - 1];
    if (typeof opts === "object" && opts.constructor === Object) {
      args.splice(args.length - 1, 1);
      return opts;
    } else {
      return {};
    }
  }
  function either2(...args) {
    const opts = stripOptionsFromArgs2(args);
    const joined = "(" + (opts.capture ? "" : "?:") + args.map((x2) => source2(x2)).join("|") + ")";
    return joined;
  }
  function countMatchGroups(re2) {
    return new RegExp(re2.toString() + "|").exec("").length - 1;
  }
  function startsWith(re2, lexeme) {
    const match = re2 && re2.exec(lexeme);
    return match && match.index === 0;
  }
  const BACKREF_RE = /\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;
  function _rewriteBackreferences(regexps, { joinWith }) {
    let numCaptures = 0;
    return regexps.map((regex) => {
      numCaptures += 1;
      const offset2 = numCaptures;
      let re2 = source2(regex);
      let out = "";
      while (re2.length > 0) {
        const match = BACKREF_RE.exec(re2);
        if (!match) {
          out += re2;
          break;
        }
        out += re2.substring(0, match.index);
        re2 = re2.substring(match.index + match[0].length);
        if (match[0][0] === "\\" && match[1]) {
          out += "\\" + String(Number(match[1]) + offset2);
        } else {
          out += match[0];
          if (match[0] === "(") {
            numCaptures++;
          }
        }
      }
      return out;
    }).map((re2) => `(${re2})`).join(joinWith);
  }
  const MATCH_NOTHING_RE = /\b\B/;
  const IDENT_RE2 = "[a-zA-Z]\\w*";
  const UNDERSCORE_IDENT_RE = "[a-zA-Z_]\\w*";
  const NUMBER_RE = "\\b\\d+(\\.\\d+)?";
  const C_NUMBER_RE = "(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";
  const BINARY_NUMBER_RE = "\\b(0b[01]+)";
  const RE_STARTERS_RE = "!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";
  const SHEBANG = (opts = {}) => {
    const beginShebang = /^#![ ]*\//;
    if (opts.binary) {
      opts.begin = concat2(
        beginShebang,
        /.*\b/,
        opts.binary,
        /\b.*/
      );
    }
    return inherit$1({
      scope: "meta",
      begin: beginShebang,
      end: /$/,
      relevance: 0,
      /** @type {ModeCallback} */
      "on:begin": (m2, resp) => {
        if (m2.index !== 0) resp.ignoreMatch();
      }
    }, opts);
  };
  const BACKSLASH_ESCAPE = {
    begin: "\\\\[\\s\\S]",
    relevance: 0
  };
  const APOS_STRING_MODE = {
    scope: "string",
    begin: "'",
    end: "'",
    illegal: "\\n",
    contains: [BACKSLASH_ESCAPE]
  };
  const QUOTE_STRING_MODE = {
    scope: "string",
    begin: '"',
    end: '"',
    illegal: "\\n",
    contains: [BACKSLASH_ESCAPE]
  };
  const PHRASAL_WORDS_MODE = {
    begin: /\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/
  };
  const COMMENT = function(begin, end, modeOptions = {}) {
    const mode = inherit$1(
      {
        scope: "comment",
        begin,
        end,
        contains: []
      },
      modeOptions
    );
    mode.contains.push({
      scope: "doctag",
      // hack to avoid the space from being included. the space is necessary to
      // match here to prevent the plain text rule below from gobbling up doctags
      begin: "[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",
      end: /(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,
      excludeBegin: true,
      relevance: 0
    });
    const ENGLISH_WORD = either2(
      // list of common 1 and 2 letter words in English
      "I",
      "a",
      "is",
      "so",
      "us",
      "to",
      "at",
      "if",
      "in",
      "it",
      "on",
      // note: this is not an exhaustive list of contractions, just popular ones
      /[A-Za-z]+['](d|ve|re|ll|t|s|n)/,
      // contractions - can't we'd they're let's, etc
      /[A-Za-z]+[-][a-z]+/,
      // `no-way`, etc.
      /[A-Za-z][a-z]{2,}/
      // allow capitalized words at beginning of sentences
    );
    mode.contains.push(
      {
        // TODO: how to include ", (, ) without breaking grammars that use these for
        // comment delimiters?
        // begin: /[ ]+([()"]?([A-Za-z'-]{3,}|is|a|I|so|us|[tT][oO]|at|if|in|it|on)[.]?[()":]?([.][ ]|[ ]|\))){3}/
        // ---
        // this tries to find sequences of 3 english words in a row (without any
        // "programming" type syntax) this gives us a strong signal that we've
        // TRULY found a comment - vs perhaps scanning with the wrong language.
        // It's possible to find something that LOOKS like the start of the
        // comment - but then if there is no readable text - good chance it is a
        // false match and not a comment.
        //
        // for a visual example please see:
        // https://github.com/highlightjs/highlight.js/issues/2827
        begin: concat2(
          /[ ]+/,
          // necessary to prevent us gobbling up doctags like /* @author Bob Mcgill */
          "(",
          ENGLISH_WORD,
          /[.]?[:]?([.][ ]|[ ])/,
          "){3}"
        )
        // look for 3 words in a row
      }
    );
    return mode;
  };
  const C_LINE_COMMENT_MODE = COMMENT("//", "$");
  const C_BLOCK_COMMENT_MODE = COMMENT("/\\*", "\\*/");
  const HASH_COMMENT_MODE = COMMENT("#", "$");
  const NUMBER_MODE = {
    scope: "number",
    begin: NUMBER_RE,
    relevance: 0
  };
  const C_NUMBER_MODE = {
    scope: "number",
    begin: C_NUMBER_RE,
    relevance: 0
  };
  const BINARY_NUMBER_MODE = {
    scope: "number",
    begin: BINARY_NUMBER_RE,
    relevance: 0
  };
  const REGEXP_MODE = {
    scope: "regexp",
    begin: /\/(?=[^/\n]*\/)/,
    end: /\/[gimuy]*/,
    contains: [
      BACKSLASH_ESCAPE,
      {
        begin: /\[/,
        end: /\]/,
        relevance: 0,
        contains: [BACKSLASH_ESCAPE]
      }
    ]
  };
  const TITLE_MODE = {
    scope: "title",
    begin: IDENT_RE2,
    relevance: 0
  };
  const UNDERSCORE_TITLE_MODE = {
    scope: "title",
    begin: UNDERSCORE_IDENT_RE,
    relevance: 0
  };
  const METHOD_GUARD = {
    // excludes method names from keyword processing
    begin: "\\.\\s*" + UNDERSCORE_IDENT_RE,
    relevance: 0
  };
  const END_SAME_AS_BEGIN = function(mode) {
    return Object.assign(
      mode,
      {
        /** @type {ModeCallback} */
        "on:begin": (m2, resp) => {
          resp.data._beginMatch = m2[1];
        },
        /** @type {ModeCallback} */
        "on:end": (m2, resp) => {
          if (resp.data._beginMatch !== m2[1]) resp.ignoreMatch();
        }
      }
    );
  };
  var MODES2 = /* @__PURE__ */ Object.freeze({
    __proto__: null,
    APOS_STRING_MODE,
    BACKSLASH_ESCAPE,
    BINARY_NUMBER_MODE,
    BINARY_NUMBER_RE,
    COMMENT,
    C_BLOCK_COMMENT_MODE,
    C_LINE_COMMENT_MODE,
    C_NUMBER_MODE,
    C_NUMBER_RE,
    END_SAME_AS_BEGIN,
    HASH_COMMENT_MODE,
    IDENT_RE: IDENT_RE2,
    MATCH_NOTHING_RE,
    METHOD_GUARD,
    NUMBER_MODE,
    NUMBER_RE,
    PHRASAL_WORDS_MODE,
    QUOTE_STRING_MODE,
    REGEXP_MODE,
    RE_STARTERS_RE,
    SHEBANG,
    TITLE_MODE,
    UNDERSCORE_IDENT_RE,
    UNDERSCORE_TITLE_MODE
  });
  function skipIfHasPrecedingDot(match, response) {
    const before = match.input[match.index - 1];
    if (before === ".") {
      response.ignoreMatch();
    }
  }
  function scopeClassName(mode, _parent) {
    if (mode.className !== void 0) {
      mode.scope = mode.className;
      delete mode.className;
    }
  }
  function beginKeywords(mode, parent) {
    if (!parent) return;
    if (!mode.beginKeywords) return;
    mode.begin = "\\b(" + mode.beginKeywords.split(" ").join("|") + ")(?!\\.)(?=\\b|\\s)";
    mode.__beforeBegin = skipIfHasPrecedingDot;
    mode.keywords = mode.keywords || mode.beginKeywords;
    delete mode.beginKeywords;
    if (mode.relevance === void 0) mode.relevance = 0;
  }
  function compileIllegal(mode, _parent) {
    if (!Array.isArray(mode.illegal)) return;
    mode.illegal = either2(...mode.illegal);
  }
  function compileMatch(mode, _parent) {
    if (!mode.match) return;
    if (mode.begin || mode.end) throw new Error("begin & end are not supported with match");
    mode.begin = mode.match;
    delete mode.match;
  }
  function compileRelevance(mode, _parent) {
    if (mode.relevance === void 0) mode.relevance = 1;
  }
  const beforeMatchExt = (mode, parent) => {
    if (!mode.beforeMatch) return;
    if (mode.starts) throw new Error("beforeMatch cannot be used with starts");
    const originalMode = Object.assign({}, mode);
    Object.keys(mode).forEach((key) => {
      delete mode[key];
    });
    mode.keywords = originalMode.keywords;
    mode.begin = concat2(originalMode.beforeMatch, lookahead2(originalMode.begin));
    mode.starts = {
      relevance: 0,
      contains: [
        Object.assign(originalMode, { endsParent: true })
      ]
    };
    mode.relevance = 0;
    delete originalMode.beforeMatch;
  };
  const COMMON_KEYWORDS = [
    "of",
    "and",
    "for",
    "in",
    "not",
    "or",
    "if",
    "then",
    "parent",
    // common variable name
    "list",
    // common variable name
    "value"
    // common variable name
  ];
  const DEFAULT_KEYWORD_SCOPE = "keyword";
  function compileKeywords(rawKeywords, caseInsensitive, scopeName = DEFAULT_KEYWORD_SCOPE) {
    const compiledKeywords = /* @__PURE__ */ Object.create(null);
    if (typeof rawKeywords === "string") {
      compileList(scopeName, rawKeywords.split(" "));
    } else if (Array.isArray(rawKeywords)) {
      compileList(scopeName, rawKeywords);
    } else {
      Object.keys(rawKeywords).forEach(function(scopeName2) {
        Object.assign(
          compiledKeywords,
          compileKeywords(rawKeywords[scopeName2], caseInsensitive, scopeName2)
        );
      });
    }
    return compiledKeywords;
    function compileList(scopeName2, keywordList) {
      if (caseInsensitive) {
        keywordList = keywordList.map((x2) => x2.toLowerCase());
      }
      keywordList.forEach(function(keyword) {
        const pair = keyword.split("|");
        compiledKeywords[pair[0]] = [scopeName2, scoreForKeyword(pair[0], pair[1])];
      });
    }
  }
  function scoreForKeyword(keyword, providedScore) {
    if (providedScore) {
      return Number(providedScore);
    }
    return commonKeyword(keyword) ? 0 : 1;
  }
  function commonKeyword(keyword) {
    return COMMON_KEYWORDS.includes(keyword.toLowerCase());
  }
  const seenDeprecations = {};
  const error = (message) => {
    console.error(message);
  };
  const warn2 = (message, ...args) => {
    console.log(`WARN: ${message}`, ...args);
  };
  const deprecated = (version3, message) => {
    if (seenDeprecations[`${version3}/${message}`]) return;
    console.log(`Deprecated as of ${version3}. ${message}`);
    seenDeprecations[`${version3}/${message}`] = true;
  };
  const MultiClassError = new Error();
  function remapScopeNames(mode, regexes, { key }) {
    let offset2 = 0;
    const scopeNames = mode[key];
    const emit2 = {};
    const positions = {};
    for (let i = 1; i <= regexes.length; i++) {
      positions[i + offset2] = scopeNames[i];
      emit2[i + offset2] = true;
      offset2 += countMatchGroups(regexes[i - 1]);
    }
    mode[key] = positions;
    mode[key]._emit = emit2;
    mode[key]._multi = true;
  }
  function beginMultiClass(mode) {
    if (!Array.isArray(mode.begin)) return;
    if (mode.skip || mode.excludeBegin || mode.returnBegin) {
      error("skip, excludeBegin, returnBegin not compatible with beginScope: {}");
      throw MultiClassError;
    }
    if (typeof mode.beginScope !== "object" || mode.beginScope === null) {
      error("beginScope must be object");
      throw MultiClassError;
    }
    remapScopeNames(mode, mode.begin, { key: "beginScope" });
    mode.begin = _rewriteBackreferences(mode.begin, { joinWith: "" });
  }
  function endMultiClass(mode) {
    if (!Array.isArray(mode.end)) return;
    if (mode.skip || mode.excludeEnd || mode.returnEnd) {
      error("skip, excludeEnd, returnEnd not compatible with endScope: {}");
      throw MultiClassError;
    }
    if (typeof mode.endScope !== "object" || mode.endScope === null) {
      error("endScope must be object");
      throw MultiClassError;
    }
    remapScopeNames(mode, mode.end, { key: "endScope" });
    mode.end = _rewriteBackreferences(mode.end, { joinWith: "" });
  }
  function scopeSugar(mode) {
    if (mode.scope && typeof mode.scope === "object" && mode.scope !== null) {
      mode.beginScope = mode.scope;
      delete mode.scope;
    }
  }
  function MultiClass(mode) {
    scopeSugar(mode);
    if (typeof mode.beginScope === "string") {
      mode.beginScope = { _wrap: mode.beginScope };
    }
    if (typeof mode.endScope === "string") {
      mode.endScope = { _wrap: mode.endScope };
    }
    beginMultiClass(mode);
    endMultiClass(mode);
  }
  function compileLanguage(language) {
    function langRe(value, global2) {
      return new RegExp(
        source2(value),
        "m" + (language.case_insensitive ? "i" : "") + (language.unicodeRegex ? "u" : "") + (global2 ? "g" : "")
      );
    }
    class MultiRegex {
      constructor() {
        this.matchIndexes = {};
        this.regexes = [];
        this.matchAt = 1;
        this.position = 0;
      }
      // @ts-ignore
      addRule(re2, opts) {
        opts.position = this.position++;
        this.matchIndexes[this.matchAt] = opts;
        this.regexes.push([opts, re2]);
        this.matchAt += countMatchGroups(re2) + 1;
      }
      compile() {
        if (this.regexes.length === 0) {
          this.exec = () => null;
        }
        const terminators = this.regexes.map((el) => el[1]);
        this.matcherRe = langRe(_rewriteBackreferences(terminators, { joinWith: "|" }), true);
        this.lastIndex = 0;
      }
      /** @param {string} s */
      exec(s2) {
        this.matcherRe.lastIndex = this.lastIndex;
        const match = this.matcherRe.exec(s2);
        if (!match) {
          return null;
        }
        const i = match.findIndex((el, i2) => i2 > 0 && el !== void 0);
        const matchData = this.matchIndexes[i];
        match.splice(0, i);
        return Object.assign(match, matchData);
      }
    }
    class ResumableMultiRegex {
      constructor() {
        this.rules = [];
        this.multiRegexes = [];
        this.count = 0;
        this.lastIndex = 0;
        this.regexIndex = 0;
      }
      // @ts-ignore
      getMatcher(index2) {
        if (this.multiRegexes[index2]) return this.multiRegexes[index2];
        const matcher = new MultiRegex();
        this.rules.slice(index2).forEach(([re2, opts]) => matcher.addRule(re2, opts));
        matcher.compile();
        this.multiRegexes[index2] = matcher;
        return matcher;
      }
      resumingScanAtSamePosition() {
        return this.regexIndex !== 0;
      }
      considerAll() {
        this.regexIndex = 0;
      }
      // @ts-ignore
      addRule(re2, opts) {
        this.rules.push([re2, opts]);
        if (opts.type === "begin") this.count++;
      }
      /** @param {string} s */
      exec(s2) {
        const m2 = this.getMatcher(this.regexIndex);
        m2.lastIndex = this.lastIndex;
        let result = m2.exec(s2);
        if (this.resumingScanAtSamePosition()) {
          if (result && result.index === this.lastIndex) ;
          else {
            const m22 = this.getMatcher(0);
            m22.lastIndex = this.lastIndex + 1;
            result = m22.exec(s2);
          }
        }
        if (result) {
          this.regexIndex += result.position + 1;
          if (this.regexIndex === this.count) {
            this.considerAll();
          }
        }
        return result;
      }
    }
    function buildModeRegex(mode) {
      const mm = new ResumableMultiRegex();
      mode.contains.forEach((term) => mm.addRule(term.begin, { rule: term, type: "begin" }));
      if (mode.terminatorEnd) {
        mm.addRule(mode.terminatorEnd, { type: "end" });
      }
      if (mode.illegal) {
        mm.addRule(mode.illegal, { type: "illegal" });
      }
      return mm;
    }
    function compileMode(mode, parent) {
      const cmode = (
        /** @type CompiledMode */
        mode
      );
      if (mode.isCompiled) return cmode;
      [
        scopeClassName,
        // do this early so compiler extensions generally don't have to worry about
        // the distinction between match/begin
        compileMatch,
        MultiClass,
        beforeMatchExt
      ].forEach((ext) => ext(mode, parent));
      language.compilerExtensions.forEach((ext) => ext(mode, parent));
      mode.__beforeBegin = null;
      [
        beginKeywords,
        // do this later so compiler extensions that come earlier have access to the
        // raw array if they wanted to perhaps manipulate it, etc.
        compileIllegal,
        // default to 1 relevance if not specified
        compileRelevance
      ].forEach((ext) => ext(mode, parent));
      mode.isCompiled = true;
      let keywordPattern = null;
      if (typeof mode.keywords === "object" && mode.keywords.$pattern) {
        mode.keywords = Object.assign({}, mode.keywords);
        keywordPattern = mode.keywords.$pattern;
        delete mode.keywords.$pattern;
      }
      keywordPattern = keywordPattern || /\w+/;
      if (mode.keywords) {
        mode.keywords = compileKeywords(mode.keywords, language.case_insensitive);
      }
      cmode.keywordPatternRe = langRe(keywordPattern, true);
      if (parent) {
        if (!mode.begin) mode.begin = /\B|\b/;
        cmode.beginRe = langRe(cmode.begin);
        if (!mode.end && !mode.endsWithParent) mode.end = /\B|\b/;
        if (mode.end) cmode.endRe = langRe(cmode.end);
        cmode.terminatorEnd = source2(cmode.end) || "";
        if (mode.endsWithParent && parent.terminatorEnd) {
          cmode.terminatorEnd += (mode.end ? "|" : "") + parent.terminatorEnd;
        }
      }
      if (mode.illegal) cmode.illegalRe = langRe(
        /** @type {RegExp | string} */
        mode.illegal
      );
      if (!mode.contains) mode.contains = [];
      mode.contains = [].concat(...mode.contains.map(function(c2) {
        return expandOrCloneMode(c2 === "self" ? mode : c2);
      }));
      mode.contains.forEach(function(c2) {
        compileMode(
          /** @type Mode */
          c2,
          cmode
        );
      });
      if (mode.starts) {
        compileMode(mode.starts, parent);
      }
      cmode.matcher = buildModeRegex(cmode);
      return cmode;
    }
    if (!language.compilerExtensions) language.compilerExtensions = [];
    if (language.contains && language.contains.includes("self")) {
      throw new Error("ERR: contains `self` is not supported at the top-level of a language.  See documentation.");
    }
    language.classNameAliases = inherit$1(language.classNameAliases || {});
    return compileMode(
      /** @type Mode */
      language
    );
  }
  function dependencyOnParent(mode) {
    if (!mode) return false;
    return mode.endsWithParent || dependencyOnParent(mode.starts);
  }
  function expandOrCloneMode(mode) {
    if (mode.variants && !mode.cachedVariants) {
      mode.cachedVariants = mode.variants.map(function(variant) {
        return inherit$1(mode, { variants: null }, variant);
      });
    }
    if (mode.cachedVariants) {
      return mode.cachedVariants;
    }
    if (dependencyOnParent(mode)) {
      return inherit$1(mode, { starts: mode.starts ? inherit$1(mode.starts) : null });
    }
    if (Object.isFrozen(mode)) {
      return inherit$1(mode);
    }
    return mode;
  }
  var version2 = "11.11.1";
  class HTMLInjectionError extends Error {
    constructor(reason, html) {
      super(reason);
      this.name = "HTMLInjectionError";
      this.html = html;
    }
  }
  const escape2 = escapeHTML;
  const inherit = inherit$1;
  const NO_MATCH = /* @__PURE__ */ Symbol("nomatch");
  const MAX_KEYWORD_HITS = 7;
  const HLJS = function(hljs) {
    const languages = /* @__PURE__ */ Object.create(null);
    const aliases = /* @__PURE__ */ Object.create(null);
    const plugins = [];
    let SAFE_MODE = true;
    const LANGUAGE_NOT_FOUND = "Could not find the language '{}', did you forget to load/include a language module?";
    const PLAINTEXT_LANGUAGE = { disableAutodetect: true, name: "Plain text", contains: [] };
    let options = {
      ignoreUnescapedHTML: false,
      throwUnescapedHTML: false,
      noHighlightRe: /^(no-?highlight)$/i,
      languageDetectRe: /\blang(?:uage)?-([\w-]+)\b/i,
      classPrefix: "hljs-",
      cssSelector: "pre code",
      languages: null,
      // beta configuration options, subject to change, welcome to discuss
      // https://github.com/highlightjs/highlight.js/issues/1086
      __emitter: TokenTreeEmitter
    };
    function shouldNotHighlight(languageName) {
      return options.noHighlightRe.test(languageName);
    }
    function blockLanguage(block) {
      let classes = block.className + " ";
      classes += block.parentNode ? block.parentNode.className : "";
      const match = options.languageDetectRe.exec(classes);
      if (match) {
        const language = getLanguage(match[1]);
        if (!language) {
          warn2(LANGUAGE_NOT_FOUND.replace("{}", match[1]));
          warn2("Falling back to no-highlight mode for this block.", block);
        }
        return language ? match[1] : "no-highlight";
      }
      return classes.split(/\s+/).find((_class) => shouldNotHighlight(_class) || getLanguage(_class));
    }
    function highlight2(codeOrLanguageName, optionsOrCode, ignoreIllegals) {
      let code = "";
      let languageName = "";
      if (typeof optionsOrCode === "object") {
        code = codeOrLanguageName;
        ignoreIllegals = optionsOrCode.ignoreIllegals;
        languageName = optionsOrCode.language;
      } else {
        deprecated("10.7.0", "highlight(lang, code, ...args) has been deprecated.");
        deprecated("10.7.0", "Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277");
        languageName = codeOrLanguageName;
        code = optionsOrCode;
      }
      if (ignoreIllegals === void 0) {
        ignoreIllegals = true;
      }
      const context = {
        code,
        language: languageName
      };
      fire("before:highlight", context);
      const result = context.result ? context.result : _highlight(context.language, context.code, ignoreIllegals);
      result.code = context.code;
      fire("after:highlight", result);
      return result;
    }
    function _highlight(languageName, codeToHighlight, ignoreIllegals, continuation) {
      const keywordHits = /* @__PURE__ */ Object.create(null);
      function keywordData(mode, matchText) {
        return mode.keywords[matchText];
      }
      function processKeywords() {
        if (!top.keywords) {
          emitter.addText(modeBuffer);
          return;
        }
        let lastIndex = 0;
        top.keywordPatternRe.lastIndex = 0;
        let match = top.keywordPatternRe.exec(modeBuffer);
        let buf = "";
        while (match) {
          buf += modeBuffer.substring(lastIndex, match.index);
          const word = language.case_insensitive ? match[0].toLowerCase() : match[0];
          const data = keywordData(top, word);
          if (data) {
            const [kind, keywordRelevance] = data;
            emitter.addText(buf);
            buf = "";
            keywordHits[word] = (keywordHits[word] || 0) + 1;
            if (keywordHits[word] <= MAX_KEYWORD_HITS) relevance += keywordRelevance;
            if (kind.startsWith("_")) {
              buf += match[0];
            } else {
              const cssClass = language.classNameAliases[kind] || kind;
              emitKeyword(match[0], cssClass);
            }
          } else {
            buf += match[0];
          }
          lastIndex = top.keywordPatternRe.lastIndex;
          match = top.keywordPatternRe.exec(modeBuffer);
        }
        buf += modeBuffer.substring(lastIndex);
        emitter.addText(buf);
      }
      function processSubLanguage() {
        if (modeBuffer === "") return;
        let result2 = null;
        if (typeof top.subLanguage === "string") {
          if (!languages[top.subLanguage]) {
            emitter.addText(modeBuffer);
            return;
          }
          result2 = _highlight(top.subLanguage, modeBuffer, true, continuations[top.subLanguage]);
          continuations[top.subLanguage] = /** @type {CompiledMode} */
          result2._top;
        } else {
          result2 = highlightAuto(modeBuffer, top.subLanguage.length ? top.subLanguage : null);
        }
        if (top.relevance > 0) {
          relevance += result2.relevance;
        }
        emitter.__addSublanguage(result2._emitter, result2.language);
      }
      function processBuffer() {
        if (top.subLanguage != null) {
          processSubLanguage();
        } else {
          processKeywords();
        }
        modeBuffer = "";
      }
      function emitKeyword(keyword, scope) {
        if (keyword === "") return;
        emitter.startScope(scope);
        emitter.addText(keyword);
        emitter.endScope();
      }
      function emitMultiClass(scope, match) {
        let i = 1;
        const max2 = match.length - 1;
        while (i <= max2) {
          if (!scope._emit[i]) {
            i++;
            continue;
          }
          const klass = language.classNameAliases[scope[i]] || scope[i];
          const text = match[i];
          if (klass) {
            emitKeyword(text, klass);
          } else {
            modeBuffer = text;
            processKeywords();
            modeBuffer = "";
          }
          i++;
        }
      }
      function startNewMode(mode, match) {
        if (mode.scope && typeof mode.scope === "string") {
          emitter.openNode(language.classNameAliases[mode.scope] || mode.scope);
        }
        if (mode.beginScope) {
          if (mode.beginScope._wrap) {
            emitKeyword(modeBuffer, language.classNameAliases[mode.beginScope._wrap] || mode.beginScope._wrap);
            modeBuffer = "";
          } else if (mode.beginScope._multi) {
            emitMultiClass(mode.beginScope, match);
            modeBuffer = "";
          }
        }
        top = Object.create(mode, { parent: { value: top } });
        return top;
      }
      function endOfMode(mode, match, matchPlusRemainder) {
        let matched = startsWith(mode.endRe, matchPlusRemainder);
        if (matched) {
          if (mode["on:end"]) {
            const resp = new Response(mode);
            mode["on:end"](match, resp);
            if (resp.isMatchIgnored) matched = false;
          }
          if (matched) {
            while (mode.endsParent && mode.parent) {
              mode = mode.parent;
            }
            return mode;
          }
        }
        if (mode.endsWithParent) {
          return endOfMode(mode.parent, match, matchPlusRemainder);
        }
      }
      function doIgnore(lexeme) {
        if (top.matcher.regexIndex === 0) {
          modeBuffer += lexeme[0];
          return 1;
        } else {
          resumeScanAtSamePosition = true;
          return 0;
        }
      }
      function doBeginMatch(match) {
        const lexeme = match[0];
        const newMode = match.rule;
        const resp = new Response(newMode);
        const beforeCallbacks = [newMode.__beforeBegin, newMode["on:begin"]];
        for (const cb2 of beforeCallbacks) {
          if (!cb2) continue;
          cb2(match, resp);
          if (resp.isMatchIgnored) return doIgnore(lexeme);
        }
        if (newMode.skip) {
          modeBuffer += lexeme;
        } else {
          if (newMode.excludeBegin) {
            modeBuffer += lexeme;
          }
          processBuffer();
          if (!newMode.returnBegin && !newMode.excludeBegin) {
            modeBuffer = lexeme;
          }
        }
        startNewMode(newMode, match);
        return newMode.returnBegin ? 0 : lexeme.length;
      }
      function doEndMatch(match) {
        const lexeme = match[0];
        const matchPlusRemainder = codeToHighlight.substring(match.index);
        const endMode = endOfMode(top, match, matchPlusRemainder);
        if (!endMode) {
          return NO_MATCH;
        }
        const origin = top;
        if (top.endScope && top.endScope._wrap) {
          processBuffer();
          emitKeyword(lexeme, top.endScope._wrap);
        } else if (top.endScope && top.endScope._multi) {
          processBuffer();
          emitMultiClass(top.endScope, match);
        } else if (origin.skip) {
          modeBuffer += lexeme;
        } else {
          if (!(origin.returnEnd || origin.excludeEnd)) {
            modeBuffer += lexeme;
          }
          processBuffer();
          if (origin.excludeEnd) {
            modeBuffer = lexeme;
          }
        }
        do {
          if (top.scope) {
            emitter.closeNode();
          }
          if (!top.skip && !top.subLanguage) {
            relevance += top.relevance;
          }
          top = top.parent;
        } while (top !== endMode.parent);
        if (endMode.starts) {
          startNewMode(endMode.starts, match);
        }
        return origin.returnEnd ? 0 : lexeme.length;
      }
      function processContinuations() {
        const list = [];
        for (let current = top; current !== language; current = current.parent) {
          if (current.scope) {
            list.unshift(current.scope);
          }
        }
        list.forEach((item) => emitter.openNode(item));
      }
      let lastMatch = {};
      function processLexeme(textBeforeMatch, match) {
        const lexeme = match && match[0];
        modeBuffer += textBeforeMatch;
        if (lexeme == null) {
          processBuffer();
          return 0;
        }
        if (lastMatch.type === "begin" && match.type === "end" && lastMatch.index === match.index && lexeme === "") {
          modeBuffer += codeToHighlight.slice(match.index, match.index + 1);
          if (!SAFE_MODE) {
            const err = new Error(`0 width match regex (${languageName})`);
            err.languageName = languageName;
            err.badRule = lastMatch.rule;
            throw err;
          }
          return 1;
        }
        lastMatch = match;
        if (match.type === "begin") {
          return doBeginMatch(match);
        } else if (match.type === "illegal" && !ignoreIllegals) {
          const err = new Error('Illegal lexeme "' + lexeme + '" for mode "' + (top.scope || "<unnamed>") + '"');
          err.mode = top;
          throw err;
        } else if (match.type === "end") {
          const processed = doEndMatch(match);
          if (processed !== NO_MATCH) {
            return processed;
          }
        }
        if (match.type === "illegal" && lexeme === "") {
          modeBuffer += "\n";
          return 1;
        }
        if (iterations > 1e5 && iterations > match.index * 3) {
          const err = new Error("potential infinite loop, way more iterations than matches");
          throw err;
        }
        modeBuffer += lexeme;
        return lexeme.length;
      }
      const language = getLanguage(languageName);
      if (!language) {
        error(LANGUAGE_NOT_FOUND.replace("{}", languageName));
        throw new Error('Unknown language: "' + languageName + '"');
      }
      const md = compileLanguage(language);
      let result = "";
      let top = continuation || md;
      const continuations = {};
      const emitter = new options.__emitter(options);
      processContinuations();
      let modeBuffer = "";
      let relevance = 0;
      let index2 = 0;
      let iterations = 0;
      let resumeScanAtSamePosition = false;
      try {
        if (!language.__emitTokens) {
          top.matcher.considerAll();
          for (; ; ) {
            iterations++;
            if (resumeScanAtSamePosition) {
              resumeScanAtSamePosition = false;
            } else {
              top.matcher.considerAll();
            }
            top.matcher.lastIndex = index2;
            const match = top.matcher.exec(codeToHighlight);
            if (!match) break;
            const beforeMatch = codeToHighlight.substring(index2, match.index);
            const processedCount = processLexeme(beforeMatch, match);
            index2 = match.index + processedCount;
          }
          processLexeme(codeToHighlight.substring(index2));
        } else {
          language.__emitTokens(codeToHighlight, emitter);
        }
        emitter.finalize();
        result = emitter.toHTML();
        return {
          language: languageName,
          value: result,
          relevance,
          illegal: false,
          _emitter: emitter,
          _top: top
        };
      } catch (err) {
        if (err.message && err.message.includes("Illegal")) {
          return {
            language: languageName,
            value: escape2(codeToHighlight),
            illegal: true,
            relevance: 0,
            _illegalBy: {
              message: err.message,
              index: index2,
              context: codeToHighlight.slice(index2 - 100, index2 + 100),
              mode: err.mode,
              resultSoFar: result
            },
            _emitter: emitter
          };
        } else if (SAFE_MODE) {
          return {
            language: languageName,
            value: escape2(codeToHighlight),
            illegal: false,
            relevance: 0,
            errorRaised: err,
            _emitter: emitter,
            _top: top
          };
        } else {
          throw err;
        }
      }
    }
    function justTextHighlightResult(code) {
      const result = {
        value: escape2(code),
        illegal: false,
        relevance: 0,
        _top: PLAINTEXT_LANGUAGE,
        _emitter: new options.__emitter(options)
      };
      result._emitter.addText(code);
      return result;
    }
    function highlightAuto(code, languageSubset) {
      languageSubset = languageSubset || options.languages || Object.keys(languages);
      const plaintext2 = justTextHighlightResult(code);
      const results = languageSubset.filter(getLanguage).filter(autoDetection).map(
        (name) => _highlight(name, code, false)
      );
      results.unshift(plaintext2);
      const sorted = results.sort((a2, b2) => {
        if (a2.relevance !== b2.relevance) return b2.relevance - a2.relevance;
        if (a2.language && b2.language) {
          if (getLanguage(a2.language).supersetOf === b2.language) {
            return 1;
          } else if (getLanguage(b2.language).supersetOf === a2.language) {
            return -1;
          }
        }
        return 0;
      });
      const [best, secondBest] = sorted;
      const result = best;
      result.secondBest = secondBest;
      return result;
    }
    function updateClassName(element, currentLang, resultLang) {
      const language = currentLang && aliases[currentLang] || resultLang;
      element.classList.add("hljs");
      element.classList.add(`language-${language}`);
    }
    function highlightElement(element) {
      let node = null;
      const language = blockLanguage(element);
      if (shouldNotHighlight(language)) return;
      fire(
        "before:highlightElement",
        { el: element, language }
      );
      if (element.dataset.highlighted) {
        console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.", element);
        return;
      }
      if (element.children.length > 0) {
        if (!options.ignoreUnescapedHTML) {
          console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk.");
          console.warn("https://github.com/highlightjs/highlight.js/wiki/security");
          console.warn("The element with unescaped HTML:");
          console.warn(element);
        }
        if (options.throwUnescapedHTML) {
          const err = new HTMLInjectionError(
            "One of your code blocks includes unescaped HTML.",
            element.innerHTML
          );
          throw err;
        }
      }
      node = element;
      const text = node.textContent;
      const result = language ? highlight2(text, { language, ignoreIllegals: true }) : highlightAuto(text);
      element.innerHTML = result.value;
      element.dataset.highlighted = "yes";
      updateClassName(element, language, result.language);
      element.result = {
        language: result.language,
        // TODO: remove with version 11.0
        re: result.relevance,
        relevance: result.relevance
      };
      if (result.secondBest) {
        element.secondBest = {
          language: result.secondBest.language,
          relevance: result.secondBest.relevance
        };
      }
      fire("after:highlightElement", { el: element, result, text });
    }
    function configure(userOptions) {
      options = inherit(options, userOptions);
    }
    const initHighlighting = () => {
      highlightAll();
      deprecated("10.6.0", "initHighlighting() deprecated.  Use highlightAll() now.");
    };
    function initHighlightingOnLoad() {
      highlightAll();
      deprecated("10.6.0", "initHighlightingOnLoad() deprecated.  Use highlightAll() now.");
    }
    let wantsHighlight = false;
    function highlightAll() {
      function boot() {
        highlightAll();
      }
      if (document.readyState === "loading") {
        if (!wantsHighlight) {
          window.addEventListener("DOMContentLoaded", boot, false);
        }
        wantsHighlight = true;
        return;
      }
      const blocks = document.querySelectorAll(options.cssSelector);
      blocks.forEach(highlightElement);
    }
    function registerLanguage(languageName, languageDefinition) {
      let lang = null;
      try {
        lang = languageDefinition(hljs);
      } catch (error$1) {
        error("Language definition for '{}' could not be registered.".replace("{}", languageName));
        if (!SAFE_MODE) {
          throw error$1;
        } else {
          error(error$1);
        }
        lang = PLAINTEXT_LANGUAGE;
      }
      if (!lang.name) lang.name = languageName;
      languages[languageName] = lang;
      lang.rawDefinition = languageDefinition.bind(null, hljs);
      if (lang.aliases) {
        registerAliases(lang.aliases, { languageName });
      }
    }
    function unregisterLanguage(languageName) {
      delete languages[languageName];
      for (const alias of Object.keys(aliases)) {
        if (aliases[alias] === languageName) {
          delete aliases[alias];
        }
      }
    }
    function listLanguages() {
      return Object.keys(languages);
    }
    function getLanguage(name) {
      name = (name || "").toLowerCase();
      return languages[name] || languages[aliases[name]];
    }
    function registerAliases(aliasList, { languageName }) {
      if (typeof aliasList === "string") {
        aliasList = [aliasList];
      }
      aliasList.forEach((alias) => {
        aliases[alias.toLowerCase()] = languageName;
      });
    }
    function autoDetection(name) {
      const lang = getLanguage(name);
      return lang && !lang.disableAutodetect;
    }
    function upgradePluginAPI(plugin) {
      if (plugin["before:highlightBlock"] && !plugin["before:highlightElement"]) {
        plugin["before:highlightElement"] = (data) => {
          plugin["before:highlightBlock"](
            Object.assign({ block: data.el }, data)
          );
        };
      }
      if (plugin["after:highlightBlock"] && !plugin["after:highlightElement"]) {
        plugin["after:highlightElement"] = (data) => {
          plugin["after:highlightBlock"](
            Object.assign({ block: data.el }, data)
          );
        };
      }
    }
    function addPlugin(plugin) {
      upgradePluginAPI(plugin);
      plugins.push(plugin);
    }
    function removePlugin(plugin) {
      const index2 = plugins.indexOf(plugin);
      if (index2 !== -1) {
        plugins.splice(index2, 1);
      }
    }
    function fire(event, args) {
      const cb2 = event;
      plugins.forEach(function(plugin) {
        if (plugin[cb2]) {
          plugin[cb2](args);
        }
      });
    }
    function deprecateHighlightBlock(el) {
      deprecated("10.7.0", "highlightBlock will be removed entirely in v12.0");
      deprecated("10.7.0", "Please use highlightElement now.");
      return highlightElement(el);
    }
    Object.assign(hljs, {
      highlight: highlight2,
      highlightAuto,
      highlightAll,
      highlightElement,
      // TODO: Remove with v12 API
      highlightBlock: deprecateHighlightBlock,
      configure,
      initHighlighting,
      initHighlightingOnLoad,
      registerLanguage,
      unregisterLanguage,
      listLanguages,
      getLanguage,
      registerAliases,
      autoDetection,
      inherit,
      addPlugin,
      removePlugin
    });
    hljs.debugMode = function() {
      SAFE_MODE = false;
    };
    hljs.safeMode = function() {
      SAFE_MODE = true;
    };
    hljs.versionString = version2;
    hljs.regex = {
      concat: concat2,
      lookahead: lookahead2,
      either: either2,
      optional,
      anyNumberOfTimes
    };
    for (const key in MODES2) {
      if (typeof MODES2[key] === "object") {
        deepFreeze(MODES2[key]);
      }
    }
    Object.assign(hljs, MODES2);
    return hljs;
  };
  const highlight = HLJS({});
  highlight.newInstance = () => HLJS({});
  core = highlight;
  highlight.HighlightJS = highlight;
  highlight.default = highlight;
  return core;
}
var coreExports = /* @__PURE__ */ requireCore();
const HighlightJS = /* @__PURE__ */ getDefaultExportFromCjs(coreExports);
function parseNodes(nodes, className = []) {
  return nodes.flatMap((node) => {
    const classes = [...className, ...node.properties ? node.properties.className : []];
    if (node.children) {
      return parseNodes(node.children, classes);
    }
    return {
      text: node.value,
      classes
    };
  });
}
function getHighlightNodes(result) {
  return result.value || result.children || [];
}
function registered(aliasOrLanguage) {
  return Boolean(HighlightJS.getLanguage(aliasOrLanguage));
}
function getDecorations({
  doc: doc2,
  name,
  lowlight,
  defaultLanguage
}) {
  const decorations = [];
  findChildren(doc2, (node) => node.type.name === name).forEach((block) => {
    var _a2;
    let from2 = block.pos + 1;
    const language = block.node.attrs.language || defaultLanguage;
    const languages = lowlight.listLanguages();
    const nodes = language && (languages.includes(language) || registered(language) || ((_a2 = lowlight.registered) == null ? void 0 : _a2.call(lowlight, language))) ? getHighlightNodes(lowlight.highlight(language, block.node.textContent)) : getHighlightNodes(lowlight.highlightAuto(block.node.textContent));
    parseNodes(nodes).forEach((node) => {
      const to = from2 + node.text.length;
      if (node.classes.length) {
        const decoration = Decoration.inline(from2, to, {
          class: node.classes.join(" ")
        });
        decorations.push(decoration);
      }
      from2 = to;
    });
  });
  return DecorationSet.create(doc2, decorations);
}
function isFunction(param) {
  return typeof param === "function";
}
function LowlightPlugin({
  name,
  lowlight,
  defaultLanguage
}) {
  if (!["highlight", "highlightAuto", "listLanguages"].every((api) => isFunction(lowlight[api]))) {
    throw Error("You should provide an instance of lowlight to use the code-block-lowlight extension");
  }
  const lowlightPlugin = new Plugin({
    key: new PluginKey("lowlight"),
    state: {
      init: (_2, { doc: doc2 }) => getDecorations({
        doc: doc2,
        name,
        lowlight,
        defaultLanguage
      }),
      apply: (transaction, decorationSet, oldState, newState) => {
        const oldNodeName = oldState.selection.$head.parent.type.name;
        const newNodeName = newState.selection.$head.parent.type.name;
        const oldNodes = findChildren(oldState.doc, (node) => node.type.name === name);
        const newNodes = findChildren(newState.doc, (node) => node.type.name === name);
        if (transaction.docChanged && // Apply decorations if:
        // selection includes named node,
        ([oldNodeName, newNodeName].includes(name) || // OR transaction adds/removes named node,
        newNodes.length !== oldNodes.length || // OR transaction has changes that completely encapsulte a node
        // (for example, a transaction that affects the entire document).
        // Such transactions can happen during collab syncing via y-prosemirror, for example.
        transaction.steps.some((step) => {
          return (
            // @ts-ignore
            step.from !== void 0 && // @ts-ignore
            step.to !== void 0 && oldNodes.some((node) => {
              return (
                // @ts-ignore
                node.pos >= step.from && // @ts-ignore
                node.pos + node.node.nodeSize <= step.to
              );
            })
          );
        }))) {
          return getDecorations({
            doc: transaction.doc,
            name,
            lowlight,
            defaultLanguage
          });
        }
        return decorationSet.map(transaction.mapping, transaction.doc);
      }
    },
    props: {
      decorations(state) {
        return lowlightPlugin.getState(state);
      }
    }
  });
  return lowlightPlugin;
}
var CodeBlockLowlight = CodeBlock.extend({
  addOptions() {
    var _a2;
    return {
      ...(_a2 = this.parent) == null ? void 0 : _a2.call(this),
      lowlight: {},
      languageClassPrefix: "language-",
      exitOnTripleEnter: true,
      exitOnArrowDown: true,
      defaultLanguage: null,
      enableTabIndentation: false,
      tabSize: 4,
      HTMLAttributes: {}
    };
  },
  addProseMirrorPlugins() {
    var _a2;
    return [
      ...((_a2 = this.parent) == null ? void 0 : _a2.call(this)) || [],
      LowlightPlugin({
        name: this.name,
        lowlight: this.options.lowlight,
        defaultLanguage: this.options.defaultLanguage
      })
    ];
  }
});
var index_default$2 = CodeBlockLowlight;
var __defProp = Object.defineProperty;
var __export = (target, all) => {
  for (var name in all)
    __defProp(target, name, { get: all[name], enumerable: true });
};
var ListItemName = "listItem";
var TextStyleName = "textStyle";
var bulletListInputRegex = /^\s*([-+*])\s$/;
var BulletList = Node3.create({
  name: "bulletList",
  addOptions() {
    return {
      itemTypeName: "listItem",
      HTMLAttributes: {},
      keepMarks: false,
      keepAttributes: false
    };
  },
  group: "block list",
  content() {
    return `${this.options.itemTypeName}+`;
  },
  parseHTML() {
    return [{ tag: "ul" }];
  },
  renderHTML({ HTMLAttributes }) {
    return ["ul", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
  },
  markdownTokenName: "list",
  parseMarkdown: (token2, helpers) => {
    if (token2.type !== "list" || token2.ordered) {
      return [];
    }
    return {
      type: "bulletList",
      content: token2.items ? helpers.parseChildren(token2.items) : []
    };
  },
  renderMarkdown: (node, h2) => {
    if (!node.content) {
      return "";
    }
    return h2.renderChildren(node.content, "\n");
  },
  markdownOptions: {
    indentsContent: true
  },
  addCommands() {
    return {
      toggleBulletList: () => ({ commands, chain }) => {
        if (this.options.keepAttributes) {
          return chain().toggleList(this.name, this.options.itemTypeName, this.options.keepMarks).updateAttributes(ListItemName, this.editor.getAttributes(TextStyleName)).run();
        }
        return commands.toggleList(this.name, this.options.itemTypeName, this.options.keepMarks);
      }
    };
  },
  addKeyboardShortcuts() {
    return {
      "Mod-Shift-8": () => this.editor.commands.toggleBulletList()
    };
  },
  addInputRules() {
    let inputRule = wrappingInputRule({
      find: bulletListInputRegex,
      type: this.type
    });
    if (this.options.keepMarks || this.options.keepAttributes) {
      inputRule = wrappingInputRule({
        find: bulletListInputRegex,
        type: this.type,
        keepMarks: this.options.keepMarks,
        keepAttributes: this.options.keepAttributes,
        getAttributes: () => {
          return this.editor.getAttributes(TextStyleName);
        },
        editor: this.editor
      });
    }
    return [inputRule];
  }
});
var ListItem = Node3.create({
  name: "listItem",
  addOptions() {
    return {
      HTMLAttributes: {},
      bulletListTypeName: "bulletList",
      orderedListTypeName: "orderedList"
    };
  },
  content: "paragraph block*",
  defining: true,
  parseHTML() {
    return [
      {
        tag: "li"
      }
    ];
  },
  renderHTML({ HTMLAttributes }) {
    return ["li", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
  },
  markdownTokenName: "list_item",
  parseMarkdown: (token2, helpers) => {
    if (token2.type !== "list_item") {
      return [];
    }
    let content = [];
    if (token2.tokens && token2.tokens.length > 0) {
      const hasParagraphTokens = token2.tokens.some((t2) => t2.type === "paragraph");
      if (hasParagraphTokens) {
        content = helpers.parseChildren(token2.tokens);
      } else {
        const firstToken = token2.tokens[0];
        if (firstToken && firstToken.type === "text" && firstToken.tokens && firstToken.tokens.length > 0) {
          const inlineContent = helpers.parseInline(firstToken.tokens);
          content = [
            {
              type: "paragraph",
              content: inlineContent
            }
          ];
          if (token2.tokens.length > 1) {
            const remainingTokens = token2.tokens.slice(1);
            const additionalContent = helpers.parseChildren(remainingTokens);
            content.push(...additionalContent);
          }
        } else {
          content = helpers.parseChildren(token2.tokens);
        }
      }
    }
    if (content.length === 0) {
      content = [
        {
          type: "paragraph",
          content: []
        }
      ];
    }
    return {
      type: "listItem",
      content
    };
  },
  renderMarkdown: (node, h2, ctx) => {
    return renderNestedMarkdownContent(
      node,
      h2,
      (context) => {
        var _a2, _b;
        if (context.parentType === "bulletList") {
          return "- ";
        }
        if (context.parentType === "orderedList") {
          const start = ((_b = (_a2 = context.meta) == null ? void 0 : _a2.parentAttrs) == null ? void 0 : _b.start) || 1;
          return `${start + context.index}. `;
        }
        return "- ";
      },
      ctx
    );
  },
  addKeyboardShortcuts() {
    return {
      Enter: () => this.editor.commands.splitListItem(this.name),
      Tab: () => this.editor.commands.sinkListItem(this.name),
      "Shift-Tab": () => this.editor.commands.liftListItem(this.name)
    };
  }
});
var listHelpers_exports = {};
__export(listHelpers_exports, {
  findListItemPos: () => findListItemPos,
  getNextListDepth: () => getNextListDepth,
  handleBackspace: () => handleBackspace,
  handleDelete: () => handleDelete,
  hasListBefore: () => hasListBefore,
  hasListItemAfter: () => hasListItemAfter,
  hasListItemBefore: () => hasListItemBefore,
  listItemHasSubList: () => listItemHasSubList,
  nextListIsDeeper: () => nextListIsDeeper,
  nextListIsHigher: () => nextListIsHigher
});
var findListItemPos = (typeOrName, state) => {
  const { $from } = state.selection;
  const nodeType = getNodeType(typeOrName, state.schema);
  let currentNode = null;
  let currentDepth = $from.depth;
  let currentPos = $from.pos;
  let targetDepth = null;
  while (currentDepth > 0 && targetDepth === null) {
    currentNode = $from.node(currentDepth);
    if (currentNode.type === nodeType) {
      targetDepth = currentDepth;
    } else {
      currentDepth -= 1;
      currentPos -= 1;
    }
  }
  if (targetDepth === null) {
    return null;
  }
  return { $pos: state.doc.resolve(currentPos), depth: targetDepth };
};
var getNextListDepth = (typeOrName, state) => {
  const listItemPos = findListItemPos(typeOrName, state);
  if (!listItemPos) {
    return false;
  }
  const [, depth] = getNodeAtPosition(state, typeOrName, listItemPos.$pos.pos + 4);
  return depth;
};
var hasListBefore = (editorState, name, parentListTypes) => {
  const { $anchor } = editorState.selection;
  const previousNodePos = Math.max(0, $anchor.pos - 2);
  const previousNode = editorState.doc.resolve(previousNodePos).node();
  if (!previousNode || !parentListTypes.includes(previousNode.type.name)) {
    return false;
  }
  return true;
};
var hasListItemBefore = (typeOrName, state) => {
  var _a2;
  const { $anchor } = state.selection;
  const $targetPos = state.doc.resolve($anchor.pos - 2);
  if ($targetPos.index() === 0) {
    return false;
  }
  if (((_a2 = $targetPos.nodeBefore) == null ? void 0 : _a2.type.name) !== typeOrName) {
    return false;
  }
  return true;
};
var listItemHasSubList = (typeOrName, state, node) => {
  if (!node) {
    return false;
  }
  const nodeType = getNodeType(typeOrName, state.schema);
  let hasSubList = false;
  node.descendants((child) => {
    if (child.type === nodeType) {
      hasSubList = true;
    }
  });
  return hasSubList;
};
var handleBackspace = (editor, name, parentListTypes) => {
  if (editor.commands.undoInputRule()) {
    return true;
  }
  if (editor.state.selection.from !== editor.state.selection.to) {
    return false;
  }
  if (!isNodeActive(editor.state, name) && hasListBefore(editor.state, name, parentListTypes)) {
    const { $anchor } = editor.state.selection;
    const $listPos = editor.state.doc.resolve($anchor.before() - 1);
    const listDescendants = [];
    $listPos.node().descendants((node, pos) => {
      if (node.type.name === name) {
        listDescendants.push({ node, pos });
      }
    });
    const lastItem = listDescendants.at(-1);
    if (!lastItem) {
      return false;
    }
    const $lastItemPos = editor.state.doc.resolve($listPos.start() + lastItem.pos + 1);
    return editor.chain().cut({ from: $anchor.start() - 1, to: $anchor.end() + 1 }, $lastItemPos.end()).joinForward().run();
  }
  if (!isNodeActive(editor.state, name)) {
    return false;
  }
  if (!isAtStartOfNode(editor.state)) {
    return false;
  }
  const listItemPos = findListItemPos(name, editor.state);
  if (!listItemPos) {
    return false;
  }
  const $prev = editor.state.doc.resolve(listItemPos.$pos.pos - 2);
  const prevNode = $prev.node(listItemPos.depth);
  const previousListItemHasSubList = listItemHasSubList(name, editor.state, prevNode);
  if (hasListItemBefore(name, editor.state) && !previousListItemHasSubList) {
    return editor.commands.joinItemBackward();
  }
  return editor.chain().liftListItem(name).run();
};
var nextListIsDeeper = (typeOrName, state) => {
  const listDepth = getNextListDepth(typeOrName, state);
  const listItemPos = findListItemPos(typeOrName, state);
  if (!listItemPos || !listDepth) {
    return false;
  }
  if (listDepth > listItemPos.depth) {
    return true;
  }
  return false;
};
var nextListIsHigher = (typeOrName, state) => {
  const listDepth = getNextListDepth(typeOrName, state);
  const listItemPos = findListItemPos(typeOrName, state);
  if (!listItemPos || !listDepth) {
    return false;
  }
  if (listDepth < listItemPos.depth) {
    return true;
  }
  return false;
};
var handleDelete = (editor, name) => {
  if (!isNodeActive(editor.state, name)) {
    return false;
  }
  if (!isAtEndOfNode(editor.state, name)) {
    return false;
  }
  const { selection } = editor.state;
  const { $from, $to } = selection;
  if (!selection.empty && $from.sameParent($to)) {
    return false;
  }
  if (nextListIsDeeper(name, editor.state)) {
    return editor.chain().focus(editor.state.selection.from + 4).lift(name).joinBackward().run();
  }
  if (nextListIsHigher(name, editor.state)) {
    return editor.chain().joinForward().joinBackward().run();
  }
  return editor.commands.joinItemForward();
};
var hasListItemAfter = (typeOrName, state) => {
  var _a2;
  const { $anchor } = state.selection;
  const $targetPos = state.doc.resolve($anchor.pos - $anchor.parentOffset - 2);
  if ($targetPos.index() === $targetPos.parent.childCount - 1) {
    return false;
  }
  if (((_a2 = $targetPos.nodeAfter) == null ? void 0 : _a2.type.name) !== typeOrName) {
    return false;
  }
  return true;
};
var ListKeymap = Extension.create({
  name: "listKeymap",
  addOptions() {
    return {
      listTypes: [
        {
          itemName: "listItem",
          wrapperNames: ["bulletList", "orderedList"]
        },
        {
          itemName: "taskItem",
          wrapperNames: ["taskList"]
        }
      ]
    };
  },
  addKeyboardShortcuts() {
    return {
      Delete: ({ editor }) => {
        let handled = false;
        this.options.listTypes.forEach(({ itemName }) => {
          if (editor.state.schema.nodes[itemName] === void 0) {
            return;
          }
          if (handleDelete(editor, itemName)) {
            handled = true;
          }
        });
        return handled;
      },
      "Mod-Delete": ({ editor }) => {
        let handled = false;
        this.options.listTypes.forEach(({ itemName }) => {
          if (editor.state.schema.nodes[itemName] === void 0) {
            return;
          }
          if (handleDelete(editor, itemName)) {
            handled = true;
          }
        });
        return handled;
      },
      Backspace: ({ editor }) => {
        let handled = false;
        this.options.listTypes.forEach(({ itemName, wrapperNames }) => {
          if (editor.state.schema.nodes[itemName] === void 0) {
            return;
          }
          if (handleBackspace(editor, itemName, wrapperNames)) {
            handled = true;
          }
        });
        return handled;
      },
      "Mod-Backspace": ({ editor }) => {
        let handled = false;
        this.options.listTypes.forEach(({ itemName, wrapperNames }) => {
          if (editor.state.schema.nodes[itemName] === void 0) {
            return;
          }
          if (handleBackspace(editor, itemName, wrapperNames)) {
            handled = true;
          }
        });
        return handled;
      }
    };
  }
});
var ORDERED_LIST_ITEM_REGEX = /^(\s*)(\d+)\.\s+(.*)$/;
var INDENTED_LINE_REGEX = /^\s/;
function collectOrderedListItems(lines) {
  const listItems = [];
  let currentLineIndex = 0;
  let consumed = 0;
  while (currentLineIndex < lines.length) {
    const line = lines[currentLineIndex];
    const match = line.match(ORDERED_LIST_ITEM_REGEX);
    if (!match) {
      break;
    }
    const [, indent, number, content] = match;
    const indentLevel = indent.length;
    let itemContent = content;
    let nextLineIndex = currentLineIndex + 1;
    const itemLines = [line];
    while (nextLineIndex < lines.length) {
      const nextLine = lines[nextLineIndex];
      const nextMatch = nextLine.match(ORDERED_LIST_ITEM_REGEX);
      if (nextMatch) {
        break;
      }
      if (nextLine.trim() === "") {
        itemLines.push(nextLine);
        itemContent += "\n";
        nextLineIndex += 1;
      } else if (nextLine.match(INDENTED_LINE_REGEX)) {
        itemLines.push(nextLine);
        itemContent += `
${nextLine.slice(indentLevel + 2)}`;
        nextLineIndex += 1;
      } else {
        break;
      }
    }
    listItems.push({
      indent: indentLevel,
      number: parseInt(number, 10),
      content: itemContent.trim(),
      raw: itemLines.join("\n")
    });
    consumed = nextLineIndex;
    currentLineIndex = nextLineIndex;
  }
  return [listItems, consumed];
}
function buildNestedStructure(items, baseIndent, lexer) {
  var _a2;
  const result = [];
  let currentIndex = 0;
  while (currentIndex < items.length) {
    const item = items[currentIndex];
    if (item.indent === baseIndent) {
      const contentLines = item.content.split("\n");
      const mainText = ((_a2 = contentLines[0]) == null ? void 0 : _a2.trim()) || "";
      const tokens = [];
      if (mainText) {
        tokens.push({
          type: "paragraph",
          raw: mainText,
          tokens: lexer.inlineTokens(mainText)
        });
      }
      const additionalContent = contentLines.slice(1).join("\n").trim();
      if (additionalContent) {
        const blockTokens = lexer.blockTokens(additionalContent);
        tokens.push(...blockTokens);
      }
      let lookAheadIndex = currentIndex + 1;
      const nestedItems = [];
      while (lookAheadIndex < items.length && items[lookAheadIndex].indent > baseIndent) {
        nestedItems.push(items[lookAheadIndex]);
        lookAheadIndex += 1;
      }
      if (nestedItems.length > 0) {
        const nextIndent = Math.min(...nestedItems.map((nestedItem) => nestedItem.indent));
        const nestedListItems = buildNestedStructure(nestedItems, nextIndent, lexer);
        tokens.push({
          type: "list",
          ordered: true,
          start: nestedItems[0].number,
          items: nestedListItems,
          raw: nestedItems.map((nestedItem) => nestedItem.raw).join("\n")
        });
      }
      result.push({
        type: "list_item",
        raw: item.raw,
        tokens
      });
      currentIndex = lookAheadIndex;
    } else {
      currentIndex += 1;
    }
  }
  return result;
}
function parseListItems(items, helpers) {
  return items.map((item) => {
    if (item.type !== "list_item") {
      return helpers.parseChildren([item])[0];
    }
    const content = [];
    if (item.tokens && item.tokens.length > 0) {
      item.tokens.forEach((itemToken) => {
        if (itemToken.type === "paragraph" || itemToken.type === "list" || itemToken.type === "blockquote" || itemToken.type === "code") {
          content.push(...helpers.parseChildren([itemToken]));
        } else if (itemToken.type === "text" && itemToken.tokens) {
          const inlineContent = helpers.parseChildren([itemToken]);
          content.push({
            type: "paragraph",
            content: inlineContent
          });
        } else {
          const parsed = helpers.parseChildren([itemToken]);
          if (parsed.length > 0) {
            content.push(...parsed);
          }
        }
      });
    }
    return {
      type: "listItem",
      content
    };
  });
}
var ListItemName2 = "listItem";
var TextStyleName2 = "textStyle";
var orderedListInputRegex = /^(\d+)\.\s$/;
var OrderedList = Node3.create({
  name: "orderedList",
  addOptions() {
    return {
      itemTypeName: "listItem",
      HTMLAttributes: {},
      keepMarks: false,
      keepAttributes: false
    };
  },
  group: "block list",
  content() {
    return `${this.options.itemTypeName}+`;
  },
  addAttributes() {
    return {
      start: {
        default: 1,
        parseHTML: (element) => {
          return element.hasAttribute("start") ? parseInt(element.getAttribute("start") || "", 10) : 1;
        }
      },
      type: {
        default: null,
        parseHTML: (element) => element.getAttribute("type")
      }
    };
  },
  parseHTML() {
    return [
      {
        tag: "ol"
      }
    ];
  },
  renderHTML({ HTMLAttributes }) {
    const { start, ...attributesWithoutStart } = HTMLAttributes;
    return start === 1 ? ["ol", mergeAttributes(this.options.HTMLAttributes, attributesWithoutStart), 0] : ["ol", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
  },
  markdownTokenName: "list",
  parseMarkdown: (token2, helpers) => {
    if (token2.type !== "list" || !token2.ordered) {
      return [];
    }
    const startValue = token2.start || 1;
    const content = token2.items ? parseListItems(token2.items, helpers) : [];
    if (startValue !== 1) {
      return {
        type: "orderedList",
        attrs: { start: startValue },
        content
      };
    }
    return {
      type: "orderedList",
      content
    };
  },
  renderMarkdown: (node, h2) => {
    if (!node.content) {
      return "";
    }
    return h2.renderChildren(node.content, "\n");
  },
  markdownTokenizer: {
    name: "orderedList",
    level: "block",
    start: (src) => {
      const match = src.match(/^(\s*)(\d+)\.\s+/);
      const index2 = match == null ? void 0 : match.index;
      return index2 !== void 0 ? index2 : -1;
    },
    tokenize: (src, _tokens, lexer) => {
      var _a2;
      const lines = src.split("\n");
      const [listItems, consumed] = collectOrderedListItems(lines);
      if (listItems.length === 0) {
        return void 0;
      }
      const items = buildNestedStructure(listItems, 0, lexer);
      if (items.length === 0) {
        return void 0;
      }
      const startValue = ((_a2 = listItems[0]) == null ? void 0 : _a2.number) || 1;
      return {
        type: "list",
        ordered: true,
        start: startValue,
        items,
        raw: lines.slice(0, consumed).join("\n")
      };
    }
  },
  markdownOptions: {
    indentsContent: true
  },
  addCommands() {
    return {
      toggleOrderedList: () => ({ commands, chain }) => {
        if (this.options.keepAttributes) {
          return chain().toggleList(this.name, this.options.itemTypeName, this.options.keepMarks).updateAttributes(ListItemName2, this.editor.getAttributes(TextStyleName2)).run();
        }
        return commands.toggleList(this.name, this.options.itemTypeName, this.options.keepMarks);
      }
    };
  },
  addKeyboardShortcuts() {
    return {
      "Mod-Shift-7": () => this.editor.commands.toggleOrderedList()
    };
  },
  addInputRules() {
    let inputRule = wrappingInputRule({
      find: orderedListInputRegex,
      type: this.type,
      getAttributes: (match) => ({ start: +match[1] }),
      joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1]
    });
    if (this.options.keepMarks || this.options.keepAttributes) {
      inputRule = wrappingInputRule({
        find: orderedListInputRegex,
        type: this.type,
        keepMarks: this.options.keepMarks,
        keepAttributes: this.options.keepAttributes,
        getAttributes: (match) => ({ start: +match[1], ...this.editor.getAttributes(TextStyleName2) }),
        joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1],
        editor: this.editor
      });
    }
    return [inputRule];
  }
});
var inputRegex$4 = /^\s*(\[([( |x])?\])\s$/;
var TaskItem = Node3.create({
  name: "taskItem",
  addOptions() {
    return {
      nested: false,
      HTMLAttributes: {},
      taskListTypeName: "taskList",
      a11y: void 0
    };
  },
  content() {
    return this.options.nested ? "paragraph block*" : "paragraph+";
  },
  defining: true,
  addAttributes() {
    return {
      checked: {
        default: false,
        keepOnSplit: false,
        parseHTML: (element) => {
          const dataChecked = element.getAttribute("data-checked");
          return dataChecked === "" || dataChecked === "true";
        },
        renderHTML: (attributes) => ({
          "data-checked": attributes.checked
        })
      }
    };
  },
  parseHTML() {
    return [
      {
        tag: `li[data-type="${this.name}"]`,
        priority: 51
      }
    ];
  },
  renderHTML({ node, HTMLAttributes }) {
    return [
      "li",
      mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {
        "data-type": this.name
      }),
      [
        "label",
        [
          "input",
          {
            type: "checkbox",
            checked: node.attrs.checked ? "checked" : null
          }
        ],
        ["span"]
      ],
      ["div", 0]
    ];
  },
  parseMarkdown: (token2, h2) => {
    const content = [];
    if (token2.tokens && token2.tokens.length > 0) {
      content.push(h2.createNode("paragraph", {}, h2.parseInline(token2.tokens)));
    } else if (token2.text) {
      content.push(h2.createNode("paragraph", {}, [h2.createNode("text", { text: token2.text })]));
    } else {
      content.push(h2.createNode("paragraph", {}, []));
    }
    if (token2.nestedTokens && token2.nestedTokens.length > 0) {
      const nestedContent = h2.parseChildren(token2.nestedTokens);
      content.push(...nestedContent);
    }
    return h2.createNode("taskItem", { checked: token2.checked || false }, content);
  },
  renderMarkdown: (node, h2) => {
    var _a2;
    const checkedChar = ((_a2 = node.attrs) == null ? void 0 : _a2.checked) ? "x" : " ";
    const prefix = `- [${checkedChar}] `;
    return renderNestedMarkdownContent(node, h2, prefix);
  },
  addKeyboardShortcuts() {
    const shortcuts = {
      Enter: () => this.editor.commands.splitListItem(this.name),
      "Shift-Tab": () => this.editor.commands.liftListItem(this.name)
    };
    if (!this.options.nested) {
      return shortcuts;
    }
    return {
      ...shortcuts,
      Tab: () => this.editor.commands.sinkListItem(this.name)
    };
  },
  addNodeView() {
    return ({ node, HTMLAttributes, getPos, editor }) => {
      const listItem = document.createElement("li");
      const checkboxWrapper = document.createElement("label");
      const checkboxStyler = document.createElement("span");
      const checkbox = document.createElement("input");
      const content = document.createElement("div");
      const updateA11Y = (currentNode) => {
        var _a2, _b;
        checkbox.ariaLabel = ((_b = (_a2 = this.options.a11y) == null ? void 0 : _a2.checkboxLabel) == null ? void 0 : _b.call(_a2, currentNode, checkbox.checked)) || `Task item checkbox for ${currentNode.textContent || "empty task item"}`;
      };
      updateA11Y(node);
      checkboxWrapper.contentEditable = "false";
      checkbox.type = "checkbox";
      checkbox.addEventListener("mousedown", (event) => event.preventDefault());
      checkbox.addEventListener("change", (event) => {
        if (!editor.isEditable && !this.options.onReadOnlyChecked) {
          checkbox.checked = !checkbox.checked;
          return;
        }
        const { checked } = event.target;
        if (editor.isEditable && typeof getPos === "function") {
          editor.chain().focus(void 0, { scrollIntoView: false }).command(({ tr: tr2 }) => {
            const position = getPos();
            if (typeof position !== "number") {
              return false;
            }
            const currentNode = tr2.doc.nodeAt(position);
            tr2.setNodeMarkup(position, void 0, {
              ...currentNode == null ? void 0 : currentNode.attrs,
              checked
            });
            return true;
          }).run();
        }
        if (!editor.isEditable && this.options.onReadOnlyChecked) {
          if (!this.options.onReadOnlyChecked(node, checked)) {
            checkbox.checked = !checkbox.checked;
          }
        }
      });
      Object.entries(this.options.HTMLAttributes).forEach(([key, value]) => {
        listItem.setAttribute(key, value);
      });
      listItem.dataset.checked = node.attrs.checked;
      checkbox.checked = node.attrs.checked;
      checkboxWrapper.append(checkbox, checkboxStyler);
      listItem.append(checkboxWrapper, content);
      Object.entries(HTMLAttributes).forEach(([key, value]) => {
        listItem.setAttribute(key, value);
      });
      let prevRenderedAttributeKeys = new Set(Object.keys(HTMLAttributes));
      return {
        dom: listItem,
        contentDOM: content,
        update: (updatedNode) => {
          if (updatedNode.type !== this.type) {
            return false;
          }
          listItem.dataset.checked = updatedNode.attrs.checked;
          checkbox.checked = updatedNode.attrs.checked;
          updateA11Y(updatedNode);
          const extensionAttributes = editor.extensionManager.attributes;
          const newHTMLAttributes = getRenderedAttributes(updatedNode, extensionAttributes);
          const newKeys = new Set(Object.keys(newHTMLAttributes));
          const staticAttrs = this.options.HTMLAttributes;
          prevRenderedAttributeKeys.forEach((key) => {
            if (!newKeys.has(key)) {
              if (key in staticAttrs) {
                listItem.setAttribute(key, staticAttrs[key]);
              } else {
                listItem.removeAttribute(key);
              }
            }
          });
          Object.entries(newHTMLAttributes).forEach(([key, value]) => {
            if (value === null || value === void 0) {
              if (key in staticAttrs) {
                listItem.setAttribute(key, staticAttrs[key]);
              } else {
                listItem.removeAttribute(key);
              }
            } else {
              listItem.setAttribute(key, value);
            }
          });
          prevRenderedAttributeKeys = newKeys;
          return true;
        }
      };
    };
  },
  addInputRules() {
    return [
      wrappingInputRule({
        find: inputRegex$4,
        type: this.type,
        getAttributes: (match) => ({
          checked: match[match.length - 1] === "x"
        })
      })
    ];
  }
});
var TaskList = Node3.create({
  name: "taskList",
  addOptions() {
    return {
      itemTypeName: "taskItem",
      HTMLAttributes: {}
    };
  },
  group: "block list",
  content() {
    return `${this.options.itemTypeName}+`;
  },
  parseHTML() {
    return [
      {
        tag: `ul[data-type="${this.name}"]`,
        priority: 51
      }
    ];
  },
  renderHTML({ HTMLAttributes }) {
    return ["ul", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, { "data-type": this.name }), 0];
  },
  parseMarkdown: (token2, h2) => {
    return h2.createNode("taskList", {}, h2.parseChildren(token2.items || []));
  },
  renderMarkdown: (node, h2) => {
    if (!node.content) {
      return "";
    }
    return h2.renderChildren(node.content, "\n");
  },
  markdownTokenizer: {
    name: "taskList",
    level: "block",
    start(src) {
      var _a2;
      const index2 = (_a2 = src.match(/^\s*[-+*]\s+\[([ xX])\]\s+/)) == null ? void 0 : _a2.index;
      return index2 !== void 0 ? index2 : -1;
    },
    tokenize(src, tokens, lexer) {
      const parseTaskListContent = (content) => {
        const nestedResult = parseIndentedBlocks(
          content,
          {
            itemPattern: /^(\s*)([-+*])\s+\[([ xX])\]\s+(.*)$/,
            extractItemData: (match) => ({
              indentLevel: match[1].length,
              mainContent: match[4],
              checked: match[3].toLowerCase() === "x"
            }),
            createToken: (data, nestedTokens) => ({
              type: "taskItem",
              raw: "",
              mainContent: data.mainContent,
              indentLevel: data.indentLevel,
              checked: data.checked,
              text: data.mainContent,
              tokens: lexer.inlineTokens(data.mainContent),
              nestedTokens
            }),
            // Allow recursive nesting
            customNestedParser: parseTaskListContent
          },
          lexer
        );
        if (nestedResult) {
          return [
            {
              type: "taskList",
              raw: nestedResult.raw,
              items: nestedResult.items
            }
          ];
        }
        return lexer.blockTokens(content);
      };
      const result = parseIndentedBlocks(
        src,
        {
          itemPattern: /^(\s*)([-+*])\s+\[([ xX])\]\s+(.*)$/,
          extractItemData: (match) => ({
            indentLevel: match[1].length,
            mainContent: match[4],
            checked: match[3].toLowerCase() === "x"
          }),
          createToken: (data, nestedTokens) => ({
            type: "taskItem",
            raw: "",
            mainContent: data.mainContent,
            indentLevel: data.indentLevel,
            checked: data.checked,
            text: data.mainContent,
            tokens: lexer.inlineTokens(data.mainContent),
            nestedTokens
          }),
          // Use the recursive parser for nested content
          customNestedParser: parseTaskListContent
        },
        lexer
      );
      if (!result) {
        return void 0;
      }
      return {
        type: "taskList",
        raw: result.raw,
        items: result.items
      };
    }
  },
  markdownOptions: {
    indentsContent: true
  },
  addCommands() {
    return {
      toggleTaskList: () => ({ commands }) => {
        return commands.toggleList(this.name, this.options.itemTypeName);
      }
    };
  },
  addKeyboardShortcuts() {
    return {
      "Mod-Shift-9": () => this.editor.commands.toggleTaskList()
    };
  }
});
Extension.create({
  name: "listKit",
  addExtensions() {
    const extensions = [];
    if (this.options.bulletList !== false) {
      extensions.push(BulletList.configure(this.options.bulletList));
    }
    if (this.options.listItem !== false) {
      extensions.push(ListItem.configure(this.options.listItem));
    }
    if (this.options.listKeymap !== false) {
      extensions.push(ListKeymap.configure(this.options.listKeymap));
    }
    if (this.options.orderedList !== false) {
      extensions.push(OrderedList.configure(this.options.orderedList));
    }
    if (this.options.taskItem !== false) {
      extensions.push(TaskItem.configure(this.options.taskItem));
    }
    if (this.options.taskList !== false) {
      extensions.push(TaskList.configure(this.options.taskList));
    }
    return extensions;
  }
});
var inputRegex$3 = /(?:^|\s)(==(?!\s+==)((?:[^=]+))==(?!\s+==))$/;
var pasteRegex$2 = /(?:^|\s)(==(?!\s+==)((?:[^=]+))==(?!\s+==))/g;
var Highlight = Mark2.create({
  name: "highlight",
  addOptions() {
    return {
      multicolor: false,
      HTMLAttributes: {}
    };
  },
  addAttributes() {
    if (!this.options.multicolor) {
      return {};
    }
    return {
      color: {
        default: null,
        parseHTML: (element) => element.getAttribute("data-color") || element.style.backgroundColor,
        renderHTML: (attributes) => {
          if (!attributes.color) {
            return {};
          }
          return {
            "data-color": attributes.color,
            style: `background-color: ${attributes.color}; color: inherit`
          };
        }
      }
    };
  },
  parseHTML() {
    return [
      {
        tag: "mark"
      }
    ];
  },
  renderHTML({ HTMLAttributes }) {
    return ["mark", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
  },
  renderMarkdown: (node, h2) => {
    return `==${h2.renderChildren(node)}==`;
  },
  parseMarkdown: (token2, h2) => {
    return h2.applyMark("highlight", h2.parseInline(token2.tokens || []));
  },
  markdownTokenizer: {
    name: "highlight",
    level: "inline",
    start: (src) => src.indexOf("=="),
    tokenize(src, _2, h2) {
      const rule = /^(==)([^=]+)(==)/;
      const match = rule.exec(src);
      if (match) {
        const innerContent = match[2].trim();
        const children = h2.inlineTokens(innerContent);
        return {
          type: "highlight",
          raw: match[0],
          text: innerContent,
          tokens: children
        };
      }
    }
  },
  addCommands() {
    return {
      setHighlight: (attributes) => ({ commands }) => {
        return commands.setMark(this.name, attributes);
      },
      toggleHighlight: (attributes) => ({ commands }) => {
        return commands.toggleMark(this.name, attributes);
      },
      unsetHighlight: () => ({ commands }) => {
        return commands.unsetMark(this.name);
      }
    };
  },
  addKeyboardShortcuts() {
    return {
      "Mod-Shift-h": () => this.editor.commands.toggleHighlight()
    };
  },
  addInputRules() {
    return [
      markInputRule({
        find: inputRegex$3,
        type: this.type
      })
    ];
  },
  addPasteRules() {
    return [
      markPasteRule({
        find: pasteRegex$2,
        type: this.type
      })
    ];
  }
});
function useDebouncedRef(value) {
  return customRef((track2, trigger2) => {
    return {
      get() {
        track2();
        return value;
      },
      set(newValue) {
        value = newValue;
        requestAnimationFrame(() => {
          requestAnimationFrame(() => {
            trigger2();
          });
        });
      }
    };
  });
}
var Editor2 = class extends Editor$1 {
  constructor(options = {}) {
    super(options);
    this.contentComponent = null;
    this.appContext = null;
    this.reactiveState = useDebouncedRef(this.view.state);
    this.reactiveExtensionStorage = useDebouncedRef(this.extensionStorage);
    this.on("beforeTransaction", ({ nextState }) => {
      this.reactiveState.value = nextState;
      this.reactiveExtensionStorage.value = this.extensionStorage;
    });
    return markRaw(this);
  }
  get state() {
    return this.reactiveState ? this.reactiveState.value : this.view.state;
  }
  get storage() {
    return this.reactiveExtensionStorage ? this.reactiveExtensionStorage.value : super.storage;
  }
  /**
   * Register a ProseMirror plugin.
   */
  registerPlugin(plugin, handlePlugins) {
    const nextState = super.registerPlugin(plugin, handlePlugins);
    if (this.reactiveState) {
      this.reactiveState.value = nextState;
    }
    return nextState;
  }
  /**
   * Unregister a ProseMirror plugin.
   */
  unregisterPlugin(nameOrPluginKey) {
    const nextState = super.unregisterPlugin(nameOrPluginKey);
    if (this.reactiveState && nextState) {
      this.reactiveState.value = nextState;
    }
    return nextState;
  }
};
var EditorContent = /* @__PURE__ */ defineComponent({
  name: "EditorContent",
  props: {
    editor: {
      default: null,
      type: Object
    }
  },
  setup(props) {
    const rootEl = /* @__PURE__ */ ref();
    const instance = getCurrentInstance();
    watchEffect(() => {
      const editor = props.editor;
      if (editor && editor.options.element && rootEl.value) {
        nextTick(() => {
          var _a2;
          if (!rootEl.value || !((_a2 = editor.view.dom) == null ? void 0 : _a2.parentNode)) {
            return;
          }
          const element = unref(rootEl.value);
          rootEl.value.append(...editor.view.dom.parentNode.childNodes);
          editor.contentComponent = instance.ctx._;
          if (instance) {
            editor.appContext = {
              ...instance.appContext,
              // Vue internally uses prototype chain to forward/shadow injects across the entire component chain
              // so don't use object spread operator or 'Object.assign' and just set `provides` as is on editor's appContext
              // @ts-expect-error forward instance's 'provides' into appContext
              provides: instance.provides
            };
          }
          editor.setOptions({
            element
          });
          editor.createNodeViews();
        });
      }
    });
    onBeforeUnmount(() => {
      const editor = props.editor;
      if (!editor) {
        return;
      }
      editor.contentComponent = null;
      editor.appContext = null;
    });
    return { rootEl };
  },
  render() {
    return h$2("div", {
      ref: (el) => {
        this.rootEl = el;
      }
    });
  }
});
var Document$1 = Node3.create({
  name: "doc",
  topNode: true,
  content: "block+",
  renderMarkdown: (node, h2) => {
    if (!node.content) {
      return "";
    }
    return h2.renderChildren(node.content, "\n\n");
  }
});
var index_default$1 = Document$1;
function dropCursor(options = {}) {
  return new Plugin({
    view(editorView) {
      return new DropCursorView(editorView, options);
    }
  });
}
class DropCursorView {
  constructor(editorView, options) {
    var _a2;
    this.editorView = editorView;
    this.cursorPos = null;
    this.element = null;
    this.timeout = -1;
    this.width = (_a2 = options.width) !== null && _a2 !== void 0 ? _a2 : 1;
    this.color = options.color === false ? void 0 : options.color || "black";
    this.class = options.class;
    this.handlers = ["dragover", "dragend", "drop", "dragleave"].map((name) => {
      let handler = (e) => {
        this[name](e);
      };
      editorView.dom.addEventListener(name, handler);
      return { name, handler };
    });
  }
  destroy() {
    this.handlers.forEach(({ name, handler }) => this.editorView.dom.removeEventListener(name, handler));
  }
  update(editorView, prevState) {
    if (this.cursorPos != null && prevState.doc != editorView.state.doc) {
      if (this.cursorPos > editorView.state.doc.content.size)
        this.setCursor(null);
      else
        this.updateOverlay();
    }
  }
  setCursor(pos) {
    if (pos == this.cursorPos)
      return;
    this.cursorPos = pos;
    if (pos == null) {
      this.element.parentNode.removeChild(this.element);
      this.element = null;
    } else {
      this.updateOverlay();
    }
  }
  updateOverlay() {
    let $pos = this.editorView.state.doc.resolve(this.cursorPos);
    let isBlock = !$pos.parent.inlineContent, rect;
    let editorDOM = this.editorView.dom, editorRect = editorDOM.getBoundingClientRect();
    let scaleX = editorRect.width / editorDOM.offsetWidth, scaleY = editorRect.height / editorDOM.offsetHeight;
    if (isBlock) {
      let before = $pos.nodeBefore, after = $pos.nodeAfter;
      if (before || after) {
        let node = this.editorView.nodeDOM(this.cursorPos - (before ? before.nodeSize : 0));
        if (node) {
          let nodeRect = node.getBoundingClientRect();
          let top = before ? nodeRect.bottom : nodeRect.top;
          if (before && after)
            top = (top + this.editorView.nodeDOM(this.cursorPos).getBoundingClientRect().top) / 2;
          let halfWidth = this.width / 2 * scaleY;
          rect = { left: nodeRect.left, right: nodeRect.right, top: top - halfWidth, bottom: top + halfWidth };
        }
      }
    }
    if (!rect) {
      let coords = this.editorView.coordsAtPos(this.cursorPos);
      let halfWidth = this.width / 2 * scaleX;
      rect = { left: coords.left - halfWidth, right: coords.left + halfWidth, top: coords.top, bottom: coords.bottom };
    }
    let parent = this.editorView.dom.offsetParent;
    if (!this.element) {
      this.element = parent.appendChild(document.createElement("div"));
      if (this.class)
        this.element.className = this.class;
      this.element.style.cssText = "position: absolute; z-index: 50; pointer-events: none;";
      if (this.color) {
        this.element.style.backgroundColor = this.color;
      }
    }
    this.element.classList.toggle("prosemirror-dropcursor-block", isBlock);
    this.element.classList.toggle("prosemirror-dropcursor-inline", !isBlock);
    let parentLeft, parentTop;
    if (!parent || parent == document.body && getComputedStyle(parent).position == "static") {
      parentLeft = -pageXOffset;
      parentTop = -pageYOffset;
    } else {
      let rect2 = parent.getBoundingClientRect();
      let parentScaleX = rect2.width / parent.offsetWidth, parentScaleY = rect2.height / parent.offsetHeight;
      parentLeft = rect2.left - parent.scrollLeft * parentScaleX;
      parentTop = rect2.top - parent.scrollTop * parentScaleY;
    }
    this.element.style.left = (rect.left - parentLeft) / scaleX + "px";
    this.element.style.top = (rect.top - parentTop) / scaleY + "px";
    this.element.style.width = (rect.right - rect.left) / scaleX + "px";
    this.element.style.height = (rect.bottom - rect.top) / scaleY + "px";
  }
  scheduleRemoval(timeout) {
    clearTimeout(this.timeout);
    this.timeout = setTimeout(() => this.setCursor(null), timeout);
  }
  dragover(event) {
    if (!this.editorView.editable)
      return;
    let pos = this.editorView.posAtCoords({ left: event.clientX, top: event.clientY });
    let node = pos && pos.inside >= 0 && this.editorView.state.doc.nodeAt(pos.inside);
    let disableDropCursor = node && node.type.spec.disableDropCursor;
    let disabled = typeof disableDropCursor == "function" ? disableDropCursor(this.editorView, pos, event) : disableDropCursor;
    if (pos && !disabled) {
      let target = pos.pos;
      if (this.editorView.dragging && this.editorView.dragging.slice) {
        let point = dropPoint(this.editorView.state.doc, target, this.editorView.dragging.slice);
        if (point != null)
          target = point;
      }
      this.setCursor(target);
      this.scheduleRemoval(5e3);
    }
  }
  dragend() {
    this.scheduleRemoval(20);
  }
  drop() {
    this.scheduleRemoval(20);
  }
  dragleave(event) {
    if (!this.editorView.dom.contains(event.relatedTarget))
      this.setCursor(null);
  }
}
class GapCursor extends Selection {
  /**
  Create a gap cursor.
  */
  constructor($pos) {
    super($pos, $pos);
  }
  map(doc2, mapping) {
    let $pos = doc2.resolve(mapping.map(this.head));
    return GapCursor.valid($pos) ? new GapCursor($pos) : Selection.near($pos);
  }
  content() {
    return Slice.empty;
  }
  eq(other) {
    return other instanceof GapCursor && other.head == this.head;
  }
  toJSON() {
    return { type: "gapcursor", pos: this.head };
  }
  /**
  @internal
  */
  static fromJSON(doc2, json2) {
    if (typeof json2.pos != "number")
      throw new RangeError("Invalid input for GapCursor.fromJSON");
    return new GapCursor(doc2.resolve(json2.pos));
  }
  /**
  @internal
  */
  getBookmark() {
    return new GapBookmark(this.anchor);
  }
  /**
  @internal
  */
  static valid($pos) {
    let parent = $pos.parent;
    if (parent.isTextblock || !closedBefore($pos) || !closedAfter($pos))
      return false;
    let override = parent.type.spec.allowGapCursor;
    if (override != null)
      return override;
    let deflt = parent.contentMatchAt($pos.index()).defaultType;
    return deflt && deflt.isTextblock;
  }
  /**
  @internal
  */
  static findGapCursorFrom($pos, dir, mustMove = false) {
    search: for (; ; ) {
      if (!mustMove && GapCursor.valid($pos))
        return $pos;
      let pos = $pos.pos, next = null;
      for (let d2 = $pos.depth; ; d2--) {
        let parent = $pos.node(d2);
        if (dir > 0 ? $pos.indexAfter(d2) < parent.childCount : $pos.index(d2) > 0) {
          next = parent.child(dir > 0 ? $pos.indexAfter(d2) : $pos.index(d2) - 1);
          break;
        } else if (d2 == 0) {
          return null;
        }
        pos += dir;
        let $cur = $pos.doc.resolve(pos);
        if (GapCursor.valid($cur))
          return $cur;
      }
      for (; ; ) {
        let inside = dir > 0 ? next.firstChild : next.lastChild;
        if (!inside) {
          if (next.isAtom && !next.isText && !NodeSelection.isSelectable(next)) {
            $pos = $pos.doc.resolve(pos + next.nodeSize * dir);
            mustMove = false;
            continue search;
          }
          break;
        }
        next = inside;
        pos += dir;
        let $cur = $pos.doc.resolve(pos);
        if (GapCursor.valid($cur))
          return $cur;
      }
      return null;
    }
  }
}
GapCursor.prototype.visible = false;
GapCursor.findFrom = GapCursor.findGapCursorFrom;
Selection.jsonID("gapcursor", GapCursor);
class GapBookmark {
  constructor(pos) {
    this.pos = pos;
  }
  map(mapping) {
    return new GapBookmark(mapping.map(this.pos));
  }
  resolve(doc2) {
    let $pos = doc2.resolve(this.pos);
    return GapCursor.valid($pos) ? new GapCursor($pos) : Selection.near($pos);
  }
}
function needsGap(type) {
  return type.isAtom || type.spec.isolating || type.spec.createGapCursor;
}
function closedBefore($pos) {
  for (let d2 = $pos.depth; d2 >= 0; d2--) {
    let index2 = $pos.index(d2), parent = $pos.node(d2);
    if (index2 == 0) {
      if (parent.type.spec.isolating)
        return true;
      continue;
    }
    for (let before = parent.child(index2 - 1); ; before = before.lastChild) {
      if (before.childCount == 0 && !before.inlineContent || needsGap(before.type))
        return true;
      if (before.inlineContent)
        return false;
    }
  }
  return true;
}
function closedAfter($pos) {
  for (let d2 = $pos.depth; d2 >= 0; d2--) {
    let index2 = $pos.indexAfter(d2), parent = $pos.node(d2);
    if (index2 == parent.childCount) {
      if (parent.type.spec.isolating)
        return true;
      continue;
    }
    for (let after = parent.child(index2); ; after = after.firstChild) {
      if (after.childCount == 0 && !after.inlineContent || needsGap(after.type))
        return true;
      if (after.inlineContent)
        return false;
    }
  }
  return true;
}
function gapCursor() {
  return new Plugin({
    props: {
      decorations: drawGapCursor,
      createSelectionBetween(_view, $anchor, $head) {
        return $anchor.pos == $head.pos && GapCursor.valid($head) ? new GapCursor($head) : null;
      },
      handleClick,
      handleKeyDown,
      handleDOMEvents: { beforeinput }
    }
  });
}
const handleKeyDown = keydownHandler({
  "ArrowLeft": arrow$3("horiz", -1),
  "ArrowRight": arrow$3("horiz", 1),
  "ArrowUp": arrow$3("vert", -1),
  "ArrowDown": arrow$3("vert", 1)
});
function arrow$3(axis, dir) {
  const dirStr = axis == "vert" ? dir > 0 ? "down" : "up" : dir > 0 ? "right" : "left";
  return function(state, dispatch, view) {
    let sel = state.selection;
    let $start = dir > 0 ? sel.$to : sel.$from, mustMove = sel.empty;
    if (sel instanceof TextSelection) {
      if (!view.endOfTextblock(dirStr) || $start.depth == 0)
        return false;
      mustMove = false;
      $start = state.doc.resolve(dir > 0 ? $start.after() : $start.before());
    }
    let $found = GapCursor.findGapCursorFrom($start, dir, mustMove);
    if (!$found)
      return false;
    if (dispatch)
      dispatch(state.tr.setSelection(new GapCursor($found)));
    return true;
  };
}
function handleClick(view, pos, event) {
  if (!view || !view.editable)
    return false;
  let $pos = view.state.doc.resolve(pos);
  if (!GapCursor.valid($pos))
    return false;
  let clickPos = view.posAtCoords({ left: event.clientX, top: event.clientY });
  if (clickPos && clickPos.inside > -1 && NodeSelection.isSelectable(view.state.doc.nodeAt(clickPos.inside)))
    return false;
  view.dispatch(view.state.tr.setSelection(new GapCursor($pos)));
  return true;
}
function beforeinput(view, event) {
  if (event.inputType != "insertCompositionText" || !(view.state.selection instanceof GapCursor))
    return false;
  let { $from } = view.state.selection;
  let insert = $from.parent.contentMatchAt($from.index()).findWrapping(view.state.schema.nodes.text);
  if (!insert)
    return false;
  let frag = Fragment.empty;
  for (let i = insert.length - 1; i >= 0; i--)
    frag = Fragment.from(insert[i].createAndFill(null, frag));
  let tr2 = view.state.tr.replace($from.pos, $from.pos, new Slice(frag, 0, 0));
  tr2.setSelection(TextSelection.near(tr2.doc.resolve($from.pos + 1)));
  view.dispatch(tr2);
  return false;
}
function drawGapCursor(state) {
  if (!(state.selection instanceof GapCursor))
    return null;
  let node = document.createElement("div");
  node.className = "ProseMirror-gapcursor";
  return DecorationSet.create(state.doc, [Decoration.widget(state.selection.head, node, { key: "gapcursor" })]);
}
var GOOD_LEAF_SIZE = 200;
var RopeSequence = function RopeSequence2() {
};
RopeSequence.prototype.append = function append(other) {
  if (!other.length) {
    return this;
  }
  other = RopeSequence.from(other);
  return !this.length && other || other.length < GOOD_LEAF_SIZE && this.leafAppend(other) || this.length < GOOD_LEAF_SIZE && other.leafPrepend(this) || this.appendInner(other);
};
RopeSequence.prototype.prepend = function prepend(other) {
  if (!other.length) {
    return this;
  }
  return RopeSequence.from(other).append(this);
};
RopeSequence.prototype.appendInner = function appendInner(other) {
  return new Append(this, other);
};
RopeSequence.prototype.slice = function slice(from2, to) {
  if (from2 === void 0) from2 = 0;
  if (to === void 0) to = this.length;
  if (from2 >= to) {
    return RopeSequence.empty;
  }
  return this.sliceInner(Math.max(0, from2), Math.min(this.length, to));
};
RopeSequence.prototype.get = function get(i) {
  if (i < 0 || i >= this.length) {
    return void 0;
  }
  return this.getInner(i);
};
RopeSequence.prototype.forEach = function forEach2(f2, from2, to) {
  if (from2 === void 0) from2 = 0;
  if (to === void 0) to = this.length;
  if (from2 <= to) {
    this.forEachInner(f2, from2, to, 0);
  } else {
    this.forEachInvertedInner(f2, from2, to, 0);
  }
};
RopeSequence.prototype.map = function map(f2, from2, to) {
  if (from2 === void 0) from2 = 0;
  if (to === void 0) to = this.length;
  var result = [];
  this.forEach(function(elt, i) {
    return result.push(f2(elt, i));
  }, from2, to);
  return result;
};
RopeSequence.from = function from(values) {
  if (values instanceof RopeSequence) {
    return values;
  }
  return values && values.length ? new Leaf(values) : RopeSequence.empty;
};
var Leaf = /* @__PURE__ */ (function(RopeSequence3) {
  function Leaf2(values) {
    RopeSequence3.call(this);
    this.values = values;
  }
  if (RopeSequence3) Leaf2.__proto__ = RopeSequence3;
  Leaf2.prototype = Object.create(RopeSequence3 && RopeSequence3.prototype);
  Leaf2.prototype.constructor = Leaf2;
  var prototypeAccessors = { length: { configurable: true }, depth: { configurable: true } };
  Leaf2.prototype.flatten = function flatten() {
    return this.values;
  };
  Leaf2.prototype.sliceInner = function sliceInner(from2, to) {
    if (from2 == 0 && to == this.length) {
      return this;
    }
    return new Leaf2(this.values.slice(from2, to));
  };
  Leaf2.prototype.getInner = function getInner(i) {
    return this.values[i];
  };
  Leaf2.prototype.forEachInner = function forEachInner(f2, from2, to, start) {
    for (var i = from2; i < to; i++) {
      if (f2(this.values[i], start + i) === false) {
        return false;
      }
    }
  };
  Leaf2.prototype.forEachInvertedInner = function forEachInvertedInner(f2, from2, to, start) {
    for (var i = from2 - 1; i >= to; i--) {
      if (f2(this.values[i], start + i) === false) {
        return false;
      }
    }
  };
  Leaf2.prototype.leafAppend = function leafAppend(other) {
    if (this.length + other.length <= GOOD_LEAF_SIZE) {
      return new Leaf2(this.values.concat(other.flatten()));
    }
  };
  Leaf2.prototype.leafPrepend = function leafPrepend(other) {
    if (this.length + other.length <= GOOD_LEAF_SIZE) {
      return new Leaf2(other.flatten().concat(this.values));
    }
  };
  prototypeAccessors.length.get = function() {
    return this.values.length;
  };
  prototypeAccessors.depth.get = function() {
    return 0;
  };
  Object.defineProperties(Leaf2.prototype, prototypeAccessors);
  return Leaf2;
})(RopeSequence);
RopeSequence.empty = new Leaf([]);
var Append = /* @__PURE__ */ (function(RopeSequence3) {
  function Append2(left, right) {
    RopeSequence3.call(this);
    this.left = left;
    this.right = right;
    this.length = left.length + right.length;
    this.depth = Math.max(left.depth, right.depth) + 1;
  }
  if (RopeSequence3) Append2.__proto__ = RopeSequence3;
  Append2.prototype = Object.create(RopeSequence3 && RopeSequence3.prototype);
  Append2.prototype.constructor = Append2;
  Append2.prototype.flatten = function flatten() {
    return this.left.flatten().concat(this.right.flatten());
  };
  Append2.prototype.getInner = function getInner(i) {
    return i < this.left.length ? this.left.get(i) : this.right.get(i - this.left.length);
  };
  Append2.prototype.forEachInner = function forEachInner(f2, from2, to, start) {
    var leftLen = this.left.length;
    if (from2 < leftLen && this.left.forEachInner(f2, from2, Math.min(to, leftLen), start) === false) {
      return false;
    }
    if (to > leftLen && this.right.forEachInner(f2, Math.max(from2 - leftLen, 0), Math.min(this.length, to) - leftLen, start + leftLen) === false) {
      return false;
    }
  };
  Append2.prototype.forEachInvertedInner = function forEachInvertedInner(f2, from2, to, start) {
    var leftLen = this.left.length;
    if (from2 > leftLen && this.right.forEachInvertedInner(f2, from2 - leftLen, Math.max(to, leftLen) - leftLen, start + leftLen) === false) {
      return false;
    }
    if (to < leftLen && this.left.forEachInvertedInner(f2, Math.min(from2, leftLen), to, start) === false) {
      return false;
    }
  };
  Append2.prototype.sliceInner = function sliceInner(from2, to) {
    if (from2 == 0 && to == this.length) {
      return this;
    }
    var leftLen = this.left.length;
    if (to <= leftLen) {
      return this.left.slice(from2, to);
    }
    if (from2 >= leftLen) {
      return this.right.slice(from2 - leftLen, to - leftLen);
    }
    return this.left.slice(from2, leftLen).append(this.right.slice(0, to - leftLen));
  };
  Append2.prototype.leafAppend = function leafAppend(other) {
    var inner = this.right.leafAppend(other);
    if (inner) {
      return new Append2(this.left, inner);
    }
  };
  Append2.prototype.leafPrepend = function leafPrepend(other) {
    var inner = this.left.leafPrepend(other);
    if (inner) {
      return new Append2(inner, this.right);
    }
  };
  Append2.prototype.appendInner = function appendInner2(other) {
    if (this.left.depth >= Math.max(this.right.depth, other.depth) + 1) {
      return new Append2(this.left, new Append2(this.right, other));
    }
    return new Append2(this, other);
  };
  return Append2;
})(RopeSequence);
const max_empty_items = 500;
class Branch {
  constructor(items, eventCount) {
    this.items = items;
    this.eventCount = eventCount;
  }
  // Pop the latest event off the branch's history and apply it
  // to a document transform.
  popEvent(state, preserveItems) {
    if (this.eventCount == 0)
      return null;
    let end = this.items.length;
    for (; ; end--) {
      let next = this.items.get(end - 1);
      if (next.selection) {
        --end;
        break;
      }
    }
    let remap, mapFrom;
    if (preserveItems) {
      remap = this.remapping(end, this.items.length);
      mapFrom = remap.maps.length;
    }
    let transform = state.tr;
    let selection, remaining;
    let addAfter = [], addBefore = [];
    this.items.forEach((item, i) => {
      if (!item.step) {
        if (!remap) {
          remap = this.remapping(end, i + 1);
          mapFrom = remap.maps.length;
        }
        mapFrom--;
        addBefore.push(item);
        return;
      }
      if (remap) {
        addBefore.push(new Item(item.map));
        let step = item.step.map(remap.slice(mapFrom)), map2;
        if (step && transform.maybeStep(step).doc) {
          map2 = transform.mapping.maps[transform.mapping.maps.length - 1];
          addAfter.push(new Item(map2, void 0, void 0, addAfter.length + addBefore.length));
        }
        mapFrom--;
        if (map2)
          remap.appendMap(map2, mapFrom);
      } else {
        transform.maybeStep(item.step);
      }
      if (item.selection) {
        selection = remap ? item.selection.map(remap.slice(mapFrom)) : item.selection;
        remaining = new Branch(this.items.slice(0, end).append(addBefore.reverse().concat(addAfter)), this.eventCount - 1);
        return false;
      }
    }, this.items.length, 0);
    return { remaining, transform, selection };
  }
  // Create a new branch with the given transform added.
  addTransform(transform, selection, histOptions, preserveItems) {
    let newItems = [], eventCount = this.eventCount;
    let oldItems = this.items, lastItem = !preserveItems && oldItems.length ? oldItems.get(oldItems.length - 1) : null;
    for (let i = 0; i < transform.steps.length; i++) {
      let step = transform.steps[i].invert(transform.docs[i]);
      let item = new Item(transform.mapping.maps[i], step, selection), merged;
      if (merged = lastItem && lastItem.merge(item)) {
        item = merged;
        if (i)
          newItems.pop();
        else
          oldItems = oldItems.slice(0, oldItems.length - 1);
      }
      newItems.push(item);
      if (selection) {
        eventCount++;
        selection = void 0;
      }
      if (!preserveItems)
        lastItem = item;
    }
    let overflow = eventCount - histOptions.depth;
    if (overflow > DEPTH_OVERFLOW) {
      oldItems = cutOffEvents(oldItems, overflow);
      eventCount -= overflow;
    }
    return new Branch(oldItems.append(newItems), eventCount);
  }
  remapping(from2, to) {
    let maps = new Mapping();
    this.items.forEach((item, i) => {
      let mirrorPos = item.mirrorOffset != null && i - item.mirrorOffset >= from2 ? maps.maps.length - item.mirrorOffset : void 0;
      maps.appendMap(item.map, mirrorPos);
    }, from2, to);
    return maps;
  }
  addMaps(array) {
    if (this.eventCount == 0)
      return this;
    return new Branch(this.items.append(array.map((map2) => new Item(map2))), this.eventCount);
  }
  // When the collab module receives remote changes, the history has
  // to know about those, so that it can adjust the steps that were
  // rebased on top of the remote changes, and include the position
  // maps for the remote changes in its array of items.
  rebased(rebasedTransform, rebasedCount) {
    if (!this.eventCount)
      return this;
    let rebasedItems = [], start = Math.max(0, this.items.length - rebasedCount);
    let mapping = rebasedTransform.mapping;
    let newUntil = rebasedTransform.steps.length;
    let eventCount = this.eventCount;
    this.items.forEach((item) => {
      if (item.selection)
        eventCount--;
    }, start);
    let iRebased = rebasedCount;
    this.items.forEach((item) => {
      let pos = mapping.getMirror(--iRebased);
      if (pos == null)
        return;
      newUntil = Math.min(newUntil, pos);
      let map2 = mapping.maps[pos];
      if (item.step) {
        let step = rebasedTransform.steps[pos].invert(rebasedTransform.docs[pos]);
        let selection = item.selection && item.selection.map(mapping.slice(iRebased + 1, pos));
        if (selection)
          eventCount++;
        rebasedItems.push(new Item(map2, step, selection));
      } else {
        rebasedItems.push(new Item(map2));
      }
    }, start);
    let newMaps = [];
    for (let i = rebasedCount; i < newUntil; i++)
      newMaps.push(new Item(mapping.maps[i]));
    let items = this.items.slice(0, start).append(newMaps).append(rebasedItems);
    let branch = new Branch(items, eventCount);
    if (branch.emptyItemCount() > max_empty_items)
      branch = branch.compress(this.items.length - rebasedItems.length);
    return branch;
  }
  emptyItemCount() {
    let count = 0;
    this.items.forEach((item) => {
      if (!item.step)
        count++;
    });
    return count;
  }
  // Compressing a branch means rewriting it to push the air (map-only
  // items) out. During collaboration, these naturally accumulate
  // because each remote change adds one. The `upto` argument is used
  // to ensure that only the items below a given level are compressed,
  // because `rebased` relies on a clean, untouched set of items in
  // order to associate old items with rebased steps.
  compress(upto = this.items.length) {
    let remap = this.remapping(0, upto), mapFrom = remap.maps.length;
    let items = [], events = 0;
    this.items.forEach((item, i) => {
      if (i >= upto) {
        items.push(item);
        if (item.selection)
          events++;
      } else if (item.step) {
        let step = item.step.map(remap.slice(mapFrom)), map2 = step && step.getMap();
        mapFrom--;
        if (map2)
          remap.appendMap(map2, mapFrom);
        if (step) {
          let selection = item.selection && item.selection.map(remap.slice(mapFrom));
          if (selection)
            events++;
          let newItem = new Item(map2.invert(), step, selection), merged, last = items.length - 1;
          if (merged = items.length && items[last].merge(newItem))
            items[last] = merged;
          else
            items.push(newItem);
        }
      } else if (item.map) {
        mapFrom--;
      }
    }, this.items.length, 0);
    return new Branch(RopeSequence.from(items.reverse()), events);
  }
}
Branch.empty = new Branch(RopeSequence.empty, 0);
function cutOffEvents(items, n2) {
  let cutPoint;
  items.forEach((item, i) => {
    if (item.selection && n2-- == 0) {
      cutPoint = i;
      return false;
    }
  });
  return items.slice(cutPoint);
}
class Item {
  constructor(map2, step, selection, mirrorOffset) {
    this.map = map2;
    this.step = step;
    this.selection = selection;
    this.mirrorOffset = mirrorOffset;
  }
  merge(other) {
    if (this.step && other.step && !other.selection) {
      let step = other.step.merge(this.step);
      if (step)
        return new Item(step.getMap().invert(), step, this.selection);
    }
  }
}
class HistoryState {
  constructor(done, undone, prevRanges, prevTime, prevComposition) {
    this.done = done;
    this.undone = undone;
    this.prevRanges = prevRanges;
    this.prevTime = prevTime;
    this.prevComposition = prevComposition;
  }
}
const DEPTH_OVERFLOW = 20;
function applyTransaction(history2, state, tr2, options) {
  let historyTr = tr2.getMeta(historyKey), rebased;
  if (historyTr)
    return historyTr.historyState;
  if (tr2.getMeta(closeHistoryKey))
    history2 = new HistoryState(history2.done, history2.undone, null, 0, -1);
  let appended = tr2.getMeta("appendedTransaction");
  if (tr2.steps.length == 0) {
    return history2;
  } else if (appended && appended.getMeta(historyKey)) {
    if (appended.getMeta(historyKey).redo)
      return new HistoryState(history2.done.addTransform(tr2, void 0, options, mustPreserveItems(state)), history2.undone, rangesFor(tr2.mapping.maps), history2.prevTime, history2.prevComposition);
    else
      return new HistoryState(history2.done, history2.undone.addTransform(tr2, void 0, options, mustPreserveItems(state)), null, history2.prevTime, history2.prevComposition);
  } else if (tr2.getMeta("addToHistory") !== false && !(appended && appended.getMeta("addToHistory") === false)) {
    let composition = tr2.getMeta("composition");
    let newGroup = history2.prevTime == 0 || !appended && history2.prevComposition != composition && (history2.prevTime < (tr2.time || 0) - options.newGroupDelay || !isAdjacentTo(tr2, history2.prevRanges));
    let prevRanges = appended ? mapRanges(history2.prevRanges, tr2.mapping) : rangesFor(tr2.mapping.maps);
    return new HistoryState(history2.done.addTransform(tr2, newGroup ? state.selection.getBookmark() : void 0, options, mustPreserveItems(state)), Branch.empty, prevRanges, tr2.time, composition == null ? history2.prevComposition : composition);
  } else if (rebased = tr2.getMeta("rebased")) {
    return new HistoryState(history2.done.rebased(tr2, rebased), history2.undone.rebased(tr2, rebased), mapRanges(history2.prevRanges, tr2.mapping), history2.prevTime, history2.prevComposition);
  } else {
    return new HistoryState(history2.done.addMaps(tr2.mapping.maps), history2.undone.addMaps(tr2.mapping.maps), mapRanges(history2.prevRanges, tr2.mapping), history2.prevTime, history2.prevComposition);
  }
}
function isAdjacentTo(transform, prevRanges) {
  if (!prevRanges)
    return false;
  if (!transform.docChanged)
    return true;
  let adjacent = false;
  transform.mapping.maps[0].forEach((start, end) => {
    for (let i = 0; i < prevRanges.length; i += 2)
      if (start <= prevRanges[i + 1] && end >= prevRanges[i])
        adjacent = true;
  });
  return adjacent;
}
function rangesFor(maps) {
  let result = [];
  for (let i = maps.length - 1; i >= 0 && result.length == 0; i--)
    maps[i].forEach((_from, _to, from2, to) => result.push(from2, to));
  return result;
}
function mapRanges(ranges, mapping) {
  if (!ranges)
    return null;
  let result = [];
  for (let i = 0; i < ranges.length; i += 2) {
    let from2 = mapping.map(ranges[i], 1), to = mapping.map(ranges[i + 1], -1);
    if (from2 <= to)
      result.push(from2, to);
  }
  return result;
}
function histTransaction(history2, state, redo2) {
  let preserveItems = mustPreserveItems(state);
  let histOptions = historyKey.get(state).spec.config;
  let pop = (redo2 ? history2.undone : history2.done).popEvent(state, preserveItems);
  if (!pop)
    return null;
  let selection = pop.selection.resolve(pop.transform.doc);
  let added = (redo2 ? history2.done : history2.undone).addTransform(pop.transform, state.selection.getBookmark(), histOptions, preserveItems);
  let newHist = new HistoryState(redo2 ? added : pop.remaining, redo2 ? pop.remaining : added, null, 0, -1);
  return pop.transform.setSelection(selection).setMeta(historyKey, { redo: redo2, historyState: newHist });
}
let cachedPreserveItems = false, cachedPreserveItemsPlugins = null;
function mustPreserveItems(state) {
  let plugins = state.plugins;
  if (cachedPreserveItemsPlugins != plugins) {
    cachedPreserveItems = false;
    cachedPreserveItemsPlugins = plugins;
    for (let i = 0; i < plugins.length; i++)
      if (plugins[i].spec.historyPreserveItems) {
        cachedPreserveItems = true;
        break;
      }
  }
  return cachedPreserveItems;
}
const historyKey = new PluginKey("history");
const closeHistoryKey = new PluginKey("closeHistory");
function history$1(config = {}) {
  config = {
    depth: config.depth || 100,
    newGroupDelay: config.newGroupDelay || 500
  };
  return new Plugin({
    key: historyKey,
    state: {
      init() {
        return new HistoryState(Branch.empty, Branch.empty, null, 0, -1);
      },
      apply(tr2, hist, state) {
        return applyTransaction(hist, state, tr2, config);
      }
    },
    config,
    props: {
      handleDOMEvents: {
        beforeinput(view, e) {
          let inputType = e.inputType;
          let command2 = inputType == "historyUndo" ? undo : inputType == "historyRedo" ? redo : null;
          if (!command2 || !view.editable)
            return false;
          e.preventDefault();
          return command2(view.state, view.dispatch);
        }
      }
    }
  });
}
function buildCommand(redo2, scroll) {
  return (state, dispatch) => {
    let hist = historyKey.getState(state);
    if (!hist || (redo2 ? hist.undone : hist.done).eventCount == 0)
      return false;
    if (dispatch) {
      let tr2 = histTransaction(hist, state, redo2);
      if (tr2)
        dispatch(scroll ? tr2.scrollIntoView() : tr2);
    }
    return true;
  };
}
const undo = buildCommand(false, true);
const redo = buildCommand(true, true);
Extension.create({
  name: "characterCount",
  addOptions() {
    return {
      limit: null,
      mode: "textSize",
      textCounter: (text) => text.length,
      wordCounter: (text) => text.split(" ").filter((word) => word !== "").length
    };
  },
  addStorage() {
    return {
      characters: () => 0,
      words: () => 0
    };
  },
  onBeforeCreate() {
    this.storage.characters = (options) => {
      const node = (options == null ? void 0 : options.node) || this.editor.state.doc;
      const mode = (options == null ? void 0 : options.mode) || this.options.mode;
      if (mode === "textSize") {
        const text = node.textBetween(0, node.content.size, void 0, " ");
        return this.options.textCounter(text);
      }
      return node.nodeSize;
    };
    this.storage.words = (options) => {
      const node = (options == null ? void 0 : options.node) || this.editor.state.doc;
      const text = node.textBetween(0, node.content.size, " ", " ");
      return this.options.wordCounter(text);
    };
  },
  addProseMirrorPlugins() {
    let initialEvaluationDone = false;
    return [
      new Plugin({
        key: new PluginKey("characterCount"),
        appendTransaction: (transactions, oldState, newState) => {
          if (initialEvaluationDone) {
            return;
          }
          const limit = this.options.limit;
          if (limit === null || limit === void 0 || limit === 0) {
            initialEvaluationDone = true;
            return;
          }
          const initialContentSize = this.storage.characters({ node: newState.doc });
          if (initialContentSize > limit) {
            const over = initialContentSize - limit;
            const from2 = 0;
            const to = over;
            console.warn(
              `[CharacterCount] Initial content exceeded limit of ${limit} characters. Content was automatically trimmed.`
            );
            const tr2 = newState.tr.deleteRange(from2, to);
            initialEvaluationDone = true;
            return tr2;
          }
          initialEvaluationDone = true;
        },
        filterTransaction: (transaction, state) => {
          const limit = this.options.limit;
          if (!transaction.docChanged || limit === 0 || limit === null || limit === void 0) {
            return true;
          }
          const oldSize = this.storage.characters({ node: state.doc });
          const newSize = this.storage.characters({ node: transaction.doc });
          if (newSize <= limit) {
            return true;
          }
          if (oldSize > limit && newSize > limit && newSize <= oldSize) {
            return true;
          }
          if (oldSize > limit && newSize > limit && newSize > oldSize) {
            return false;
          }
          const isPaste = transaction.getMeta("paste");
          if (!isPaste) {
            return false;
          }
          const pos = transaction.selection.$head.pos;
          const over = newSize - limit;
          const from2 = pos - over;
          const to = pos;
          transaction.deleteRange(from2, to);
          const updatedSize = this.storage.characters({ node: transaction.doc });
          if (updatedSize > limit) {
            return false;
          }
          return true;
        }
      })
    ];
  }
});
var Dropcursor = Extension.create({
  name: "dropCursor",
  addOptions() {
    return {
      color: "currentColor",
      width: 1,
      class: void 0
    };
  },
  addProseMirrorPlugins() {
    return [dropCursor(this.options)];
  }
});
Extension.create({
  name: "focus",
  addOptions() {
    return {
      className: "has-focus",
      mode: "all"
    };
  },
  addProseMirrorPlugins() {
    return [
      new Plugin({
        key: new PluginKey("focus"),
        props: {
          decorations: ({ doc: doc2, selection }) => {
            const { isEditable, isFocused } = this.editor;
            const { anchor } = selection;
            const decorations = [];
            if (!isEditable || !isFocused) {
              return DecorationSet.create(doc2, []);
            }
            let maxLevels = 0;
            if (this.options.mode === "deepest") {
              doc2.descendants((node, pos) => {
                if (node.isText) {
                  return;
                }
                const isCurrent = anchor >= pos && anchor <= pos + node.nodeSize - 1;
                if (!isCurrent) {
                  return false;
                }
                maxLevels += 1;
              });
            }
            let currentLevel = 0;
            doc2.descendants((node, pos) => {
              if (node.isText) {
                return false;
              }
              const isCurrent = anchor >= pos && anchor <= pos + node.nodeSize - 1;
              if (!isCurrent) {
                return false;
              }
              currentLevel += 1;
              const outOfScope = this.options.mode === "deepest" && maxLevels - currentLevel > 0 || this.options.mode === "shallowest" && currentLevel > 1;
              if (outOfScope) {
                return this.options.mode === "deepest";
              }
              decorations.push(
                Decoration.node(pos, pos + node.nodeSize, {
                  class: this.options.className
                })
              );
            });
            return DecorationSet.create(doc2, decorations);
          }
        }
      })
    ];
  }
});
var Gapcursor = Extension.create({
  name: "gapCursor",
  addProseMirrorPlugins() {
    return [gapCursor()];
  },
  extendNodeSchema(extension) {
    var _a2;
    const context = {
      name: extension.name,
      options: extension.options,
      storage: extension.storage
    };
    return {
      allowGapCursor: (_a2 = callOrReturn(getExtensionField(extension, "allowGapCursor", context))) != null ? _a2 : null
    };
  }
});
var DEFAULT_DATA_ATTRIBUTE = "placeholder";
function preparePlaceholderAttribute(attr) {
  return attr.replace(/\s+/g, "-").replace(/[^a-zA-Z0-9-]/g, "").replace(/^[0-9-]+/, "").replace(/^-+/, "").toLowerCase();
}
var Placeholder = Extension.create({
  name: "placeholder",
  addOptions() {
    return {
      emptyEditorClass: "is-editor-empty",
      emptyNodeClass: "is-empty",
      dataAttribute: DEFAULT_DATA_ATTRIBUTE,
      placeholder: "Write something …",
      showOnlyWhenEditable: true,
      showOnlyCurrent: true,
      includeChildren: false
    };
  },
  addProseMirrorPlugins() {
    const dataAttribute = this.options.dataAttribute ? `data-${preparePlaceholderAttribute(this.options.dataAttribute)}` : `data-${DEFAULT_DATA_ATTRIBUTE}`;
    return [
      new Plugin({
        key: new PluginKey("placeholder"),
        props: {
          decorations: ({ doc: doc2, selection }) => {
            const active = this.editor.isEditable || !this.options.showOnlyWhenEditable;
            const { anchor } = selection;
            const decorations = [];
            if (!active) {
              return null;
            }
            const isEmptyDoc = this.editor.isEmpty;
            doc2.descendants((node, pos) => {
              const hasAnchor = anchor >= pos && anchor <= pos + node.nodeSize;
              const isEmpty = !node.isLeaf && isNodeEmpty(node);
              if ((hasAnchor || !this.options.showOnlyCurrent) && isEmpty) {
                const classes = [this.options.emptyNodeClass];
                if (isEmptyDoc) {
                  classes.push(this.options.emptyEditorClass);
                }
                const decoration = Decoration.node(pos, pos + node.nodeSize, {
                  class: classes.join(" "),
                  [dataAttribute]: typeof this.options.placeholder === "function" ? this.options.placeholder({
                    editor: this.editor,
                    node,
                    pos,
                    hasAnchor
                  }) : this.options.placeholder
                });
                decorations.push(decoration);
              }
              return this.options.includeChildren;
            });
            return DecorationSet.create(doc2, decorations);
          }
        }
      })
    ];
  }
});
Extension.create({
  name: "selection",
  addOptions() {
    return {
      className: "selection"
    };
  },
  addProseMirrorPlugins() {
    const { editor, options } = this;
    return [
      new Plugin({
        key: new PluginKey("selection"),
        props: {
          decorations(state) {
            if (state.selection.empty || editor.isFocused || !editor.isEditable || isNodeSelection(state.selection) || editor.view.dragging) {
              return null;
            }
            return DecorationSet.create(state.doc, [
              Decoration.inline(state.selection.from, state.selection.to, {
                class: options.className
              })
            ]);
          }
        }
      })
    ];
  }
});
function nodeEqualsType({ types, node }) {
  return node && Array.isArray(types) && types.includes(node.type) || (node == null ? void 0 : node.type) === types;
}
var TrailingNode = Extension.create({
  name: "trailingNode",
  addOptions() {
    return {
      node: void 0,
      notAfter: []
    };
  },
  addProseMirrorPlugins() {
    var _a2;
    const plugin = new PluginKey(this.name);
    const defaultNode = this.options.node || ((_a2 = this.editor.schema.topNodeType.contentMatch.defaultType) == null ? void 0 : _a2.name) || "paragraph";
    const disabledNodes = Object.entries(this.editor.schema.nodes).map(([, value]) => value).filter((node) => (this.options.notAfter || []).concat(defaultNode).includes(node.name));
    return [
      new Plugin({
        key: plugin,
        appendTransaction: (_2, __, state) => {
          const { doc: doc2, tr: tr2, schema } = state;
          const shouldInsertNodeAtEnd = plugin.getState(state);
          const endPosition = doc2.content.size;
          const type = schema.nodes[defaultNode];
          if (!shouldInsertNodeAtEnd) {
            return;
          }
          return tr2.insert(endPosition, type.create());
        },
        state: {
          init: (_2, state) => {
            const lastNode = state.tr.doc.lastChild;
            return !nodeEqualsType({ node: lastNode, types: disabledNodes });
          },
          apply: (tr2, value) => {
            if (!tr2.docChanged) {
              return value;
            }
            if (tr2.getMeta("__uniqueIDTransaction")) {
              return value;
            }
            const lastNode = tr2.doc.lastChild;
            return !nodeEqualsType({ node: lastNode, types: disabledNodes });
          }
        }
      })
    ];
  }
});
var UndoRedo = Extension.create({
  name: "undoRedo",
  addOptions() {
    return {
      depth: 100,
      newGroupDelay: 500
    };
  },
  addCommands() {
    return {
      undo: () => ({ state, dispatch }) => {
        return undo(state, dispatch);
      },
      redo: () => ({ state, dispatch }) => {
        return redo(state, dispatch);
      }
    };
  },
  addProseMirrorPlugins() {
    return [history$1(this.options)];
  },
  addKeyboardShortcuts() {
    return {
      "Mod-z": () => this.editor.commands.undo(),
      "Shift-Mod-z": () => this.editor.commands.redo(),
      "Mod-y": () => this.editor.commands.redo(),
      // Russian keyboard layouts
      "Mod-я": () => this.editor.commands.undo(),
      "Shift-Mod-я": () => this.editor.commands.redo()
    };
  }
});
function _1c(hljs) {
  const UNDERSCORE_IDENT_RE = "[A-Za-zА-Яа-яёЁ_][A-Za-zА-Яа-яёЁ_0-9]+";
  const v7_keywords = "далее ";
  const v8_keywords = "возврат вызватьисключение выполнить для если и из или иначе иначеесли исключение каждого конецесли конецпопытки конеццикла не новый перейти перем по пока попытка прервать продолжить тогда цикл экспорт ";
  const KEYWORD = v7_keywords + v8_keywords;
  const v7_meta_keywords = "загрузитьизфайла ";
  const v8_meta_keywords = "вебклиент вместо внешнеесоединение клиент конецобласти мобильноеприложениеклиент мобильноеприложениесервер наклиенте наклиентенасервере наклиентенасерверебезконтекста насервере насерверебезконтекста область перед после сервер толстыйклиентобычноеприложение толстыйклиентуправляемоеприложение тонкийклиент ";
  const METAKEYWORD = v7_meta_keywords + v8_meta_keywords;
  const v7_system_constants = "разделительстраниц разделительстрок символтабуляции ";
  const v7_global_context_methods = "ansitooem oemtoansi ввестивидсубконто ввестиперечисление ввестипериод ввестиплансчетов выбранныйплансчетов датагод датамесяц датачисло заголовоксистемы значениевстроку значениеизстроки каталогиб каталогпользователя кодсимв конгода конецпериодаби конецрассчитанногопериодаби конецстандартногоинтервала конквартала конмесяца коннедели лог лог10 максимальноеколичествосубконто названиеинтерфейса названиенабораправ назначитьвид назначитьсчет найтиссылки началопериодаби началостандартногоинтервала начгода начквартала начмесяца начнедели номерднягода номерднянедели номернеделигода обработкаожидания основнойжурналрасчетов основнойплансчетов основнойязык очиститьокносообщений периодстр получитьвремята получитьдатута получитьдокументта получитьзначенияотбора получитьпозициюта получитьпустоезначение получитьта префиксавтонумерации пропись пустоезначение разм разобратьпозициюдокумента рассчитатьрегистрына рассчитатьрегистрыпо симв создатьобъект статусвозврата стрколичествострок сформироватьпозициюдокумента счетпокоду текущеевремя типзначения типзначениястр установитьтана установитьтапо фиксшаблон шаблон ";
  const v8_global_context_methods = "acos asin atan base64значение base64строка cos exp log log10 pow sin sqrt tan xmlзначение xmlстрока xmlтип xmlтипзнч активноеокно безопасныйрежим безопасныйрежимразделенияданных булево ввестидату ввестизначение ввестистроку ввестичисло возможностьчтенияxml вопрос восстановитьзначение врег выгрузитьжурналрегистрации выполнитьобработкуоповещения выполнитьпроверкуправдоступа вычислить год данныеформывзначение дата день деньгода деньнедели добавитьмесяц заблокироватьданныедляредактирования заблокироватьработупользователя завершитьработусистемы загрузитьвнешнююкомпоненту закрытьсправку записатьjson записатьxml записатьдатуjson записьжурналарегистрации заполнитьзначениясвойств запроситьразрешениепользователя запуститьприложение запуститьсистему зафиксироватьтранзакцию значениевданныеформы значениевстрокувнутр значениевфайл значениезаполнено значениеизстрокивнутр значениеизфайла изxmlтипа импортмоделиxdto имякомпьютера имяпользователя инициализироватьпредопределенныеданные информацияобошибке каталогбиблиотекимобильногоустройства каталогвременныхфайлов каталогдокументов каталогпрограммы кодироватьстроку кодлокализацииинформационнойбазы кодсимвола командасистемы конецгода конецдня конецквартала конецмесяца конецминуты конецнедели конецчаса конфигурациябазыданныхизмененадинамически конфигурацияизменена копироватьданныеформы копироватьфайл краткоепредставлениеошибки лев макс местноевремя месяц мин минута монопольныйрежим найти найтинедопустимыесимволыxml найтиокнопонавигационнойссылке найтипомеченныенаудаление найтипоссылкам найтифайлы началогода началодня началоквартала началомесяца началоминуты началонедели началочаса начатьзапросразрешенияпользователя начатьзапускприложения начатькопированиефайла начатьперемещениефайла начатьподключениевнешнейкомпоненты начатьподключениерасширенияработыскриптографией начатьподключениерасширенияработысфайлами начатьпоискфайлов начатьполучениекаталогавременныхфайлов начатьполучениекаталогадокументов начатьполучениерабочегокаталогаданныхпользователя начатьполучениефайлов начатьпомещениефайла начатьпомещениефайлов начатьсозданиедвоичныхданныхизфайла начатьсозданиекаталога начатьтранзакцию начатьудалениефайлов начатьустановкувнешнейкомпоненты начатьустановкурасширенияработыскриптографией начатьустановкурасширенияработысфайлами неделягода необходимостьзавершениясоединения номерсеансаинформационнойбазы номерсоединенияинформационнойбазы нрег нстр обновитьинтерфейс обновитьнумерациюобъектов обновитьповторноиспользуемыезначения обработкапрерыванияпользователя объединитьфайлы окр описаниеошибки оповестить оповеститьобизменении отключитьобработчикзапросанастроекклиенталицензирования отключитьобработчикожидания отключитьобработчикоповещения открытьзначение открытьиндекссправки открытьсодержаниесправки открытьсправку открытьформу открытьформумодально отменитьтранзакцию очиститьжурналрегистрации очиститьнастройкипользователя очиститьсообщения параметрыдоступа перейтипонавигационнойссылке переместитьфайл подключитьвнешнююкомпоненту подключитьобработчикзапросанастроекклиенталицензирования подключитьобработчикожидания подключитьобработчикоповещения подключитьрасширениеработыскриптографией подключитьрасширениеработысфайлами подробноепредставлениеошибки показатьвводдаты показатьвводзначения показатьвводстроки показатьвводчисла показатьвопрос показатьзначение показатьинформациюобошибке показатьнакарте показатьоповещениепользователя показатьпредупреждение полноеимяпользователя получитьcomобъект получитьxmlтип получитьадреспоместоположению получитьблокировкусеансов получитьвремязавершенияспящегосеанса получитьвремязасыпанияпассивногосеанса получитьвремяожиданияблокировкиданных получитьданныевыбора получитьдополнительныйпараметрклиенталицензирования получитьдопустимыекодылокализации получитьдопустимыечасовыепояса получитьзаголовокклиентскогоприложения получитьзаголовоксистемы получитьзначенияотборажурналарегистрации получитьидентификаторконфигурации получитьизвременногохранилища получитьимявременногофайла получитьимяклиенталицензирования получитьинформациюэкрановклиента получитьиспользованиежурналарегистрации получитьиспользованиесобытияжурналарегистрации получитькраткийзаголовокприложения получитьмакетоформления получитьмаскувсефайлы получитьмаскувсефайлыклиента получитьмаскувсефайлысервера получитьместоположениепоадресу получитьминимальнуюдлинупаролейпользователей получитьнавигационнуюссылку получитьнавигационнуюссылкуинформационнойбазы получитьобновлениеконфигурациибазыданных получитьобновлениепредопределенныхданныхинформационнойбазы получитьобщиймакет получитьобщуюформу получитьокна получитьоперативнуюотметкувремени получитьотключениебезопасногорежима получитьпараметрыфункциональныхопцийинтерфейса получитьполноеимяпредопределенногозначения получитьпредставлениянавигационныхссылок получитьпроверкусложностипаролейпользователей получитьразделительпути получитьразделительпутиклиента получитьразделительпутисервера получитьсеансыинформационнойбазы получитьскоростьклиентскогосоединения получитьсоединенияинформационнойбазы получитьсообщенияпользователю получитьсоответствиеобъектаиформы получитьсоставстандартногоинтерфейсаodata получитьструктурухранениябазыданных получитьтекущийсеансинформационнойбазы получитьфайл получитьфайлы получитьформу получитьфункциональнуюопцию получитьфункциональнуюопциюинтерфейса получитьчасовойпоясинформационнойбазы пользователиос поместитьвовременноехранилище поместитьфайл поместитьфайлы прав праводоступа предопределенноезначение представлениекодалокализации представлениепериода представлениеправа представлениеприложения представлениесобытияжурналарегистрации представлениечасовогопояса предупреждение прекратитьработусистемы привилегированныйрежим продолжитьвызов прочитатьjson прочитатьxml прочитатьдатуjson пустаястрока рабочийкаталогданныхпользователя разблокироватьданныедляредактирования разделитьфайл разорватьсоединениесвнешнимисточникомданных раскодироватьстроку рольдоступна секунда сигнал символ скопироватьжурналрегистрации смещениелетнеговремени смещениестандартноговремени соединитьбуферыдвоичныхданных создатькаталог создатьфабрикуxdto сокрл сокрлп сокрп сообщить состояние сохранитьзначение сохранитьнастройкипользователя сред стрдлина стрзаканчиваетсяна стрзаменить стрнайти стрначинаетсяс строка строкасоединенияинформационнойбазы стрполучитьстроку стрразделить стрсоединить стрсравнить стрчисловхождений стрчислострок стршаблон текущаядата текущаядатасеанса текущаяуниверсальнаядата текущаяуниверсальнаядатавмиллисекундах текущийвариантинтерфейсаклиентскогоприложения текущийвариантосновногошрифтаклиентскогоприложения текущийкодлокализации текущийрежимзапуска текущийязык текущийязыксистемы тип типзнч транзакцияактивна трег удалитьданныеинформационнойбазы удалитьизвременногохранилища удалитьобъекты удалитьфайлы универсальноевремя установитьбезопасныйрежим установитьбезопасныйрежимразделенияданных установитьблокировкусеансов установитьвнешнююкомпоненту установитьвремязавершенияспящегосеанса установитьвремязасыпанияпассивногосеанса установитьвремяожиданияблокировкиданных установитьзаголовокклиентскогоприложения установитьзаголовоксистемы установитьиспользованиежурналарегистрации установитьиспользованиесобытияжурналарегистрации установитькраткийзаголовокприложения установитьминимальнуюдлинупаролейпользователей установитьмонопольныйрежим установитьнастройкиклиенталицензирования установитьобновлениепредопределенныхданныхинформационнойбазы установитьотключениебезопасногорежима установитьпараметрыфункциональныхопцийинтерфейса установитьпривилегированныйрежим установитьпроверкусложностипаролейпользователей установитьрасширениеработыскриптографией установитьрасширениеработысфайлами установитьсоединениесвнешнимисточникомданных установитьсоответствиеобъектаиформы установитьсоставстандартногоинтерфейсаodata установитьчасовойпоясинформационнойбазы установитьчасовойпояссеанса формат цел час часовойпояс часовойпояссеанса число числопрописью этоадресвременногохранилища ";
  const v8_global_context_property = "wsссылки библиотекакартинок библиотекамакетовоформлениякомпоновкиданных библиотекастилей бизнеспроцессы внешниеисточникиданных внешниеобработки внешниеотчеты встроенныепокупки главныйинтерфейс главныйстиль документы доставляемыеуведомления журналыдокументов задачи информацияобинтернетсоединении использованиерабочейдаты историяработыпользователя константы критерииотбора метаданные обработки отображениерекламы отправкадоставляемыхуведомлений отчеты панельзадачос параметрзапуска параметрысеанса перечисления планывидоврасчета планывидовхарактеристик планыобмена планысчетов полнотекстовыйпоиск пользователиинформационнойбазы последовательности проверкавстроенныхпокупок рабочаядата расширенияконфигурации регистрыбухгалтерии регистрынакопления регистрырасчета регистрысведений регламентныезадания сериализаторxdto справочники средствагеопозиционирования средствакриптографии средствамультимедиа средстваотображениярекламы средствапочты средствателефонии фабрикаxdto файловыепотоки фоновыезадания хранилищанастроек хранилищевариантовотчетов хранилищенастроекданныхформ хранилищеобщихнастроек хранилищепользовательскихнастроекдинамическихсписков хранилищепользовательскихнастроекотчетов хранилищесистемныхнастроек ";
  const BUILTIN = v7_system_constants + v7_global_context_methods + v8_global_context_methods + v8_global_context_property;
  const v8_system_sets_of_values = "webцвета windowsцвета windowsшрифты библиотекакартинок рамкистиля символы цветастиля шрифтыстиля ";
  const v8_system_enums_interface = "автоматическоесохранениеданныхформывнастройках автонумерациявформе автораздвижениесерий анимациядиаграммы вариантвыравниванияэлементовизаголовков вариантуправлениявысотойтаблицы вертикальнаяпрокруткаформы вертикальноеположение вертикальноеположениеэлемента видгруппыформы виддекорацииформы виддополненияэлементаформы видизмененияданных видкнопкиформы видпереключателя видподписейкдиаграмме видполяформы видфлажка влияниеразмеранапузырекдиаграммы горизонтальноеположение горизонтальноеположениеэлемента группировкаколонок группировкаподчиненныхэлементовформы группыиэлементы действиеперетаскивания дополнительныйрежимотображения допустимыедействияперетаскивания интервалмеждуэлементамиформы использованиевывода использованиеполосыпрокрутки используемоезначениеточкибиржевойдиаграммы историявыборапривводе источникзначенийоситочекдиаграммы источникзначенияразмерапузырькадиаграммы категориягруппыкоманд максимумсерий начальноеотображениедерева начальноеотображениесписка обновлениетекстаредактирования ориентациядендрограммы ориентациядиаграммы ориентацияметокдиаграммы ориентацияметоксводнойдиаграммы ориентацияэлементаформы отображениевдиаграмме отображениевлегендедиаграммы отображениегруппыкнопок отображениезаголовкашкалыдиаграммы отображениезначенийсводнойдиаграммы отображениезначенияизмерительнойдиаграммы отображениеинтерваладиаграммыганта отображениекнопки отображениекнопкивыбора отображениеобсужденийформы отображениеобычнойгруппы отображениеотрицательныхзначенийпузырьковойдиаграммы отображениепанелипоиска отображениеподсказки отображениепредупрежденияприредактировании отображениеразметкиполосырегулирования отображениестраницформы отображениетаблицы отображениетекстазначениядиаграммыганта отображениеуправленияобычнойгруппы отображениефигурыкнопки палитрацветовдиаграммы поведениеобычнойгруппы поддержкамасштабадендрограммы поддержкамасштабадиаграммыганта поддержкамасштабасводнойдиаграммы поисквтаблицепривводе положениезаголовкаэлементаформы положениекартинкикнопкиформы положениекартинкиэлементаграфическойсхемы положениекоманднойпанелиформы положениекоманднойпанелиэлементаформы положениеопорнойточкиотрисовки положениеподписейкдиаграмме положениеподписейшкалызначенийизмерительнойдиаграммы положениесостоянияпросмотра положениестрокипоиска положениетекстасоединительнойлинии положениеуправленияпоиском положениешкалывремени порядокотображенияточекгоризонтальнойгистограммы порядоксерийвлегендедиаграммы размеркартинки расположениезаголовкашкалыдиаграммы растягиваниеповертикалидиаграммыганта режимавтоотображениясостояния режимвводастроктаблицы режимвыборанезаполненного режимвыделениядаты режимвыделениястрокитаблицы режимвыделениятаблицы режимизмененияразмера режимизменениясвязанногозначения режимиспользованиядиалогапечати режимиспользованияпараметракоманды режиммасштабированияпросмотра режимосновногоокнаклиентскогоприложения режимоткрытияокнаформы режимотображениявыделения режимотображениягеографическойсхемы режимотображениязначенийсерии режимотрисовкисеткиграфическойсхемы режимполупрозрачностидиаграммы режимпробеловдиаграммы режимразмещениянастранице режимредактированияколонки режимсглаживаниядиаграммы режимсглаживанияиндикатора режимсписказадач сквозноевыравнивание сохранениеданныхформывнастройках способзаполнениятекстазаголовкашкалыдиаграммы способопределенияограничивающегозначениядиаграммы стандартнаягруппакоманд стандартноеоформление статусоповещенияпользователя стильстрелки типаппроксимациилиниитрендадиаграммы типдиаграммы типединицышкалывремени типимпортасерийслоягеографическойсхемы типлиниигеографическойсхемы типлиниидиаграммы типмаркерагеографическойсхемы типмаркерадиаграммы типобластиоформления типорганизацииисточникаданныхгеографическойсхемы типотображениясериислоягеографическойсхемы типотображенияточечногообъектагеографическойсхемы типотображенияшкалыэлементалегендыгеографическойсхемы типпоискаобъектовгеографическойсхемы типпроекциигеографическойсхемы типразмещенияизмерений типразмещенияреквизитовизмерений типрамкиэлементауправления типсводнойдиаграммы типсвязидиаграммыганта типсоединениязначенийпосериямдиаграммы типсоединенияточекдиаграммы типсоединительнойлинии типстороныэлементаграфическойсхемы типформыотчета типшкалырадарнойдиаграммы факторлиниитрендадиаграммы фигуракнопки фигурыграфическойсхемы фиксациявтаблице форматдняшкалывремени форматкартинки ширинаподчиненныхэлементовформы ";
  const v8_system_enums_objects_properties = "виддвижениябухгалтерии виддвижениянакопления видпериодарегистрарасчета видсчета видточкимаршрутабизнеспроцесса использованиеагрегатарегистранакопления использованиегруппиэлементов использованиережимапроведения использованиесреза периодичностьагрегатарегистранакопления режимавтовремя режимзаписидокумента режимпроведениядокумента ";
  const v8_system_enums_exchange_plans = "авторегистрацияизменений допустимыйномерсообщения отправкаэлементаданных получениеэлементаданных ";
  const v8_system_enums_tabular_document = "использованиерасшифровкитабличногодокумента ориентациястраницы положениеитоговколоноксводнойтаблицы положениеитоговстроксводнойтаблицы положениетекстаотносительнокартинки расположениезаголовкагруппировкитабличногодокумента способчтениязначенийтабличногодокумента типдвустороннейпечати типзаполненияобластитабличногодокумента типкурсоровтабличногодокумента типлиниирисункатабличногодокумента типлинииячейкитабличногодокумента типнаправленияпереходатабличногодокумента типотображениявыделениятабличногодокумента типотображениялинийсводнойтаблицы типразмещениятекстатабличногодокумента типрисункатабличногодокумента типсмещениятабличногодокумента типузоратабличногодокумента типфайлатабличногодокумента точностьпечати чередованиерасположениястраниц ";
  const v8_system_enums_sheduler = "отображениевремениэлементовпланировщика ";
  const v8_system_enums_formatted_document = "типфайлаформатированногодокумента ";
  const v8_system_enums_query = "обходрезультатазапроса типзаписизапроса ";
  const v8_system_enums_report_builder = "видзаполнениярасшифровкипостроителяотчета типдобавленияпредставлений типизмеренияпостроителяотчета типразмещенияитогов ";
  const v8_system_enums_files = "доступкфайлу режимдиалогавыборафайла режимоткрытияфайла ";
  const v8_system_enums_query_builder = "типизмеренияпостроителязапроса ";
  const v8_system_enums_data_analysis = "видданныханализа методкластеризации типединицыинтервалавременианализаданных типзаполнениятаблицырезультатаанализаданных типиспользованиячисловыхзначенийанализаданных типисточникаданныхпоискаассоциаций типколонкианализаданныхдереворешений типколонкианализаданныхкластеризация типколонкианализаданныхобщаястатистика типколонкианализаданныхпоискассоциаций типколонкианализаданныхпоискпоследовательностей типколонкимоделипрогноза типмерырасстоянияанализаданных типотсеченияправилассоциации типполяанализаданных типстандартизациианализаданных типупорядочиванияправилассоциациианализаданных типупорядочиванияшаблоновпоследовательностейанализаданных типупрощениядереварешений ";
  const v8_system_enums_xml_json_xs_dom_xdto_ws = "wsнаправлениепараметра вариантxpathxs вариантзаписидатыjson вариантпростоготипаxs видгруппымоделиxs видфасетаxdto действиепостроителяdom завершенностьпростоготипаxs завершенностьсоставноготипаxs завершенностьсхемыxs запрещенныеподстановкиxs исключениягруппподстановкиxs категорияиспользованияатрибутаxs категорияограниченияидентичностиxs категорияограниченияпространствименxs методнаследованияxs модельсодержимогоxs назначениетипаxml недопустимыеподстановкиxs обработкапробельныхсимволовxs обработкасодержимогоxs ограничениезначенияxs параметрыотбораузловdom переносстрокjson позициявдокументеdom пробельныесимволыxml типатрибутаxml типзначенияjson типканоническогоxml типкомпонентыxs типпроверкиxml типрезультатаdomxpath типузлаdom типузлаxml формаxml формапредставленияxs форматдатыjson экранированиесимволовjson ";
  const v8_system_enums_data_composition_system = "видсравнениякомпоновкиданных действиеобработкирасшифровкикомпоновкиданных направлениесортировкикомпоновкиданных расположениевложенныхэлементоврезультатакомпоновкиданных расположениеитоговкомпоновкиданных расположениегруппировкикомпоновкиданных расположениеполейгруппировкикомпоновкиданных расположениеполякомпоновкиданных расположениереквизитовкомпоновкиданных расположениересурсовкомпоновкиданных типбухгалтерскогоостаткакомпоновкиданных типвыводатекстакомпоновкиданных типгруппировкикомпоновкиданных типгруппыэлементовотборакомпоновкиданных типдополненияпериодакомпоновкиданных типзаголовкаполейкомпоновкиданных типмакетагруппировкикомпоновкиданных типмакетаобластикомпоновкиданных типостаткакомпоновкиданных типпериодакомпоновкиданных типразмещениятекстакомпоновкиданных типсвязинаборовданныхкомпоновкиданных типэлементарезультатакомпоновкиданных расположениелегендыдиаграммыкомпоновкиданных типпримененияотборакомпоновкиданных режимотображенияэлементанастройкикомпоновкиданных режимотображениянастроеккомпоновкиданных состояниеэлементанастройкикомпоновкиданных способвосстановлениянастроеккомпоновкиданных режимкомпоновкирезультата использованиепараметракомпоновкиданных автопозицияресурсовкомпоновкиданных вариантиспользованиягруппировкикомпоновкиданных расположениересурсоввдиаграммекомпоновкиданных фиксациякомпоновкиданных использованиеусловногооформлениякомпоновкиданных ";
  const v8_system_enums_email = "важностьинтернетпочтовогосообщения обработкатекстаинтернетпочтовогосообщения способкодированияинтернетпочтовоговложения способкодированиянеasciiсимволовинтернетпочтовогосообщения типтекстапочтовогосообщения протоколинтернетпочты статусразборапочтовогосообщения ";
  const v8_system_enums_logbook = "режимтранзакциизаписижурналарегистрации статустранзакциизаписижурналарегистрации уровеньжурналарегистрации ";
  const v8_system_enums_cryptography = "расположениехранилищасертификатовкриптографии режимвключениясертификатовкриптографии режимпроверкисертификатакриптографии типхранилищасертификатовкриптографии ";
  const v8_system_enums_zip = "кодировкаименфайловвzipфайле методсжатияzip методшифрованияzip режимвосстановленияпутейфайловzip режимобработкиподкаталоговzip режимсохраненияпутейzip уровеньсжатияzip ";
  const v8_system_enums_other = "звуковоеоповещение направлениепереходакстроке позициявпотоке порядокбайтов режимблокировкиданных режимуправленияблокировкойданных сервисвстроенныхпокупок состояниефоновогозадания типподписчикадоставляемыхуведомлений уровеньиспользованиязащищенногосоединенияftp ";
  const v8_system_enums_request_schema = "направлениепорядкасхемызапроса типдополненияпериодамисхемызапроса типконтрольнойточкисхемызапроса типобъединениясхемызапроса типпараметрадоступнойтаблицысхемызапроса типсоединениясхемызапроса ";
  const v8_system_enums_properties_of_metadata_objects = "httpметод автоиспользованиеобщегореквизита автопрефиксномеразадачи вариантвстроенногоязыка видиерархии видрегистранакопления видтаблицывнешнегоисточникаданных записьдвиженийприпроведении заполнениепоследовательностей индексирование использованиебазыпланавидоврасчета использованиебыстроговыбора использованиеобщегореквизита использованиеподчинения использованиеполнотекстовогопоиска использованиеразделяемыхданныхобщегореквизита использованиереквизита назначениеиспользованияприложения назначениерасширенияконфигурации направлениепередачи обновлениепредопределенныхданных оперативноепроведение основноепредставлениевидарасчета основноепредставлениевидахарактеристики основноепредставлениезадачи основноепредставлениепланаобмена основноепредставлениесправочника основноепредставлениесчета перемещениеграницыприпроведении периодичностьномерабизнеспроцесса периодичностьномерадокумента периодичностьрегистрарасчета периодичностьрегистрасведений повторноеиспользованиевозвращаемыхзначений полнотекстовыйпоискпривводепостроке принадлежностьобъекта проведение разделениеаутентификацииобщегореквизита разделениеданныхобщегореквизита разделениерасширенийконфигурацииобщегореквизита режимавтонумерацииобъектов режимзаписирегистра режимиспользованиямодальности режимиспользованиясинхронныхвызововрасширенийплатформыивнешнихкомпонент режимповторногоиспользованиясеансов режимполученияданныхвыборапривводепостроке режимсовместимости режимсовместимостиинтерфейса режимуправленияблокировкойданныхпоумолчанию сериикодовпланавидовхарактеристик сериикодовпланасчетов сериикодовсправочника созданиепривводе способвыбора способпоискастрокипривводепостроке способредактирования типданныхтаблицывнешнегоисточникаданных типкодапланавидоврасчета типкодасправочника типмакета типномерабизнеспроцесса типномерадокумента типномеразадачи типформы удалениедвижений ";
  const v8_system_enums_differents = "важностьпроблемыприменениярасширенияконфигурации вариантинтерфейсаклиентскогоприложения вариантмасштабаформклиентскогоприложения вариантосновногошрифтаклиентскогоприложения вариантстандартногопериода вариантстандартнойдатыначала видграницы видкартинки видотображенияполнотекстовогопоиска видрамки видсравнения видцвета видчисловогозначения видшрифта допустимаядлина допустимыйзнак использованиеbyteordermark использованиеметаданныхполнотекстовогопоиска источникрасширенийконфигурации клавиша кодвозвратадиалога кодировкаxbase кодировкатекста направлениепоиска направлениесортировки обновлениепредопределенныхданных обновлениеприизмененииданных отображениепанелиразделов проверказаполнения режимдиалогавопрос режимзапускаклиентскогоприложения режимокругления режимоткрытияформприложения режимполнотекстовогопоиска скоростьклиентскогосоединения состояниевнешнегоисточникаданных состояниеобновленияконфигурациибазыданных способвыборасертификатаwindows способкодированиястроки статуссообщения типвнешнейкомпоненты типплатформы типповеденияклавишиenter типэлементаинформацииовыполненииобновленияконфигурациибазыданных уровеньизоляциитранзакций хешфункция частидаты";
  const CLASS = v8_system_sets_of_values + v8_system_enums_interface + v8_system_enums_objects_properties + v8_system_enums_exchange_plans + v8_system_enums_tabular_document + v8_system_enums_sheduler + v8_system_enums_formatted_document + v8_system_enums_query + v8_system_enums_report_builder + v8_system_enums_files + v8_system_enums_query_builder + v8_system_enums_data_analysis + v8_system_enums_xml_json_xs_dom_xdto_ws + v8_system_enums_data_composition_system + v8_system_enums_email + v8_system_enums_logbook + v8_system_enums_cryptography + v8_system_enums_zip + v8_system_enums_other + v8_system_enums_request_schema + v8_system_enums_properties_of_metadata_objects + v8_system_enums_differents;
  const v8_shared_object = "comобъект ftpсоединение httpзапрос httpсервисответ httpсоединение wsопределения wsпрокси xbase анализданных аннотацияxs блокировкаданных буфердвоичныхданных включениеxs выражениекомпоновкиданных генераторслучайныхчисел географическаясхема географическиекоординаты графическаясхема группамоделиxs данныерасшифровкикомпоновкиданных двоичныеданные дендрограмма диаграмма диаграммаганта диалогвыборафайла диалогвыборацвета диалогвыборашрифта диалограсписаниярегламентногозадания диалогредактированиястандартногопериода диапазон документdom документhtml документацияxs доставляемоеуведомление записьdom записьfastinfoset записьhtml записьjson записьxml записьzipфайла записьданных записьтекста записьузловdom запрос защищенноесоединениеopenssl значенияполейрасшифровкикомпоновкиданных извлечениетекста импортxs интернетпочта интернетпочтовоесообщение интернетпочтовыйпрофиль интернетпрокси интернетсоединение информациядляприложенияxs использованиеатрибутаxs использованиесобытияжурналарегистрации источникдоступныхнастроеккомпоновкиданных итераторузловdom картинка квалификаторыдаты квалификаторыдвоичныхданных квалификаторыстроки квалификаторычисла компоновщикмакетакомпоновкиданных компоновщикнастроеккомпоновкиданных конструктормакетаоформлениякомпоновкиданных конструкторнастроеккомпоновкиданных конструкторформатнойстроки линия макеткомпоновкиданных макетобластикомпоновкиданных макетоформлениякомпоновкиданных маскаxs менеджеркриптографии наборсхемxml настройкикомпоновкиданных настройкисериализацииjson обработкакартинок обработкарасшифровкикомпоновкиданных обходдереваdom объявлениеатрибутаxs объявлениенотацииxs объявлениеэлементаxs описаниеиспользованиясобытиядоступжурналарегистрации описаниеиспользованиясобытияотказвдоступежурналарегистрации описаниеобработкирасшифровкикомпоновкиданных описаниепередаваемогофайла описаниетипов определениегруппыатрибутовxs определениегруппымоделиxs определениеограниченияидентичностиxs определениепростоготипаxs определениесоставноготипаxs определениетипадокументаdom определенияxpathxs отборкомпоновкиданных пакетотображаемыхдокументов параметрвыбора параметркомпоновкиданных параметрызаписиjson параметрызаписиxml параметрычтенияxml переопределениеxs планировщик полеанализаданных полекомпоновкиданных построительdom построительзапроса построительотчета построительотчетаанализаданных построительсхемxml поток потоквпамяти почта почтовоесообщение преобразованиеxsl преобразованиекканоническомуxml процессорвыводарезультатакомпоновкиданныхвколлекциюзначений процессорвыводарезультатакомпоновкиданныхвтабличныйдокумент процессоркомпоновкиданных разыменовательпространствименdom рамка расписаниерегламентногозадания расширенноеимяxml результатчтенияданных своднаядиаграмма связьпараметравыбора связьпотипу связьпотипукомпоновкиданных сериализаторxdto сертификатклиентаwindows сертификатклиентафайл сертификаткриптографии сертификатыудостоверяющихцентровwindows сертификатыудостоверяющихцентровфайл сжатиеданных системнаяинформация сообщениепользователю сочетаниеклавиш сравнениезначений стандартнаядатаначала стандартныйпериод схемаxml схемакомпоновкиданных табличныйдокумент текстовыйдокумент тестируемоеприложение типданныхxml уникальныйидентификатор фабрикаxdto файл файловыйпоток фасетдлиныxs фасетколичестваразрядовдробнойчастиxs фасетмаксимальноговключающегозначенияxs фасетмаксимальногоисключающегозначенияxs фасетмаксимальнойдлиныxs фасетминимальноговключающегозначенияxs фасетминимальногоисключающегозначенияxs фасетминимальнойдлиныxs фасетобразцаxs фасетобщегоколичестваразрядовxs фасетперечисленияxs фасетпробельныхсимволовxs фильтрузловdom форматированнаястрока форматированныйдокумент фрагментxs хешированиеданных хранилищезначения цвет чтениеfastinfoset чтениеhtml чтениеjson чтениеxml чтениеzipфайла чтениеданных чтениетекста чтениеузловdom шрифт элементрезультатакомпоновкиданных ";
  const v8_universal_collection = "comsafearray деревозначений массив соответствие списокзначений структура таблицазначений фиксированнаяструктура фиксированноесоответствие фиксированныймассив ";
  const TYPE = v8_shared_object + v8_universal_collection;
  const LITERAL = "null истина ложь неопределено";
  const NUMBERS = hljs.inherit(hljs.NUMBER_MODE);
  const STRINGS = {
    className: "string",
    begin: '"|\\|',
    end: '"|$',
    contains: [{ begin: '""' }]
  };
  const DATE = {
    begin: "'",
    end: "'",
    excludeBegin: true,
    excludeEnd: true,
    contains: [
      {
        className: "number",
        begin: "\\d{4}([\\.\\\\/:-]?\\d{2}){0,5}"
      }
    ]
  };
  const PUNCTUATION = {
    match: /[;()+\-:=,]/,
    className: "punctuation",
    relevance: 0
  };
  const COMMENTS = hljs.inherit(hljs.C_LINE_COMMENT_MODE);
  const META = {
    className: "meta",
    begin: "#|&",
    end: "$",
    keywords: {
      $pattern: UNDERSCORE_IDENT_RE,
      keyword: KEYWORD + METAKEYWORD
    },
    contains: [COMMENTS]
  };
  const SYMBOL = {
    className: "symbol",
    begin: "~",
    end: ";|:",
    excludeEnd: true
  };
  const FUNCTION = {
    className: "function",
    variants: [
      {
        begin: "процедура|функция",
        end: "\\)",
        keywords: "процедура функция"
      },
      {
        begin: "конецпроцедуры|конецфункции",
        keywords: "конецпроцедуры конецфункции"
      }
    ],
    contains: [
      {
        begin: "\\(",
        end: "\\)",
        endsParent: true,
        contains: [
          {
            className: "params",
            begin: UNDERSCORE_IDENT_RE,
            end: ",",
            excludeEnd: true,
            endsWithParent: true,
            keywords: {
              $pattern: UNDERSCORE_IDENT_RE,
              keyword: "знач",
              literal: LITERAL
            },
            contains: [
              NUMBERS,
              STRINGS,
              DATE
            ]
          },
          COMMENTS
        ]
      },
      hljs.inherit(hljs.TITLE_MODE, { begin: UNDERSCORE_IDENT_RE })
    ]
  };
  return {
    name: "1C:Enterprise",
    case_insensitive: true,
    keywords: {
      $pattern: UNDERSCORE_IDENT_RE,
      keyword: KEYWORD,
      built_in: BUILTIN,
      class: CLASS,
      type: TYPE,
      literal: LITERAL
    },
    contains: [
      META,
      FUNCTION,
      COMMENTS,
      SYMBOL,
      NUMBERS,
      STRINGS,
      DATE,
      PUNCTUATION
    ]
  };
}
function abnf(hljs) {
  const regex = hljs.regex;
  const IDENT = /^[a-zA-Z][a-zA-Z0-9-]*/;
  const KEYWORDS2 = [
    "ALPHA",
    "BIT",
    "CHAR",
    "CR",
    "CRLF",
    "CTL",
    "DIGIT",
    "DQUOTE",
    "HEXDIG",
    "HTAB",
    "LF",
    "LWSP",
    "OCTET",
    "SP",
    "VCHAR",
    "WSP"
  ];
  const COMMENT = hljs.COMMENT(/;/, /$/);
  const TERMINAL_BINARY = {
    scope: "symbol",
    match: /%b[0-1]+(-[0-1]+|(\.[0-1]+)+)?/
  };
  const TERMINAL_DECIMAL = {
    scope: "symbol",
    match: /%d[0-9]+(-[0-9]+|(\.[0-9]+)+)?/
  };
  const TERMINAL_HEXADECIMAL = {
    scope: "symbol",
    match: /%x[0-9A-F]+(-[0-9A-F]+|(\.[0-9A-F]+)+)?/
  };
  const CASE_SENSITIVITY = {
    scope: "symbol",
    match: /%[si](?=".*")/
  };
  const RULE_DECLARATION = {
    scope: "attribute",
    match: regex.concat(IDENT, /(?=\s*=)/)
  };
  const ASSIGNMENT = {
    scope: "operator",
    match: /=\/?/
  };
  return {
    name: "Augmented Backus-Naur Form",
    illegal: /[!@#$^&',?+~`|:]/,
    keywords: KEYWORDS2,
    contains: [
      ASSIGNMENT,
      RULE_DECLARATION,
      COMMENT,
      TERMINAL_BINARY,
      TERMINAL_DECIMAL,
      TERMINAL_HEXADECIMAL,
      CASE_SENSITIVITY,
      hljs.QUOTE_STRING_MODE,
      hljs.NUMBER_MODE
    ]
  };
}
function accesslog(hljs) {
  const regex = hljs.regex;
  const HTTP_VERBS = [
    "GET",
    "POST",
    "HEAD",
    "PUT",
    "DELETE",
    "CONNECT",
    "OPTIONS",
    "PATCH",
    "TRACE"
  ];
  return {
    name: "Apache Access Log",
    contains: [
      // IP
      {
        className: "number",
        begin: /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,5})?\b/,
        relevance: 5
      },
      // Other numbers
      {
        className: "number",
        begin: /\b\d+\b/,
        relevance: 0
      },
      // Requests
      {
        className: "string",
        begin: regex.concat(/"/, regex.either(...HTTP_VERBS)),
        end: /"/,
        keywords: HTTP_VERBS,
        illegal: /\n/,
        relevance: 5,
        contains: [
          {
            begin: /HTTP\/[12]\.\d'/,
            relevance: 5
          }
        ]
      },
      // Dates
      {
        className: "string",
        // dates must have a certain length, this prevents matching
        // simple array accesses a[123] and [] and other common patterns
        // found in other languages
        begin: /\[\d[^\]\n]{8,}\]/,
        illegal: /\n/,
        relevance: 1
      },
      {
        className: "string",
        begin: /\[/,
        end: /\]/,
        illegal: /\n/,
        relevance: 0
      },
      // User agent / relevance boost
      {
        className: "string",
        begin: /"Mozilla\/\d\.\d \(/,
        end: /"/,
        illegal: /\n/,
        relevance: 3
      },
      // Strings
      {
        className: "string",
        begin: /"/,
        end: /"/,
        illegal: /\n/,
        relevance: 0
      }
    ]
  };
}
function actionscript(hljs) {
  const regex = hljs.regex;
  const IDENT_RE2 = /[a-zA-Z_$][a-zA-Z0-9_$]*/;
  const PKG_NAME_RE = regex.concat(
    IDENT_RE2,
    regex.concat("(\\.", IDENT_RE2, ")*")
  );
  const IDENT_FUNC_RETURN_TYPE_RE = /([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)/;
  const AS3_REST_ARG_MODE = {
    className: "rest_arg",
    begin: /[.]{3}/,
    end: IDENT_RE2,
    relevance: 10
  };
  const KEYWORDS2 = [
    "as",
    "break",
    "case",
    "catch",
    "class",
    "const",
    "continue",
    "default",
    "delete",
    "do",
    "dynamic",
    "each",
    "else",
    "extends",
    "final",
    "finally",
    "for",
    "function",
    "get",
    "if",
    "implements",
    "import",
    "in",
    "include",
    "instanceof",
    "interface",
    "internal",
    "is",
    "namespace",
    "native",
    "new",
    "override",
    "package",
    "private",
    "protected",
    "public",
    "return",
    "set",
    "static",
    "super",
    "switch",
    "this",
    "throw",
    "try",
    "typeof",
    "use",
    "var",
    "void",
    "while",
    "with"
  ];
  const LITERALS2 = [
    "true",
    "false",
    "null",
    "undefined"
  ];
  return {
    name: "ActionScript",
    aliases: ["as"],
    keywords: {
      keyword: KEYWORDS2,
      literal: LITERALS2
    },
    contains: [
      hljs.APOS_STRING_MODE,
      hljs.QUOTE_STRING_MODE,
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.C_NUMBER_MODE,
      {
        match: [
          /\bpackage/,
          /\s+/,
          PKG_NAME_RE
        ],
        className: {
          1: "keyword",
          3: "title.class"
        }
      },
      {
        match: [
          /\b(?:class|interface|extends|implements)/,
          /\s+/,
          IDENT_RE2
        ],
        className: {
          1: "keyword",
          3: "title.class"
        }
      },
      {
        className: "meta",
        beginKeywords: "import include",
        end: /;/,
        keywords: { keyword: "import include" }
      },
      {
        beginKeywords: "function",
        end: /[{;]/,
        excludeEnd: true,
        illegal: /\S/,
        contains: [
          hljs.inherit(hljs.TITLE_MODE, { className: "title.function" }),
          {
            className: "params",
            begin: /\(/,
            end: /\)/,
            contains: [
              hljs.APOS_STRING_MODE,
              hljs.QUOTE_STRING_MODE,
              hljs.C_LINE_COMMENT_MODE,
              hljs.C_BLOCK_COMMENT_MODE,
              AS3_REST_ARG_MODE
            ]
          },
          { begin: regex.concat(/:\s*/, IDENT_FUNC_RETURN_TYPE_RE) }
        ]
      },
      hljs.METHOD_GUARD
    ],
    illegal: /#/
  };
}
function ada(hljs) {
  const INTEGER_RE = "\\d(_|\\d)*";
  const EXPONENT_RE = "[eE][-+]?" + INTEGER_RE;
  const DECIMAL_LITERAL_RE = INTEGER_RE + "(\\." + INTEGER_RE + ")?(" + EXPONENT_RE + ")?";
  const BASED_INTEGER_RE = "\\w+";
  const BASED_LITERAL_RE = INTEGER_RE + "#" + BASED_INTEGER_RE + "(\\." + BASED_INTEGER_RE + ")?#(" + EXPONENT_RE + ")?";
  const NUMBER_RE = "\\b(" + BASED_LITERAL_RE + "|" + DECIMAL_LITERAL_RE + ")";
  const ID_REGEX = "[A-Za-z](_?[A-Za-z0-9.])*";
  const BAD_CHARS = `[]\\{\\}%#'"`;
  const COMMENTS = hljs.COMMENT("--", "$");
  const VAR_DECLS = {
    // TODO: These spaces are not required by the Ada syntax
    // however, I have yet to see handwritten Ada code where
    // someone does not put spaces around :
    begin: "\\s+:\\s+",
    end: "\\s*(:=|;|\\)|=>|$)",
    // endsWithParent: true,
    // returnBegin: true,
    illegal: BAD_CHARS,
    contains: [
      {
        // workaround to avoid highlighting
        // named loops and declare blocks
        beginKeywords: "loop for declare others",
        endsParent: true
      },
      {
        // properly highlight all modifiers
        className: "keyword",
        beginKeywords: "not null constant access function procedure in out aliased exception"
      },
      {
        className: "type",
        begin: ID_REGEX,
        endsParent: true,
        relevance: 0
      }
    ]
  };
  const KEYWORDS2 = [
    "abort",
    "else",
    "new",
    "return",
    "abs",
    "elsif",
    "not",
    "reverse",
    "abstract",
    "end",
    "accept",
    "entry",
    "select",
    "access",
    "exception",
    "of",
    "separate",
    "aliased",
    "exit",
    "or",
    "some",
    "all",
    "others",
    "subtype",
    "and",
    "for",
    "out",
    "synchronized",
    "array",
    "function",
    "overriding",
    "at",
    "tagged",
    "generic",
    "package",
    "task",
    "begin",
    "goto",
    "pragma",
    "terminate",
    "body",
    "private",
    "then",
    "if",
    "procedure",
    "type",
    "case",
    "in",
    "protected",
    "constant",
    "interface",
    "is",
    "raise",
    "use",
    "declare",
    "range",
    "delay",
    "limited",
    "record",
    "when",
    "delta",
    "loop",
    "rem",
    "while",
    "digits",
    "renames",
    "with",
    "do",
    "mod",
    "requeue",
    "xor"
  ];
  return {
    name: "Ada",
    case_insensitive: true,
    keywords: {
      keyword: KEYWORDS2,
      literal: [
        "True",
        "False"
      ]
    },
    contains: [
      COMMENTS,
      // strings "foobar"
      {
        className: "string",
        begin: /"/,
        end: /"/,
        contains: [
          {
            begin: /""/,
            relevance: 0
          }
        ]
      },
      // characters ''
      {
        // character literals always contain one char
        className: "string",
        begin: /'.'/
      },
      {
        // number literals
        className: "number",
        begin: NUMBER_RE,
        relevance: 0
      },
      {
        // Attributes
        className: "symbol",
        begin: "'" + ID_REGEX
      },
      {
        // package definition, maybe inside generic
        className: "title",
        begin: "(\\bwith\\s+)?(\\bprivate\\s+)?\\bpackage\\s+(\\bbody\\s+)?",
        end: "(is|$)",
        keywords: "package body",
        excludeBegin: true,
        excludeEnd: true,
        illegal: BAD_CHARS
      },
      {
        // function/procedure declaration/definition
        // maybe inside generic
        begin: "(\\b(with|overriding)\\s+)?\\b(function|procedure)\\s+",
        end: "(\\bis|\\bwith|\\brenames|\\)\\s*;)",
        keywords: "overriding function procedure with is renames return",
        // we need to re-match the 'function' keyword, so that
        // the title mode below matches only exactly once
        returnBegin: true,
        contains: [
          COMMENTS,
          {
            // name of the function/procedure
            className: "title",
            begin: "(\\bwith\\s+)?\\b(function|procedure)\\s+",
            end: "(\\(|\\s+|$)",
            excludeBegin: true,
            excludeEnd: true,
            illegal: BAD_CHARS
          },
          // 'self'
          // // parameter types
          VAR_DECLS,
          {
            // return type
            className: "type",
            begin: "\\breturn\\s+",
            end: "(\\s+|;|$)",
            keywords: "return",
            excludeBegin: true,
            excludeEnd: true,
            // we are done with functions
            endsParent: true,
            illegal: BAD_CHARS
          }
        ]
      },
      {
        // new type declarations
        // maybe inside generic
        className: "type",
        begin: "\\b(sub)?type\\s+",
        end: "\\s+",
        keywords: "type",
        excludeBegin: true,
        illegal: BAD_CHARS
      },
      // see comment above the definition
      VAR_DECLS
      // no markup
      // relevance boosters for small snippets
      // {begin: '\\s*=>\\s*'},
      // {begin: '\\s*:=\\s*'},
      // {begin: '\\s+:=\\s+'},
    ]
  };
}
function angelscript(hljs) {
  const builtInTypeMode = {
    className: "built_in",
    begin: "\\b(void|bool|int8|int16|int32|int64|int|uint8|uint16|uint32|uint64|uint|string|ref|array|double|float|auto|dictionary)"
  };
  const objectHandleMode = {
    className: "symbol",
    begin: "[a-zA-Z0-9_]+@"
  };
  const genericMode = {
    className: "keyword",
    begin: "<",
    end: ">",
    contains: [
      builtInTypeMode,
      objectHandleMode
    ]
  };
  builtInTypeMode.contains = [genericMode];
  objectHandleMode.contains = [genericMode];
  const KEYWORDS2 = [
    "for",
    "in|0",
    "break",
    "continue",
    "while",
    "do|0",
    "return",
    "if",
    "else",
    "case",
    "switch",
    "namespace",
    "is",
    "cast",
    "or",
    "and",
    "xor",
    "not",
    "get|0",
    "in",
    "inout|10",
    "out",
    "override",
    "set|0",
    "private",
    "public",
    "const",
    "default|0",
    "final",
    "shared",
    "external",
    "mixin|10",
    "enum",
    "typedef",
    "funcdef",
    "this",
    "super",
    "import",
    "from",
    "interface",
    "abstract|0",
    "try",
    "catch",
    "protected",
    "explicit",
    "property"
  ];
  return {
    name: "AngelScript",
    aliases: ["asc"],
    keywords: KEYWORDS2,
    // avoid close detection with C# and JS
    illegal: "(^using\\s+[A-Za-z0-9_\\.]+;$|\\bfunction\\s*[^\\(])",
    contains: [
      {
        // 'strings'
        className: "string",
        begin: "'",
        end: "'",
        illegal: "\\n",
        contains: [hljs.BACKSLASH_ESCAPE],
        relevance: 0
      },
      // """heredoc strings"""
      {
        className: "string",
        begin: '"""',
        end: '"""'
      },
      {
        // "strings"
        className: "string",
        begin: '"',
        end: '"',
        illegal: "\\n",
        contains: [hljs.BACKSLASH_ESCAPE],
        relevance: 0
      },
      hljs.C_LINE_COMMENT_MODE,
      // single-line comments
      hljs.C_BLOCK_COMMENT_MODE,
      // comment blocks
      {
        // metadata
        className: "string",
        begin: "^\\s*\\[",
        end: "\\]"
      },
      {
        // interface or namespace declaration
        beginKeywords: "interface namespace",
        end: /\{/,
        illegal: "[;.\\-]",
        contains: [
          {
            // interface or namespace name
            className: "symbol",
            begin: "[a-zA-Z0-9_]+"
          }
        ]
      },
      {
        // class declaration
        beginKeywords: "class",
        end: /\{/,
        illegal: "[;.\\-]",
        contains: [
          {
            // class name
            className: "symbol",
            begin: "[a-zA-Z0-9_]+",
            contains: [
              {
                begin: "[:,]\\s*",
                contains: [
                  {
                    className: "symbol",
                    begin: "[a-zA-Z0-9_]+"
                  }
                ]
              }
            ]
          }
        ]
      },
      builtInTypeMode,
      // built-in types
      objectHandleMode,
      // object handles
      {
        // literals
        className: "literal",
        begin: "\\b(null|true|false)"
      },
      {
        // numbers
        className: "number",
        relevance: 0,
        begin: "(-?)(\\b0[xXbBoOdD][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?f?|\\.\\d+f?)([eE][-+]?\\d+f?)?)"
      }
    ]
  };
}
function apache(hljs) {
  const NUMBER_REF = {
    className: "number",
    begin: /[$%]\d+/
  };
  const NUMBER = {
    className: "number",
    begin: /\b\d+/
  };
  const IP_ADDRESS = {
    className: "number",
    begin: /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,5})?/
  };
  const PORT_NUMBER = {
    className: "number",
    begin: /:\d{1,5}/
  };
  return {
    name: "Apache config",
    aliases: ["apacheconf"],
    case_insensitive: true,
    contains: [
      hljs.HASH_COMMENT_MODE,
      {
        className: "section",
        begin: /<\/?/,
        end: />/,
        contains: [
          IP_ADDRESS,
          PORT_NUMBER,
          // low relevance prevents us from claming XML/HTML where this rule would
          // match strings inside of XML tags
          hljs.inherit(hljs.QUOTE_STRING_MODE, { relevance: 0 })
        ]
      },
      {
        className: "attribute",
        begin: /\w+/,
        relevance: 0,
        // keywords aren’t needed for highlighting per se, they only boost relevance
        // for a very generally defined mode (starts with a word, ends with line-end
        keywords: { _: [
          "order",
          "deny",
          "allow",
          "setenv",
          "rewriterule",
          "rewriteengine",
          "rewritecond",
          "documentroot",
          "sethandler",
          "errordocument",
          "loadmodule",
          "options",
          "header",
          "listen",
          "serverroot",
          "servername"
        ] },
        starts: {
          end: /$/,
          relevance: 0,
          keywords: { literal: "on off all deny allow" },
          contains: [
            {
              scope: "punctuation",
              match: /\\\n/
            },
            {
              className: "meta",
              begin: /\s\[/,
              end: /\]$/
            },
            {
              className: "variable",
              begin: /[\$%]\{/,
              end: /\}/,
              contains: [
                "self",
                NUMBER_REF
              ]
            },
            IP_ADDRESS,
            NUMBER,
            hljs.QUOTE_STRING_MODE
          ]
        }
      }
    ],
    illegal: /\S/
  };
}
function applescript(hljs) {
  const regex = hljs.regex;
  const STRING = hljs.inherit(
    hljs.QUOTE_STRING_MODE,
    { illegal: null }
  );
  const PARAMS = {
    className: "params",
    begin: /\(/,
    end: /\)/,
    contains: [
      "self",
      hljs.C_NUMBER_MODE,
      STRING
    ]
  };
  const COMMENT_MODE_1 = hljs.COMMENT(/--/, /$/);
  const COMMENT_MODE_2 = hljs.COMMENT(
    /\(\*/,
    /\*\)/,
    { contains: [
      "self",
      // allow nesting
      COMMENT_MODE_1
    ] }
  );
  const COMMENTS = [
    COMMENT_MODE_1,
    COMMENT_MODE_2,
    hljs.HASH_COMMENT_MODE
  ];
  const KEYWORD_PATTERNS = [
    /apart from/,
    /aside from/,
    /instead of/,
    /out of/,
    /greater than/,
    /isn't|(doesn't|does not) (equal|come before|come after|contain)/,
    /(greater|less) than( or equal)?/,
    /(starts?|ends|begins?) with/,
    /contained by/,
    /comes (before|after)/,
    /a (ref|reference)/,
    /POSIX (file|path)/,
    /(date|time) string/,
    /quoted form/
  ];
  const BUILT_IN_PATTERNS = [
    /clipboard info/,
    /the clipboard/,
    /info for/,
    /list (disks|folder)/,
    /mount volume/,
    /path to/,
    /(close|open for) access/,
    /(get|set) eof/,
    /current date/,
    /do shell script/,
    /get volume settings/,
    /random number/,
    /set volume/,
    /system attribute/,
    /system info/,
    /time to GMT/,
    /(load|run|store) script/,
    /scripting components/,
    /ASCII (character|number)/,
    /localized string/,
    /choose (application|color|file|file name|folder|from list|remote application|URL)/,
    /display (alert|dialog)/
  ];
  return {
    name: "AppleScript",
    aliases: ["osascript"],
    keywords: {
      keyword: "about above after against and around as at back before beginning behind below beneath beside between but by considering contain contains continue copy div does eighth else end equal equals error every exit fifth first for fourth from front get given global if ignoring in into is it its last local me middle mod my ninth not of on onto or over prop property put ref reference repeat returning script second set seventh since sixth some tell tenth that the|0 then third through thru timeout times to transaction try until where while whose with without",
      literal: "AppleScript false linefeed return pi quote result space tab true",
      built_in: "alias application boolean class constant date file integer list number real record string text activate beep count delay launch log offset read round run say summarize write character characters contents day frontmost id item length month name|0 paragraph paragraphs rest reverse running time version weekday word words year"
    },
    contains: [
      STRING,
      hljs.C_NUMBER_MODE,
      {
        className: "built_in",
        begin: regex.concat(
          /\b/,
          regex.either(...BUILT_IN_PATTERNS),
          /\b/
        )
      },
      {
        className: "built_in",
        begin: /^\s*return\b/
      },
      {
        className: "literal",
        begin: /\b(text item delimiters|current application|missing value)\b/
      },
      {
        className: "keyword",
        begin: regex.concat(
          /\b/,
          regex.either(...KEYWORD_PATTERNS),
          /\b/
        )
      },
      {
        beginKeywords: "on",
        illegal: /[${=;\n]/,
        contains: [
          hljs.UNDERSCORE_TITLE_MODE,
          PARAMS
        ]
      },
      ...COMMENTS
    ],
    illegal: /\/\/|->|=>|\[\[/
  };
}
function arcade(hljs) {
  const regex = hljs.regex;
  const IDENT_RE2 = "[A-Za-z_][0-9A-Za-z_]*";
  const KEYWORDS2 = {
    keyword: [
      "break",
      "case",
      "catch",
      "continue",
      "debugger",
      "do",
      "else",
      "export",
      "for",
      "function",
      "if",
      "import",
      "in",
      "new",
      "of",
      "return",
      "switch",
      "try",
      "var",
      "void",
      "while"
    ],
    literal: [
      "BackSlash",
      "DoubleQuote",
      "ForwardSlash",
      "Infinity",
      "NaN",
      "NewLine",
      "PI",
      "SingleQuote",
      "Tab",
      "TextFormatting",
      "false",
      "null",
      "true",
      "undefined"
    ],
    built_in: [
      "Abs",
      "Acos",
      "All",
      "Angle",
      "Any",
      "Area",
      "AreaGeodetic",
      "Array",
      "Asin",
      "Atan",
      "Atan2",
      "Attachments",
      "Average",
      "Back",
      "Bearing",
      "Boolean",
      "Buffer",
      "BufferGeodetic",
      "Ceil",
      "Centroid",
      "ChangeTimeZone",
      "Clip",
      "Concatenate",
      "Console",
      "Constrain",
      "Contains",
      "ConvertDirection",
      "ConvexHull",
      "Cos",
      "Count",
      "Crosses",
      "Cut",
      "Date|0",
      "DateAdd",
      "DateDiff",
      "DateOnly",
      "Day",
      "Decode",
      "DefaultValue",
      "Densify",
      "DensifyGeodetic",
      "Dictionary",
      "Difference",
      "Disjoint",
      "Distance",
      "DistanceGeodetic",
      "DistanceToCoordinate",
      "Distinct",
      "Domain",
      "DomainCode",
      "DomainName",
      "EnvelopeIntersects",
      "Equals",
      "Erase",
      "Exp",
      "Expects",
      "Extent",
      "Feature",
      "FeatureInFilter",
      "FeatureSet",
      "FeatureSetByAssociation",
      "FeatureSetById",
      "FeatureSetByName",
      "FeatureSetByPortalItem",
      "FeatureSetByRelationshipClass",
      "FeatureSetByRelationshipName",
      "Filter",
      "FilterBySubtypeCode",
      "Find",
      "First|0",
      "Floor",
      "FromCharCode",
      "FromCodePoint",
      "FromJSON",
      "Front",
      "GdbVersion",
      "Generalize",
      "Geometry",
      "GetEnvironment",
      "GetFeatureSet",
      "GetFeatureSetInfo",
      "GetUser",
      "GroupBy",
      "Guid",
      "HasKey",
      "HasValue",
      "Hash",
      "Hour",
      "IIf",
      "ISOMonth",
      "ISOWeek",
      "ISOWeekday",
      "ISOYear",
      "Includes",
      "IndexOf",
      "Insert",
      "Intersection",
      "Intersects",
      "IsEmpty",
      "IsNan",
      "IsSelfIntersecting",
      "IsSimple",
      "KnowledgeGraphByPortalItem",
      "Left|0",
      "Length",
      "Length3D",
      "LengthGeodetic",
      "Log",
      "Lower",
      "Map",
      "Max",
      "Mean",
      "MeasureToCoordinate",
      "Mid",
      "Millisecond",
      "Min",
      "Minute",
      "Month",
      "MultiPartToSinglePart",
      "Multipoint",
      "NearestCoordinate",
      "NearestVertex",
      "NextSequenceValue",
      "None",
      "Now",
      "Number",
      "Offset",
      "OrderBy",
      "Overlaps",
      "Point",
      "PointToCoordinate",
      "Polygon",
      "Polyline",
      "Pop",
      "Portal",
      "Pow",
      "Proper",
      "Push",
      "QueryGraph",
      "Random",
      "Reduce",
      "Relate",
      "Replace",
      "Resize",
      "Reverse",
      "Right|0",
      "RingIsClockwise",
      "Rotate",
      "Round",
      "Schema",
      "Second",
      "SetGeometry",
      "Simplify",
      "Sin",
      "Slice",
      "Sort",
      "Splice",
      "Split",
      "Sqrt",
      "StandardizeFilename",
      "StandardizeGuid",
      "Stdev",
      "SubtypeCode",
      "SubtypeName",
      "Subtypes",
      "Sum",
      "SymmetricDifference",
      "Tan",
      "Text",
      "Time",
      "TimeZone",
      "TimeZoneOffset",
      "Timestamp",
      "ToCharCode",
      "ToCodePoint",
      "ToHex",
      "ToLocal",
      "ToUTC",
      "Today",
      "Top|0",
      "Touches",
      "TrackAccelerationAt",
      "TrackAccelerationWindow",
      "TrackCurrentAcceleration",
      "TrackCurrentDistance",
      "TrackCurrentSpeed",
      "TrackCurrentTime",
      "TrackDistanceAt",
      "TrackDistanceWindow",
      "TrackDuration",
      "TrackFieldWindow",
      "TrackGeometryWindow",
      "TrackIndex",
      "TrackSpeedAt",
      "TrackSpeedWindow",
      "TrackStartTime",
      "TrackWindow",
      "Trim",
      "TypeOf",
      "Union",
      "Upper",
      "UrlEncode",
      "Variance",
      "Week",
      "Weekday",
      "When|0",
      "Within",
      "Year|0"
    ]
  };
  const PROFILE_VARS = [
    "aggregatedFeatures",
    "analytic",
    "config",
    "datapoint",
    "datastore",
    "editcontext",
    "feature",
    "featureSet",
    "feedfeature",
    "fencefeature",
    "fencenotificationtype",
    "graph",
    "join",
    "layer",
    "locationupdate",
    "map",
    "measure",
    "measure",
    "originalFeature",
    "record",
    "reference",
    "rowindex",
    "sourcedatastore",
    "sourcefeature",
    "sourcelayer",
    "target",
    "targetdatastore",
    "targetfeature",
    "targetlayer",
    "userInput",
    "value",
    "variables",
    "view"
  ];
  const SYMBOL = {
    className: "symbol",
    begin: "\\$" + regex.either(...PROFILE_VARS)
  };
  const NUMBER = {
    className: "number",
    variants: [
      { begin: "\\b(0[bB][01]+)" },
      { begin: "\\b(0[oO][0-7]+)" },
      { begin: hljs.C_NUMBER_RE }
    ],
    relevance: 0
  };
  const SUBST = {
    className: "subst",
    begin: "\\$\\{",
    end: "\\}",
    keywords: KEYWORDS2,
    contains: []
    // defined later
  };
  const TEMPLATE_STRING = {
    className: "string",
    begin: "`",
    end: "`",
    contains: [
      hljs.BACKSLASH_ESCAPE,
      SUBST
    ]
  };
  SUBST.contains = [
    hljs.APOS_STRING_MODE,
    hljs.QUOTE_STRING_MODE,
    TEMPLATE_STRING,
    NUMBER,
    hljs.REGEXP_MODE
  ];
  const PARAMS_CONTAINS = SUBST.contains.concat([
    hljs.C_BLOCK_COMMENT_MODE,
    hljs.C_LINE_COMMENT_MODE
  ]);
  return {
    name: "ArcGIS Arcade",
    case_insensitive: true,
    keywords: KEYWORDS2,
    contains: [
      hljs.APOS_STRING_MODE,
      hljs.QUOTE_STRING_MODE,
      TEMPLATE_STRING,
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      SYMBOL,
      NUMBER,
      {
        // object attr container
        begin: /[{,]\s*/,
        relevance: 0,
        contains: [
          {
            begin: IDENT_RE2 + "\\s*:",
            returnBegin: true,
            relevance: 0,
            contains: [
              {
                className: "attr",
                begin: IDENT_RE2,
                relevance: 0
              }
            ]
          }
        ]
      },
      {
        // "value" container
        begin: "(" + hljs.RE_STARTERS_RE + "|\\b(return)\\b)\\s*",
        keywords: "return",
        contains: [
          hljs.C_LINE_COMMENT_MODE,
          hljs.C_BLOCK_COMMENT_MODE,
          hljs.REGEXP_MODE,
          {
            className: "function",
            begin: "(\\(.*?\\)|" + IDENT_RE2 + ")\\s*=>",
            returnBegin: true,
            end: "\\s*=>",
            contains: [
              {
                className: "params",
                variants: [
                  { begin: IDENT_RE2 },
                  { begin: /\(\s*\)/ },
                  {
                    begin: /\(/,
                    end: /\)/,
                    excludeBegin: true,
                    excludeEnd: true,
                    keywords: KEYWORDS2,
                    contains: PARAMS_CONTAINS
                  }
                ]
              }
            ]
          }
        ],
        relevance: 0
      },
      {
        beginKeywords: "function",
        end: /\{/,
        excludeEnd: true,
        contains: [
          hljs.inherit(hljs.TITLE_MODE, {
            className: "title.function",
            begin: IDENT_RE2
          }),
          {
            className: "params",
            begin: /\(/,
            end: /\)/,
            excludeBegin: true,
            excludeEnd: true,
            contains: PARAMS_CONTAINS
          }
        ],
        illegal: /\[|%/
      },
      { begin: /\$[(.]/ }
    ],
    illegal: /#(?!!)/
  };
}
function armasm(hljs) {
  const COMMENT = { variants: [
    hljs.COMMENT("^[ \\t]*(?=#)", "$", {
      relevance: 0,
      excludeBegin: true
    }),
    hljs.COMMENT("[;@]", "$", { relevance: 0 }),
    hljs.C_LINE_COMMENT_MODE,
    hljs.C_BLOCK_COMMENT_MODE
  ] };
  return {
    name: "ARM Assembly",
    case_insensitive: true,
    aliases: ["arm"],
    keywords: {
      $pattern: "\\.?" + hljs.IDENT_RE,
      meta: (
        // GNU preprocs
        ".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND "
      ),
      built_in: "r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 w0 w1 w2 w3 w4 w5 w6 w7 w8 w9 w10 w11 w12 w13 w14 w15 w16 w17 w18 w19 w20 w21 w22 w23 w24 w25 w26 w27 w28 w29 w30 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 {PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @"
    },
    contains: [
      {
        className: "keyword",
        begin: "\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?(?=\\s)"
        // followed by space
      },
      COMMENT,
      hljs.QUOTE_STRING_MODE,
      {
        className: "string",
        begin: "'",
        end: "[^\\\\]'",
        relevance: 0
      },
      {
        className: "title",
        begin: "\\|",
        end: "\\|",
        illegal: "\\n",
        relevance: 0
      },
      {
        className: "number",
        variants: [
          {
            // hex
            begin: "[#$=]?0x[0-9a-f]+"
          },
          {
            // bin
            begin: "[#$=]?0b[01]+"
          },
          {
            // literal
            begin: "[#$=]\\d+"
          },
          {
            // bare number
            begin: "\\b\\d+"
          }
        ],
        relevance: 0
      },
      {
        className: "symbol",
        variants: [
          {
            // GNU ARM syntax
            begin: "^[ \\t]*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"
          },
          {
            // ARM syntax
            begin: "^[a-z_\\.\\$][a-z0-9_\\.\\$]+"
          },
          {
            // label reference
            begin: "[=#]\\w+"
          }
        ],
        relevance: 0
      }
    ]
  };
}
function asciidoc(hljs) {
  const regex = hljs.regex;
  const HORIZONTAL_RULE = {
    begin: "^'{3,}[ \\t]*$",
    relevance: 10
  };
  const ESCAPED_FORMATTING = [
    // escaped constrained formatting marks (i.e., \* \_ or \`)
    { begin: /\\[*_`]/ },
    // escaped unconstrained formatting marks (i.e., \\** \\__ or \\``)
    // must ignore until the next formatting marks
    // this rule might not be 100% compliant with Asciidoctor 2.0 but we are entering undefined behavior territory...
    { begin: /\\\\\*{2}[^\n]*?\*{2}/ },
    { begin: /\\\\_{2}[^\n]*_{2}/ },
    { begin: /\\\\`{2}[^\n]*`{2}/ },
    // guard: constrained formatting mark may not be preceded by ":", ";" or
    // "}". match these so the constrained rule doesn't see them
    { begin: /[:;}][*_`](?![*_`])/ }
  ];
  const STRONG = [
    // inline unconstrained strong (single line)
    {
      className: "strong",
      begin: /\*{2}([^\n]+?)\*{2}/
    },
    // inline unconstrained strong (multi-line)
    {
      className: "strong",
      begin: regex.concat(
        /\*\*/,
        /((\*(?!\*)|\\[^\n]|[^*\n\\])+\n)+/,
        /(\*(?!\*)|\\[^\n]|[^*\n\\])*/,
        /\*\*/
      ),
      relevance: 0
    },
    // inline constrained strong (single line)
    {
      className: "strong",
      // must not precede or follow a word character
      begin: /\B\*(\S|\S[^\n]*?\S)\*(?!\w)/
    },
    // inline constrained strong (multi-line)
    {
      className: "strong",
      // must not precede or follow a word character
      begin: /\*[^\s]([^\n]+\n)+([^\n]+)\*/
    }
  ];
  const EMPHASIS = [
    // inline unconstrained emphasis (single line)
    {
      className: "emphasis",
      begin: /_{2}([^\n]+?)_{2}/
    },
    // inline unconstrained emphasis (multi-line)
    {
      className: "emphasis",
      begin: regex.concat(
        /__/,
        /((_(?!_)|\\[^\n]|[^_\n\\])+\n)+/,
        /(_(?!_)|\\[^\n]|[^_\n\\])*/,
        /__/
      ),
      relevance: 0
    },
    // inline constrained emphasis (single line)
    {
      className: "emphasis",
      // must not precede or follow a word character
      begin: /\b_(\S|\S[^\n]*?\S)_(?!\w)/
    },
    // inline constrained emphasis (multi-line)
    {
      className: "emphasis",
      // must not precede or follow a word character
      begin: /_[^\s]([^\n]+\n)+([^\n]+)_/
    },
    // inline constrained emphasis using single quote (legacy)
    {
      className: "emphasis",
      // must not follow a word character or be followed by a single quote or space
      begin: "\\B'(?!['\\s])",
      end: "(\\n{2}|')",
      // allow escaped single quote followed by word char
      contains: [
        {
          begin: "\\\\'\\w",
          relevance: 0
        }
      ],
      relevance: 0
    }
  ];
  const ADMONITION = {
    className: "symbol",
    begin: "^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\s+",
    relevance: 10
  };
  const BULLET_LIST = {
    className: "bullet",
    begin: "^(\\*+|-+|\\.+|[^\\n]+?::)\\s+"
  };
  return {
    name: "AsciiDoc",
    aliases: ["adoc"],
    contains: [
      // block comment
      hljs.COMMENT(
        "^/{4,}\\n",
        "\\n/{4,}$",
        // can also be done as...
        // '^/{4,}$',
        // '^/{4,}$',
        { relevance: 10 }
      ),
      // line comment
      hljs.COMMENT(
        "^//",
        "$",
        { relevance: 0 }
      ),
      // title
      {
        className: "title",
        begin: "^\\.\\w.*$"
      },
      // example, admonition & sidebar blocks
      {
        begin: "^[=\\*]{4,}\\n",
        end: "\\n^[=\\*]{4,}$",
        relevance: 10
      },
      // headings
      {
        className: "section",
        relevance: 10,
        variants: [
          { begin: "^(={1,6})[ 	].+?([ 	]\\1)?$" },
          { begin: "^[^\\[\\]\\n]+?\\n[=\\-~\\^\\+]{2,}$" }
        ]
      },
      // document attributes
      {
        className: "meta",
        begin: "^:.+?:",
        end: "\\s",
        excludeEnd: true,
        relevance: 10
      },
      // block attributes
      {
        className: "meta",
        begin: "^\\[.+?\\]$",
        relevance: 0
      },
      // quoteblocks
      {
        className: "quote",
        begin: "^_{4,}\\n",
        end: "\\n_{4,}$",
        relevance: 10
      },
      // listing and literal blocks
      {
        className: "code",
        begin: "^[\\-\\.]{4,}\\n",
        end: "\\n[\\-\\.]{4,}$",
        relevance: 10
      },
      // passthrough blocks
      {
        begin: "^\\+{4,}\\n",
        end: "\\n\\+{4,}$",
        contains: [
          {
            begin: "<",
            end: ">",
            subLanguage: "xml",
            relevance: 0
          }
        ],
        relevance: 10
      },
      BULLET_LIST,
      ADMONITION,
      ...ESCAPED_FORMATTING,
      ...STRONG,
      ...EMPHASIS,
      // inline smart quotes
      {
        className: "string",
        variants: [
          { begin: "``.+?''" },
          { begin: "`.+?'" }
        ]
      },
      // inline unconstrained emphasis
      {
        className: "code",
        begin: /`{2}/,
        end: /(\n{2}|`{2})/
      },
      // inline code snippets (TODO should get same treatment as strong and emphasis)
      {
        className: "code",
        begin: "(`.+?`|\\+.+?\\+)",
        relevance: 0
      },
      // indented literal block
      {
        className: "code",
        begin: "^[ \\t]",
        end: "$",
        relevance: 0
      },
      HORIZONTAL_RULE,
      // images and links
      {
        begin: "(link:)?(http|https|ftp|file|irc|image:?):\\S+?\\[[^[]*?\\]",
        returnBegin: true,
        contains: [
          {
            begin: "(link|image:?):",
            relevance: 0
          },
          {
            className: "link",
            begin: "\\w",
            end: "[^\\[]+",
            relevance: 0
          },
          {
            className: "string",
            begin: "\\[",
            end: "\\]",
            excludeBegin: true,
            excludeEnd: true,
            relevance: 0
          }
        ],
        relevance: 10
      }
    ]
  };
}
function aspectj(hljs) {
  const regex = hljs.regex;
  const KEYWORDS2 = [
    "false",
    "synchronized",
    "int",
    "abstract",
    "float",
    "private",
    "char",
    "boolean",
    "static",
    "null",
    "if",
    "const",
    "for",
    "true",
    "while",
    "long",
    "throw",
    "strictfp",
    "finally",
    "protected",
    "import",
    "native",
    "final",
    "return",
    "void",
    "enum",
    "else",
    "extends",
    "implements",
    "break",
    "transient",
    "new",
    "catch",
    "instanceof",
    "byte",
    "super",
    "volatile",
    "case",
    "assert",
    "short",
    "package",
    "default",
    "double",
    "public",
    "try",
    "this",
    "switch",
    "continue",
    "throws",
    "privileged",
    "aspectOf",
    "adviceexecution",
    "proceed",
    "cflowbelow",
    "cflow",
    "initialization",
    "preinitialization",
    "staticinitialization",
    "withincode",
    "target",
    "within",
    "execution",
    "getWithinTypeName",
    "handler",
    "thisJoinPoint",
    "thisJoinPointStaticPart",
    "thisEnclosingJoinPointStaticPart",
    "declare",
    "parents",
    "warning",
    "error",
    "soft",
    "precedence",
    "thisAspectInstance"
  ];
  const SHORTKEYS = [
    "get",
    "set",
    "args",
    "call"
  ];
  return {
    name: "AspectJ",
    keywords: KEYWORDS2,
    illegal: /<\/|#/,
    contains: [
      hljs.COMMENT(
        /\/\*\*/,
        /\*\//,
        {
          relevance: 0,
          contains: [
            {
              // eat up @'s in emails to prevent them to be recognized as doctags
              begin: /\w+@/,
              relevance: 0
            },
            {
              className: "doctag",
              begin: /@[A-Za-z]+/
            }
          ]
        }
      ),
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.APOS_STRING_MODE,
      hljs.QUOTE_STRING_MODE,
      {
        className: "class",
        beginKeywords: "aspect",
        end: /[{;=]/,
        excludeEnd: true,
        illegal: /[:;"\[\]]/,
        contains: [
          { beginKeywords: "extends implements pertypewithin perthis pertarget percflowbelow percflow issingleton" },
          hljs.UNDERSCORE_TITLE_MODE,
          {
            begin: /\([^\)]*/,
            end: /[)]+/,
            keywords: KEYWORDS2.concat(SHORTKEYS),
            excludeEnd: false
          }
        ]
      },
      {
        className: "class",
        beginKeywords: "class interface",
        end: /[{;=]/,
        excludeEnd: true,
        relevance: 0,
        keywords: "class interface",
        illegal: /[:"\[\]]/,
        contains: [
          { beginKeywords: "extends implements" },
          hljs.UNDERSCORE_TITLE_MODE
        ]
      },
      {
        // AspectJ Constructs
        beginKeywords: "pointcut after before around throwing returning",
        end: /[)]/,
        excludeEnd: false,
        illegal: /["\[\]]/,
        contains: [
          {
            begin: regex.concat(hljs.UNDERSCORE_IDENT_RE, /\s*\(/),
            returnBegin: true,
            contains: [hljs.UNDERSCORE_TITLE_MODE]
          }
        ]
      },
      {
        begin: /[:]/,
        returnBegin: true,
        end: /[{;]/,
        relevance: 0,
        excludeEnd: false,
        keywords: KEYWORDS2,
        illegal: /["\[\]]/,
        contains: [
          {
            begin: regex.concat(hljs.UNDERSCORE_IDENT_RE, /\s*\(/),
            keywords: KEYWORDS2.concat(SHORTKEYS),
            relevance: 0
          },
          hljs.QUOTE_STRING_MODE
        ]
      },
      {
        // this prevents 'new Name(...), or throw ...' from being recognized as a function definition
        beginKeywords: "new throw",
        relevance: 0
      },
      {
        // the function class is a bit different for AspectJ compared to the Java language
        className: "function",
        begin: /\w+ +\w+(\.\w+)?\s*\([^\)]*\)\s*((throws)[\w\s,]+)?[\{;]/,
        returnBegin: true,
        end: /[{;=]/,
        keywords: KEYWORDS2,
        excludeEnd: true,
        contains: [
          {
            begin: regex.concat(hljs.UNDERSCORE_IDENT_RE, /\s*\(/),
            returnBegin: true,
            relevance: 0,
            contains: [hljs.UNDERSCORE_TITLE_MODE]
          },
          {
            className: "params",
            begin: /\(/,
            end: /\)/,
            relevance: 0,
            keywords: KEYWORDS2,
            contains: [
              hljs.APOS_STRING_MODE,
              hljs.QUOTE_STRING_MODE,
              hljs.C_NUMBER_MODE,
              hljs.C_BLOCK_COMMENT_MODE
            ]
          },
          hljs.C_LINE_COMMENT_MODE,
          hljs.C_BLOCK_COMMENT_MODE
        ]
      },
      hljs.C_NUMBER_MODE,
      {
        // annotation is also used in this language
        className: "meta",
        begin: /@[A-Za-z]+/
      }
    ]
  };
}
function autohotkey(hljs) {
  const BACKTICK_ESCAPE = { begin: "`[\\s\\S]" };
  return {
    name: "AutoHotkey",
    case_insensitive: true,
    aliases: ["ahk"],
    keywords: {
      keyword: "Break Continue Critical Exit ExitApp Gosub Goto New OnExit Pause return SetBatchLines SetTimer Suspend Thread Throw Until ahk_id ahk_class ahk_pid ahk_exe ahk_group",
      literal: "true false NOT AND OR",
      built_in: "ComSpec Clipboard ClipboardAll ErrorLevel"
    },
    contains: [
      BACKTICK_ESCAPE,
      hljs.inherit(hljs.QUOTE_STRING_MODE, { contains: [BACKTICK_ESCAPE] }),
      hljs.COMMENT(";", "$", { relevance: 0 }),
      hljs.C_BLOCK_COMMENT_MODE,
      {
        className: "number",
        begin: hljs.NUMBER_RE,
        relevance: 0
      },
      {
        // subst would be the most accurate however fails the point of
        // highlighting. variable is comparably the most accurate that actually
        // has some effect
        className: "variable",
        begin: "%[a-zA-Z0-9#_$@]+%"
      },
      {
        className: "built_in",
        begin: "^\\s*\\w+\\s*(,|%)"
        // I don't really know if this is totally relevant
      },
      {
        // symbol would be most accurate however is highlighted just like
        // built_in and that makes up a lot of AutoHotkey code meaning that it
        // would fail to highlight anything
        className: "title",
        variants: [
          { begin: '^[^\\n";]+::(?!=)' },
          {
            begin: '^[^\\n";]+:(?!=)',
            // zero relevance as it catches a lot of things
            // followed by a single ':' in many languages
            relevance: 0
          }
        ]
      },
      {
        className: "meta",
        begin: "^\\s*#\\w+",
        end: "$",
        relevance: 0
      },
      {
        className: "built_in",
        begin: "A_[a-zA-Z0-9]+"
      },
      {
        // consecutive commas, not for highlighting but just for relevance
        begin: ",\\s*,"
      }
    ]
  };
}
function autoit(hljs) {
  const KEYWORDS2 = "ByRef Case Const ContinueCase ContinueLoop Dim Do Else ElseIf EndFunc EndIf EndSelect EndSwitch EndWith Enum Exit ExitLoop For Func Global If In Local Next ReDim Return Select Static Step Switch Then To Until Volatile WEnd While With";
  const DIRECTIVES = [
    "EndRegion",
    "forcedef",
    "forceref",
    "ignorefunc",
    "include",
    "include-once",
    "NoTrayIcon",
    "OnAutoItStartRegister",
    "pragma",
    "Region",
    "RequireAdmin",
    "Tidy_Off",
    "Tidy_On",
    "Tidy_Parameters"
  ];
  const LITERAL = "True False And Null Not Or Default";
  const BUILT_IN = "Abs ACos AdlibRegister AdlibUnRegister Asc AscW ASin Assign ATan AutoItSetOption AutoItWinGetTitle AutoItWinSetTitle Beep Binary BinaryLen BinaryMid BinaryToString BitAND BitNOT BitOR BitRotate BitShift BitXOR BlockInput Break Call CDTray Ceiling Chr ChrW ClipGet ClipPut ConsoleRead ConsoleWrite ConsoleWriteError ControlClick ControlCommand ControlDisable ControlEnable ControlFocus ControlGetFocus ControlGetHandle ControlGetPos ControlGetText ControlHide ControlListView ControlMove ControlSend ControlSetText ControlShow ControlTreeView Cos Dec DirCopy DirCreate DirGetSize DirMove DirRemove DllCall DllCallAddress DllCallbackFree DllCallbackGetPtr DllCallbackRegister DllClose DllOpen DllStructCreate DllStructGetData DllStructGetPtr DllStructGetSize DllStructSetData DriveGetDrive DriveGetFileSystem DriveGetLabel DriveGetSerial DriveGetType DriveMapAdd DriveMapDel DriveMapGet DriveSetLabel DriveSpaceFree DriveSpaceTotal DriveStatus EnvGet EnvSet EnvUpdate Eval Execute Exp FileChangeDir FileClose FileCopy FileCreateNTFSLink FileCreateShortcut FileDelete FileExists FileFindFirstFile FileFindNextFile FileFlush FileGetAttrib FileGetEncoding FileGetLongName FileGetPos FileGetShortcut FileGetShortName FileGetSize FileGetTime FileGetVersion FileInstall FileMove FileOpen FileOpenDialog FileRead FileReadLine FileReadToArray FileRecycle FileRecycleEmpty FileSaveDialog FileSelectFolder FileSetAttrib FileSetEnd FileSetPos FileSetTime FileWrite FileWriteLine Floor FtpSetProxy FuncName GUICreate GUICtrlCreateAvi GUICtrlCreateButton GUICtrlCreateCheckbox GUICtrlCreateCombo GUICtrlCreateContextMenu GUICtrlCreateDate GUICtrlCreateDummy GUICtrlCreateEdit GUICtrlCreateGraphic GUICtrlCreateGroup GUICtrlCreateIcon GUICtrlCreateInput GUICtrlCreateLabel GUICtrlCreateList GUICtrlCreateListView GUICtrlCreateListViewItem GUICtrlCreateMenu GUICtrlCreateMenuItem GUICtrlCreateMonthCal GUICtrlCreateObj GUICtrlCreatePic GUICtrlCreateProgress GUICtrlCreateRadio GUICtrlCreateSlider GUICtrlCreateTab GUICtrlCreateTabItem GUICtrlCreateTreeView GUICtrlCreateTreeViewItem GUICtrlCreateUpdown GUICtrlDelete GUICtrlGetHandle GUICtrlGetState GUICtrlRead GUICtrlRecvMsg GUICtrlRegisterListViewSort GUICtrlSendMsg GUICtrlSendToDummy GUICtrlSetBkColor GUICtrlSetColor GUICtrlSetCursor GUICtrlSetData GUICtrlSetDefBkColor GUICtrlSetDefColor GUICtrlSetFont GUICtrlSetGraphic GUICtrlSetImage GUICtrlSetLimit GUICtrlSetOnEvent GUICtrlSetPos GUICtrlSetResizing GUICtrlSetState GUICtrlSetStyle GUICtrlSetTip GUIDelete GUIGetCursorInfo GUIGetMsg GUIGetStyle GUIRegisterMsg GUISetAccelerators GUISetBkColor GUISetCoord GUISetCursor GUISetFont GUISetHelp GUISetIcon GUISetOnEvent GUISetState GUISetStyle GUIStartGroup GUISwitch Hex HotKeySet HttpSetProxy HttpSetUserAgent HWnd InetClose InetGet InetGetInfo InetGetSize InetRead IniDelete IniRead IniReadSection IniReadSectionNames IniRenameSection IniWrite IniWriteSection InputBox Int IsAdmin IsArray IsBinary IsBool IsDeclared IsDllStruct IsFloat IsFunc IsHWnd IsInt IsKeyword IsNumber IsObj IsPtr IsString Log MemGetStats Mod MouseClick MouseClickDrag MouseDown MouseGetCursor MouseGetPos MouseMove MouseUp MouseWheel MsgBox Number ObjCreate ObjCreateInterface ObjEvent ObjGet ObjName OnAutoItExitRegister OnAutoItExitUnRegister Ping PixelChecksum PixelGetColor PixelSearch ProcessClose ProcessExists ProcessGetStats ProcessList ProcessSetPriority ProcessWait ProcessWaitClose ProgressOff ProgressOn ProgressSet Ptr Random RegDelete RegEnumKey RegEnumVal RegRead RegWrite Round Run RunAs RunAsWait RunWait Send SendKeepActive SetError SetExtended ShellExecute ShellExecuteWait Shutdown Sin Sleep SoundPlay SoundSetWaveVolume SplashImageOn SplashOff SplashTextOn Sqrt SRandom StatusbarGetText StderrRead StdinWrite StdioClose StdoutRead String StringAddCR StringCompare StringFormat StringFromASCIIArray StringInStr StringIsAlNum StringIsAlpha StringIsASCII StringIsDigit StringIsFloat StringIsInt StringIsLower StringIsSpace StringIsUpper StringIsXDigit StringLeft StringLen StringLower StringMid StringRegExp StringRegExpReplace StringReplace StringReverse StringRight StringSplit StringStripCR StringStripWS StringToASCIIArray StringToBinary StringTrimLeft StringTrimRight StringUpper Tan TCPAccept TCPCloseSocket TCPConnect TCPListen TCPNameToIP TCPRecv TCPSend TCPShutdown, UDPShutdown TCPStartup, UDPStartup TimerDiff TimerInit ToolTip TrayCreateItem TrayCreateMenu TrayGetMsg TrayItemDelete TrayItemGetHandle TrayItemGetState TrayItemGetText TrayItemSetOnEvent TrayItemSetState TrayItemSetText TraySetClick TraySetIcon TraySetOnEvent TraySetPauseIcon TraySetState TraySetToolTip TrayTip UBound UDPBind UDPCloseSocket UDPOpen UDPRecv UDPSend VarGetType WinActivate WinActive WinClose WinExists WinFlash WinGetCaretPos WinGetClassList WinGetClientSize WinGetHandle WinGetPos WinGetProcess WinGetState WinGetText WinGetTitle WinKill WinList WinMenuSelectItem WinMinimizeAll WinMinimizeAllUndo WinMove WinSetOnTop WinSetState WinSetTitle WinSetTrans WinWait WinWaitActive WinWaitClose WinWaitNotActive";
  const COMMENT = { variants: [
    hljs.COMMENT(";", "$", { relevance: 0 }),
    hljs.COMMENT("#cs", "#ce"),
    hljs.COMMENT("#comments-start", "#comments-end")
  ] };
  const VARIABLE = { begin: "\\$[A-z0-9_]+" };
  const STRING = {
    className: "string",
    variants: [
      {
        begin: /"/,
        end: /"/,
        contains: [
          {
            begin: /""/,
            relevance: 0
          }
        ]
      },
      {
        begin: /'/,
        end: /'/,
        contains: [
          {
            begin: /''/,
            relevance: 0
          }
        ]
      }
    ]
  };
  const NUMBER = { variants: [
    hljs.BINARY_NUMBER_MODE,
    hljs.C_NUMBER_MODE
  ] };
  const PREPROCESSOR = {
    className: "meta",
    begin: "#",
    end: "$",
    keywords: { keyword: DIRECTIVES },
    contains: [
      {
        begin: /\\\n/,
        relevance: 0
      },
      {
        beginKeywords: "include",
        keywords: { keyword: "include" },
        end: "$",
        contains: [
          STRING,
          {
            className: "string",
            variants: [
              {
                begin: "<",
                end: ">"
              },
              {
                begin: /"/,
                end: /"/,
                contains: [
                  {
                    begin: /""/,
                    relevance: 0
                  }
                ]
              },
              {
                begin: /'/,
                end: /'/,
                contains: [
                  {
                    begin: /''/,
                    relevance: 0
                  }
                ]
              }
            ]
          }
        ]
      },
      STRING,
      COMMENT
    ]
  };
  const CONSTANT = {
    className: "symbol",
    // begin: '@',
    // end: '$',
    // keywords: 'AppDataCommonDir AppDataDir AutoItExe AutoItPID AutoItVersion AutoItX64 COM_EventObj CommonFilesDir Compiled ComputerName ComSpec CPUArch CR CRLF DesktopCommonDir DesktopDepth DesktopDir DesktopHeight DesktopRefresh DesktopWidth DocumentsCommonDir error exitCode exitMethod extended FavoritesCommonDir FavoritesDir GUI_CtrlHandle GUI_CtrlId GUI_DragFile GUI_DragId GUI_DropId GUI_WinHandle HomeDrive HomePath HomeShare HotKeyPressed HOUR IPAddress1 IPAddress2 IPAddress3 IPAddress4 KBLayout LF LocalAppDataDir LogonDNSDomain LogonDomain LogonServer MDAY MIN MON MSEC MUILang MyDocumentsDir NumParams OSArch OSBuild OSLang OSServicePack OSType OSVersion ProgramFilesDir ProgramsCommonDir ProgramsDir ScriptDir ScriptFullPath ScriptLineNumber ScriptName SEC StartMenuCommonDir StartMenuDir StartupCommonDir StartupDir SW_DISABLE SW_ENABLE SW_HIDE SW_LOCK SW_MAXIMIZE SW_MINIMIZE SW_RESTORE SW_SHOW SW_SHOWDEFAULT SW_SHOWMAXIMIZED SW_SHOWMINIMIZED SW_SHOWMINNOACTIVE SW_SHOWNA SW_SHOWNOACTIVATE SW_SHOWNORMAL SW_UNLOCK SystemDir TAB TempDir TRAY_ID TrayIconFlashing TrayIconVisible UserName UserProfileDir WDAY WindowsDir WorkingDir YDAY YEAR',
    // relevance: 5
    begin: "@[A-z0-9_]+"
  };
  const FUNCTION = {
    beginKeywords: "Func",
    end: "$",
    illegal: "\\$|\\[|%",
    contains: [
      hljs.inherit(hljs.UNDERSCORE_TITLE_MODE, { className: "title.function" }),
      {
        className: "params",
        begin: "\\(",
        end: "\\)",
        contains: [
          VARIABLE,
          STRING,
          NUMBER
        ]
      }
    ]
  };
  return {
    name: "AutoIt",
    case_insensitive: true,
    illegal: /\/\*/,
    keywords: {
      keyword: KEYWORDS2,
      built_in: BUILT_IN,
      literal: LITERAL
    },
    contains: [
      COMMENT,
      VARIABLE,
      STRING,
      NUMBER,
      PREPROCESSOR,
      CONSTANT,
      FUNCTION
    ]
  };
}
function avrasm(hljs) {
  return {
    name: "AVR Assembly",
    case_insensitive: true,
    keywords: {
      $pattern: "\\.?" + hljs.IDENT_RE,
      keyword: (
        /* mnemonic */
        "adc add adiw and andi asr bclr bld brbc brbs brcc brcs break breq brge brhc brhs brid brie brlo brlt brmi brne brpl brsh brtc brts brvc brvs bset bst call cbi cbr clc clh cli cln clr cls clt clv clz com cp cpc cpi cpse dec eicall eijmp elpm eor fmul fmuls fmulsu icall ijmp in inc jmp ld ldd ldi lds lpm lsl lsr mov movw mul muls mulsu neg nop or ori out pop push rcall ret reti rjmp rol ror sbc sbr sbrc sbrs sec seh sbi sbci sbic sbis sbiw sei sen ser ses set sev sez sleep spm st std sts sub subi swap tst wdr"
      ),
      built_in: (
        /* general purpose registers */
        "r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16 r17 r18 r19 r20 r21 r22 r23 r24 r25 r26 r27 r28 r29 r30 r31 x|0 xh xl y|0 yh yl z|0 zh zl ucsr1c udr1 ucsr1a ucsr1b ubrr1l ubrr1h ucsr0c ubrr0h tccr3c tccr3a tccr3b tcnt3h tcnt3l ocr3ah ocr3al ocr3bh ocr3bl ocr3ch ocr3cl icr3h icr3l etimsk etifr tccr1c ocr1ch ocr1cl twcr twdr twar twsr twbr osccal xmcra xmcrb eicra spmcsr spmcr portg ddrg ping portf ddrf sreg sph spl xdiv rampz eicrb eimsk gimsk gicr eifr gifr timsk tifr mcucr mcucsr tccr0 tcnt0 ocr0 assr tccr1a tccr1b tcnt1h tcnt1l ocr1ah ocr1al ocr1bh ocr1bl icr1h icr1l tccr2 tcnt2 ocr2 ocdr wdtcr sfior eearh eearl eedr eecr porta ddra pina portb ddrb pinb portc ddrc pinc portd ddrd pind spdr spsr spcr udr0 ucsr0a ucsr0b ubrr0l acsr admux adcsr adch adcl porte ddre pine pinf"
      ),
      meta: ".byte .cseg .db .def .device .dseg .dw .endmacro .equ .eseg .exit .include .list .listmac .macro .nolist .org .set"
    },
    contains: [
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.COMMENT(
        ";",
        "$",
        { relevance: 0 }
      ),
      hljs.C_NUMBER_MODE,
      // 0x..., decimal, float
      hljs.BINARY_NUMBER_MODE,
      // 0b...
      {
        className: "number",
        begin: "\\b(\\$[a-zA-Z0-9]+|0o[0-7]+)"
        // $..., 0o...
      },
      hljs.QUOTE_STRING_MODE,
      {
        className: "string",
        begin: "'",
        end: "[^\\\\]'",
        illegal: "[^\\\\][^']"
      },
      {
        className: "symbol",
        begin: "^[A-Za-z0-9_.$]+:"
      },
      {
        className: "meta",
        begin: "#",
        end: "$"
      },
      {
        // substitution within a macro
        className: "subst",
        begin: "@[0-9]+"
      }
    ]
  };
}
function awk(hljs) {
  const VARIABLE = {
    className: "variable",
    variants: [
      { begin: /\$[\w\d#@][\w\d_]*/ },
      { begin: /\$\{(.*?)\}/ }
    ]
  };
  const KEYWORDS2 = "BEGIN END if else while do for in break continue delete next nextfile function func exit|10";
  const STRING = {
    className: "string",
    contains: [hljs.BACKSLASH_ESCAPE],
    variants: [
      {
        begin: /(u|b)?r?'''/,
        end: /'''/,
        relevance: 10
      },
      {
        begin: /(u|b)?r?"""/,
        end: /"""/,
        relevance: 10
      },
      {
        begin: /(u|r|ur)'/,
        end: /'/,
        relevance: 10
      },
      {
        begin: /(u|r|ur)"/,
        end: /"/,
        relevance: 10
      },
      {
        begin: /(b|br)'/,
        end: /'/
      },
      {
        begin: /(b|br)"/,
        end: /"/
      },
      hljs.APOS_STRING_MODE,
      hljs.QUOTE_STRING_MODE
    ]
  };
  return {
    name: "Awk",
    keywords: { keyword: KEYWORDS2 },
    contains: [
      VARIABLE,
      STRING,
      hljs.REGEXP_MODE,
      hljs.HASH_COMMENT_MODE,
      hljs.NUMBER_MODE
    ]
  };
}
function axapta(hljs) {
  const IDENT_RE2 = hljs.UNDERSCORE_IDENT_RE;
  const BUILT_IN_KEYWORDS = [
    "anytype",
    "boolean",
    "byte",
    "char",
    "container",
    "date",
    "double",
    "enum",
    "guid",
    "int",
    "int64",
    "long",
    "real",
    "short",
    "str",
    "utcdatetime",
    "var"
  ];
  const LITERAL_KEYWORDS = [
    "default",
    "false",
    "null",
    "true"
  ];
  const NORMAL_KEYWORDS = [
    "abstract",
    "as",
    "asc",
    "avg",
    "break",
    "breakpoint",
    "by",
    "byref",
    "case",
    "catch",
    "changecompany",
    "class",
    "client",
    "client",
    "common",
    "const",
    "continue",
    "count",
    "crosscompany",
    "delegate",
    "delete_from",
    "desc",
    "display",
    "div",
    "do",
    "edit",
    "else",
    "eventhandler",
    "exists",
    "extends",
    "final",
    "finally",
    "firstfast",
    "firstonly",
    "firstonly1",
    "firstonly10",
    "firstonly100",
    "firstonly1000",
    "flush",
    "for",
    "forceliterals",
    "forcenestedloop",
    "forceplaceholders",
    "forceselectorder",
    "forupdate",
    "from",
    "generateonly",
    "group",
    "hint",
    "if",
    "implements",
    "in",
    "index",
    "insert_recordset",
    "interface",
    "internal",
    "is",
    "join",
    "like",
    "maxof",
    "minof",
    "mod",
    "namespace",
    "new",
    "next",
    "nofetch",
    "notexists",
    "optimisticlock",
    "order",
    "outer",
    "pessimisticlock",
    "print",
    "private",
    "protected",
    "public",
    "readonly",
    "repeatableread",
    "retry",
    "return",
    "reverse",
    "select",
    "server",
    "setting",
    "static",
    "sum",
    "super",
    "switch",
    "this",
    "throw",
    "try",
    "ttsabort",
    "ttsbegin",
    "ttscommit",
    "unchecked",
    "update_recordset",
    "using",
    "validtimestate",
    "void",
    "where",
    "while"
  ];
  const KEYWORDS2 = {
    keyword: NORMAL_KEYWORDS,
    built_in: BUILT_IN_KEYWORDS,
    literal: LITERAL_KEYWORDS
  };
  const CLASS_DEFINITION = {
    variants: [
      { match: [
        /(class|interface)\s+/,
        IDENT_RE2,
        /\s+(extends|implements)\s+/,
        IDENT_RE2
      ] },
      { match: [
        /class\s+/,
        IDENT_RE2
      ] }
    ],
    scope: {
      2: "title.class",
      4: "title.class.inherited"
    },
    keywords: KEYWORDS2
  };
  return {
    name: "X++",
    aliases: ["x++"],
    keywords: KEYWORDS2,
    contains: [
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.APOS_STRING_MODE,
      hljs.QUOTE_STRING_MODE,
      hljs.C_NUMBER_MODE,
      {
        className: "meta",
        begin: "#",
        end: "$"
      },
      CLASS_DEFINITION
    ]
  };
}
function basic(hljs) {
  const KEYWORDS2 = [
    "ABS",
    "ASC",
    "AND",
    "ATN",
    "AUTO|0",
    "BEEP",
    "BLOAD|10",
    "BSAVE|10",
    "CALL",
    "CALLS",
    "CDBL",
    "CHAIN",
    "CHDIR",
    "CHR$|10",
    "CINT",
    "CIRCLE",
    "CLEAR",
    "CLOSE",
    "CLS",
    "COLOR",
    "COM",
    "COMMON",
    "CONT",
    "COS",
    "CSNG",
    "CSRLIN",
    "CVD",
    "CVI",
    "CVS",
    "DATA",
    "DATE$",
    "DEFDBL",
    "DEFINT",
    "DEFSNG",
    "DEFSTR",
    "DEF|0",
    "SEG",
    "USR",
    "DELETE",
    "DIM",
    "DRAW",
    "EDIT",
    "END",
    "ENVIRON",
    "ENVIRON$",
    "EOF",
    "EQV",
    "ERASE",
    "ERDEV",
    "ERDEV$",
    "ERL",
    "ERR",
    "ERROR",
    "EXP",
    "FIELD",
    "FILES",
    "FIX",
    "FOR|0",
    "FRE",
    "GET",
    "GOSUB|10",
    "GOTO",
    "HEX$",
    "IF",
    "THEN",
    "ELSE|0",
    "INKEY$",
    "INP",
    "INPUT",
    "INPUT#",
    "INPUT$",
    "INSTR",
    "IMP",
    "INT",
    "IOCTL",
    "IOCTL$",
    "KEY",
    "ON",
    "OFF",
    "LIST",
    "KILL",
    "LEFT$",
    "LEN",
    "LET",
    "LINE",
    "LLIST",
    "LOAD",
    "LOC",
    "LOCATE",
    "LOF",
    "LOG",
    "LPRINT",
    "USING",
    "LSET",
    "MERGE",
    "MID$",
    "MKDIR",
    "MKD$",
    "MKI$",
    "MKS$",
    "MOD",
    "NAME",
    "NEW",
    "NEXT",
    "NOISE",
    "NOT",
    "OCT$",
    "ON",
    "OR",
    "PEN",
    "PLAY",
    "STRIG",
    "OPEN",
    "OPTION",
    "BASE",
    "OUT",
    "PAINT",
    "PALETTE",
    "PCOPY",
    "PEEK",
    "PMAP",
    "POINT",
    "POKE",
    "POS",
    "PRINT",
    "PRINT]",
    "PSET",
    "PRESET",
    "PUT",
    "RANDOMIZE",
    "READ",
    "REM",
    "RENUM",
    "RESET|0",
    "RESTORE",
    "RESUME",
    "RETURN|0",
    "RIGHT$",
    "RMDIR",
    "RND",
    "RSET",
    "RUN",
    "SAVE",
    "SCREEN",
    "SGN",
    "SHELL",
    "SIN",
    "SOUND",
    "SPACE$",
    "SPC",
    "SQR",
    "STEP",
    "STICK",
    "STOP",
    "STR$",
    "STRING$",
    "SWAP",
    "SYSTEM",
    "TAB",
    "TAN",
    "TIME$",
    "TIMER",
    "TROFF",
    "TRON",
    "TO",
    "USR",
    "VAL",
    "VARPTR",
    "VARPTR$",
    "VIEW",
    "WAIT",
    "WHILE",
    "WEND",
    "WIDTH",
    "WINDOW",
    "WRITE",
    "XOR"
  ];
  return {
    name: "BASIC",
    case_insensitive: true,
    illegal: "^.",
    // Support explicitly typed variables that end with $%! or #.
    keywords: {
      $pattern: "[a-zA-Z][a-zA-Z0-9_$%!#]*",
      keyword: KEYWORDS2
    },
    contains: [
      {
        // Match strings that start with " and end with " or a line break
        scope: "string",
        begin: /"/,
        end: /"|$/,
        contains: [hljs.BACKSLASH_ESCAPE]
      },
      hljs.COMMENT("REM", "$", { relevance: 10 }),
      hljs.COMMENT("'", "$", { relevance: 0 }),
      {
        // Match line numbers
        className: "symbol",
        begin: "^[0-9]+ ",
        relevance: 10
      },
      {
        // Match typed numeric constants (1000, 12.34!, 1.2e5, 1.5#, 1.2D2)
        className: "number",
        begin: "\\b\\d+(\\.\\d+)?([edED]\\d+)?[#!]?",
        relevance: 0
      },
      {
        // Match hexadecimal numbers (&Hxxxx)
        className: "number",
        begin: "(&[hH][0-9a-fA-F]{1,4})"
      },
      {
        // Match octal numbers (&Oxxxxxx)
        className: "number",
        begin: "(&[oO][0-7]{1,6})"
      }
    ]
  };
}
function bnf(hljs) {
  return {
    name: "Backus–Naur Form",
    contains: [
      // Attribute
      {
        className: "attribute",
        begin: /</,
        end: />/
      },
      // Specific
      {
        begin: /::=/,
        end: /$/,
        contains: [
          {
            begin: /</,
            end: />/
          },
          // Common
          hljs.C_LINE_COMMENT_MODE,
          hljs.C_BLOCK_COMMENT_MODE,
          hljs.APOS_STRING_MODE,
          hljs.QUOTE_STRING_MODE
        ]
      }
    ]
  };
}
function brainfuck(hljs) {
  const LITERAL = {
    className: "literal",
    begin: /[+-]+/,
    relevance: 0
  };
  return {
    name: "Brainfuck",
    aliases: ["bf"],
    contains: [
      hljs.COMMENT(
        /[^\[\]\.,\+\-<> \r\n]/,
        /[\[\]\.,\+\-<> \r\n]/,
        {
          contains: [
            {
              match: /[ ]+[^\[\]\.,\+\-<> \r\n]/,
              relevance: 0
            }
          ],
          returnEnd: true,
          relevance: 0
        }
      ),
      {
        className: "title",
        begin: "[\\[\\]]",
        relevance: 0
      },
      {
        className: "string",
        begin: "[\\.,]",
        relevance: 0
      },
      {
        // this mode works as the only relevance counter
        // it looks ahead to find the start of a run of literals
        // so only the runs are counted as relevant
        begin: /(?=\+\+|--)/,
        contains: [LITERAL]
      },
      LITERAL
    ]
  };
}
function cal(hljs) {
  const regex = hljs.regex;
  const KEYWORDS2 = [
    "div",
    "mod",
    "in",
    "and",
    "or",
    "not",
    "xor",
    "asserterror",
    "begin",
    "case",
    "do",
    "downto",
    "else",
    "end",
    "exit",
    "for",
    "local",
    "if",
    "of",
    "repeat",
    "then",
    "to",
    "until",
    "while",
    "with",
    "var"
  ];
  const LITERALS2 = "false true";
  const COMMENT_MODES = [
    hljs.C_LINE_COMMENT_MODE,
    hljs.COMMENT(
      /\{/,
      /\}/,
      { relevance: 0 }
    ),
    hljs.COMMENT(
      /\(\*/,
      /\*\)/,
      { relevance: 10 }
    )
  ];
  const STRING = {
    className: "string",
    begin: /'/,
    end: /'/,
    contains: [{ begin: /''/ }]
  };
  const CHAR_STRING = {
    className: "string",
    begin: /(#\d+)+/
  };
  const DATE = {
    className: "number",
    begin: "\\b\\d+(\\.\\d+)?(DT|D|T)",
    relevance: 0
  };
  const DBL_QUOTED_VARIABLE = {
    className: "string",
    // not a string technically but makes sense to be highlighted in the same style
    begin: '"',
    end: '"'
  };
  const PROCEDURE = {
    match: [
      /procedure/,
      /\s+/,
      /[a-zA-Z_][\w@]*/,
      /\s*/
    ],
    scope: {
      1: "keyword",
      3: "title.function"
    },
    contains: [
      {
        className: "params",
        begin: /\(/,
        end: /\)/,
        keywords: KEYWORDS2,
        contains: [
          STRING,
          CHAR_STRING,
          hljs.NUMBER_MODE
        ]
      },
      ...COMMENT_MODES
    ]
  };
  const OBJECT_TYPES = [
    "Table",
    "Form",
    "Report",
    "Dataport",
    "Codeunit",
    "XMLport",
    "MenuSuite",
    "Page",
    "Query"
  ];
  const OBJECT = {
    match: [
      /OBJECT/,
      /\s+/,
      regex.either(...OBJECT_TYPES),
      /\s+/,
      /\d+/,
      /\s+(?=[^\s])/,
      /.*/,
      /$/
    ],
    relevance: 3,
    scope: {
      1: "keyword",
      3: "type",
      5: "number",
      7: "title"
    }
  };
  const PROPERTY = {
    match: /[\w]+(?=\=)/,
    scope: "attribute",
    relevance: 0
  };
  return {
    name: "C/AL",
    case_insensitive: true,
    keywords: {
      keyword: KEYWORDS2,
      literal: LITERALS2
    },
    illegal: /\/\*/,
    contains: [
      PROPERTY,
      STRING,
      CHAR_STRING,
      DATE,
      DBL_QUOTED_VARIABLE,
      hljs.NUMBER_MODE,
      OBJECT,
      PROCEDURE
    ]
  };
}
function capnproto(hljs) {
  const KEYWORDS2 = [
    "struct",
    "enum",
    "interface",
    "union",
    "group",
    "import",
    "using",
    "const",
    "annotation",
    "extends",
    "in",
    "of",
    "on",
    "as",
    "with",
    "from",
    "fixed"
  ];
  const TYPES2 = [
    "Void",
    "Bool",
    "Int8",
    "Int16",
    "Int32",
    "Int64",
    "UInt8",
    "UInt16",
    "UInt32",
    "UInt64",
    "Float32",
    "Float64",
    "Text",
    "Data",
    "AnyPointer",
    "AnyStruct",
    "Capability",
    "List"
  ];
  const LITERALS2 = [
    "true",
    "false"
  ];
  const CLASS_DEFINITION = {
    variants: [
      { match: [
        /(struct|enum|interface)/,
        /\s+/,
        hljs.IDENT_RE
      ] },
      { match: [
        /extends/,
        /\s*\(/,
        hljs.IDENT_RE,
        /\s*\)/
      ] }
    ],
    scope: {
      1: "keyword",
      3: "title.class"
    }
  };
  return {
    name: "Cap’n Proto",
    aliases: ["capnp"],
    keywords: {
      keyword: KEYWORDS2,
      type: TYPES2,
      literal: LITERALS2
    },
    contains: [
      hljs.QUOTE_STRING_MODE,
      hljs.NUMBER_MODE,
      hljs.HASH_COMMENT_MODE,
      {
        className: "meta",
        begin: /@0x[\w\d]{16};/,
        illegal: /\n/
      },
      {
        className: "symbol",
        begin: /@\d+\b/
      },
      CLASS_DEFINITION
    ]
  };
}
function ceylon(hljs) {
  const KEYWORDS2 = [
    "assembly",
    "module",
    "package",
    "import",
    "alias",
    "class",
    "interface",
    "object",
    "given",
    "value",
    "assign",
    "void",
    "function",
    "new",
    "of",
    "extends",
    "satisfies",
    "abstracts",
    "in",
    "out",
    "return",
    "break",
    "continue",
    "throw",
    "assert",
    "dynamic",
    "if",
    "else",
    "switch",
    "case",
    "for",
    "while",
    "try",
    "catch",
    "finally",
    "then",
    "let",
    "this",
    "outer",
    "super",
    "is",
    "exists",
    "nonempty"
  ];
  const DECLARATION_MODIFIERS = [
    "shared",
    "abstract",
    "formal",
    "default",
    "actual",
    "variable",
    "late",
    "native",
    "deprecated",
    "final",
    "sealed",
    "annotation",
    "suppressWarnings",
    "small"
  ];
  const DOCUMENTATION = [
    "doc",
    "by",
    "license",
    "see",
    "throws",
    "tagged"
  ];
  const SUBST = {
    className: "subst",
    excludeBegin: true,
    excludeEnd: true,
    begin: /``/,
    end: /``/,
    keywords: KEYWORDS2,
    relevance: 10
  };
  const EXPRESSIONS = [
    {
      // verbatim string
      className: "string",
      begin: '"""',
      end: '"""',
      relevance: 10
    },
    {
      // string literal or template
      className: "string",
      begin: '"',
      end: '"',
      contains: [SUBST]
    },
    {
      // character literal
      className: "string",
      begin: "'",
      end: "'"
    },
    {
      // numeric literal
      className: "number",
      begin: "#[0-9a-fA-F_]+|\\$[01_]+|[0-9_]+(?:\\.[0-9_](?:[eE][+-]?\\d+)?)?[kMGTPmunpf]?",
      relevance: 0
    }
  ];
  SUBST.contains = EXPRESSIONS;
  return {
    name: "Ceylon",
    keywords: {
      keyword: KEYWORDS2.concat(DECLARATION_MODIFIERS),
      meta: DOCUMENTATION
    },
    illegal: "\\$[^01]|#[^0-9a-fA-F]",
    contains: [
      hljs.C_LINE_COMMENT_MODE,
      hljs.COMMENT("/\\*", "\\*/", { contains: ["self"] }),
      {
        // compiler annotation
        className: "meta",
        begin: '@[a-z]\\w*(?::"[^"]*")?'
      }
    ].concat(EXPRESSIONS)
  };
}
function clean(hljs) {
  const KEYWORDS2 = [
    "if",
    "let",
    "in",
    "with",
    "where",
    "case",
    "of",
    "class",
    "instance",
    "otherwise",
    "implementation",
    "definition",
    "system",
    "module",
    "from",
    "import",
    "qualified",
    "as",
    "special",
    "code",
    "inline",
    "foreign",
    "export",
    "ccall",
    "stdcall",
    "generic",
    "derive",
    "infix",
    "infixl",
    "infixr"
  ];
  return {
    name: "Clean",
    aliases: [
      "icl",
      "dcl"
    ],
    keywords: {
      keyword: KEYWORDS2,
      built_in: "Int Real Char Bool",
      literal: "True False"
    },
    contains: [
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.APOS_STRING_MODE,
      hljs.QUOTE_STRING_MODE,
      hljs.C_NUMBER_MODE,
      {
        // relevance booster
        begin: "->|<-[|:]?|#!?|>>=|\\{\\||\\|\\}|:==|=:|<>"
      }
    ]
  };
}
function clojure(hljs) {
  const SYMBOLSTART = "a-zA-Z_\\-!.?+*=<>&'";
  const SYMBOL_RE = "[#]?[" + SYMBOLSTART + "][" + SYMBOLSTART + "0-9/;:$#]*";
  const globals = "def defonce defprotocol defstruct defmulti defmethod defn- defn defmacro deftype defrecord";
  const keywords2 = {
    $pattern: SYMBOL_RE,
    built_in: (
      // Clojure keywords
      globals + " cond apply if-not if-let if not not= =|0 <|0 >|0 <=|0 >=|0 ==|0 +|0 /|0 *|0 -|0 rem quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last drop-while while intern condp case reduced cycle split-at split-with repeat replicate iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter monitor-exit macroexpand macroexpand-1 for dosync and or when when-not when-let comp juxt partial sequence memoize constantly complement identity assert peek pop doto proxy first rest cons cast coll last butlast sigs reify second ffirst fnext nfirst nnext meta with-meta ns in-ns create-ns import refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize"
    )
  };
  const SYMBOL = {
    begin: SYMBOL_RE,
    relevance: 0
  };
  const NUMBER = {
    scope: "number",
    relevance: 0,
    variants: [
      { match: /[-+]?0[xX][0-9a-fA-F]+N?/ },
      // hexadecimal                 // 0x2a
      { match: /[-+]?0[0-7]+N?/ },
      // octal                       // 052
      { match: /[-+]?[1-9][0-9]?[rR][0-9a-zA-Z]+N?/ },
      // variable radix from 2 to 36 // 2r101010, 8r52, 36r16
      { match: /[-+]?[0-9]+\/[0-9]+N?/ },
      // ratio                       // 1/2
      { match: /[-+]?[0-9]+((\.[0-9]*([eE][+-]?[0-9]+)?M?)|([eE][+-]?[0-9]+M?|M))/ },
      // float        // 0.42 4.2E-1M 42E1 42M
      { match: /[-+]?([1-9][0-9]*|0)N?/ }
      // int (don't match leading 0) // 42 42N
    ]
  };
  const CHARACTER = {
    scope: "character",
    variants: [
      { match: /\\o[0-3]?[0-7]{1,2}/ },
      // Unicode Octal 0 - 377
      { match: /\\u[0-9a-fA-F]{4}/ },
      // Unicode Hex 0000 - FFFF
      { match: /\\(newline|space|tab|formfeed|backspace|return)/ },
      // special characters
      {
        match: /\\\S/,
        relevance: 0
      }
      // any non-whitespace char
    ]
  };
  const REGEX = {
    scope: "regex",
    begin: /#"/,
    end: /"/,
    contains: [hljs.BACKSLASH_ESCAPE]
  };
  const STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null });
  const COMMA2 = {
    scope: "punctuation",
    match: /,/,
    relevance: 0
  };
  const COMMENT = hljs.COMMENT(
    ";",
    "$",
    { relevance: 0 }
  );
  const LITERAL = {
    className: "literal",
    begin: /\b(true|false|nil)\b/
  };
  const COLLECTION = {
    begin: "\\[|(#::?" + SYMBOL_RE + ")?\\{",
    end: "[\\]\\}]",
    relevance: 0
  };
  const KEY = {
    className: "symbol",
    begin: "[:]{1,2}" + SYMBOL_RE
  };
  const LIST = {
    begin: "\\(",
    end: "\\)"
  };
  const BODY = {
    endsWithParent: true,
    relevance: 0
  };
  const NAME = {
    keywords: keywords2,
    className: "name",
    begin: SYMBOL_RE,
    relevance: 0,
    starts: BODY
  };
  const DEFAULT_CONTAINS = [
    COMMA2,
    LIST,
    CHARACTER,
    REGEX,
    STRING,
    COMMENT,
    KEY,
    COLLECTION,
    NUMBER,
    LITERAL,
    SYMBOL
  ];
  const GLOBAL = {
    beginKeywords: globals,
    keywords: {
      $pattern: SYMBOL_RE,
      keyword: globals
    },
    end: '(\\[|#|\\d|"|:|\\{|\\)|\\(|$)',
    contains: [
      {
        className: "title",
        begin: SYMBOL_RE,
        relevance: 0,
        excludeEnd: true,
        // we can only have a single title
        endsParent: true
      }
    ].concat(DEFAULT_CONTAINS)
  };
  LIST.contains = [
    GLOBAL,
    NAME,
    BODY
  ];
  BODY.contains = DEFAULT_CONTAINS;
  COLLECTION.contains = DEFAULT_CONTAINS;
  return {
    name: "Clojure",
    aliases: [
      "clj",
      "edn"
    ],
    illegal: /\S/,
    contains: [
      COMMA2,
      LIST,
      CHARACTER,
      REGEX,
      STRING,
      COMMENT,
      KEY,
      COLLECTION,
      NUMBER,
      LITERAL
    ]
  };
}
function clojureRepl(hljs) {
  return {
    name: "Clojure REPL",
    contains: [
      {
        className: "meta.prompt",
        begin: /^([\w.-]+|\s*#_)?=>/,
        starts: {
          end: /$/,
          subLanguage: "clojure"
        }
      }
    ]
  };
}
function cmake(hljs) {
  return {
    name: "CMake",
    aliases: ["cmake.in"],
    case_insensitive: true,
    keywords: { keyword: (
      // scripting commands
      "break cmake_host_system_information cmake_minimum_required cmake_parse_arguments cmake_policy configure_file continue elseif else endforeach endfunction endif endmacro endwhile execute_process file find_file find_library find_package find_path find_program foreach function get_cmake_property get_directory_property get_filename_component get_property if include include_guard list macro mark_as_advanced math message option return separate_arguments set_directory_properties set_property set site_name string unset variable_watch while add_compile_definitions add_compile_options add_custom_command add_custom_target add_definitions add_dependencies add_executable add_library add_link_options add_subdirectory add_test aux_source_directory build_command create_test_sourcelist define_property enable_language enable_testing export fltk_wrap_ui get_source_file_property get_target_property get_test_property include_directories include_external_msproject include_regular_expression install link_directories link_libraries load_cache project qt_wrap_cpp qt_wrap_ui remove_definitions set_source_files_properties set_target_properties set_tests_properties source_group target_compile_definitions target_compile_features target_compile_options target_include_directories target_link_directories target_link_libraries target_link_options target_sources try_compile try_run ctest_build ctest_configure ctest_coverage ctest_empty_binary_directory ctest_memcheck ctest_read_custom_files ctest_run_script ctest_sleep ctest_start ctest_submit ctest_test ctest_update ctest_upload build_name exec_program export_library_dependencies install_files install_programs install_targets load_command make_directory output_required_files remove subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file qt5_use_modules qt5_use_package qt5_wrap_cpp on off true false and or not command policy target test exists is_newer_than is_directory is_symlink is_absolute matches less greater equal less_equal greater_equal strless strgreater strequal strless_equal strgreater_equal version_less version_greater version_equal version_less_equal version_greater_equal in_list defined"
    ) },
    contains: [
      {
        className: "variable",
        begin: /\$\{/,
        end: /\}/
      },
      hljs.COMMENT(/#\[\[/, /]]/),
      hljs.HASH_COMMENT_MODE,
      hljs.QUOTE_STRING_MODE,
      hljs.NUMBER_MODE
    ]
  };
}
const KEYWORDS$3 = [
  "as",
  // for exports
  "in",
  "of",
  "if",
  "for",
  "while",
  "finally",
  "var",
  "new",
  "function",
  "do",
  "return",
  "void",
  "else",
  "break",
  "catch",
  "instanceof",
  "with",
  "throw",
  "case",
  "default",
  "try",
  "switch",
  "continue",
  "typeof",
  "delete",
  "let",
  "yield",
  "const",
  "class",
  // JS handles these with a special rule
  // "get",
  // "set",
  "debugger",
  "async",
  "await",
  "static",
  "import",
  "from",
  "export",
  "extends",
  // It's reached stage 3, which is "recommended for implementation":
  "using"
];
const LITERALS$3 = [
  "true",
  "false",
  "null",
  "undefined",
  "NaN",
  "Infinity"
];
const TYPES$3 = [
  // Fundamental objects
  "Object",
  "Function",
  "Boolean",
  "Symbol",
  // numbers and dates
  "Math",
  "Date",
  "Number",
  "BigInt",
  // text
  "String",
  "RegExp",
  // Indexed collections
  "Array",
  "Float32Array",
  "Float64Array",
  "Int8Array",
  "Uint8Array",
  "Uint8ClampedArray",
  "Int16Array",
  "Int32Array",
  "Uint16Array",
  "Uint32Array",
  "BigInt64Array",
  "BigUint64Array",
  // Keyed collections
  "Set",
  "Map",
  "WeakSet",
  "WeakMap",
  // Structured data
  "ArrayBuffer",
  "SharedArrayBuffer",
  "Atomics",
  "DataView",
  "JSON",
  // Control abstraction objects
  "Promise",
  "Generator",
  "GeneratorFunction",
  "AsyncFunction",
  // Reflection
  "Reflect",
  "Proxy",
  // Internationalization
  "Intl",
  // WebAssembly
  "WebAssembly"
];
const ERROR_TYPES$3 = [
  "Error",
  "EvalError",
  "InternalError",
  "RangeError",
  "ReferenceError",
  "SyntaxError",
  "TypeError",
  "URIError"
];
const BUILT_IN_GLOBALS$3 = [
  "setInterval",
  "setTimeout",
  "clearInterval",
  "clearTimeout",
  "require",
  "exports",
  "eval",
  "isFinite",
  "isNaN",
  "parseFloat",
  "parseInt",
  "decodeURI",
  "decodeURIComponent",
  "encodeURI",
  "encodeURIComponent",
  "escape",
  "unescape"
];
const BUILT_INS$3 = [].concat(
  BUILT_IN_GLOBALS$3,
  TYPES$3,
  ERROR_TYPES$3
);
function coffeescript(hljs) {
  const COFFEE_BUILT_INS = [
    "npm",
    "print"
  ];
  const COFFEE_LITERALS = [
    "yes",
    "no",
    "on",
    "off"
  ];
  const COFFEE_KEYWORDS = [
    "then",
    "unless",
    "until",
    "loop",
    "by",
    "when",
    "and",
    "or",
    "is",
    "isnt",
    "not"
  ];
  const NOT_VALID_KEYWORDS = [
    "var",
    "const",
    "let",
    "function",
    "static"
  ];
  const excluding = (list) => (kw) => !list.includes(kw);
  const KEYWORDS$12 = {
    keyword: KEYWORDS$3.concat(COFFEE_KEYWORDS).filter(excluding(NOT_VALID_KEYWORDS)),
    literal: LITERALS$3.concat(COFFEE_LITERALS),
    built_in: BUILT_INS$3.concat(COFFEE_BUILT_INS)
  };
  const JS_IDENT_RE = "[A-Za-z$_][0-9A-Za-z$_]*";
  const SUBST = {
    className: "subst",
    begin: /#\{/,
    end: /\}/,
    keywords: KEYWORDS$12
  };
  const EXPRESSIONS = [
    hljs.BINARY_NUMBER_MODE,
    hljs.inherit(hljs.C_NUMBER_MODE, { starts: {
      end: "(\\s*/)?",
      relevance: 0
    } }),
    // a number tries to eat the following slash to prevent treating it as a regexp
    {
      className: "string",
      variants: [
        {
          begin: /'''/,
          end: /'''/,
          contains: [hljs.BACKSLASH_ESCAPE]
        },
        {
          begin: /'/,
          end: /'/,
          contains: [hljs.BACKSLASH_ESCAPE]
        },
        {
          begin: /"""/,
          end: /"""/,
          contains: [
            hljs.BACKSLASH_ESCAPE,
            SUBST
          ]
        },
        {
          begin: /"/,
          end: /"/,
          contains: [
            hljs.BACKSLASH_ESCAPE,
            SUBST
          ]
        }
      ]
    },
    {
      className: "regexp",
      variants: [
        {
          begin: "///",
          end: "///",
          contains: [
            SUBST,
            hljs.HASH_COMMENT_MODE
          ]
        },
        {
          begin: "//[gim]{0,3}(?=\\W)",
          relevance: 0
        },
        {
          // regex can't start with space to parse x / 2 / 3 as two divisions
          // regex can't start with *, and it supports an "illegal" in the main mode
          begin: /\/(?![ *]).*?(?![\\]).\/[gim]{0,3}(?=\W)/
        }
      ]
    },
    {
      begin: "@" + JS_IDENT_RE
      // relevance booster
    },
    {
      subLanguage: "javascript",
      excludeBegin: true,
      excludeEnd: true,
      variants: [
        {
          begin: "```",
          end: "```"
        },
        {
          begin: "`",
          end: "`"
        }
      ]
    }
  ];
  SUBST.contains = EXPRESSIONS;
  const TITLE = hljs.inherit(hljs.TITLE_MODE, { begin: JS_IDENT_RE });
  const POSSIBLE_PARAMS_RE = "(\\(.*\\)\\s*)?\\B[-=]>";
  const PARAMS = {
    className: "params",
    begin: "\\([^\\(]",
    returnBegin: true,
    /* We need another contained nameless mode to not have every nested
    pair of parens to be called "params" */
    contains: [
      {
        begin: /\(/,
        end: /\)/,
        keywords: KEYWORDS$12,
        contains: ["self"].concat(EXPRESSIONS)
      }
    ]
  };
  const CLASS_DEFINITION = {
    variants: [
      { match: [
        /class\s+/,
        JS_IDENT_RE,
        /\s+extends\s+/,
        JS_IDENT_RE
      ] },
      { match: [
        /class\s+/,
        JS_IDENT_RE
      ] }
    ],
    scope: {
      2: "title.class",
      4: "title.class.inherited"
    },
    keywords: KEYWORDS$12
  };
  return {
    name: "CoffeeScript",
    aliases: [
      "coffee",
      "cson",
      "iced"
    ],
    keywords: KEYWORDS$12,
    illegal: /\/\*/,
    contains: [
      ...EXPRESSIONS,
      hljs.COMMENT("###", "###"),
      hljs.HASH_COMMENT_MODE,
      {
        className: "function",
        begin: "^\\s*" + JS_IDENT_RE + "\\s*=\\s*" + POSSIBLE_PARAMS_RE,
        end: "[-=]>",
        returnBegin: true,
        contains: [
          TITLE,
          PARAMS
        ]
      },
      {
        // anonymous function start
        begin: /[:\(,=]\s*/,
        relevance: 0,
        contains: [
          {
            className: "function",
            begin: POSSIBLE_PARAMS_RE,
            end: "[-=]>",
            returnBegin: true,
            contains: [PARAMS]
          }
        ]
      },
      CLASS_DEFINITION,
      {
        begin: JS_IDENT_RE + ":",
        end: ":",
        returnBegin: true,
        returnEnd: true,
        relevance: 0
      }
    ]
  };
}
function coq(hljs) {
  const KEYWORDS2 = [
    "_|0",
    "as",
    "at",
    "cofix",
    "else",
    "end",
    "exists",
    "exists2",
    "fix",
    "for",
    "forall",
    "fun",
    "if",
    "IF",
    "in",
    "let",
    "match",
    "mod",
    "Prop",
    "return",
    "Set",
    "then",
    "Type",
    "using",
    "where",
    "with",
    "Abort",
    "About",
    "Add",
    "Admit",
    "Admitted",
    "All",
    "Arguments",
    "Assumptions",
    "Axiom",
    "Back",
    "BackTo",
    "Backtrack",
    "Bind",
    "Blacklist",
    "Canonical",
    "Cd",
    "Check",
    "Class",
    "Classes",
    "Close",
    "Coercion",
    "Coercions",
    "CoFixpoint",
    "CoInductive",
    "Collection",
    "Combined",
    "Compute",
    "Conjecture",
    "Conjectures",
    "Constant",
    "constr",
    "Constraint",
    "Constructors",
    "Context",
    "Corollary",
    "CreateHintDb",
    "Cut",
    "Declare",
    "Defined",
    "Definition",
    "Delimit",
    "Dependencies",
    "Dependent",
    "Derive",
    "Drop",
    "eauto",
    "End",
    "Equality",
    "Eval",
    "Example",
    "Existential",
    "Existentials",
    "Existing",
    "Export",
    "exporting",
    "Extern",
    "Extract",
    "Extraction",
    "Fact",
    "Field",
    "Fields",
    "File",
    "Fixpoint",
    "Focus",
    "for",
    "From",
    "Function",
    "Functional",
    "Generalizable",
    "Global",
    "Goal",
    "Grab",
    "Grammar",
    "Graph",
    "Guarded",
    "Heap",
    "Hint",
    "HintDb",
    "Hints",
    "Hypotheses",
    "Hypothesis",
    "ident",
    "Identity",
    "If",
    "Immediate",
    "Implicit",
    "Import",
    "Include",
    "Inductive",
    "Infix",
    "Info",
    "Initial",
    "Inline",
    "Inspect",
    "Instance",
    "Instances",
    "Intro",
    "Intros",
    "Inversion",
    "Inversion_clear",
    "Language",
    "Left",
    "Lemma",
    "Let",
    "Libraries",
    "Library",
    "Load",
    "LoadPath",
    "Local",
    "Locate",
    "Ltac",
    "ML",
    "Mode",
    "Module",
    "Modules",
    "Monomorphic",
    "Morphism",
    "Next",
    "NoInline",
    "Notation",
    "Obligation",
    "Obligations",
    "Opaque",
    "Open",
    "Optimize",
    "Options",
    "Parameter",
    "Parameters",
    "Parametric",
    "Path",
    "Paths",
    "pattern",
    "Polymorphic",
    "Preterm",
    "Print",
    "Printing",
    "Program",
    "Projections",
    "Proof",
    "Proposition",
    "Pwd",
    "Qed",
    "Quit",
    "Rec",
    "Record",
    "Recursive",
    "Redirect",
    "Relation",
    "Remark",
    "Remove",
    "Require",
    "Reserved",
    "Reset",
    "Resolve",
    "Restart",
    "Rewrite",
    "Right",
    "Ring",
    "Rings",
    "Save",
    "Scheme",
    "Scope",
    "Scopes",
    "Script",
    "Search",
    "SearchAbout",
    "SearchHead",
    "SearchPattern",
    "SearchRewrite",
    "Section",
    "Separate",
    "Set",
    "Setoid",
    "Show",
    "Solve",
    "Sorted",
    "Step",
    "Strategies",
    "Strategy",
    "Structure",
    "SubClass",
    "Table",
    "Tables",
    "Tactic",
    "Term",
    "Test",
    "Theorem",
    "Time",
    "Timeout",
    "Transparent",
    "Type",
    "Typeclasses",
    "Types",
    "Undelimit",
    "Undo",
    "Unfocus",
    "Unfocused",
    "Unfold",
    "Universe",
    "Universes",
    "Unset",
    "Unshelve",
    "using",
    "Variable",
    "Variables",
    "Variant",
    "Verbose",
    "Visibility",
    "where",
    "with"
  ];
  const BUILT_INS2 = [
    "abstract",
    "absurd",
    "admit",
    "after",
    "apply",
    "as",
    "assert",
    "assumption",
    "at",
    "auto",
    "autorewrite",
    "autounfold",
    "before",
    "bottom",
    "btauto",
    "by",
    "case",
    "case_eq",
    "cbn",
    "cbv",
    "change",
    "classical_left",
    "classical_right",
    "clear",
    "clearbody",
    "cofix",
    "compare",
    "compute",
    "congruence",
    "constr_eq",
    "constructor",
    "contradict",
    "contradiction",
    "cut",
    "cutrewrite",
    "cycle",
    "decide",
    "decompose",
    "dependent",
    "destruct",
    "destruction",
    "dintuition",
    "discriminate",
    "discrR",
    "do",
    "double",
    "dtauto",
    "eapply",
    "eassumption",
    "eauto",
    "ecase",
    "econstructor",
    "edestruct",
    "ediscriminate",
    "eelim",
    "eexact",
    "eexists",
    "einduction",
    "einjection",
    "eleft",
    "elim",
    "elimtype",
    "enough",
    "equality",
    "erewrite",
    "eright",
    "esimplify_eq",
    "esplit",
    "evar",
    "exact",
    "exactly_once",
    "exfalso",
    "exists",
    "f_equal",
    "fail",
    "field",
    "field_simplify",
    "field_simplify_eq",
    "first",
    "firstorder",
    "fix",
    "fold",
    "fourier",
    "functional",
    "generalize",
    "generalizing",
    "gfail",
    "give_up",
    "has_evar",
    "hnf",
    "idtac",
    "in",
    "induction",
    "injection",
    "instantiate",
    "intro",
    "intro_pattern",
    "intros",
    "intuition",
    "inversion",
    "inversion_clear",
    "is_evar",
    "is_var",
    "lapply",
    "lazy",
    "left",
    "lia",
    "lra",
    "move",
    "native_compute",
    "nia",
    "nsatz",
    "omega",
    "once",
    "pattern",
    "pose",
    "progress",
    "proof",
    "psatz",
    "quote",
    "record",
    "red",
    "refine",
    "reflexivity",
    "remember",
    "rename",
    "repeat",
    "replace",
    "revert",
    "revgoals",
    "rewrite",
    "rewrite_strat",
    "right",
    "ring",
    "ring_simplify",
    "rtauto",
    "set",
    "setoid_reflexivity",
    "setoid_replace",
    "setoid_rewrite",
    "setoid_symmetry",
    "setoid_transitivity",
    "shelve",
    "shelve_unifiable",
    "simpl",
    "simple",
    "simplify_eq",
    "solve",
    "specialize",
    "split",
    "split_Rabs",
    "split_Rmult",
    "stepl",
    "stepr",
    "subst",
    "sum",
    "swap",
    "symmetry",
    "tactic",
    "tauto",
    "time",
    "timeout",
    "top",
    "transitivity",
    "trivial",
    "try",
    "tryif",
    "unfold",
    "unify",
    "until",
    "using",
    "vm_compute",
    "with"
  ];
  return {
    name: "Coq",
    keywords: {
      keyword: KEYWORDS2,
      built_in: BUILT_INS2
    },
    contains: [
      hljs.QUOTE_STRING_MODE,
      hljs.COMMENT("\\(\\*", "\\*\\)"),
      hljs.C_NUMBER_MODE,
      {
        className: "type",
        excludeBegin: true,
        begin: "\\|\\s*",
        end: "\\w+"
      },
      {
        // relevance booster
        begin: /[-=]>/
      }
    ]
  };
}
function cos(hljs) {
  const STRINGS = {
    className: "string",
    variants: [
      {
        begin: '"',
        end: '"',
        contains: [
          {
            // escaped
            begin: '""',
            relevance: 0
          }
        ]
      }
    ]
  };
  const NUMBERS = {
    className: "number",
    begin: "\\b(\\d+(\\.\\d*)?|\\.\\d+)",
    relevance: 0
  };
  const COS_KEYWORDS = "property parameter class classmethod clientmethod extends as break catch close continue do d|0 else elseif for goto halt hang h|0 if job j|0 kill k|0 lock l|0 merge new open quit q|0 read r|0 return set s|0 tcommit throw trollback try tstart use view while write w|0 xecute x|0 zkill znspace zn ztrap zwrite zw zzdump zzwrite print zbreak zinsert zload zprint zremove zsave zzprint mv mvcall mvcrt mvdim mvprint zquit zsync ascii";
  return {
    name: "Caché Object Script",
    case_insensitive: true,
    aliases: ["cls"],
    keywords: COS_KEYWORDS,
    contains: [
      NUMBERS,
      STRINGS,
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      {
        className: "comment",
        begin: /;/,
        end: "$",
        relevance: 0
      },
      {
        // Functions and user-defined functions: write $ztime(60*60*3), $$myFunc(10), $$^Val(1)
        className: "built_in",
        begin: /(?:\$\$?|\.\.)\^?[a-zA-Z]+/
      },
      {
        // Macro command: quit $$$OK
        className: "built_in",
        begin: /\$\$\$[a-zA-Z]+/
      },
      {
        // Special (global) variables: write %request.Content; Built-in classes: %Library.Integer
        className: "built_in",
        begin: /%[a-z]+(?:\.[a-z]+)*/
      },
      {
        // Global variable: set ^globalName = 12 write ^globalName
        className: "symbol",
        begin: /\^%?[a-zA-Z][\w]*/
      },
      {
        // Some control constructions: do ##class(Package.ClassName).Method(), ##super()
        className: "keyword",
        begin: /##class|##super|#define|#dim/
      },
      // sub-languages: are not fully supported by hljs by 11/15/2015
      // left for the future implementation.
      {
        begin: /&sql\(/,
        end: /\)/,
        excludeBegin: true,
        excludeEnd: true,
        subLanguage: "sql"
      },
      {
        begin: /&(js|jscript|javascript)</,
        end: />/,
        excludeBegin: true,
        excludeEnd: true,
        subLanguage: "javascript"
      },
      {
        // this brakes first and last tag, but this is the only way to embed a valid html
        begin: /&html<\s*</,
        end: />\s*>/,
        subLanguage: "xml"
      }
    ]
  };
}
function crmsh(hljs) {
  const RESOURCES = "primitive rsc_template";
  const COMMANDS = "group clone ms master location colocation order fencing_topology rsc_ticket acl_target acl_group user role tag xml";
  const PROPERTY_SETS = "property rsc_defaults op_defaults";
  const KEYWORDS2 = "params meta operations op rule attributes utilization";
  const OPERATORS = "read write deny defined not_defined in_range date spec in ref reference attribute type xpath version and or lt gt tag lte gte eq ne \\";
  const TYPES2 = "number string";
  const LITERALS2 = "Master Started Slave Stopped start promote demote stop monitor true false";
  return {
    name: "crmsh",
    aliases: [
      "crm",
      "pcmk"
    ],
    case_insensitive: true,
    keywords: {
      keyword: KEYWORDS2 + " " + OPERATORS + " " + TYPES2,
      literal: LITERALS2
    },
    contains: [
      hljs.HASH_COMMENT_MODE,
      {
        beginKeywords: "node",
        starts: {
          end: "\\s*([\\w_-]+:)?",
          starts: {
            className: "title",
            end: "\\s*[\\$\\w_][\\w_-]*"
          }
        }
      },
      {
        beginKeywords: RESOURCES,
        starts: {
          className: "title",
          end: "\\s*[\\$\\w_][\\w_-]*",
          starts: { end: "\\s*@?[\\w_][\\w_\\.:-]*" }
        }
      },
      {
        begin: "\\b(" + COMMANDS.split(" ").join("|") + ")\\s+",
        keywords: COMMANDS,
        starts: {
          className: "title",
          end: "[\\$\\w_][\\w_-]*"
        }
      },
      {
        beginKeywords: PROPERTY_SETS,
        starts: {
          className: "title",
          end: "\\s*([\\w_-]+:)?"
        }
      },
      hljs.QUOTE_STRING_MODE,
      {
        className: "meta",
        begin: "(ocf|systemd|service|lsb):[\\w_:-]+",
        relevance: 0
      },
      {
        className: "number",
        begin: "\\b\\d+(\\.\\d+)?(ms|s|h|m)?",
        relevance: 0
      },
      {
        className: "literal",
        begin: "[-]?(infinity|inf)",
        relevance: 0
      },
      {
        className: "attr",
        begin: /([A-Za-z$_#][\w_-]+)=/,
        relevance: 0
      },
      {
        className: "tag",
        begin: "</?",
        end: "/?>",
        relevance: 0
      }
    ]
  };
}
function crystal(hljs) {
  const INT_SUFFIX = "(_?[ui](8|16|32|64|128))?";
  const FLOAT_SUFFIX = "(_?f(32|64))?";
  const CRYSTAL_IDENT_RE = "[a-zA-Z_]\\w*[!?=]?";
  const CRYSTAL_METHOD_RE = "[a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|[=!]~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~|]|//|//=|&[-+*]=?|&\\*\\*|\\[\\][=?]?";
  const CRYSTAL_PATH_RE = "[A-Za-z_]\\w*(::\\w+)*(\\?|!)?";
  const CRYSTAL_KEYWORDS = {
    $pattern: CRYSTAL_IDENT_RE,
    keyword: "abstract alias annotation as as? asm begin break case class def do else elsif end ensure enum extend for fun if include instance_sizeof is_a? lib macro module next nil? of out pointerof private protected rescue responds_to? return require select self sizeof struct super then type typeof union uninitialized unless until verbatim when while with yield __DIR__ __END_LINE__ __FILE__ __LINE__",
    literal: "false nil true"
  };
  const SUBST = {
    className: "subst",
    begin: /#\{/,
    end: /\}/,
    keywords: CRYSTAL_KEYWORDS
  };
  const VARIABLE = {
    // negative-look forward attemps to prevent false matches like:
    // @ident@ or $ident$ that might indicate this is not ruby at all
    className: "variable",
    begin: `(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])`
  };
  const EXPANSION = {
    className: "template-variable",
    variants: [
      {
        begin: "\\{\\{",
        end: "\\}\\}"
      },
      {
        begin: "\\{%",
        end: "%\\}"
      }
    ],
    keywords: CRYSTAL_KEYWORDS
  };
  function recursiveParen(begin, end) {
    const contains = [
      {
        begin,
        end
      }
    ];
    contains[0].contains = contains;
    return contains;
  }
  const STRING = {
    className: "string",
    contains: [
      hljs.BACKSLASH_ESCAPE,
      SUBST
    ],
    variants: [
      {
        begin: /'/,
        end: /'/
      },
      {
        begin: /"/,
        end: /"/
      },
      {
        begin: /`/,
        end: /`/
      },
      {
        begin: "%[Qwi]?\\(",
        end: "\\)",
        contains: recursiveParen("\\(", "\\)")
      },
      {
        begin: "%[Qwi]?\\[",
        end: "\\]",
        contains: recursiveParen("\\[", "\\]")
      },
      {
        begin: "%[Qwi]?\\{",
        end: /\}/,
        contains: recursiveParen(/\{/, /\}/)
      },
      {
        begin: "%[Qwi]?<",
        end: ">",
        contains: recursiveParen("<", ">")
      },
      {
        begin: "%[Qwi]?\\|",
        end: "\\|"
      },
      {
        begin: /<<-\w+$/,
        end: /^\s*\w+$/
      }
    ],
    relevance: 0
  };
  const Q_STRING = {
    className: "string",
    variants: [
      {
        begin: "%q\\(",
        end: "\\)",
        contains: recursiveParen("\\(", "\\)")
      },
      {
        begin: "%q\\[",
        end: "\\]",
        contains: recursiveParen("\\[", "\\]")
      },
      {
        begin: "%q\\{",
        end: /\}/,
        contains: recursiveParen(/\{/, /\}/)
      },
      {
        begin: "%q<",
        end: ">",
        contains: recursiveParen("<", ">")
      },
      {
        begin: "%q\\|",
        end: "\\|"
      },
      {
        begin: /<<-'\w+'$/,
        end: /^\s*\w+$/
      }
    ],
    relevance: 0
  };
  const REGEXP = {
    begin: "(?!%\\})(" + hljs.RE_STARTERS_RE + "|\\n|\\b(case|if|select|unless|until|when|while)\\b)\\s*",
    keywords: "case if select unless until when while",
    contains: [
      {
        className: "regexp",
        contains: [
          hljs.BACKSLASH_ESCAPE,
          SUBST
        ],
        variants: [
          {
            begin: "//[a-z]*",
            relevance: 0
          },
          {
            begin: "/(?!\\/)",
            end: "/[a-z]*"
          }
        ]
      }
    ],
    relevance: 0
  };
  const REGEXP2 = {
    className: "regexp",
    contains: [
      hljs.BACKSLASH_ESCAPE,
      SUBST
    ],
    variants: [
      {
        begin: "%r\\(",
        end: "\\)",
        contains: recursiveParen("\\(", "\\)")
      },
      {
        begin: "%r\\[",
        end: "\\]",
        contains: recursiveParen("\\[", "\\]")
      },
      {
        begin: "%r\\{",
        end: /\}/,
        contains: recursiveParen(/\{/, /\}/)
      },
      {
        begin: "%r<",
        end: ">",
        contains: recursiveParen("<", ">")
      },
      {
        begin: "%r\\|",
        end: "\\|"
      }
    ],
    relevance: 0
  };
  const ATTRIBUTE = {
    className: "meta",
    begin: "@\\[",
    end: "\\]",
    contains: [hljs.inherit(hljs.QUOTE_STRING_MODE, { className: "string" })]
  };
  const CRYSTAL_DEFAULT_CONTAINS = [
    EXPANSION,
    STRING,
    Q_STRING,
    REGEXP2,
    REGEXP,
    ATTRIBUTE,
    VARIABLE,
    hljs.HASH_COMMENT_MODE,
    {
      className: "class",
      beginKeywords: "class module struct",
      end: "$|;",
      illegal: /=/,
      contains: [
        hljs.HASH_COMMENT_MODE,
        hljs.inherit(hljs.TITLE_MODE, { begin: CRYSTAL_PATH_RE }),
        {
          // relevance booster for inheritance
          begin: "<"
        }
      ]
    },
    {
      className: "class",
      beginKeywords: "lib enum union",
      end: "$|;",
      illegal: /=/,
      contains: [
        hljs.HASH_COMMENT_MODE,
        hljs.inherit(hljs.TITLE_MODE, { begin: CRYSTAL_PATH_RE })
      ]
    },
    {
      beginKeywords: "annotation",
      end: "$|;",
      illegal: /=/,
      contains: [
        hljs.HASH_COMMENT_MODE,
        hljs.inherit(hljs.TITLE_MODE, { begin: CRYSTAL_PATH_RE })
      ],
      relevance: 2
    },
    {
      className: "function",
      beginKeywords: "def",
      end: /\B\b/,
      contains: [
        hljs.inherit(hljs.TITLE_MODE, {
          begin: CRYSTAL_METHOD_RE,
          endsParent: true
        })
      ]
    },
    {
      className: "function",
      beginKeywords: "fun macro",
      end: /\B\b/,
      contains: [
        hljs.inherit(hljs.TITLE_MODE, {
          begin: CRYSTAL_METHOD_RE,
          endsParent: true
        })
      ],
      relevance: 2
    },
    {
      className: "symbol",
      begin: hljs.UNDERSCORE_IDENT_RE + "(!|\\?)?:",
      relevance: 0
    },
    {
      className: "symbol",
      begin: ":",
      contains: [
        STRING,
        { begin: CRYSTAL_METHOD_RE }
      ],
      relevance: 0
    },
    {
      className: "number",
      variants: [
        { begin: "\\b0b([01_]+)" + INT_SUFFIX },
        { begin: "\\b0o([0-7_]+)" + INT_SUFFIX },
        { begin: "\\b0x([A-Fa-f0-9_]+)" + INT_SUFFIX },
        { begin: "\\b([1-9][0-9_]*[0-9]|[0-9])(\\.[0-9][0-9_]*)?([eE]_?[-+]?[0-9_]*)?" + FLOAT_SUFFIX + "(?!_)" },
        { begin: "\\b([1-9][0-9_]*|0)" + INT_SUFFIX }
      ],
      relevance: 0
    }
  ];
  SUBST.contains = CRYSTAL_DEFAULT_CONTAINS;
  EXPANSION.contains = CRYSTAL_DEFAULT_CONTAINS.slice(1);
  return {
    name: "Crystal",
    aliases: ["cr"],
    keywords: CRYSTAL_KEYWORDS,
    contains: CRYSTAL_DEFAULT_CONTAINS
  };
}
function csp(hljs) {
  const KEYWORDS2 = [
    "base-uri",
    "child-src",
    "connect-src",
    "default-src",
    "font-src",
    "form-action",
    "frame-ancestors",
    "frame-src",
    "img-src",
    "manifest-src",
    "media-src",
    "object-src",
    "plugin-types",
    "report-uri",
    "sandbox",
    "script-src",
    "style-src",
    "trusted-types",
    "unsafe-hashes",
    "worker-src"
  ];
  return {
    name: "CSP",
    case_insensitive: false,
    keywords: {
      $pattern: "[a-zA-Z][a-zA-Z0-9_-]*",
      keyword: KEYWORDS2
    },
    contains: [
      {
        className: "string",
        begin: "'",
        end: "'"
      },
      {
        className: "attribute",
        begin: "^Content",
        end: ":",
        excludeEnd: true
      }
    ]
  };
}
function d(hljs) {
  const D_KEYWORDS = {
    $pattern: hljs.UNDERSCORE_IDENT_RE,
    keyword: "abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__",
    built_in: "bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar wstring",
    literal: "false null true"
  };
  const decimal_integer_re = "(0|[1-9][\\d_]*)";
  const decimal_integer_nosus_re = "(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)";
  const binary_integer_re = "0[bB][01_]+";
  const hexadecimal_digits_re = "([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)";
  const hexadecimal_integer_re = "0[xX]" + hexadecimal_digits_re;
  const decimal_exponent_re = "([eE][+-]?" + decimal_integer_nosus_re + ")";
  const decimal_float_re = "(" + decimal_integer_nosus_re + "(\\.\\d*|" + decimal_exponent_re + ")|\\d+\\." + decimal_integer_nosus_re + "|\\." + decimal_integer_re + decimal_exponent_re + "?)";
  const hexadecimal_float_re = "(0[xX](" + hexadecimal_digits_re + "\\." + hexadecimal_digits_re + "|\\.?" + hexadecimal_digits_re + ")[pP][+-]?" + decimal_integer_nosus_re + ")";
  const integer_re = "(" + decimal_integer_re + "|" + binary_integer_re + "|" + hexadecimal_integer_re + ")";
  const float_re = "(" + hexadecimal_float_re + "|" + decimal_float_re + ")";
  const escape_sequence_re = `\\\\(['"\\?\\\\abfnrtv]|u[\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\dA-Fa-f]{2}|U[\\dA-Fa-f]{8})|&[a-zA-Z\\d]{2,};`;
  const D_INTEGER_MODE = {
    className: "number",
    begin: "\\b" + integer_re + "(L|u|U|Lu|LU|uL|UL)?",
    relevance: 0
  };
  const D_FLOAT_MODE = {
    className: "number",
    begin: "\\b(" + float_re + "([fF]|L|i|[fF]i|Li)?|" + integer_re + "(i|[fF]i|Li))",
    relevance: 0
  };
  const D_CHARACTER_MODE = {
    className: "string",
    begin: "'(" + escape_sequence_re + "|.)",
    end: "'",
    illegal: "."
  };
  const D_ESCAPE_SEQUENCE = {
    begin: escape_sequence_re,
    relevance: 0
  };
  const D_STRING_MODE = {
    className: "string",
    begin: '"',
    contains: [D_ESCAPE_SEQUENCE],
    end: '"[cwd]?'
  };
  const D_WYSIWYG_DELIMITED_STRING_MODE = {
    className: "string",
    begin: '[rq]"',
    end: '"[cwd]?',
    relevance: 5
  };
  const D_ALTERNATE_WYSIWYG_STRING_MODE = {
    className: "string",
    begin: "`",
    end: "`[cwd]?"
  };
  const D_HEX_STRING_MODE = {
    className: "string",
    begin: 'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',
    relevance: 10
  };
  const D_TOKEN_STRING_MODE = {
    className: "string",
    begin: 'q"\\{',
    end: '\\}"'
  };
  const D_HASHBANG_MODE = {
    className: "meta",
    begin: "^#!",
    end: "$",
    relevance: 5
  };
  const D_SPECIAL_TOKEN_SEQUENCE_MODE = {
    className: "meta",
    begin: "#(line)",
    end: "$",
    relevance: 5
  };
  const D_ATTRIBUTE_MODE = {
    className: "keyword",
    begin: "@[a-zA-Z_][a-zA-Z_\\d]*"
  };
  const D_NESTING_COMMENT_MODE = hljs.COMMENT(
    "\\/\\+",
    "\\+\\/",
    {
      contains: ["self"],
      relevance: 10
    }
  );
  return {
    name: "D",
    keywords: D_KEYWORDS,
    contains: [
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      D_NESTING_COMMENT_MODE,
      D_HEX_STRING_MODE,
      D_STRING_MODE,
      D_WYSIWYG_DELIMITED_STRING_MODE,
      D_ALTERNATE_WYSIWYG_STRING_MODE,
      D_TOKEN_STRING_MODE,
      D_FLOAT_MODE,
      D_INTEGER_MODE,
      D_CHARACTER_MODE,
      D_HASHBANG_MODE,
      D_SPECIAL_TOKEN_SEQUENCE_MODE,
      D_ATTRIBUTE_MODE
    ]
  };
}
function dart(hljs) {
  const SUBST = {
    className: "subst",
    variants: [{ begin: "\\$[A-Za-z0-9_]+" }]
  };
  const BRACED_SUBST = {
    className: "subst",
    variants: [
      {
        begin: /\$\{/,
        end: /\}/
      }
    ],
    keywords: "true false null this is new super"
  };
  const NUMBER = {
    className: "number",
    relevance: 0,
    variants: [
      { match: /\b[0-9][0-9_]*(\.[0-9][0-9_]*)?([eE][+-]?[0-9][0-9_]*)?\b/ },
      { match: /\b0[xX][0-9A-Fa-f][0-9A-Fa-f_]*\b/ }
    ]
  };
  const STRING = {
    className: "string",
    variants: [
      {
        begin: "r'''",
        end: "'''"
      },
      {
        begin: 'r"""',
        end: '"""'
      },
      {
        begin: "r'",
        end: "'",
        illegal: "\\n"
      },
      {
        begin: 'r"',
        end: '"',
        illegal: "\\n"
      },
      {
        begin: "'''",
        end: "'''",
        contains: [
          hljs.BACKSLASH_ESCAPE,
          SUBST,
          BRACED_SUBST
        ]
      },
      {
        begin: '"""',
        end: '"""',
        contains: [
          hljs.BACKSLASH_ESCAPE,
          SUBST,
          BRACED_SUBST
        ]
      },
      {
        begin: "'",
        end: "'",
        illegal: "\\n",
        contains: [
          hljs.BACKSLASH_ESCAPE,
          SUBST,
          BRACED_SUBST
        ]
      },
      {
        begin: '"',
        end: '"',
        illegal: "\\n",
        contains: [
          hljs.BACKSLASH_ESCAPE,
          SUBST,
          BRACED_SUBST
        ]
      }
    ]
  };
  BRACED_SUBST.contains = [
    NUMBER,
    STRING
  ];
  const BUILT_IN_TYPES = [
    // dart:core
    "Comparable",
    "DateTime",
    "Duration",
    "Function",
    "Iterable",
    "Iterator",
    "List",
    "Map",
    "Match",
    "Object",
    "Pattern",
    "RegExp",
    "Set",
    "Stopwatch",
    "String",
    "StringBuffer",
    "StringSink",
    "Symbol",
    "Type",
    "Uri",
    "bool",
    "double",
    "int",
    "num",
    // dart:html
    "Element",
    "ElementList"
  ];
  const NULLABLE_BUILT_IN_TYPES = BUILT_IN_TYPES.map((e) => `${e}?`);
  const BASIC_KEYWORDS = [
    "abstract",
    "as",
    "assert",
    "async",
    "await",
    "base",
    "break",
    "case",
    "catch",
    "class",
    "const",
    "continue",
    "covariant",
    "default",
    "deferred",
    "do",
    "dynamic",
    "else",
    "enum",
    "export",
    "extends",
    "extension",
    "external",
    "factory",
    "false",
    "final",
    "finally",
    "for",
    "Function",
    "get",
    "hide",
    "if",
    "implements",
    "import",
    "in",
    "interface",
    "is",
    "late",
    "library",
    "mixin",
    "new",
    "null",
    "on",
    "operator",
    "part",
    "required",
    "rethrow",
    "return",
    "sealed",
    "set",
    "show",
    "static",
    "super",
    "switch",
    "sync",
    "this",
    "throw",
    "true",
    "try",
    "typedef",
    "var",
    "void",
    "when",
    "while",
    "with",
    "yield"
  ];
  const KEYWORDS2 = {
    keyword: BASIC_KEYWORDS,
    built_in: BUILT_IN_TYPES.concat(NULLABLE_BUILT_IN_TYPES).concat([
      // dart:core
      "Never",
      "Null",
      "dynamic",
      "print",
      // dart:html
      "document",
      "querySelector",
      "querySelectorAll",
      "window"
    ]),
    $pattern: /[A-Za-z][A-Za-z0-9_]*\??/
  };
  return {
    name: "Dart",
    keywords: KEYWORDS2,
    contains: [
      STRING,
      hljs.COMMENT(
        /\/\*\*(?!\/)/,
        /\*\//,
        {
          subLanguage: "markdown",
          relevance: 0
        }
      ),
      hljs.COMMENT(
        /\/{3,} ?/,
        /$/,
        { contains: [
          {
            subLanguage: "markdown",
            begin: ".",
            end: "$",
            relevance: 0
          }
        ] }
      ),
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      {
        className: "class",
        beginKeywords: "class interface",
        end: /\{/,
        excludeEnd: true,
        contains: [
          { beginKeywords: "extends implements" },
          hljs.UNDERSCORE_TITLE_MODE
        ]
      },
      NUMBER,
      {
        className: "meta",
        begin: "@[A-Za-z]+"
      },
      {
        begin: "=>"
        // No markup, just a relevance booster
      }
    ]
  };
}
function delphi(hljs) {
  const KEYWORDS2 = [
    "exports",
    "register",
    "file",
    "shl",
    "array",
    "record",
    "property",
    "for",
    "mod",
    "while",
    "set",
    "ally",
    "label",
    "uses",
    "raise",
    "not",
    "stored",
    "class",
    "safecall",
    "var",
    "interface",
    "or",
    "private",
    "static",
    "exit",
    "index",
    "inherited",
    "to",
    "else",
    "stdcall",
    "override",
    "shr",
    "asm",
    "far",
    "resourcestring",
    "finalization",
    "packed",
    "virtual",
    "out",
    "and",
    "protected",
    "library",
    "do",
    "xorwrite",
    "goto",
    "near",
    "function",
    "end",
    "div",
    "overload",
    "object",
    "unit",
    "begin",
    "string",
    "on",
    "inline",
    "repeat",
    "until",
    "destructor",
    "write",
    "message",
    "program",
    "with",
    "read",
    "initialization",
    "except",
    "default",
    "nil",
    "if",
    "case",
    "cdecl",
    "in",
    "downto",
    "threadvar",
    "of",
    "try",
    "pascal",
    "const",
    "external",
    "constructor",
    "type",
    "public",
    "then",
    "implementation",
    "finally",
    "published",
    "procedure",
    "absolute",
    "reintroduce",
    "operator",
    "as",
    "is",
    "abstract",
    "alias",
    "assembler",
    "bitpacked",
    "break",
    "continue",
    "cppdecl",
    "cvar",
    "enumerator",
    "experimental",
    "platform",
    "deprecated",
    "unimplemented",
    "dynamic",
    "export",
    "far16",
    "forward",
    "generic",
    "helper",
    "implements",
    "interrupt",
    "iochecks",
    "local",
    "name",
    "nodefault",
    "noreturn",
    "nostackframe",
    "oldfpccall",
    "otherwise",
    "saveregisters",
    "softfloat",
    "specialize",
    "strict",
    "unaligned",
    "varargs"
  ];
  const COMMENT_MODES = [
    hljs.C_LINE_COMMENT_MODE,
    hljs.COMMENT(/\{/, /\}/, { relevance: 0 }),
    hljs.COMMENT(/\(\*/, /\*\)/, { relevance: 10 })
  ];
  const DIRECTIVE = {
    className: "meta",
    variants: [
      {
        begin: /\{\$/,
        end: /\}/
      },
      {
        begin: /\(\*\$/,
        end: /\*\)/
      }
    ]
  };
  const STRING = {
    className: "string",
    begin: /'/,
    end: /'/,
    contains: [{ begin: /''/ }]
  };
  const NUMBER = {
    className: "number",
    relevance: 0,
    // Source: https://www.freepascal.org/docs-html/ref/refse6.html
    variants: [
      {
        // Regular numbers, e.g., 123, 123.456.
        match: /\b\d[\d_]*(\.\d[\d_]*)?/
      },
      {
        // Hexadecimal notation, e.g., $7F.
        match: /\$[\dA-Fa-f_]+/
      },
      {
        // Hexadecimal literal with no digits
        match: /\$/,
        relevance: 0
      },
      {
        // Octal notation, e.g., &42.
        match: /&[0-7][0-7_]*/
      },
      {
        // Binary notation, e.g., %1010.
        match: /%[01_]+/
      },
      {
        // Binary literal with no digits
        match: /%/,
        relevance: 0
      }
    ]
  };
  const CHAR_STRING = {
    className: "string",
    variants: [
      { match: /#\d[\d_]*/ },
      { match: /#\$[\dA-Fa-f][\dA-Fa-f_]*/ },
      { match: /#&[0-7][0-7_]*/ },
      { match: /#%[01][01_]*/ }
    ]
  };
  const CLASS = {
    begin: hljs.IDENT_RE + "\\s*=\\s*class\\s*\\(",
    returnBegin: true,
    contains: [hljs.TITLE_MODE]
  };
  const FUNCTION = {
    className: "function",
    beginKeywords: "function constructor destructor procedure",
    end: /[:;]/,
    keywords: "function constructor|10 destructor|10 procedure|10",
    contains: [
      hljs.TITLE_MODE,
      {
        className: "params",
        begin: /\(/,
        end: /\)/,
        keywords: KEYWORDS2,
        contains: [
          STRING,
          CHAR_STRING,
          DIRECTIVE
        ].concat(COMMENT_MODES)
      },
      DIRECTIVE
    ].concat(COMMENT_MODES)
  };
  return {
    name: "Delphi",
    aliases: [
      "dpr",
      "dfm",
      "pas",
      "pascal"
    ],
    case_insensitive: true,
    keywords: KEYWORDS2,
    illegal: /"|\$[G-Zg-z]|\/\*|<\/|\|/,
    contains: [
      STRING,
      CHAR_STRING,
      NUMBER,
      CLASS,
      FUNCTION,
      DIRECTIVE
    ].concat(COMMENT_MODES)
  };
}
function django(hljs) {
  const FILTER = {
    begin: /\|[A-Za-z]+:?/,
    keywords: { name: "truncatewords removetags linebreaksbr yesno get_digit timesince random striptags filesizeformat escape linebreaks length_is ljust rjust cut urlize fix_ampersands title floatformat capfirst pprint divisibleby add make_list unordered_list urlencode timeuntil urlizetrunc wordcount stringformat linenumbers slice date dictsort dictsortreversed default_if_none pluralize lower join center default truncatewords_html upper length phone2numeric wordwrap time addslashes slugify first escapejs force_escape iriencode last safe safeseq truncatechars localize unlocalize localtime utc timezone" },
    contains: [
      hljs.QUOTE_STRING_MODE,
      hljs.APOS_STRING_MODE
    ]
  };
  return {
    name: "Django",
    aliases: ["jinja"],
    case_insensitive: true,
    subLanguage: "xml",
    contains: [
      hljs.COMMENT(/\{%\s*comment\s*%\}/, /\{%\s*endcomment\s*%\}/),
      hljs.COMMENT(/\{#/, /#\}/),
      {
        className: "template-tag",
        begin: /\{%/,
        end: /%\}/,
        contains: [
          {
            className: "name",
            begin: /\w+/,
            keywords: { name: "comment endcomment load templatetag ifchanged endifchanged if endif firstof for endfor ifnotequal endifnotequal widthratio extends include spaceless endspaceless regroup ifequal endifequal ssi now with cycle url filter endfilter debug block endblock else autoescape endautoescape csrf_token empty elif endwith static trans blocktrans endblocktrans get_static_prefix get_media_prefix plural get_current_language language get_available_languages get_current_language_bidi get_language_info get_language_info_list localize endlocalize localtime endlocaltime timezone endtimezone get_current_timezone verbatim" },
            starts: {
              endsWithParent: true,
              keywords: "in by as",
              contains: [FILTER],
              relevance: 0
            }
          }
        ]
      },
      {
        className: "template-variable",
        begin: /\{\{/,
        end: /\}\}/,
        contains: [FILTER]
      }
    ]
  };
}
function dns(hljs) {
  const KEYWORDS2 = [
    "IN",
    "A",
    "AAAA",
    "AFSDB",
    "APL",
    "CAA",
    "CDNSKEY",
    "CDS",
    "CERT",
    "CNAME",
    "DHCID",
    "DLV",
    "DNAME",
    "DNSKEY",
    "DS",
    "HIP",
    "IPSECKEY",
    "KEY",
    "KX",
    "LOC",
    "MX",
    "NAPTR",
    "NS",
    "NSEC",
    "NSEC3",
    "NSEC3PARAM",
    "PTR",
    "RRSIG",
    "RP",
    "SIG",
    "SOA",
    "SRV",
    "SSHFP",
    "TA",
    "TKEY",
    "TLSA",
    "TSIG",
    "TXT"
  ];
  return {
    name: "DNS Zone",
    aliases: [
      "bind",
      "zone"
    ],
    keywords: KEYWORDS2,
    contains: [
      hljs.COMMENT(";", "$", { relevance: 0 }),
      {
        className: "meta",
        begin: /^\$(TTL|GENERATE|INCLUDE|ORIGIN)\b/
      },
      // IPv6
      {
        className: "number",
        begin: "((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))\\b"
      },
      // IPv4
      {
        className: "number",
        begin: "((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\b"
      },
      hljs.inherit(hljs.NUMBER_MODE, { begin: /\b\d+[dhwm]?/ })
    ]
  };
}
function dockerfile(hljs) {
  const KEYWORDS2 = [
    "from",
    "maintainer",
    "expose",
    "env",
    "arg",
    "user",
    "onbuild",
    "stopsignal"
  ];
  return {
    name: "Dockerfile",
    aliases: ["docker"],
    case_insensitive: true,
    keywords: KEYWORDS2,
    contains: [
      hljs.HASH_COMMENT_MODE,
      hljs.APOS_STRING_MODE,
      hljs.QUOTE_STRING_MODE,
      hljs.NUMBER_MODE,
      {
        beginKeywords: "run cmd entrypoint volume add copy workdir label healthcheck shell",
        starts: {
          end: /[^\\]$/,
          subLanguage: "bash"
        }
      }
    ],
    illegal: "</"
  };
}
function dos(hljs) {
  const COMMENT = hljs.COMMENT(
    /^\s*@?rem\b/,
    /$/,
    { relevance: 10 }
  );
  const LABEL = {
    begin: "^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)"
  };
  const KEYWORDS2 = [
    "if",
    "else",
    "goto",
    "for",
    "in",
    "do",
    "call",
    "exit",
    "not",
    "exist",
    "errorlevel",
    "defined",
    "equ",
    "neq",
    "lss",
    "leq",
    "gtr",
    "geq"
  ];
  const BUILT_INS2 = [
    "prn",
    "nul",
    "lpt3",
    "lpt2",
    "lpt1",
    "con",
    "com4",
    "com3",
    "com2",
    "com1",
    "aux",
    "shift",
    "cd",
    "dir",
    "echo",
    "setlocal",
    "endlocal",
    "set",
    "pause",
    "copy",
    "append",
    "assoc",
    "at",
    "attrib",
    "break",
    "cacls",
    "cd",
    "chcp",
    "chdir",
    "chkdsk",
    "chkntfs",
    "cls",
    "cmd",
    "color",
    "comp",
    "compact",
    "convert",
    "date",
    "dir",
    "diskcomp",
    "diskcopy",
    "doskey",
    "erase",
    "fs",
    "find",
    "findstr",
    "format",
    "ftype",
    "graftabl",
    "help",
    "keyb",
    "label",
    "md",
    "mkdir",
    "mode",
    "more",
    "move",
    "path",
    "pause",
    "print",
    "popd",
    "pushd",
    "promt",
    "rd",
    "recover",
    "rem",
    "rename",
    "replace",
    "restore",
    "rmdir",
    "shift",
    "sort",
    "start",
    "subst",
    "time",
    "title",
    "tree",
    "type",
    "ver",
    "verify",
    "vol",
    // winutils
    "ping",
    "net",
    "ipconfig",
    "taskkill",
    "xcopy",
    "ren",
    "del"
  ];
  return {
    name: "Batch file (DOS)",
    aliases: [
      "bat",
      "cmd"
    ],
    case_insensitive: true,
    illegal: /\/\*/,
    keywords: {
      keyword: KEYWORDS2,
      built_in: BUILT_INS2
    },
    contains: [
      {
        className: "variable",
        begin: /%%[^ ]|%[^ ]+?%|![^ ]+?!/
      },
      {
        className: "function",
        begin: LABEL.begin,
        end: "goto:eof",
        contains: [
          hljs.inherit(hljs.TITLE_MODE, { begin: "([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*" }),
          COMMENT
        ]
      },
      {
        className: "number",
        begin: "\\b\\d+",
        relevance: 0
      },
      COMMENT
    ]
  };
}
function dsconfig(hljs) {
  const QUOTED_PROPERTY = {
    className: "string",
    begin: /"/,
    end: /"/
  };
  const APOS_PROPERTY = {
    className: "string",
    begin: /'/,
    end: /'/
  };
  const UNQUOTED_PROPERTY = {
    className: "string",
    begin: /[\w\-?]+:\w+/,
    end: /\W/,
    relevance: 0
  };
  const VALUELESS_PROPERTY = {
    className: "string",
    begin: /\w+(\-\w+)*/,
    end: /(?=\W)/,
    relevance: 0
  };
  return {
    keywords: "dsconfig",
    contains: [
      {
        className: "keyword",
        begin: "^dsconfig",
        end: /\s/,
        excludeEnd: true,
        relevance: 10
      },
      {
        className: "built_in",
        begin: /(list|create|get|set|delete)-(\w+)/,
        end: /\s/,
        excludeEnd: true,
        illegal: "!@#$%^&*()",
        relevance: 10
      },
      {
        className: "built_in",
        begin: /--(\w+)/,
        end: /\s/,
        excludeEnd: true
      },
      QUOTED_PROPERTY,
      APOS_PROPERTY,
      UNQUOTED_PROPERTY,
      VALUELESS_PROPERTY,
      hljs.HASH_COMMENT_MODE
    ]
  };
}
function dts(hljs) {
  const STRINGS = {
    className: "string",
    variants: [
      hljs.inherit(hljs.QUOTE_STRING_MODE, { begin: '((u8?|U)|L)?"' }),
      {
        begin: '(u8?|U)?R"',
        end: '"',
        contains: [hljs.BACKSLASH_ESCAPE]
      },
      {
        begin: "'\\\\?.",
        end: "'",
        illegal: "."
      }
    ]
  };
  const NUMBERS = {
    className: "number",
    variants: [
      { begin: "\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)" },
      { begin: hljs.C_NUMBER_RE }
    ],
    relevance: 0
  };
  const PREPROCESSOR = {
    className: "meta",
    begin: "#",
    end: "$",
    keywords: { keyword: "if else elif endif define undef ifdef ifndef" },
    contains: [
      {
        begin: /\\\n/,
        relevance: 0
      },
      {
        beginKeywords: "include",
        end: "$",
        keywords: { keyword: "include" },
        contains: [
          hljs.inherit(STRINGS, { className: "string" }),
          {
            className: "string",
            begin: "<",
            end: ">",
            illegal: "\\n"
          }
        ]
      },
      STRINGS,
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE
    ]
  };
  const REFERENCE = {
    className: "variable",
    begin: /&[a-z\d_]*\b/
  };
  const KEYWORD = {
    className: "keyword",
    begin: "/[a-z][a-z\\d-]*/"
  };
  const LABEL = {
    className: "symbol",
    begin: "^\\s*[a-zA-Z_][a-zA-Z\\d_]*:"
  };
  const CELL_PROPERTY = {
    className: "params",
    relevance: 0,
    begin: "<",
    end: ">",
    contains: [
      NUMBERS,
      REFERENCE
    ]
  };
  const NODE = {
    className: "title.class",
    begin: /[a-zA-Z_][a-zA-Z\d_@-]*(?=\s\{)/,
    relevance: 0.2
  };
  const ROOT_NODE = {
    className: "title.class",
    begin: /^\/(?=\s*\{)/,
    relevance: 10
  };
  const ATTR_NO_VALUE = {
    match: /[a-z][a-z-,]+(?=;)/,
    relevance: 0,
    scope: "attr"
  };
  const ATTR = {
    relevance: 0,
    match: [
      /[a-z][a-z-,]+/,
      /\s*/,
      /=/
    ],
    scope: {
      1: "attr",
      3: "operator"
    }
  };
  const PUNC = {
    scope: "punctuation",
    relevance: 0,
    // `};` combined is just to avoid tons of useless punctuation nodes
    match: /\};|[;{}]/
  };
  return {
    name: "Device Tree",
    contains: [
      ROOT_NODE,
      REFERENCE,
      KEYWORD,
      LABEL,
      NODE,
      ATTR,
      ATTR_NO_VALUE,
      CELL_PROPERTY,
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      NUMBERS,
      STRINGS,
      PREPROCESSOR,
      PUNC,
      {
        begin: hljs.IDENT_RE + "::",
        keywords: ""
      }
    ]
  };
}
function dust(hljs) {
  const EXPRESSION_KEYWORDS = "if eq ne lt lte gt gte select default math sep";
  return {
    name: "Dust",
    aliases: ["dst"],
    case_insensitive: true,
    subLanguage: "xml",
    contains: [
      {
        className: "template-tag",
        begin: /\{[#\/]/,
        end: /\}/,
        illegal: /;/,
        contains: [
          {
            className: "name",
            begin: /[a-zA-Z\.-]+/,
            starts: {
              endsWithParent: true,
              relevance: 0,
              contains: [hljs.QUOTE_STRING_MODE]
            }
          }
        ]
      },
      {
        className: "template-variable",
        begin: /\{/,
        end: /\}/,
        illegal: /;/,
        keywords: EXPRESSION_KEYWORDS
      }
    ]
  };
}
function ebnf(hljs) {
  const commentMode = hljs.COMMENT(/\(\*/, /\*\)/);
  const nonTerminalMode = {
    className: "attribute",
    begin: /^[ ]*[a-zA-Z]+([\s_-]+[a-zA-Z]+)*/
  };
  const specialSequenceMode = {
    className: "meta",
    begin: /\?.*\?/
  };
  const ruleBodyMode = {
    begin: /=/,
    end: /[.;]/,
    contains: [
      commentMode,
      specialSequenceMode,
      {
        // terminals
        className: "string",
        variants: [
          hljs.APOS_STRING_MODE,
          hljs.QUOTE_STRING_MODE,
          {
            begin: "`",
            end: "`"
          }
        ]
      }
    ]
  };
  return {
    name: "Extended Backus-Naur Form",
    illegal: /\S/,
    contains: [
      commentMode,
      nonTerminalMode,
      ruleBodyMode
    ]
  };
}
function elixir(hljs) {
  const regex = hljs.regex;
  const ELIXIR_IDENT_RE = "[a-zA-Z_][a-zA-Z0-9_.]*(!|\\?)?";
  const ELIXIR_METHOD_RE = "[a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?";
  const KEYWORDS2 = [
    "after",
    "alias",
    "and",
    "case",
    "catch",
    "cond",
    "defstruct",
    "defguard",
    "do",
    "else",
    "end",
    "fn",
    "for",
    "if",
    "import",
    "in",
    "not",
    "or",
    "quote",
    "raise",
    "receive",
    "require",
    "reraise",
    "rescue",
    "try",
    "unless",
    "unquote",
    "unquote_splicing",
    "use",
    "when",
    "with|0"
  ];
  const LITERALS2 = [
    "false",
    "nil",
    "true"
  ];
  const KWS = {
    $pattern: ELIXIR_IDENT_RE,
    keyword: KEYWORDS2,
    literal: LITERALS2
  };
  const SUBST = {
    className: "subst",
    begin: /#\{/,
    end: /\}/,
    keywords: KWS
  };
  const NUMBER = {
    className: "number",
    begin: "(\\b0o[0-7_]+)|(\\b0b[01_]+)|(\\b0x[0-9a-fA-F_]+)|(-?\\b[0-9][0-9_]*(\\.[0-9_]+([eE][-+]?[0-9]+)?)?)",
    relevance: 0
  };
  const ESCAPES_RE = /\\[\s\S]/;
  const BACKSLASH_ESCAPE = {
    match: ESCAPES_RE,
    scope: "char.escape",
    relevance: 0
  };
  const SIGIL_DELIMITERS = `[/|([{<"']`;
  const SIGIL_DELIMITER_MODES = [
    {
      begin: /"/,
      end: /"/
    },
    {
      begin: /'/,
      end: /'/
    },
    {
      begin: /\//,
      end: /\//
    },
    {
      begin: /\|/,
      end: /\|/
    },
    {
      begin: /\(/,
      end: /\)/
    },
    {
      begin: /\[/,
      end: /\]/
    },
    {
      begin: /\{/,
      end: /\}/
    },
    {
      begin: /</,
      end: />/
    }
  ];
  const escapeSigilEnd = (end) => {
    return {
      scope: "char.escape",
      begin: regex.concat(/\\/, end),
      relevance: 0
    };
  };
  const LOWERCASE_SIGIL = {
    className: "string",
    begin: "~[a-z](?=" + SIGIL_DELIMITERS + ")",
    contains: SIGIL_DELIMITER_MODES.map((x2) => hljs.inherit(
      x2,
      { contains: [
        escapeSigilEnd(x2.end),
        BACKSLASH_ESCAPE,
        SUBST
      ] }
    ))
  };
  const UPCASE_SIGIL = {
    className: "string",
    begin: "~[A-Z](?=" + SIGIL_DELIMITERS + ")",
    contains: SIGIL_DELIMITER_MODES.map((x2) => hljs.inherit(
      x2,
      { contains: [escapeSigilEnd(x2.end)] }
    ))
  };
  const REGEX_SIGIL = {
    className: "regex",
    variants: [
      {
        begin: "~r(?=" + SIGIL_DELIMITERS + ")",
        contains: SIGIL_DELIMITER_MODES.map((x2) => hljs.inherit(
          x2,
          {
            end: regex.concat(x2.end, /[uismxfU]{0,7}/),
            contains: [
              escapeSigilEnd(x2.end),
              BACKSLASH_ESCAPE,
              SUBST
            ]
          }
        ))
      },
      {
        begin: "~R(?=" + SIGIL_DELIMITERS + ")",
        contains: SIGIL_DELIMITER_MODES.map(
          (x2) => hljs.inherit(
            x2,
            {
              end: regex.concat(x2.end, /[uismxfU]{0,7}/),
              contains: [escapeSigilEnd(x2.end)]
            }
          )
        )
      }
    ]
  };
  const STRING = {
    className: "string",
    contains: [
      hljs.BACKSLASH_ESCAPE,
      SUBST
    ],
    variants: [
      {
        begin: /"""/,
        end: /"""/
      },
      {
        begin: /'''/,
        end: /'''/
      },
      {
        begin: /~S"""/,
        end: /"""/,
        contains: []
        // override default
      },
      {
        begin: /~S"/,
        end: /"/,
        contains: []
        // override default
      },
      {
        begin: /~S'''/,
        end: /'''/,
        contains: []
        // override default
      },
      {
        begin: /~S'/,
        end: /'/,
        contains: []
        // override default
      },
      {
        begin: /'/,
        end: /'/
      },
      {
        begin: /"/,
        end: /"/
      }
    ]
  };
  const FUNCTION = {
    className: "function",
    beginKeywords: "def defp defmacro defmacrop",
    end: /\B\b/,
    // the mode is ended by the title
    contains: [
      hljs.inherit(hljs.TITLE_MODE, {
        begin: ELIXIR_IDENT_RE,
        endsParent: true
      })
    ]
  };
  const CLASS = hljs.inherit(FUNCTION, {
    className: "class",
    beginKeywords: "defimpl defmodule defprotocol defrecord",
    end: /\bdo\b|$|;/
  });
  const ELIXIR_DEFAULT_CONTAINS = [
    STRING,
    REGEX_SIGIL,
    UPCASE_SIGIL,
    LOWERCASE_SIGIL,
    hljs.HASH_COMMENT_MODE,
    CLASS,
    FUNCTION,
    { begin: "::" },
    {
      className: "symbol",
      begin: ":(?![\\s:])",
      contains: [
        STRING,
        { begin: ELIXIR_METHOD_RE }
      ],
      relevance: 0
    },
    {
      className: "symbol",
      begin: ELIXIR_IDENT_RE + ":(?!:)",
      relevance: 0
    },
    {
      // Usage of a module, struct, etc.
      className: "title.class",
      begin: /(\b[A-Z][a-zA-Z0-9_]+)/,
      relevance: 0
    },
    NUMBER,
    {
      className: "variable",
      begin: "(\\$\\W)|((\\$|@@?)(\\w+))"
    }
    // -> has been removed, capnproto always uses this grammar construct
  ];
  SUBST.contains = ELIXIR_DEFAULT_CONTAINS;
  return {
    name: "Elixir",
    aliases: [
      "ex",
      "exs"
    ],
    keywords: KWS,
    contains: ELIXIR_DEFAULT_CONTAINS
  };
}
function elm(hljs) {
  const COMMENT = { variants: [
    hljs.COMMENT("--", "$"),
    hljs.COMMENT(
      /\{-/,
      /-\}/,
      { contains: ["self"] }
    )
  ] };
  const CONSTRUCTOR = {
    className: "type",
    begin: "\\b[A-Z][\\w']*",
    // TODO: other constructors (built-in, infix).
    relevance: 0
  };
  const LIST = {
    begin: "\\(",
    end: "\\)",
    illegal: '"',
    contains: [
      {
        className: "type",
        begin: "\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"
      },
      COMMENT
    ]
  };
  const RECORD = {
    begin: /\{/,
    end: /\}/,
    contains: LIST.contains
  };
  const CHARACTER = {
    className: "string",
    begin: "'\\\\?.",
    end: "'",
    illegal: "."
  };
  const KEYWORDS2 = [
    "let",
    "in",
    "if",
    "then",
    "else",
    "case",
    "of",
    "where",
    "module",
    "import",
    "exposing",
    "type",
    "alias",
    "as",
    "infix",
    "infixl",
    "infixr",
    "port",
    "effect",
    "command",
    "subscription"
  ];
  return {
    name: "Elm",
    keywords: KEYWORDS2,
    contains: [
      // Top-level constructions.
      {
        beginKeywords: "port effect module",
        end: "exposing",
        keywords: "port effect module where command subscription exposing",
        contains: [
          LIST,
          COMMENT
        ],
        illegal: "\\W\\.|;"
      },
      {
        begin: "import",
        end: "$",
        keywords: "import as exposing",
        contains: [
          LIST,
          COMMENT
        ],
        illegal: "\\W\\.|;"
      },
      {
        begin: "type",
        end: "$",
        keywords: "type alias",
        contains: [
          CONSTRUCTOR,
          LIST,
          RECORD,
          COMMENT
        ]
      },
      {
        beginKeywords: "infix infixl infixr",
        end: "$",
        contains: [
          hljs.C_NUMBER_MODE,
          COMMENT
        ]
      },
      {
        begin: "port",
        end: "$",
        keywords: "port",
        contains: [COMMENT]
      },
      // Literals and names.
      CHARACTER,
      hljs.QUOTE_STRING_MODE,
      hljs.C_NUMBER_MODE,
      CONSTRUCTOR,
      hljs.inherit(hljs.TITLE_MODE, { begin: "^[_a-z][\\w']*" }),
      COMMENT,
      {
        // No markup, relevance booster
        begin: "->|<-"
      }
    ],
    illegal: /;/
  };
}
function erb(hljs) {
  return {
    name: "ERB",
    subLanguage: "xml",
    contains: [
      hljs.COMMENT("<%#", "%>"),
      {
        begin: "<%[%=-]?",
        end: "[%-]?%>",
        subLanguage: "ruby",
        excludeBegin: true,
        excludeEnd: true
      }
    ]
  };
}
function erlang(hljs) {
  const BASIC_ATOM_RE = "[a-z'][a-zA-Z0-9_']*";
  const FUNCTION_NAME_RE = "(" + BASIC_ATOM_RE + ":" + BASIC_ATOM_RE + "|" + BASIC_ATOM_RE + ")";
  const ERLANG_RESERVED = {
    keyword: "after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor maybe else",
    literal: "false true"
  };
  const COMMENT = hljs.COMMENT("%", "$");
  const NUMBER = {
    className: "number",
    begin: "\\b(\\d+(_\\d+)*#[a-fA-F0-9]+(_[a-fA-F0-9]+)*|\\d+(_\\d+)*(\\.\\d+(_\\d+)*)?([eE][-+]?\\d+)?)",
    relevance: 0
  };
  const NAMED_FUN = { begin: "fun\\s+" + BASIC_ATOM_RE + "/\\d+" };
  const FUNCTION_CALL = {
    begin: FUNCTION_NAME_RE + "\\(",
    end: "\\)",
    returnBegin: true,
    relevance: 0,
    contains: [
      {
        begin: FUNCTION_NAME_RE,
        relevance: 0
      },
      {
        begin: "\\(",
        end: "\\)",
        endsWithParent: true,
        returnEnd: true,
        relevance: 0
        // "contains" defined later
      }
    ]
  };
  const TUPLE = {
    begin: /\{/,
    end: /\}/,
    relevance: 0
    // "contains" defined later
  };
  const VAR1 = {
    begin: "\\b_([A-Z][A-Za-z0-9_]*)?",
    relevance: 0
  };
  const VAR2 = {
    begin: "[A-Z][a-zA-Z0-9_]*",
    relevance: 0
  };
  const RECORD_ACCESS = {
    begin: "#" + hljs.UNDERSCORE_IDENT_RE,
    relevance: 0,
    returnBegin: true,
    contains: [
      {
        begin: "#" + hljs.UNDERSCORE_IDENT_RE,
        relevance: 0
      },
      {
        begin: /\{/,
        end: /\}/,
        relevance: 0
        // "contains" defined later
      }
    ]
  };
  const CHAR_LITERAL = {
    scope: "string",
    match: /\$(\\([^0-9]|[0-9]{1,3}|)|.)/
  };
  const TRIPLE_QUOTE = {
    scope: "string",
    match: /"""("*)(?!")[\s\S]*?"""\1/
  };
  const SIGIL = {
    scope: "string",
    contains: [hljs.BACKSLASH_ESCAPE],
    variants: [
      { match: /~\w?"""("*)(?!")[\s\S]*?"""\1/ },
      { begin: /~\w?\(/, end: /\)/ },
      { begin: /~\w?\[/, end: /\]/ },
      { begin: /~\w?{/, end: /}/ },
      { begin: /~\w?</, end: />/ },
      { begin: /~\w?\//, end: /\// },
      { begin: /~\w?\|/, end: /\|/ },
      { begin: /~\w?'/, end: /'/ },
      { begin: /~\w?"/, end: /"/ },
      { begin: /~\w?`/, end: /`/ },
      { begin: /~\w?#/, end: /#/ }
    ]
  };
  const BLOCK_STATEMENTS = {
    beginKeywords: "fun receive if try case maybe",
    end: "end",
    keywords: ERLANG_RESERVED
  };
  BLOCK_STATEMENTS.contains = [
    COMMENT,
    NAMED_FUN,
    hljs.inherit(hljs.APOS_STRING_MODE, { className: "" }),
    BLOCK_STATEMENTS,
    FUNCTION_CALL,
    SIGIL,
    TRIPLE_QUOTE,
    hljs.QUOTE_STRING_MODE,
    NUMBER,
    TUPLE,
    VAR1,
    VAR2,
    RECORD_ACCESS,
    CHAR_LITERAL
  ];
  const BASIC_MODES = [
    COMMENT,
    NAMED_FUN,
    BLOCK_STATEMENTS,
    FUNCTION_CALL,
    SIGIL,
    TRIPLE_QUOTE,
    hljs.QUOTE_STRING_MODE,
    NUMBER,
    TUPLE,
    VAR1,
    VAR2,
    RECORD_ACCESS,
    CHAR_LITERAL
  ];
  FUNCTION_CALL.contains[1].contains = BASIC_MODES;
  TUPLE.contains = BASIC_MODES;
  RECORD_ACCESS.contains[1].contains = BASIC_MODES;
  const DIRECTIVES = [
    "-module",
    "-record",
    "-undef",
    "-export",
    "-ifdef",
    "-ifndef",
    "-author",
    "-copyright",
    "-doc",
    "-moduledoc",
    "-vsn",
    "-import",
    "-include",
    "-include_lib",
    "-compile",
    "-define",
    "-else",
    "-endif",
    "-file",
    "-behaviour",
    "-behavior",
    "-spec",
    "-on_load",
    "-nifs"
  ];
  const PARAMS = {
    className: "params",
    begin: "\\(",
    end: "\\)",
    contains: BASIC_MODES
  };
  return {
    name: "Erlang",
    aliases: ["erl"],
    keywords: ERLANG_RESERVED,
    illegal: "(</|\\*=|\\+=|-=|/\\*|\\*/|\\(\\*|\\*\\))",
    contains: [
      {
        className: "function",
        begin: "^" + BASIC_ATOM_RE + "\\s*\\(",
        end: "->",
        returnBegin: true,
        illegal: "\\(|#|//|/\\*|\\\\|:|;",
        contains: [
          PARAMS,
          hljs.inherit(hljs.TITLE_MODE, { begin: BASIC_ATOM_RE })
        ],
        starts: {
          end: ";|\\.",
          keywords: ERLANG_RESERVED,
          contains: BASIC_MODES
        }
      },
      COMMENT,
      {
        begin: "^-",
        end: "\\.",
        relevance: 0,
        excludeEnd: true,
        returnBegin: true,
        keywords: {
          $pattern: "-" + hljs.IDENT_RE,
          keyword: DIRECTIVES.map((x2) => `${x2}|1.5`).join(" ")
        },
        contains: [
          PARAMS,
          SIGIL,
          TRIPLE_QUOTE,
          hljs.QUOTE_STRING_MODE
        ]
      },
      NUMBER,
      SIGIL,
      TRIPLE_QUOTE,
      hljs.QUOTE_STRING_MODE,
      RECORD_ACCESS,
      VAR1,
      VAR2,
      TUPLE,
      CHAR_LITERAL,
      { begin: /\.$/ }
      // relevance booster
    ]
  };
}
function erlangRepl(hljs) {
  const regex = hljs.regex;
  return {
    name: "Erlang REPL",
    keywords: {
      built_in: "spawn spawn_link self",
      keyword: "after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse|10 query receive rem try when xor"
    },
    contains: [
      {
        className: "meta.prompt",
        begin: "^[0-9]+> ",
        relevance: 10
      },
      hljs.COMMENT("%", "$"),
      {
        className: "number",
        begin: "\\b(\\d+(_\\d+)*#[a-fA-F0-9]+(_[a-fA-F0-9]+)*|\\d+(_\\d+)*(\\.\\d+(_\\d+)*)?([eE][-+]?\\d+)?)",
        relevance: 0
      },
      hljs.APOS_STRING_MODE,
      hljs.QUOTE_STRING_MODE,
      { begin: regex.concat(
        /\?(::)?/,
        /([A-Z]\w*)/,
        // at least one identifier
        /((::)[A-Z]\w*)*/
        // perhaps more
      ) },
      { begin: "->" },
      { begin: "ok" },
      { begin: "!" },
      {
        begin: "(\\b[a-z'][a-zA-Z0-9_']*:[a-z'][a-zA-Z0-9_']*)|(\\b[a-z'][a-zA-Z0-9_']*)",
        relevance: 0
      },
      {
        begin: "[A-Z][a-zA-Z0-9_']*",
        relevance: 0
      }
    ]
  };
}
function excel(hljs) {
  const BUILT_INS2 = [
    "ABS",
    "ACCRINT",
    "ACCRINTM",
    "ACOS",
    "ACOSH",
    "ACOT",
    "ACOTH",
    "AGGREGATE",
    "ADDRESS",
    "AMORDEGRC",
    "AMORLINC",
    "AND",
    "ARABIC",
    "AREAS",
    "ARRAYTOTEXT",
    "ASC",
    "ASIN",
    "ASINH",
    "ATAN",
    "ATAN2",
    "ATANH",
    "AVEDEV",
    "AVERAGE",
    "AVERAGEA",
    "AVERAGEIF",
    "AVERAGEIFS",
    "BAHTTEXT",
    "BASE",
    "BESSELI",
    "BESSELJ",
    "BESSELK",
    "BESSELY",
    "BETADIST",
    "BETA.DIST",
    "BETAINV",
    "BETA.INV",
    "BIN2DEC",
    "BIN2HEX",
    "BIN2OCT",
    "BINOMDIST",
    "BINOM.DIST",
    "BINOM.DIST.RANGE",
    "BINOM.INV",
    "BITAND",
    "BITLSHIFT",
    "BITOR",
    "BITRSHIFT",
    "BITXOR",
    "BYCOL",
    "BYROW",
    "CALL",
    "CEILING",
    "CEILING.MATH",
    "CEILING.PRECISE",
    "CELL",
    "CHAR",
    "CHIDIST",
    "CHIINV",
    "CHITEST",
    "CHISQ.DIST",
    "CHISQ.DIST.RT",
    "CHISQ.INV",
    "CHISQ.INV.RT",
    "CHISQ.TEST",
    "CHOOSE",
    "CHOOSECOLS",
    "CHOOSEROWS",
    "CLEAN",
    "CODE",
    "COLUMN",
    "COLUMNS",
    "COMBIN",
    "COMBINA",
    "COMPLEX",
    "CONCAT",
    "CONCATENATE",
    "CONFIDENCE",
    "CONFIDENCE.NORM",
    "CONFIDENCE.T",
    "CONVERT",
    "CORREL",
    "COS",
    "COSH",
    "COT",
    "COTH",
    "COUNT",
    "COUNTA",
    "COUNTBLANK",
    "COUNTIF",
    "COUNTIFS",
    "COUPDAYBS",
    "COUPDAYS",
    "COUPDAYSNC",
    "COUPNCD",
    "COUPNUM",
    "COUPPCD",
    "COVAR",
    "COVARIANCE.P",
    "COVARIANCE.S",
    "CRITBINOM",
    "CSC",
    "CSCH",
    "CUBEKPIMEMBER",
    "CUBEMEMBER",
    "CUBEMEMBERPROPERTY",
    "CUBERANKEDMEMBER",
    "CUBESET",
    "CUBESETCOUNT",
    "CUBEVALUE",
    "CUMIPMT",
    "CUMPRINC",
    "DATE",
    "DATEDIF",
    "DATEVALUE",
    "DAVERAGE",
    "DAY",
    "DAYS",
    "DAYS360",
    "DB",
    "DBCS",
    "DCOUNT",
    "DCOUNTA",
    "DDB",
    "DEC2BIN",
    "DEC2HEX",
    "DEC2OCT",
    "DECIMAL",
    "DEGREES",
    "DELTA",
    "DEVSQ",
    "DGET",
    "DISC",
    "DMAX",
    "DMIN",
    "DOLLAR",
    "DOLLARDE",
    "DOLLARFR",
    "DPRODUCT",
    "DROP",
    "DSTDEV",
    "DSTDEVP",
    "DSUM",
    "DURATION",
    "DVAR",
    "DVARP",
    "EDATE",
    "EFFECT",
    "ENCODEURL",
    "EOMONTH",
    "ERF",
    "ERF.PRECISE",
    "ERFC",
    "ERFC.PRECISE",
    "ERROR.TYPE",
    "EUROCONVERT",
    "EVEN",
    "EXACT",
    "EXP",
    "EXPAND",
    "EXPON.DIST",
    "EXPONDIST",
    "FACT",
    "FACTDOUBLE",
    "FALSE",
    "F.DIST",
    "FDIST",
    "F.DIST.RT",
    "FILTER",
    "FILTERXML",
    "FIND",
    "FINDB",
    "F.INV",
    "F.INV.RT",
    "FINV",
    "FISHER",
    "FISHERINV",
    "FIXED",
    "FLOOR",
    "FLOOR.MATH",
    "FLOOR.PRECISE",
    "FORECAST",
    "FORECAST.ETS",
    "FORECAST.ETS.CONFINT",
    "FORECAST.ETS.SEASONALITY",
    "FORECAST.ETS.STAT",
    "FORECAST.LINEAR",
    "FORMULATEXT",
    "FREQUENCY",
    "F.TEST",
    "FTEST",
    "FV",
    "FVSCHEDULE",
    "GAMMA",
    "GAMMA.DIST",
    "GAMMADIST",
    "GAMMA.INV",
    "GAMMAINV",
    "GAMMALN",
    "GAMMALN.PRECISE",
    "GAUSS",
    "GCD",
    "GEOMEAN",
    "GESTEP",
    "GETPIVOTDATA",
    "GROWTH",
    "HARMEAN",
    "HEX2BIN",
    "HEX2DEC",
    "HEX2OCT",
    "HLOOKUP",
    "HOUR",
    "HSTACK",
    "HYPERLINK",
    "HYPGEOM.DIST",
    "HYPGEOMDIST",
    "IF",
    "IFERROR",
    "IFNA",
    "IFS",
    "IMABS",
    "IMAGE",
    "IMAGINARY",
    "IMARGUMENT",
    "IMCONJUGATE",
    "IMCOS",
    "IMCOSH",
    "IMCOT",
    "IMCSC",
    "IMCSCH",
    "IMDIV",
    "IMEXP",
    "IMLN",
    "IMLOG10",
    "IMLOG2",
    "IMPOWER",
    "IMPRODUCT",
    "IMREAL",
    "IMSEC",
    "IMSECH",
    "IMSIN",
    "IMSINH",
    "IMSQRT",
    "IMSUB",
    "IMSUM",
    "IMTAN",
    "INDEX",
    "INDIRECT",
    "INFO",
    "INT",
    "INTERCEPT",
    "INTRATE",
    "IPMT",
    "IRR",
    "ISBLANK",
    "ISERR",
    "ISERROR",
    "ISEVEN",
    "ISFORMULA",
    "ISLOGICAL",
    "ISNA",
    "ISNONTEXT",
    "ISNUMBER",
    "ISODD",
    "ISOMITTED",
    "ISREF",
    "ISTEXT",
    "ISO.CEILING",
    "ISOWEEKNUM",
    "ISPMT",
    "JIS",
    "KURT",
    "LAMBDA",
    "LARGE",
    "LCM",
    "LEFT",
    "LEFTB",
    "LEN",
    "LENB",
    "LET",
    "LINEST",
    "LN",
    "LOG",
    "LOG10",
    "LOGEST",
    "LOGINV",
    "LOGNORM.DIST",
    "LOGNORMDIST",
    "LOGNORM.INV",
    "LOOKUP",
    "LOWER",
    "MAKEARRAY",
    "MAP",
    "MATCH",
    "MAX",
    "MAXA",
    "MAXIFS",
    "MDETERM",
    "MDURATION",
    "MEDIAN",
    "MID",
    "MIDB",
    "MIN",
    "MINIFS",
    "MINA",
    "MINUTE",
    "MINVERSE",
    "MIRR",
    "MMULT",
    "MOD",
    "MODE",
    "MODE.MULT",
    "MODE.SNGL",
    "MONTH",
    "MROUND",
    "MULTINOMIAL",
    "MUNIT",
    "N",
    "NA",
    "NEGBINOM.DIST",
    "NEGBINOMDIST",
    "NETWORKDAYS",
    "NETWORKDAYS.INTL",
    "NOMINAL",
    "NORM.DIST",
    "NORMDIST",
    "NORMINV",
    "NORM.INV",
    "NORM.S.DIST",
    "NORMSDIST",
    "NORM.S.INV",
    "NORMSINV",
    "NOT",
    "NOW",
    "NPER",
    "NPV",
    "NUMBERVALUE",
    "OCT2BIN",
    "OCT2DEC",
    "OCT2HEX",
    "ODD",
    "ODDFPRICE",
    "ODDFYIELD",
    "ODDLPRICE",
    "ODDLYIELD",
    "OFFSET",
    "OR",
    "PDURATION",
    "PEARSON",
    "PERCENTILE.EXC",
    "PERCENTILE.INC",
    "PERCENTILE",
    "PERCENTRANK.EXC",
    "PERCENTRANK.INC",
    "PERCENTRANK",
    "PERMUT",
    "PERMUTATIONA",
    "PHI",
    "PHONETIC",
    "PI",
    "PMT",
    "POISSON.DIST",
    "POISSON",
    "POWER",
    "PPMT",
    "PRICE",
    "PRICEDISC",
    "PRICEMAT",
    "PROB",
    "PRODUCT",
    "PROPER",
    "PV",
    "QUARTILE",
    "QUARTILE.EXC",
    "QUARTILE.INC",
    "QUOTIENT",
    "RADIANS",
    "RAND",
    "RANDARRAY",
    "RANDBETWEEN",
    "RANK.AVG",
    "RANK.EQ",
    "RANK",
    "RATE",
    "RECEIVED",
    "REDUCE",
    "REGISTER.ID",
    "REPLACE",
    "REPLACEB",
    "REPT",
    "RIGHT",
    "RIGHTB",
    "ROMAN",
    "ROUND",
    "ROUNDDOWN",
    "ROUNDUP",
    "ROW",
    "ROWS",
    "RRI",
    "RSQ",
    "RTD",
    "SCAN",
    "SEARCH",
    "SEARCHB",
    "SEC",
    "SECH",
    "SECOND",
    "SEQUENCE",
    "SERIESSUM",
    "SHEET",
    "SHEETS",
    "SIGN",
    "SIN",
    "SINH",
    "SKEW",
    "SKEW.P",
    "SLN",
    "SLOPE",
    "SMALL",
    "SORT",
    "SORTBY",
    "SQRT",
    "SQRTPI",
    "SQL.REQUEST",
    "STANDARDIZE",
    "STOCKHISTORY",
    "STDEV",
    "STDEV.P",
    "STDEV.S",
    "STDEVA",
    "STDEVP",
    "STDEVPA",
    "STEYX",
    "SUBSTITUTE",
    "SUBTOTAL",
    "SUM",
    "SUMIF",
    "SUMIFS",
    "SUMPRODUCT",
    "SUMSQ",
    "SUMX2MY2",
    "SUMX2PY2",
    "SUMXMY2",
    "SWITCH",
    "SYD",
    "T",
    "TAN",
    "TANH",
    "TAKE",
    "TBILLEQ",
    "TBILLPRICE",
    "TBILLYIELD",
    "T.DIST",
    "T.DIST.2T",
    "T.DIST.RT",
    "TDIST",
    "TEXT",
    "TEXTAFTER",
    "TEXTBEFORE",
    "TEXTJOIN",
    "TEXTSPLIT",
    "TIME",
    "TIMEVALUE",
    "T.INV",
    "T.INV.2T",
    "TINV",
    "TOCOL",
    "TOROW",
    "TODAY",
    "TRANSPOSE",
    "TREND",
    "TRIM",
    "TRIMMEAN",
    "TRUE",
    "TRUNC",
    "T.TEST",
    "TTEST",
    "TYPE",
    "UNICHAR",
    "UNICODE",
    "UNIQUE",
    "UPPER",
    "VALUE",
    "VALUETOTEXT",
    "VAR",
    "VAR.P",
    "VAR.S",
    "VARA",
    "VARP",
    "VARPA",
    "VDB",
    "VLOOKUP",
    "VSTACK",
    "WEBSERVICE",
    "WEEKDAY",
    "WEEKNUM",
    "WEIBULL",
    "WEIBULL.DIST",
    "WORKDAY",
    "WORKDAY.INTL",
    "WRAPCOLS",
    "WRAPROWS",
    "XIRR",
    "XLOOKUP",
    "XMATCH",
    "XNPV",
    "XOR",
    "YEAR",
    "YEARFRAC",
    "YIELD",
    "YIELDDISC",
    "YIELDMAT",
    "Z.TEST",
    "ZTEST"
  ];
  return {
    name: "Excel formulae",
    aliases: [
      "xlsx",
      "xls"
    ],
    case_insensitive: true,
    keywords: {
      $pattern: /[a-zA-Z][\w\.]*/,
      built_in: BUILT_INS2
    },
    contains: [
      {
        /* matches a beginning equal sign found in Excel formula examples */
        begin: /^=/,
        end: /[^=]/,
        returnEnd: true,
        illegal: /=/,
        /* only allow single equal sign at front of line */
        relevance: 10
      },
      /* technically, there can be more than 2 letters in column names, but this prevents conflict with some keywords */
      {
        /* matches a reference to a single cell */
        className: "symbol",
        begin: /\b[A-Z]{1,2}\d+\b/,
        end: /[^\d]/,
        excludeEnd: true,
        relevance: 0
      },
      {
        /* matches a reference to a range of cells */
        className: "symbol",
        begin: /[A-Z]{0,2}\d*:[A-Z]{0,2}\d*/,
        relevance: 0
      },
      hljs.BACKSLASH_ESCAPE,
      hljs.QUOTE_STRING_MODE,
      {
        className: "number",
        begin: hljs.NUMBER_RE + "(%)?",
        relevance: 0
      },
      /* Excel formula comments are done by putting the comment in a function call to N() */
      hljs.COMMENT(
        /\bN\(/,
        /\)/,
        {
          excludeBegin: true,
          excludeEnd: true,
          illegal: /\n/
        }
      )
    ]
  };
}
function fix(hljs) {
  return {
    name: "FIX",
    contains: [
      {
        begin: /[^\u2401\u0001]+/,
        end: /[\u2401\u0001]/,
        excludeEnd: true,
        returnBegin: true,
        returnEnd: false,
        contains: [
          {
            begin: /([^\u2401\u0001=]+)/,
            end: /=([^\u2401\u0001=]+)/,
            returnEnd: true,
            returnBegin: false,
            className: "attr"
          },
          {
            begin: /=/,
            end: /([\u2401\u0001])/,
            excludeEnd: true,
            excludeBegin: true,
            className: "string"
          }
        ]
      }
    ],
    case_insensitive: true
  };
}
function flix(hljs) {
  const CHAR = {
    className: "string",
    begin: /'(.|\\[xXuU][a-zA-Z0-9]+)'/
  };
  const STRING = {
    className: "string",
    variants: [
      {
        begin: '"',
        end: '"'
      }
    ]
  };
  const NAME = {
    className: "title",
    relevance: 0,
    begin: /[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/
  };
  const METHOD = {
    className: "function",
    beginKeywords: "def",
    end: /[:={\[(\n;]/,
    excludeEnd: true,
    contains: [NAME]
  };
  return {
    name: "Flix",
    keywords: {
      keyword: [
        "case",
        "class",
        "def",
        "else",
        "enum",
        "if",
        "impl",
        "import",
        "in",
        "lat",
        "rel",
        "index",
        "let",
        "match",
        "namespace",
        "switch",
        "type",
        "yield",
        "with"
      ],
      literal: [
        "true",
        "false"
      ]
    },
    contains: [
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      CHAR,
      STRING,
      METHOD,
      hljs.C_NUMBER_MODE
    ]
  };
}
function fortran(hljs) {
  const regex = hljs.regex;
  const PARAMS = {
    className: "params",
    begin: "\\(",
    end: "\\)"
  };
  const COMMENT = { variants: [
    hljs.COMMENT("!", "$", { relevance: 0 }),
    // allow FORTRAN 77 style comments
    hljs.COMMENT("^C[ ]", "$", { relevance: 0 }),
    hljs.COMMENT("^C$", "$", { relevance: 0 })
  ] };
  const OPTIONAL_NUMBER_SUFFIX = /(_[a-z_\d]+)?/;
  const OPTIONAL_NUMBER_EXP = /([de][+-]?\d+)?/;
  const NUMBER = {
    className: "number",
    variants: [
      { begin: regex.concat(/\b\d+/, /\.(\d*)/, OPTIONAL_NUMBER_EXP, OPTIONAL_NUMBER_SUFFIX) },
      { begin: regex.concat(/\b\d+/, OPTIONAL_NUMBER_EXP, OPTIONAL_NUMBER_SUFFIX) },
      { begin: regex.concat(/\.\d+/, OPTIONAL_NUMBER_EXP, OPTIONAL_NUMBER_SUFFIX) }
    ],
    relevance: 0
  };
  const FUNCTION_DEF = {
    className: "function",
    beginKeywords: "subroutine function program",
    illegal: "[${=\\n]",
    contains: [
      hljs.UNDERSCORE_TITLE_MODE,
      PARAMS
    ]
  };
  const STRING = {
    className: "string",
    relevance: 0,
    variants: [
      hljs.APOS_STRING_MODE,
      hljs.QUOTE_STRING_MODE
    ]
  };
  const KEYWORDS2 = [
    "kind",
    "do",
    "concurrent",
    "local",
    "shared",
    "while",
    "private",
    "call",
    "intrinsic",
    "where",
    "elsewhere",
    "type",
    "endtype",
    "endmodule",
    "endselect",
    "endinterface",
    "end",
    "enddo",
    "endif",
    "if",
    "forall",
    "endforall",
    "only",
    "contains",
    "default",
    "return",
    "stop",
    "then",
    "block",
    "endblock",
    "endassociate",
    "public",
    "subroutine|10",
    "function",
    "program",
    ".and.",
    ".or.",
    ".not.",
    ".le.",
    ".eq.",
    ".ge.",
    ".gt.",
    ".lt.",
    "goto",
    "save",
    "else",
    "use",
    "module",
    "select",
    "case",
    "access",
    "blank",
    "direct",
    "exist",
    "file",
    "fmt",
    "form",
    "formatted",
    "iostat",
    "name",
    "named",
    "nextrec",
    "number",
    "opened",
    "rec",
    "recl",
    "sequential",
    "status",
    "unformatted",
    "unit",
    "continue",
    "format",
    "pause",
    "cycle",
    "exit",
    "c_null_char",
    "c_alert",
    "c_backspace",
    "c_form_feed",
    "flush",
    "wait",
    "decimal",
    "round",
    "iomsg",
    "synchronous",
    "nopass",
    "non_overridable",
    "pass",
    "protected",
    "volatile",
    "abstract",
    "extends",
    "import",
    "non_intrinsic",
    "value",
    "deferred",
    "generic",
    "final",
    "enumerator",
    "class",
    "associate",
    "bind",
    "enum",
    "c_int",
    "c_short",
    "c_long",
    "c_long_long",
    "c_signed_char",
    "c_size_t",
    "c_int8_t",
    "c_int16_t",
    "c_int32_t",
    "c_int64_t",
    "c_int_least8_t",
    "c_int_least16_t",
    "c_int_least32_t",
    "c_int_least64_t",
    "c_int_fast8_t",
    "c_int_fast16_t",
    "c_int_fast32_t",
    "c_int_fast64_t",
    "c_intmax_t",
    "C_intptr_t",
    "c_float",
    "c_double",
    "c_long_double",
    "c_float_complex",
    "c_double_complex",
    "c_long_double_complex",
    "c_bool",
    "c_char",
    "c_null_ptr",
    "c_null_funptr",
    "c_new_line",
    "c_carriage_return",
    "c_horizontal_tab",
    "c_vertical_tab",
    "iso_c_binding",
    "c_loc",
    "c_funloc",
    "c_associated",
    "c_f_pointer",
    "c_ptr",
    "c_funptr",
    "iso_fortran_env",
    "character_storage_size",
    "error_unit",
    "file_storage_size",
    "input_unit",
    "iostat_end",
    "iostat_eor",
    "numeric_storage_size",
    "output_unit",
    "c_f_procpointer",
    "ieee_arithmetic",
    "ieee_support_underflow_control",
    "ieee_get_underflow_mode",
    "ieee_set_underflow_mode",
    "newunit",
    "contiguous",
    "recursive",
    "pad",
    "position",
    "action",
    "delim",
    "readwrite",
    "eor",
    "advance",
    "nml",
    "interface",
    "procedure",
    "namelist",
    "include",
    "sequence",
    "elemental",
    "pure",
    "impure",
    "integer",
    "real",
    "character",
    "complex",
    "logical",
    "codimension",
    "dimension",
    "allocatable|10",
    "parameter",
    "external",
    "implicit|10",
    "none",
    "double",
    "precision",
    "assign",
    "intent",
    "optional",
    "pointer",
    "target",
    "in",
    "out",
    "common",
    "equivalence",
    "data"
  ];
  const LITERALS2 = [
    ".False.",
    ".True."
  ];
  const BUILT_INS2 = [
    "alog",
    "alog10",
    "amax0",
    "amax1",
    "amin0",
    "amin1",
    "amod",
    "cabs",
    "ccos",
    "cexp",
    "clog",
    "csin",
    "csqrt",
    "dabs",
    "dacos",
    "dasin",
    "datan",
    "datan2",
    "dcos",
    "dcosh",
    "ddim",
    "dexp",
    "dint",
    "dlog",
    "dlog10",
    "dmax1",
    "dmin1",
    "dmod",
    "dnint",
    "dsign",
    "dsin",
    "dsinh",
    "dsqrt",
    "dtan",
    "dtanh",
    "float",
    "iabs",
    "idim",
    "idint",
    "idnint",
    "ifix",
    "isign",
    "max0",
    "max1",
    "min0",
    "min1",
    "sngl",
    "algama",
    "cdabs",
    "cdcos",
    "cdexp",
    "cdlog",
    "cdsin",
    "cdsqrt",
    "cqabs",
    "cqcos",
    "cqexp",
    "cqlog",
    "cqsin",
    "cqsqrt",
    "dcmplx",
    "dconjg",
    "derf",
    "derfc",
    "dfloat",
    "dgamma",
    "dimag",
    "dlgama",
    "iqint",
    "qabs",
    "qacos",
    "qasin",
    "qatan",
    "qatan2",
    "qcmplx",
    "qconjg",
    "qcos",
    "qcosh",
    "qdim",
    "qerf",
    "qerfc",
    "qexp",
    "qgamma",
    "qimag",
    "qlgama",
    "qlog",
    "qlog10",
    "qmax1",
    "qmin1",
    "qmod",
    "qnint",
    "qsign",
    "qsin",
    "qsinh",
    "qsqrt",
    "qtan",
    "qtanh",
    "abs",
    "acos",
    "aimag",
    "aint",
    "anint",
    "asin",
    "atan",
    "atan2",
    "char",
    "cmplx",
    "conjg",
    "cos",
    "cosh",
    "exp",
    "ichar",
    "index",
    "int",
    "log",
    "log10",
    "max",
    "min",
    "nint",
    "sign",
    "sin",
    "sinh",
    "sqrt",
    "tan",
    "tanh",
    "print",
    "write",
    "dim",
    "lge",
    "lgt",
    "lle",
    "llt",
    "mod",
    "nullify",
    "allocate",
    "deallocate",
    "adjustl",
    "adjustr",
    "all",
    "allocated",
    "any",
    "associated",
    "bit_size",
    "btest",
    "ceiling",
    "count",
    "cshift",
    "date_and_time",
    "digits",
    "dot_product",
    "eoshift",
    "epsilon",
    "exponent",
    "floor",
    "fraction",
    "huge",
    "iand",
    "ibclr",
    "ibits",
    "ibset",
    "ieor",
    "ior",
    "ishft",
    "ishftc",
    "lbound",
    "len_trim",
    "matmul",
    "maxexponent",
    "maxloc",
    "maxval",
    "merge",
    "minexponent",
    "minloc",
    "minval",
    "modulo",
    "mvbits",
    "nearest",
    "pack",
    "present",
    "product",
    "radix",
    "random_number",
    "random_seed",
    "range",
    "repeat",
    "reshape",
    "rrspacing",
    "scale",
    "scan",
    "selected_int_kind",
    "selected_real_kind",
    "set_exponent",
    "shape",
    "size",
    "spacing",
    "spread",
    "sum",
    "system_clock",
    "tiny",
    "transpose",
    "trim",
    "ubound",
    "unpack",
    "verify",
    "achar",
    "iachar",
    "transfer",
    "dble",
    "entry",
    "dprod",
    "cpu_time",
    "command_argument_count",
    "get_command",
    "get_command_argument",
    "get_environment_variable",
    "is_iostat_end",
    "ieee_arithmetic",
    "ieee_support_underflow_control",
    "ieee_get_underflow_mode",
    "ieee_set_underflow_mode",
    "is_iostat_eor",
    "move_alloc",
    "new_line",
    "selected_char_kind",
    "same_type_as",
    "extends_type_of",
    "acosh",
    "asinh",
    "atanh",
    "bessel_j0",
    "bessel_j1",
    "bessel_jn",
    "bessel_y0",
    "bessel_y1",
    "bessel_yn",
    "erf",
    "erfc",
    "erfc_scaled",
    "gamma",
    "log_gamma",
    "hypot",
    "norm2",
    "atomic_define",
    "atomic_ref",
    "execute_command_line",
    "leadz",
    "trailz",
    "storage_size",
    "merge_bits",
    "bge",
    "bgt",
    "ble",
    "blt",
    "dshiftl",
    "dshiftr",
    "findloc",
    "iall",
    "iany",
    "iparity",
    "image_index",
    "lcobound",
    "ucobound",
    "maskl",
    "maskr",
    "num_images",
    "parity",
    "popcnt",
    "poppar",
    "shifta",
    "shiftl",
    "shiftr",
    "this_image",
    "sync",
    "change",
    "team",
    "co_broadcast",
    "co_max",
    "co_min",
    "co_sum",
    "co_reduce"
  ];
  return {
    name: "Fortran",
    case_insensitive: true,
    aliases: [
      "f90",
      "f95"
    ],
    keywords: {
      $pattern: /\b[a-z][a-z0-9_]+\b|\.[a-z][a-z0-9_]+\./,
      keyword: KEYWORDS2,
      literal: LITERALS2,
      built_in: BUILT_INS2
    },
    illegal: /\/\*/,
    contains: [
      STRING,
      FUNCTION_DEF,
      // allow `C = value` for assignments so they aren't misdetected
      // as Fortran 77 style comments
      {
        begin: /^C\s*=(?!=)/,
        relevance: 0
      },
      COMMENT,
      NUMBER
    ]
  };
}
function escape$1(value) {
  return new RegExp(value.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&"), "m");
}
function source$1(re2) {
  if (!re2) return null;
  if (typeof re2 === "string") return re2;
  return re2.source;
}
function lookahead$1(re2) {
  return concat$1("(?=", re2, ")");
}
function concat$1(...args) {
  const joined = args.map((x2) => source$1(x2)).join("");
  return joined;
}
function stripOptionsFromArgs$1(args) {
  const opts = args[args.length - 1];
  if (typeof opts === "object" && opts.constructor === Object) {
    args.splice(args.length - 1, 1);
    return opts;
  } else {
    return {};
  }
}
function either$1(...args) {
  const opts = stripOptionsFromArgs$1(args);
  const joined = "(" + (opts.capture ? "" : "?:") + args.map((x2) => source$1(x2)).join("|") + ")";
  return joined;
}
function fsharp(hljs) {
  const KEYWORDS2 = [
    "abstract",
    "and",
    "as",
    "assert",
    "base",
    "begin",
    "class",
    "default",
    "delegate",
    "do",
    "done",
    "downcast",
    "downto",
    "elif",
    "else",
    "end",
    "exception",
    "extern",
    // "false", // literal
    "finally",
    "fixed",
    "for",
    "fun",
    "function",
    "global",
    "if",
    "in",
    "inherit",
    "inline",
    "interface",
    "internal",
    "lazy",
    "let",
    "match",
    "member",
    "module",
    "mutable",
    "namespace",
    "new",
    // "not", // built_in
    // "null", // literal
    "of",
    "open",
    "or",
    "override",
    "private",
    "public",
    "rec",
    "return",
    "static",
    "struct",
    "then",
    "to",
    // "true", // literal
    "try",
    "type",
    "upcast",
    "use",
    "val",
    "void",
    "when",
    "while",
    "with",
    "yield"
  ];
  const BANG_KEYWORD_MODE = {
    // monad builder keywords (matches before non-bang keywords)
    scope: "keyword",
    match: /\b(yield|return|let|do|match|use)!/
  };
  const PREPROCESSOR_KEYWORDS = [
    "if",
    "else",
    "endif",
    "line",
    "nowarn",
    "light",
    "r",
    "i",
    "I",
    "load",
    "time",
    "help",
    "quit"
  ];
  const LITERALS2 = [
    "true",
    "false",
    "null",
    "Some",
    "None",
    "Ok",
    "Error",
    "infinity",
    "infinityf",
    "nan",
    "nanf"
  ];
  const SPECIAL_IDENTIFIERS = [
    "__LINE__",
    "__SOURCE_DIRECTORY__",
    "__SOURCE_FILE__"
  ];
  const KNOWN_TYPES = [
    // basic types
    "bool",
    "byte",
    "sbyte",
    "int8",
    "int16",
    "int32",
    "uint8",
    "uint16",
    "uint32",
    "int",
    "uint",
    "int64",
    "uint64",
    "nativeint",
    "unativeint",
    "decimal",
    "float",
    "double",
    "float32",
    "single",
    "char",
    "string",
    "unit",
    "bigint",
    // other native types or lowercase aliases
    "option",
    "voption",
    "list",
    "array",
    "seq",
    "byref",
    "exn",
    "inref",
    "nativeptr",
    "obj",
    "outref",
    "voidptr",
    // other important FSharp types
    "Result"
  ];
  const BUILTINS = [
    // Somewhat arbitrary list of builtin functions and values.
    // Most of them are declared in Microsoft.FSharp.Core
    // I tried to stay relevant by adding only the most idiomatic
    // and most used symbols that are not already declared as types.
    "not",
    "ref",
    "raise",
    "reraise",
    "dict",
    "readOnlyDict",
    "set",
    "get",
    "enum",
    "sizeof",
    "typeof",
    "typedefof",
    "nameof",
    "nullArg",
    "invalidArg",
    "invalidOp",
    "id",
    "fst",
    "snd",
    "ignore",
    "lock",
    "using",
    "box",
    "unbox",
    "tryUnbox",
    "printf",
    "printfn",
    "sprintf",
    "eprintf",
    "eprintfn",
    "fprintf",
    "fprintfn",
    "failwith",
    "failwithf"
  ];
  const ALL_KEYWORDS = {
    keyword: KEYWORDS2,
    literal: LITERALS2,
    built_in: BUILTINS,
    "variable.constant": SPECIAL_IDENTIFIERS
  };
  const ML_COMMENT = hljs.COMMENT(/\(\*(?!\))/, /\*\)/, {
    contains: ["self"]
  });
  const COMMENT = {
    variants: [
      ML_COMMENT,
      hljs.C_LINE_COMMENT_MODE
    ]
  };
  const IDENTIFIER_RE = /[a-zA-Z_](\w|')*/;
  const QUOTED_IDENTIFIER = {
    scope: "variable",
    begin: /``/,
    end: /``/
  };
  const BEGIN_GENERIC_TYPE_SYMBOL_RE = /\B('|\^)/;
  const GENERIC_TYPE_SYMBOL = {
    scope: "symbol",
    variants: [
      // the type name is a quoted identifier:
      { match: concat$1(BEGIN_GENERIC_TYPE_SYMBOL_RE, /``.*?``/) },
      // the type name is a normal identifier (we don't use IDENTIFIER_RE because there cannot be another apostrophe here):
      { match: concat$1(BEGIN_GENERIC_TYPE_SYMBOL_RE, hljs.UNDERSCORE_IDENT_RE) }
    ],
    relevance: 0
  };
  const makeOperatorMode = function({ includeEqual }) {
    let allOperatorChars;
    if (includeEqual)
      allOperatorChars = "!%&*+-/<=>@^|~?";
    else
      allOperatorChars = "!%&*+-/<>@^|~?";
    const OPERATOR_CHARS = Array.from(allOperatorChars);
    const OPERATOR_CHAR_RE = concat$1("[", ...OPERATOR_CHARS.map(escape$1), "]");
    const OPERATOR_CHAR_OR_DOT_RE = either$1(OPERATOR_CHAR_RE, /\./);
    const OPERATOR_FIRST_CHAR_OF_MULTIPLE_RE = concat$1(OPERATOR_CHAR_OR_DOT_RE, lookahead$1(OPERATOR_CHAR_OR_DOT_RE));
    const SYMBOLIC_OPERATOR_RE = either$1(
      concat$1(OPERATOR_FIRST_CHAR_OF_MULTIPLE_RE, OPERATOR_CHAR_OR_DOT_RE, "*"),
      // Matches at least 2 chars operators
      concat$1(OPERATOR_CHAR_RE, "+")
      // Matches at least one char operators
    );
    return {
      scope: "operator",
      match: either$1(
        // symbolic operators:
        SYMBOLIC_OPERATOR_RE,
        // other symbolic keywords:
        // Type casting and conversion operators:
        /:\?>/,
        /:\?/,
        /:>/,
        /:=/,
        // Reference cell assignment
        /::?/,
        // : or ::
        /\$/
      ),
      // A single $ can be used as an operator
      relevance: 0
    };
  };
  const OPERATOR = makeOperatorMode({ includeEqual: true });
  const OPERATOR_WITHOUT_EQUAL = makeOperatorMode({ includeEqual: false });
  const makeTypeAnnotationMode = function(prefix, prefixScope) {
    return {
      begin: concat$1(
        // a type annotation is a
        prefix,
        // should be a colon or the 'of' keyword
        lookahead$1(
          // that has to be followed by
          concat$1(
            /\s*/,
            // optional space
            either$1(
              // then either of:
              /\w/,
              // word
              /'/,
              // generic type name
              /\^/,
              // generic type name
              /#/,
              // flexible type name
              /``/,
              // quoted type name
              /\(/,
              // parens type expression
              /{\|/
              // anonymous type annotation
            )
          )
        )
      ),
      beginScope: prefixScope,
      // BUG: because ending with \n is necessary for some cases, multi-line type annotations are not properly supported.
      // Examples where \n is required at the end:
      // - abstract member definitions in classes: abstract Property : int * string
      // - return type annotations: let f f' = f' () : returnTypeAnnotation
      // - record fields definitions: { A : int \n B : string }
      end: lookahead$1(
        either$1(
          /\n/,
          /=/
        )
      ),
      relevance: 0,
      // we need the known types, and we need the type constraint keywords and literals. e.g.: when 'a : null
      keywords: hljs.inherit(ALL_KEYWORDS, { type: KNOWN_TYPES }),
      contains: [
        COMMENT,
        GENERIC_TYPE_SYMBOL,
        hljs.inherit(QUOTED_IDENTIFIER, { scope: null }),
        // match to avoid strange patterns inside that may break the parsing
        OPERATOR_WITHOUT_EQUAL
      ]
    };
  };
  const TYPE_ANNOTATION = makeTypeAnnotationMode(/:/, "operator");
  const DISCRIMINATED_UNION_TYPE_ANNOTATION = makeTypeAnnotationMode(/\bof\b/, "keyword");
  const TYPE_DECLARATION = {
    begin: [
      /(^|\s+)/,
      // prevents matching the following: `match s.stype with`
      /type/,
      /\s+/,
      IDENTIFIER_RE
    ],
    beginScope: {
      2: "keyword",
      4: "title.class"
    },
    end: lookahead$1(/\(|=|$/),
    keywords: ALL_KEYWORDS,
    // match keywords in type constraints. e.g.: when 'a : null
    contains: [
      COMMENT,
      hljs.inherit(QUOTED_IDENTIFIER, { scope: null }),
      // match to avoid strange patterns inside that may break the parsing
      GENERIC_TYPE_SYMBOL,
      {
        // For visual consistency, highlight type brackets as operators.
        scope: "operator",
        match: /<|>/
      },
      TYPE_ANNOTATION
      // generic types can have constraints, which are type annotations. e.g. type MyType<'T when 'T : delegate<obj * string>> =
    ]
  };
  const COMPUTATION_EXPRESSION = {
    // computation expressions:
    scope: "computation-expression",
    // BUG: might conflict with record deconstruction. e.g. let f { Name = name } = name // will highlight f
    match: /\b[_a-z]\w*(?=\s*\{)/
  };
  const PREPROCESSOR = {
    // preprocessor directives and fsi commands:
    begin: [
      /^\s*/,
      concat$1(/#/, either$1(...PREPROCESSOR_KEYWORDS)),
      /\b/
    ],
    beginScope: { 2: "meta" },
    end: lookahead$1(/\s|$/)
  };
  const NUMBER = {
    variants: [
      hljs.BINARY_NUMBER_MODE,
      hljs.C_NUMBER_MODE
    ]
  };
  const QUOTED_STRING = {
    scope: "string",
    begin: /"/,
    end: /"/,
    contains: [
      hljs.BACKSLASH_ESCAPE
    ]
  };
  const VERBATIM_STRING = {
    scope: "string",
    begin: /@"/,
    end: /"/,
    contains: [
      {
        match: /""/
        // escaped "
      },
      hljs.BACKSLASH_ESCAPE
    ]
  };
  const TRIPLE_QUOTED_STRING = {
    scope: "string",
    begin: /"""/,
    end: /"""/,
    relevance: 2
  };
  const SUBST = {
    scope: "subst",
    begin: /\{/,
    end: /\}/,
    keywords: ALL_KEYWORDS
  };
  const INTERPOLATED_STRING = {
    scope: "string",
    begin: /\$"/,
    end: /"/,
    contains: [
      {
        match: /\{\{/
        // escaped {
      },
      {
        match: /\}\}/
        // escaped }
      },
      hljs.BACKSLASH_ESCAPE,
      SUBST
    ]
  };
  const INTERPOLATED_VERBATIM_STRING = {
    scope: "string",
    begin: /(\$@|@\$)"/,
    end: /"/,
    contains: [
      {
        match: /\{\{/
        // escaped {
      },
      {
        match: /\}\}/
        // escaped }
      },
      {
        match: /""/
      },
      hljs.BACKSLASH_ESCAPE,
      SUBST
    ]
  };
  const INTERPOLATED_TRIPLE_QUOTED_STRING = {
    scope: "string",
    begin: /\$"""/,
    end: /"""/,
    contains: [
      {
        match: /\{\{/
        // escaped {
      },
      {
        match: /\}\}/
        // escaped }
      },
      SUBST
    ],
    relevance: 2
  };
  const CHAR_LITERAL = {
    scope: "string",
    match: concat$1(
      /'/,
      either$1(
        /[^\\']/,
        // either a single non escaped char...
        /\\(?:.|\d{3}|x[a-fA-F\d]{2}|u[a-fA-F\d]{4}|U[a-fA-F\d]{8})/
        // ...or an escape sequence
      ),
      /'/
    )
  };
  SUBST.contains = [
    INTERPOLATED_VERBATIM_STRING,
    INTERPOLATED_STRING,
    VERBATIM_STRING,
    QUOTED_STRING,
    CHAR_LITERAL,
    BANG_KEYWORD_MODE,
    COMMENT,
    QUOTED_IDENTIFIER,
    TYPE_ANNOTATION,
    COMPUTATION_EXPRESSION,
    PREPROCESSOR,
    NUMBER,
    GENERIC_TYPE_SYMBOL,
    OPERATOR
  ];
  const STRING = {
    variants: [
      INTERPOLATED_TRIPLE_QUOTED_STRING,
      INTERPOLATED_VERBATIM_STRING,
      INTERPOLATED_STRING,
      TRIPLE_QUOTED_STRING,
      VERBATIM_STRING,
      QUOTED_STRING,
      CHAR_LITERAL
    ]
  };
  return {
    name: "F#",
    aliases: [
      "fs",
      "f#"
    ],
    keywords: ALL_KEYWORDS,
    illegal: /\/\*/,
    classNameAliases: {
      "computation-expression": "keyword"
    },
    contains: [
      BANG_KEYWORD_MODE,
      STRING,
      COMMENT,
      QUOTED_IDENTIFIER,
      TYPE_DECLARATION,
      {
        // e.g. [<Attributes("")>] or [<``module``: MyCustomAttributeThatWorksOnModules>]
        // or [<Sealed; NoEquality; NoComparison; CompiledName("FSharpAsync`1")>]
        scope: "meta",
        begin: /\[</,
        end: />\]/,
        relevance: 2,
        contains: [
          QUOTED_IDENTIFIER,
          // can contain any constant value
          TRIPLE_QUOTED_STRING,
          VERBATIM_STRING,
          QUOTED_STRING,
          CHAR_LITERAL,
          NUMBER
        ]
      },
      DISCRIMINATED_UNION_TYPE_ANNOTATION,
      TYPE_ANNOTATION,
      COMPUTATION_EXPRESSION,
      PREPROCESSOR,
      NUMBER,
      GENERIC_TYPE_SYMBOL,
      OPERATOR
    ]
  };
}
function gams(hljs) {
  const regex = hljs.regex;
  const KEYWORDS2 = {
    keyword: "abort acronym acronyms alias all and assign binary card diag display else eq file files for free ge gt if integer le loop lt maximizing minimizing model models ne negative no not option options or ord positive prod put putpage puttl repeat sameas semicont semiint smax smin solve sos1 sos2 sum system table then until using while xor yes",
    literal: "eps inf na",
    built_in: "abs arccos arcsin arctan arctan2 Beta betaReg binomial ceil centropy cos cosh cvPower div div0 eDist entropy errorf execSeed exp fact floor frac gamma gammaReg log logBeta logGamma log10 log2 mapVal max min mod ncpCM ncpF ncpVUpow ncpVUsin normal pi poly power randBinomial randLinear randTriangle round rPower sigmoid sign signPower sin sinh slexp sllog10 slrec sqexp sqlog10 sqr sqrec sqrt tan tanh trunc uniform uniformInt vcPower bool_and bool_eqv bool_imp bool_not bool_or bool_xor ifThen rel_eq rel_ge rel_gt rel_le rel_lt rel_ne gday gdow ghour gleap gmillisec gminute gmonth gsecond gyear jdate jnow jstart jtime errorLevel execError gamsRelease gamsVersion handleCollect handleDelete handleStatus handleSubmit heapFree heapLimit heapSize jobHandle jobKill jobStatus jobTerminate licenseLevel licenseStatus maxExecError sleep timeClose timeComp timeElapsed timeExec timeStart"
  };
  const PARAMS = {
    className: "params",
    begin: /\(/,
    end: /\)/,
    excludeBegin: true,
    excludeEnd: true
  };
  const SYMBOLS = {
    className: "symbol",
    variants: [
      { begin: /=[lgenxc]=/ },
      { begin: /\$/ }
    ]
  };
  const QSTR = {
    // One-line quoted comment string
    className: "comment",
    variants: [
      {
        begin: "'",
        end: "'"
      },
      {
        begin: '"',
        end: '"'
      }
    ],
    illegal: "\\n",
    contains: [hljs.BACKSLASH_ESCAPE]
  };
  const ASSIGNMENT = {
    begin: "/",
    end: "/",
    keywords: KEYWORDS2,
    contains: [
      QSTR,
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.QUOTE_STRING_MODE,
      hljs.APOS_STRING_MODE,
      hljs.C_NUMBER_MODE
    ]
  };
  const COMMENT_WORD = /[a-z0-9&#*=?@\\><:,()$[\]_.{}!+%^-]+/;
  const DESCTEXT = {
    // Parameter/set/variable description text
    begin: /[a-z][a-z0-9_]*(\([a-z0-9_, ]*\))?[ \t]+/,
    excludeBegin: true,
    end: "$",
    endsWithParent: true,
    contains: [
      QSTR,
      ASSIGNMENT,
      {
        className: "comment",
        // one comment word, then possibly more
        begin: regex.concat(
          COMMENT_WORD,
          // [ ] because \s would be too broad (matching newlines)
          regex.anyNumberOfTimes(regex.concat(/[ ]+/, COMMENT_WORD))
        ),
        relevance: 0
      }
    ]
  };
  return {
    name: "GAMS",
    aliases: ["gms"],
    case_insensitive: true,
    keywords: KEYWORDS2,
    contains: [
      hljs.COMMENT(/^\$ontext/, /^\$offtext/),
      {
        className: "meta",
        begin: "^\\$[a-z0-9]+",
        end: "$",
        returnBegin: true,
        contains: [
          {
            className: "keyword",
            begin: "^\\$[a-z0-9]+"
          }
        ]
      },
      hljs.COMMENT("^\\*", "$"),
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.QUOTE_STRING_MODE,
      hljs.APOS_STRING_MODE,
      // Declarations
      {
        beginKeywords: "set sets parameter parameters variable variables scalar scalars equation equations",
        end: ";",
        contains: [
          hljs.COMMENT("^\\*", "$"),
          hljs.C_LINE_COMMENT_MODE,
          hljs.C_BLOCK_COMMENT_MODE,
          hljs.QUOTE_STRING_MODE,
          hljs.APOS_STRING_MODE,
          ASSIGNMENT,
          DESCTEXT
        ]
      },
      {
        // table environment
        beginKeywords: "table",
        end: ";",
        returnBegin: true,
        contains: [
          {
            // table header row
            beginKeywords: "table",
            end: "$",
            contains: [DESCTEXT]
          },
          hljs.COMMENT("^\\*", "$"),
          hljs.C_LINE_COMMENT_MODE,
          hljs.C_BLOCK_COMMENT_MODE,
          hljs.QUOTE_STRING_MODE,
          hljs.APOS_STRING_MODE,
          hljs.C_NUMBER_MODE
          // Table does not contain DESCTEXT or ASSIGNMENT
        ]
      },
      // Function definitions
      {
        className: "function",
        begin: /^[a-z][a-z0-9_,\-+' ()$]+\.{2}/,
        returnBegin: true,
        contains: [
          {
            // Function title
            className: "title",
            begin: /^[a-z0-9_]+/
          },
          PARAMS,
          SYMBOLS
        ]
      },
      hljs.C_NUMBER_MODE,
      SYMBOLS
    ]
  };
}
function gauss(hljs) {
  const KEYWORDS2 = {
    keyword: "bool break call callexe checkinterrupt clear clearg closeall cls comlog compile continue create debug declare delete disable dlibrary dllcall do dos ed edit else elseif enable end endfor endif endp endo errorlog errorlogat expr external fn for format goto gosub graph if keyword let lib library line load loadarray loadexe loadf loadk loadm loadp loads loadx local locate loopnextindex lprint lpwidth lshow matrix msym ndpclex new open output outwidth plot plotsym pop prcsn print printdos proc push retp return rndcon rndmod rndmult rndseed run save saveall screen scroll setarray show sparse stop string struct system trace trap threadfor threadendfor threadbegin threadjoin threadstat threadend until use while winprint ne ge le gt lt and xor or not eq eqv",
    built_in: "abs acf aconcat aeye amax amean AmericanBinomCall AmericanBinomCall_Greeks AmericanBinomCall_ImpVol AmericanBinomPut AmericanBinomPut_Greeks AmericanBinomPut_ImpVol AmericanBSCall AmericanBSCall_Greeks AmericanBSCall_ImpVol AmericanBSPut AmericanBSPut_Greeks AmericanBSPut_ImpVol amin amult annotationGetDefaults annotationSetBkd annotationSetFont annotationSetLineColor annotationSetLineStyle annotationSetLineThickness annualTradingDays arccos arcsin areshape arrayalloc arrayindex arrayinit arraytomat asciiload asclabel astd astds asum atan atan2 atranspose axmargin balance band bandchol bandcholsol bandltsol bandrv bandsolpd bar base10 begwind besselj bessely beta box boxcox cdfBeta cdfBetaInv cdfBinomial cdfBinomialInv cdfBvn cdfBvn2 cdfBvn2e cdfCauchy cdfCauchyInv cdfChic cdfChii cdfChinc cdfChincInv cdfExp cdfExpInv cdfFc cdfFnc cdfFncInv cdfGam cdfGenPareto cdfHyperGeo cdfLaplace cdfLaplaceInv cdfLogistic cdfLogisticInv cdfmControlCreate cdfMvn cdfMvn2e cdfMvnce cdfMvne cdfMvt2e cdfMvtce cdfMvte cdfN cdfN2 cdfNc cdfNegBinomial cdfNegBinomialInv cdfNi cdfPoisson cdfPoissonInv cdfRayleigh cdfRayleighInv cdfTc cdfTci cdfTnc cdfTvn cdfWeibull cdfWeibullInv cdir ceil ChangeDir chdir chiBarSquare chol choldn cholsol cholup chrs close code cols colsf combinate combinated complex con cond conj cons ConScore contour conv convertsatostr convertstrtosa corrm corrms corrvc corrx corrxs cos cosh counts countwts crossprd crout croutp csrcol csrlin csvReadM csvReadSA cumprodc cumsumc curve cvtos datacreate datacreatecomplex datalist dataload dataloop dataopen datasave date datestr datestring datestrymd dayinyr dayofweek dbAddDatabase dbClose dbCommit dbCreateQuery dbExecQuery dbGetConnectOptions dbGetDatabaseName dbGetDriverName dbGetDrivers dbGetHostName dbGetLastErrorNum dbGetLastErrorText dbGetNumericalPrecPolicy dbGetPassword dbGetPort dbGetTableHeaders dbGetTables dbGetUserName dbHasFeature dbIsDriverAvailable dbIsOpen dbIsOpenError dbOpen dbQueryBindValue dbQueryClear dbQueryCols dbQueryExecPrepared dbQueryFetchAllM dbQueryFetchAllSA dbQueryFetchOneM dbQueryFetchOneSA dbQueryFinish dbQueryGetBoundValue dbQueryGetBoundValues dbQueryGetField dbQueryGetLastErrorNum dbQueryGetLastErrorText dbQueryGetLastInsertID dbQueryGetLastQuery dbQueryGetPosition dbQueryIsActive dbQueryIsForwardOnly dbQueryIsNull dbQueryIsSelect dbQueryIsValid dbQueryPrepare dbQueryRows dbQuerySeek dbQuerySeekFirst dbQuerySeekLast dbQuerySeekNext dbQuerySeekPrevious dbQuerySetForwardOnly dbRemoveDatabase dbRollback dbSetConnectOptions dbSetDatabaseName dbSetHostName dbSetNumericalPrecPolicy dbSetPort dbSetUserName dbTransaction DeleteFile delif delrows denseToSp denseToSpRE denToZero design det detl dfft dffti diag diagrv digamma doswin DOSWinCloseall DOSWinOpen dotfeq dotfeqmt dotfge dotfgemt dotfgt dotfgtmt dotfle dotflemt dotflt dotfltmt dotfne dotfnemt draw drop dsCreate dstat dstatmt dstatmtControlCreate dtdate dtday dttime dttodtv dttostr dttoutc dtvnormal dtvtodt dtvtoutc dummy dummybr dummydn eig eigh eighv eigv elapsedTradingDays endwind envget eof eqSolve eqSolvemt eqSolvemtControlCreate eqSolvemtOutCreate eqSolveset erf erfc erfccplx erfcplx error etdays ethsec etstr EuropeanBinomCall EuropeanBinomCall_Greeks EuropeanBinomCall_ImpVol EuropeanBinomPut EuropeanBinomPut_Greeks EuropeanBinomPut_ImpVol EuropeanBSCall EuropeanBSCall_Greeks EuropeanBSCall_ImpVol EuropeanBSPut EuropeanBSPut_Greeks EuropeanBSPut_ImpVol exctsmpl exec execbg exp extern eye fcheckerr fclearerr feq feqmt fflush fft ffti fftm fftmi fftn fge fgemt fgets fgetsa fgetsat fgetst fgt fgtmt fileinfo filesa fle flemt floor flt fltmt fmod fne fnemt fonts fopen formatcv formatnv fputs fputst fseek fstrerror ftell ftocv ftos ftostrC gamma gammacplx gammaii gausset gdaAppend gdaCreate gdaDStat gdaDStatMat gdaGetIndex gdaGetName gdaGetNames gdaGetOrders gdaGetType gdaGetTypes gdaGetVarInfo gdaIsCplx gdaLoad gdaPack gdaRead gdaReadByIndex gdaReadSome gdaReadSparse gdaReadStruct gdaReportVarInfo gdaSave gdaUpdate gdaUpdateAndPack gdaVars gdaWrite gdaWrite32 gdaWriteSome getarray getdims getf getGAUSShome getmatrix getmatrix4D getname getnamef getNextTradingDay getNextWeekDay getnr getorders getpath getPreviousTradingDay getPreviousWeekDay getRow getscalar3D getscalar4D getTrRow getwind glm gradcplx gradMT gradMTm gradMTT gradMTTm gradp graphprt graphset hasimag header headermt hess hessMT hessMTg hessMTgw hessMTm hessMTmw hessMTT hessMTTg hessMTTgw hessMTTm hessMTw hessp hist histf histp hsec imag indcv indexcat indices indices2 indicesf indicesfn indnv indsav integrate1d integrateControlCreate intgrat2 intgrat3 inthp1 inthp2 inthp3 inthp4 inthpControlCreate intquad1 intquad2 intquad3 intrleav intrleavsa intrsect intsimp inv invpd invswp iscplx iscplxf isden isinfnanmiss ismiss key keyav keyw lag lag1 lagn lapEighb lapEighi lapEighvb lapEighvi lapgEig lapgEigh lapgEighv lapgEigv lapgSchur lapgSvdcst lapgSvds lapgSvdst lapSvdcusv lapSvds lapSvdusv ldlp ldlsol linSolve listwise ln lncdfbvn lncdfbvn2 lncdfmvn lncdfn lncdfn2 lncdfnc lnfact lngammacplx lnpdfmvn lnpdfmvt lnpdfn lnpdft loadd loadstruct loadwind loess loessmt loessmtControlCreate log loglog logx logy lower lowmat lowmat1 ltrisol lu lusol machEpsilon make makevars makewind margin matalloc matinit mattoarray maxbytes maxc maxindc maxv maxvec mbesselei mbesselei0 mbesselei1 mbesseli mbesseli0 mbesseli1 meanc median mergeby mergevar minc minindc minv miss missex missrv moment momentd movingave movingaveExpwgt movingaveWgt nextindex nextn nextnevn nextwind ntos null null1 numCombinations ols olsmt olsmtControlCreate olsqr olsqr2 olsqrmt ones optn optnevn orth outtyp pacf packedToSp packr parse pause pdfCauchy pdfChi pdfExp pdfGenPareto pdfHyperGeo pdfLaplace pdfLogistic pdfn pdfPoisson pdfRayleigh pdfWeibull pi pinv pinvmt plotAddArrow plotAddBar plotAddBox plotAddHist plotAddHistF plotAddHistP plotAddPolar plotAddScatter plotAddShape plotAddTextbox plotAddTS plotAddXY plotArea plotBar plotBox plotClearLayout plotContour plotCustomLayout plotGetDefaults plotHist plotHistF plotHistP plotLayout plotLogLog plotLogX plotLogY plotOpenWindow plotPolar plotSave plotScatter plotSetAxesPen plotSetBar plotSetBarFill plotSetBarStacked plotSetBkdColor plotSetFill plotSetGrid plotSetLegend plotSetLineColor plotSetLineStyle plotSetLineSymbol plotSetLineThickness plotSetNewWindow plotSetTitle plotSetWhichYAxis plotSetXAxisShow plotSetXLabel plotSetXRange plotSetXTicInterval plotSetXTicLabel plotSetYAxisShow plotSetYLabel plotSetYRange plotSetZAxisShow plotSetZLabel plotSurface plotTS plotXY polar polychar polyeval polygamma polyint polymake polymat polymroot polymult polyroot pqgwin previousindex princomp printfm printfmt prodc psi putarray putf putvals pvCreate pvGetIndex pvGetParNames pvGetParVector pvLength pvList pvPack pvPacki pvPackm pvPackmi pvPacks pvPacksi pvPacksm pvPacksmi pvPutParVector pvTest pvUnpack QNewton QNewtonmt QNewtonmtControlCreate QNewtonmtOutCreate QNewtonSet QProg QProgmt QProgmtInCreate qqr qqre qqrep qr qre qrep qrsol qrtsol qtyr qtyre qtyrep quantile quantiled qyr qyre qyrep qz rank rankindx readr real reclassify reclassifyCuts recode recserar recsercp recserrc rerun rescale reshape rets rev rfft rffti rfftip rfftn rfftnp rfftp rndBernoulli rndBeta rndBinomial rndCauchy rndChiSquare rndCon rndCreateState rndExp rndGamma rndGeo rndGumbel rndHyperGeo rndi rndKMbeta rndKMgam rndKMi rndKMn rndKMnb rndKMp rndKMu rndKMvm rndLaplace rndLCbeta rndLCgam rndLCi rndLCn rndLCnb rndLCp rndLCu rndLCvm rndLogNorm rndMTu rndMVn rndMVt rndn rndnb rndNegBinomial rndp rndPoisson rndRayleigh rndStateSkip rndu rndvm rndWeibull rndWishart rotater round rows rowsf rref sampleData satostrC saved saveStruct savewind scale scale3d scalerr scalinfnanmiss scalmiss schtoc schur searchsourcepath seekr select selif seqa seqm setdif setdifsa setvars setvwrmode setwind shell shiftr sin singleindex sinh sleep solpd sortc sortcc sortd sorthc sorthcc sortind sortindc sortmc sortr sortrc spBiconjGradSol spChol spConjGradSol spCreate spDenseSubmat spDiagRvMat spEigv spEye spLDL spline spLU spNumNZE spOnes spreadSheetReadM spreadSheetReadSA spreadSheetWrite spScale spSubmat spToDense spTrTDense spTScalar spZeros sqpSolve sqpSolveMT sqpSolveMTControlCreate sqpSolveMTlagrangeCreate sqpSolveMToutCreate sqpSolveSet sqrt statements stdc stdsc stocv stof strcombine strindx strlen strput strrindx strsect strsplit strsplitPad strtodt strtof strtofcplx strtriml strtrimr strtrunc strtruncl strtruncpad strtruncr submat subscat substute subvec sumc sumr surface svd svd1 svd2 svdcusv svds svdusv sysstate tab tan tanh tempname time timedt timestr timeutc title tkf2eps tkf2ps tocart todaydt toeplitz token topolar trapchk trigamma trimr trunc type typecv typef union unionsa uniqindx uniqindxsa unique uniquesa upmat upmat1 upper utctodt utctodtv utrisol vals varCovMS varCovXS varget vargetl varmall varmares varput varputl vartypef vcm vcms vcx vcxs vec vech vecr vector vget view viewxyz vlist vnamecv volume vput vread vtypecv wait waitc walkindex where window writer xlabel xlsGetSheetCount xlsGetSheetSize xlsGetSheetTypes xlsMakeRange xlsReadM xlsReadSA xlsWrite xlsWriteM xlsWriteSA xpnd xtics xy xyz ylabel ytics zeros zeta zlabel ztics cdfEmpirical dot h5create h5open h5read h5readAttribute h5write h5writeAttribute ldl plotAddErrorBar plotAddSurface plotCDFEmpirical plotSetColormap plotSetContourLabels plotSetLegendFont plotSetTextInterpreter plotSetXTicCount plotSetYTicCount plotSetZLevels powerm strjoin sylvester strtrim",
    literal: "DB_AFTER_LAST_ROW DB_ALL_TABLES DB_BATCH_OPERATIONS DB_BEFORE_FIRST_ROW DB_BLOB DB_EVENT_NOTIFICATIONS DB_FINISH_QUERY DB_HIGH_PRECISION DB_LAST_INSERT_ID DB_LOW_PRECISION_DOUBLE DB_LOW_PRECISION_INT32 DB_LOW_PRECISION_INT64 DB_LOW_PRECISION_NUMBERS DB_MULTIPLE_RESULT_SETS DB_NAMED_PLACEHOLDERS DB_POSITIONAL_PLACEHOLDERS DB_PREPARED_QUERIES DB_QUERY_SIZE DB_SIMPLE_LOCKING DB_SYSTEM_TABLES DB_TABLES DB_TRANSACTIONS DB_UNICODE DB_VIEWS __STDIN __STDOUT __STDERR __FILE_DIR"
  };
  const AT_COMMENT_MODE = hljs.COMMENT("@", "@");
  const PREPROCESSOR = {
    className: "meta",
    begin: "#",
    end: "$",
    keywords: { keyword: "define definecs|10 undef ifdef ifndef iflight ifdllcall ifmac ifos2win ifunix else endif lineson linesoff srcfile srcline" },
    contains: [
      {
        begin: /\\\n/,
        relevance: 0
      },
      {
        beginKeywords: "include",
        end: "$",
        keywords: { keyword: "include" },
        contains: [
          {
            className: "string",
            begin: '"',
            end: '"',
            illegal: "\\n"
          }
        ]
      },
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      AT_COMMENT_MODE
    ]
  };
  const STRUCT_TYPE = {
    begin: /\bstruct\s+/,
    end: /\s/,
    keywords: "struct",
    contains: [
      {
        className: "type",
        begin: hljs.UNDERSCORE_IDENT_RE,
        relevance: 0
      }
    ]
  };
  const PARSE_PARAMS = [
    {
      className: "params",
      begin: /\(/,
      end: /\)/,
      excludeBegin: true,
      excludeEnd: true,
      endsWithParent: true,
      relevance: 0,
      contains: [
        {
          // dots
          className: "literal",
          begin: /\.\.\./
        },
        hljs.C_NUMBER_MODE,
        hljs.C_BLOCK_COMMENT_MODE,
        AT_COMMENT_MODE,
        STRUCT_TYPE
      ]
    }
  ];
  const FUNCTION_DEF = {
    className: "title",
    begin: hljs.UNDERSCORE_IDENT_RE,
    relevance: 0
  };
  const DEFINITION = function(beginKeywords, end, inherits) {
    const mode = hljs.inherit(
      {
        className: "function",
        beginKeywords,
        end,
        excludeEnd: true,
        contains: [].concat(PARSE_PARAMS)
      },
      {}
    );
    mode.contains.push(FUNCTION_DEF);
    mode.contains.push(hljs.C_NUMBER_MODE);
    mode.contains.push(hljs.C_BLOCK_COMMENT_MODE);
    mode.contains.push(AT_COMMENT_MODE);
    return mode;
  };
  const BUILT_IN_REF = {
    // these are explicitly named internal function calls
    className: "built_in",
    begin: "\\b(" + KEYWORDS2.built_in.split(" ").join("|") + ")\\b"
  };
  const STRING_REF = {
    className: "string",
    begin: '"',
    end: '"',
    contains: [hljs.BACKSLASH_ESCAPE],
    relevance: 0
  };
  const FUNCTION_REF = {
    // className: "fn_ref",
    begin: hljs.UNDERSCORE_IDENT_RE + "\\s*\\(",
    returnBegin: true,
    keywords: KEYWORDS2,
    relevance: 0,
    contains: [
      { beginKeywords: KEYWORDS2.keyword },
      BUILT_IN_REF,
      {
        // ambiguously named function calls get a relevance of 0
        className: "built_in",
        begin: hljs.UNDERSCORE_IDENT_RE,
        relevance: 0
      }
    ]
  };
  const FUNCTION_REF_PARAMS = {
    // className: "fn_ref_params",
    begin: /\(/,
    end: /\)/,
    relevance: 0,
    keywords: {
      built_in: KEYWORDS2.built_in,
      literal: KEYWORDS2.literal
    },
    contains: [
      hljs.C_NUMBER_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      AT_COMMENT_MODE,
      BUILT_IN_REF,
      FUNCTION_REF,
      STRING_REF,
      "self"
    ]
  };
  FUNCTION_REF.contains.push(FUNCTION_REF_PARAMS);
  return {
    name: "GAUSS",
    aliases: ["gss"],
    case_insensitive: true,
    // language is case-insensitive
    keywords: KEYWORDS2,
    illegal: /(\{[%#]|[%#]\}| <- )/,
    contains: [
      hljs.C_NUMBER_MODE,
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      AT_COMMENT_MODE,
      STRING_REF,
      PREPROCESSOR,
      {
        className: "keyword",
        begin: /\bexternal (matrix|string|array|sparse matrix|struct|proc|keyword|fn)/
      },
      DEFINITION("proc keyword", ";"),
      DEFINITION("fn", "="),
      {
        beginKeywords: "for threadfor",
        end: /;/,
        // end: /\(/,
        relevance: 0,
        contains: [
          hljs.C_BLOCK_COMMENT_MODE,
          AT_COMMENT_MODE,
          FUNCTION_REF_PARAMS
        ]
      },
      {
        // custom method guard
        // excludes method names from keyword processing
        variants: [
          { begin: hljs.UNDERSCORE_IDENT_RE + "\\." + hljs.UNDERSCORE_IDENT_RE },
          { begin: hljs.UNDERSCORE_IDENT_RE + "\\s*=" }
        ],
        relevance: 0
      },
      FUNCTION_REF,
      STRUCT_TYPE
    ]
  };
}
function gcode(hljs) {
  const regex = hljs.regex;
  const GCODE_KEYWORDS = {
    $pattern: /[A-Z]+|%/,
    keyword: [
      // conditions
      "THEN",
      "ELSE",
      "ENDIF",
      "IF",
      // controls
      "GOTO",
      "DO",
      "WHILE",
      "WH",
      "END",
      "CALL",
      // scoping
      "SUB",
      "ENDSUB",
      // comparisons
      "EQ",
      "NE",
      "LT",
      "GT",
      "LE",
      "GE",
      "AND",
      "OR",
      "XOR",
      // start/end of program
      "%"
    ],
    built_in: [
      "ATAN",
      "ABS",
      "ACOS",
      "ASIN",
      "COS",
      "EXP",
      "FIX",
      "FUP",
      "ROUND",
      "LN",
      "SIN",
      "SQRT",
      "TAN",
      "EXISTS"
    ]
  };
  const LETTER_BOUNDARY_RE = /\b/;
  function LETTER_BOUNDARY_CALLBACK(matchdata, response) {
    if (matchdata.index === 0) {
      return;
    }
    const charBeforeMatch = matchdata.input[matchdata.index - 1];
    if (charBeforeMatch >= "0" && charBeforeMatch <= "9") {
      return;
    }
    if (charBeforeMatch === "_") {
      return;
    }
    response.ignoreMatch();
  }
  const NUMBER_RE = /[+-]?((\.\d+)|(\d+)(\.\d*)?)/;
  const GENERAL_MISC_FUNCTION_RE = /[GM]\s*\d+(\.\d+)?/;
  const TOOLS_RE = /T\s*\d+/;
  const SUBROUTINE_RE = /O\s*\d+/;
  const SUBROUTINE_NAMED_RE = /O<.+>/;
  const AXES_RE = /[ABCUVWXYZ]\s*/;
  const PARAMETERS_RE = /[FHIJKPQRS]\s*/;
  const GCODE_CODE = [
    // comments
    hljs.COMMENT(/\(/, /\)/),
    hljs.COMMENT(/;/, /$/),
    hljs.APOS_STRING_MODE,
    hljs.QUOTE_STRING_MODE,
    hljs.C_NUMBER_MODE,
    // gcodes
    {
      scope: "title.function",
      variants: [
        // G General functions: G0, G5.1, G5.2, …
        // M Misc functions: M0, M55.6, M199, …
        { match: regex.concat(LETTER_BOUNDARY_RE, GENERAL_MISC_FUNCTION_RE) },
        {
          begin: GENERAL_MISC_FUNCTION_RE,
          "on:begin": LETTER_BOUNDARY_CALLBACK
        },
        // T Tools
        { match: regex.concat(LETTER_BOUNDARY_RE, TOOLS_RE) },
        {
          begin: TOOLS_RE,
          "on:begin": LETTER_BOUNDARY_CALLBACK
        }
      ]
    },
    {
      scope: "symbol",
      variants: [
        // O Subroutine ID: O100, O110, …
        { match: regex.concat(LETTER_BOUNDARY_RE, SUBROUTINE_RE) },
        {
          begin: SUBROUTINE_RE,
          "on:begin": LETTER_BOUNDARY_CALLBACK
        },
        // O Subroutine name: O<some>, …
        { match: regex.concat(LETTER_BOUNDARY_RE, SUBROUTINE_NAMED_RE) },
        {
          begin: SUBROUTINE_NAMED_RE,
          "on:begin": LETTER_BOUNDARY_CALLBACK
        },
        // Checksum at end of line: *71, *199, …
        { match: /\*\s*\d+\s*$/ }
      ]
    },
    {
      scope: "operator",
      // N Line number: N1, N2, N1020, …
      match: /^N\s*\d+/
    },
    {
      scope: "variable",
      match: /-?#\s*\d+/
    },
    {
      scope: "property",
      // Physical axes,
      variants: [
        { match: regex.concat(LETTER_BOUNDARY_RE, AXES_RE, NUMBER_RE) },
        {
          begin: regex.concat(AXES_RE, NUMBER_RE),
          "on:begin": LETTER_BOUNDARY_CALLBACK
        }
      ]
    },
    {
      scope: "params",
      // Different types of parameters
      variants: [
        { match: regex.concat(LETTER_BOUNDARY_RE, PARAMETERS_RE, NUMBER_RE) },
        {
          begin: regex.concat(PARAMETERS_RE, NUMBER_RE),
          "on:begin": LETTER_BOUNDARY_CALLBACK
        }
      ]
    }
  ];
  return {
    name: "G-code (ISO 6983)",
    aliases: ["nc"],
    // Some implementations (CNC controls) of G-code are interoperable with uppercase and lowercase letters seamlessly.
    // However, most prefer all uppercase and uppercase is customary.
    case_insensitive: true,
    // TODO: post v12 with the use of look-behind this can be enabled
    disableAutodetect: true,
    keywords: GCODE_KEYWORDS,
    contains: GCODE_CODE
  };
}
function gherkin(hljs) {
  return {
    name: "Gherkin",
    aliases: ["feature"],
    keywords: "Feature Background Ability Business Need Scenario Scenarios Scenario Outline Scenario Template Examples Given And Then But When",
    contains: [
      {
        className: "symbol",
        begin: "\\*",
        relevance: 0
      },
      {
        className: "meta",
        begin: "@[^@\\s]+"
      },
      {
        begin: "\\|",
        end: "\\|\\w*$",
        contains: [
          {
            className: "string",
            begin: "[^|]+"
          }
        ]
      },
      {
        className: "variable",
        begin: "<",
        end: ">"
      },
      hljs.HASH_COMMENT_MODE,
      {
        className: "string",
        begin: '"""',
        end: '"""'
      },
      hljs.QUOTE_STRING_MODE
    ]
  };
}
function glsl(hljs) {
  return {
    name: "GLSL",
    keywords: {
      keyword: (
        // Statements
        "break continue discard do else for if return while switch case default attribute binding buffer ccw centroid centroid varying coherent column_major const cw depth_any depth_greater depth_less depth_unchanged early_fragment_tests equal_spacing flat fractional_even_spacing fractional_odd_spacing highp in index inout invariant invocations isolines layout line_strip lines lines_adjacency local_size_x local_size_y local_size_z location lowp max_vertices mediump noperspective offset origin_upper_left out packed patch pixel_center_integer point_mode points precise precision quads r11f_g11f_b10f r16 r16_snorm r16f r16i r16ui r32f r32i r32ui r8 r8_snorm r8i r8ui readonly restrict rg16 rg16_snorm rg16f rg16i rg16ui rg32f rg32i rg32ui rg8 rg8_snorm rg8i rg8ui rgb10_a2 rgb10_a2ui rgba16 rgba16_snorm rgba16f rgba16i rgba16ui rgba32f rgba32i rgba32ui rgba8 rgba8_snorm rgba8i rgba8ui row_major sample shared smooth std140 std430 stream triangle_strip triangles triangles_adjacency uniform varying vertices volatile writeonly"
      ),
      type: "atomic_uint bool bvec2 bvec3 bvec4 dmat2 dmat2x2 dmat2x3 dmat2x4 dmat3 dmat3x2 dmat3x3 dmat3x4 dmat4 dmat4x2 dmat4x3 dmat4x4 double dvec2 dvec3 dvec4 float iimage1D iimage1DArray iimage2D iimage2DArray iimage2DMS iimage2DMSArray iimage2DRect iimage3D iimageBuffer iimageCube iimageCubeArray image1D image1DArray image2D image2DArray image2DMS image2DMSArray image2DRect image3D imageBuffer imageCube imageCubeArray int isampler1D isampler1DArray isampler2D isampler2DArray isampler2DMS isampler2DMSArray isampler2DRect isampler3D isamplerBuffer isamplerCube isamplerCubeArray ivec2 ivec3 ivec4 mat2 mat2x2 mat2x3 mat2x4 mat3 mat3x2 mat3x3 mat3x4 mat4 mat4x2 mat4x3 mat4x4 sampler1D sampler1DArray sampler1DArrayShadow sampler1DShadow sampler2D sampler2DArray sampler2DArrayShadow sampler2DMS sampler2DMSArray sampler2DRect sampler2DRectShadow sampler2DShadow sampler3D samplerBuffer samplerCube samplerCubeArray samplerCubeArrayShadow samplerCubeShadow image1D uimage1DArray uimage2D uimage2DArray uimage2DMS uimage2DMSArray uimage2DRect uimage3D uimageBuffer uimageCube uimageCubeArray uint usampler1D usampler1DArray usampler2D usampler2DArray usampler2DMS usampler2DMSArray usampler2DRect usampler3D samplerBuffer usamplerCube usamplerCubeArray uvec2 uvec3 uvec4 vec2 vec3 vec4 void",
      built_in: (
        // Constants
        "gl_MaxAtomicCounterBindings gl_MaxAtomicCounterBufferSize gl_MaxClipDistances gl_MaxClipPlanes gl_MaxCombinedAtomicCounterBuffers gl_MaxCombinedAtomicCounters gl_MaxCombinedImageUniforms gl_MaxCombinedImageUnitsAndFragmentOutputs gl_MaxCombinedTextureImageUnits gl_MaxComputeAtomicCounterBuffers gl_MaxComputeAtomicCounters gl_MaxComputeImageUniforms gl_MaxComputeTextureImageUnits gl_MaxComputeUniformComponents gl_MaxComputeWorkGroupCount gl_MaxComputeWorkGroupSize gl_MaxDrawBuffers gl_MaxFragmentAtomicCounterBuffers gl_MaxFragmentAtomicCounters gl_MaxFragmentImageUniforms gl_MaxFragmentInputComponents gl_MaxFragmentInputVectors gl_MaxFragmentUniformComponents gl_MaxFragmentUniformVectors gl_MaxGeometryAtomicCounterBuffers gl_MaxGeometryAtomicCounters gl_MaxGeometryImageUniforms gl_MaxGeometryInputComponents gl_MaxGeometryOutputComponents gl_MaxGeometryOutputVertices gl_MaxGeometryTextureImageUnits gl_MaxGeometryTotalOutputComponents gl_MaxGeometryUniformComponents gl_MaxGeometryVaryingComponents gl_MaxImageSamples gl_MaxImageUnits gl_MaxLights gl_MaxPatchVertices gl_MaxProgramTexelOffset gl_MaxTessControlAtomicCounterBuffers gl_MaxTessControlAtomicCounters gl_MaxTessControlImageUniforms gl_MaxTessControlInputComponents gl_MaxTessControlOutputComponents gl_MaxTessControlTextureImageUnits gl_MaxTessControlTotalOutputComponents gl_MaxTessControlUniformComponents gl_MaxTessEvaluationAtomicCounterBuffers gl_MaxTessEvaluationAtomicCounters gl_MaxTessEvaluationImageUniforms gl_MaxTessEvaluationInputComponents gl_MaxTessEvaluationOutputComponents gl_MaxTessEvaluationTextureImageUnits gl_MaxTessEvaluationUniformComponents gl_MaxTessGenLevel gl_MaxTessPatchComponents gl_MaxTextureCoords gl_MaxTextureImageUnits gl_MaxTextureUnits gl_MaxVaryingComponents gl_MaxVaryingFloats gl_MaxVaryingVectors gl_MaxVertexAtomicCounterBuffers gl_MaxVertexAtomicCounters gl_MaxVertexAttribs gl_MaxVertexImageUniforms gl_MaxVertexOutputComponents gl_MaxVertexOutputVectors gl_MaxVertexTextureImageUnits gl_MaxVertexUniformComponents gl_MaxVertexUniformVectors gl_MaxViewports gl_MinProgramTexelOffset gl_BackColor gl_BackLightModelProduct gl_BackLightProduct gl_BackMaterial gl_BackSecondaryColor gl_ClipDistance gl_ClipPlane gl_ClipVertex gl_Color gl_DepthRange gl_EyePlaneQ gl_EyePlaneR gl_EyePlaneS gl_EyePlaneT gl_Fog gl_FogCoord gl_FogFragCoord gl_FragColor gl_FragCoord gl_FragData gl_FragDepth gl_FrontColor gl_FrontFacing gl_FrontLightModelProduct gl_FrontLightProduct gl_FrontMaterial gl_FrontSecondaryColor gl_GlobalInvocationID gl_InstanceID gl_InvocationID gl_Layer gl_LightModel gl_LightSource gl_LocalInvocationID gl_LocalInvocationIndex gl_ModelViewMatrix gl_ModelViewMatrixInverse gl_ModelViewMatrixInverseTranspose gl_ModelViewMatrixTranspose gl_ModelViewProjectionMatrix gl_ModelViewProjectionMatrixInverse gl_ModelViewProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixTranspose gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_Normal gl_NormalMatrix gl_NormalScale gl_NumSamples gl_NumWorkGroups gl_ObjectPlaneQ gl_ObjectPlaneR gl_ObjectPlaneS gl_ObjectPlaneT gl_PatchVerticesIn gl_Point gl_PointCoord gl_PointSize gl_Position gl_PrimitiveID gl_PrimitiveIDIn gl_ProjectionMatrix gl_ProjectionMatrixInverse gl_ProjectionMatrixInverseTranspose gl_ProjectionMatrixTranspose gl_SampleID gl_SampleMask gl_SampleMaskIn gl_SamplePosition gl_SecondaryColor gl_TessCoord gl_TessLevelInner gl_TessLevelOuter gl_TexCoord gl_TextureEnvColor gl_TextureMatrix gl_TextureMatrixInverse gl_TextureMatrixInverseTranspose gl_TextureMatrixTranspose gl_Vertex gl_VertexID gl_ViewportIndex gl_WorkGroupID gl_WorkGroupSize gl_in gl_out EmitStreamVertex EmitVertex EndPrimitive EndStreamPrimitive abs acos acosh all any asin asinh atan atanh atomicAdd atomicAnd atomicCompSwap atomicCounter atomicCounterDecrement atomicCounterIncrement atomicExchange atomicMax atomicMin atomicOr atomicXor barrier bitCount bitfieldExtract bitfieldInsert bitfieldReverse ceil clamp cos cosh cross dFdx dFdy degrees determinant distance dot equal exp exp2 faceforward findLSB findMSB floatBitsToInt floatBitsToUint floor fma fract frexp ftransform fwidth greaterThan greaterThanEqual groupMemoryBarrier imageAtomicAdd imageAtomicAnd imageAtomicCompSwap imageAtomicExchange imageAtomicMax imageAtomicMin imageAtomicOr imageAtomicXor imageLoad imageSize imageStore imulExtended intBitsToFloat interpolateAtCentroid interpolateAtOffset interpolateAtSample inverse inversesqrt isinf isnan ldexp length lessThan lessThanEqual log log2 matrixCompMult max memoryBarrier memoryBarrierAtomicCounter memoryBarrierBuffer memoryBarrierImage memoryBarrierShared min mix mod modf noise1 noise2 noise3 noise4 normalize not notEqual outerProduct packDouble2x32 packHalf2x16 packSnorm2x16 packSnorm4x8 packUnorm2x16 packUnorm4x8 pow radians reflect refract round roundEven shadow1D shadow1DLod shadow1DProj shadow1DProjLod shadow2D shadow2DLod shadow2DProj shadow2DProjLod sign sin sinh smoothstep sqrt step tan tanh texelFetch texelFetchOffset texture texture1D texture1DLod texture1DProj texture1DProjLod texture2D texture2DLod texture2DProj texture2DProjLod texture3D texture3DLod texture3DProj texture3DProjLod textureCube textureCubeLod textureGather textureGatherOffset textureGatherOffsets textureGrad textureGradOffset textureLod textureLodOffset textureOffset textureProj textureProjGrad textureProjGradOffset textureProjLod textureProjLodOffset textureProjOffset textureQueryLevels textureQueryLod textureSize transpose trunc uaddCarry uintBitsToFloat umulExtended unpackDouble2x32 unpackHalf2x16 unpackSnorm2x16 unpackSnorm4x8 unpackUnorm2x16 unpackUnorm4x8 usubBorrow"
      ),
      literal: "true false"
    },
    illegal: '"',
    contains: [
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.C_NUMBER_MODE,
      {
        className: "meta",
        begin: "#",
        end: "$"
      }
    ]
  };
}
function gml(hljs) {
  const KEYWORDS2 = [
    "#endregion",
    "#macro",
    "#region",
    "and",
    "begin",
    "break",
    "case",
    "constructor",
    "continue",
    "default",
    "delete",
    "div",
    "do",
    "else",
    "end",
    "enum",
    "exit",
    "for",
    "function",
    "globalvar",
    "if",
    "mod",
    "new",
    "not",
    "or",
    "repeat",
    "return",
    "static",
    "switch",
    "then",
    "until",
    "var",
    "while",
    "with",
    "xor"
  ];
  const BUILT_INS2 = [
    "abs",
    "alarm_get",
    "alarm_set",
    "angle_difference",
    "animcurve_channel_evaluate",
    "animcurve_channel_new",
    "animcurve_create",
    "animcurve_destroy",
    "animcurve_exists",
    "animcurve_get",
    "animcurve_get_channel",
    "animcurve_get_channel_index",
    "animcurve_point_new",
    "ansi_char",
    "application_get_position",
    "application_surface_draw_enable",
    "application_surface_enable",
    "application_surface_is_enabled",
    "arccos",
    "arcsin",
    "arctan",
    "arctan2",
    "array_all",
    "array_any",
    "array_concat",
    "array_contains",
    "array_contains_ext",
    "array_copy",
    "array_copy_while",
    "array_create",
    "array_create_ext",
    "array_delete",
    "array_equals",
    "array_filter",
    "array_filter_ext",
    "array_find_index",
    "array_first",
    "array_foreach",
    "array_get",
    "array_get_index",
    "array_insert",
    "array_intersection",
    "array_last",
    "array_length",
    "array_map",
    "array_map_ext",
    "array_pop",
    "array_push",
    "array_reduce",
    "array_resize",
    "array_reverse",
    "array_reverse_ext",
    "array_set",
    "array_shuffle",
    "array_shuffle_ext",
    "array_sort",
    "array_union",
    "array_unique",
    "array_unique_ext",
    "asset_add_tags",
    "asset_clear_tags",
    "asset_get_ids",
    "asset_get_index",
    "asset_get_tags",
    "asset_get_type",
    "asset_has_any_tag",
    "asset_has_tags",
    "asset_remove_tags",
    "audio_bus_clear_emitters",
    "audio_bus_create",
    "audio_bus_get_emitters",
    "audio_channel_num",
    "audio_create_buffer_sound",
    "audio_create_play_queue",
    "audio_create_stream",
    "audio_create_sync_group",
    "audio_debug",
    "audio_destroy_stream",
    "audio_destroy_sync_group",
    "audio_effect_create",
    "audio_emitter_bus",
    "audio_emitter_create",
    "audio_emitter_exists",
    "audio_emitter_falloff",
    "audio_emitter_free",
    "audio_emitter_gain",
    "audio_emitter_get_bus",
    "audio_emitter_get_gain",
    "audio_emitter_get_listener_mask",
    "audio_emitter_get_pitch",
    "audio_emitter_get_vx",
    "audio_emitter_get_vy",
    "audio_emitter_get_vz",
    "audio_emitter_get_x",
    "audio_emitter_get_y",
    "audio_emitter_get_z",
    "audio_emitter_pitch",
    "audio_emitter_position",
    "audio_emitter_set_listener_mask",
    "audio_emitter_velocity",
    "audio_exists",
    "audio_falloff_set_model",
    "audio_free_buffer_sound",
    "audio_free_play_queue",
    "audio_get_listener_count",
    "audio_get_listener_info",
    "audio_get_listener_mask",
    "audio_get_master_gain",
    "audio_get_name",
    "audio_get_recorder_count",
    "audio_get_recorder_info",
    "audio_get_type",
    "audio_group_get_assets",
    "audio_group_get_gain",
    "audio_group_is_loaded",
    "audio_group_load",
    "audio_group_load_progress",
    "audio_group_name",
    "audio_group_set_gain",
    "audio_group_stop_all",
    "audio_group_unload",
    "audio_is_paused",
    "audio_is_playing",
    "audio_listener_get_data",
    "audio_listener_orientation",
    "audio_listener_position",
    "audio_listener_set_orientation",
    "audio_listener_set_position",
    "audio_listener_set_velocity",
    "audio_listener_velocity",
    "audio_master_gain",
    "audio_pause_all",
    "audio_pause_sound",
    "audio_pause_sync_group",
    "audio_play_in_sync_group",
    "audio_play_sound",
    "audio_play_sound_at",
    "audio_play_sound_ext",
    "audio_play_sound_on",
    "audio_queue_sound",
    "audio_resume_all",
    "audio_resume_sound",
    "audio_resume_sync_group",
    "audio_set_listener_mask",
    "audio_set_master_gain",
    "audio_sound_gain",
    "audio_sound_get_audio_group",
    "audio_sound_get_gain",
    "audio_sound_get_listener_mask",
    "audio_sound_get_loop",
    "audio_sound_get_loop_end",
    "audio_sound_get_loop_start",
    "audio_sound_get_pitch",
    "audio_sound_get_track_position",
    "audio_sound_is_playable",
    "audio_sound_length",
    "audio_sound_loop",
    "audio_sound_loop_end",
    "audio_sound_loop_start",
    "audio_sound_pitch",
    "audio_sound_set_listener_mask",
    "audio_sound_set_track_position",
    "audio_start_recording",
    "audio_start_sync_group",
    "audio_stop_all",
    "audio_stop_recording",
    "audio_stop_sound",
    "audio_stop_sync_group",
    "audio_sync_group_debug",
    "audio_sync_group_get_track_pos",
    "audio_sync_group_is_paused",
    "audio_sync_group_is_playing",
    "audio_system_is_available",
    "audio_system_is_initialised",
    "base64_decode",
    "base64_encode",
    "bool",
    "browser_input_capture",
    "buffer_async_group_begin",
    "buffer_async_group_end",
    "buffer_async_group_option",
    "buffer_base64_decode",
    "buffer_base64_decode_ext",
    "buffer_base64_encode",
    "buffer_compress",
    "buffer_copy",
    "buffer_copy_from_vertex_buffer",
    "buffer_copy_stride",
    "buffer_crc32",
    "buffer_create",
    "buffer_create_from_vertex_buffer",
    "buffer_create_from_vertex_buffer_ext",
    "buffer_decompress",
    "buffer_delete",
    "buffer_exists",
    "buffer_fill",
    "buffer_get_address",
    "buffer_get_alignment",
    "buffer_get_size",
    "buffer_get_surface",
    "buffer_get_type",
    "buffer_load",
    "buffer_load_async",
    "buffer_load_ext",
    "buffer_load_partial",
    "buffer_md5",
    "buffer_peek",
    "buffer_poke",
    "buffer_read",
    "buffer_resize",
    "buffer_save",
    "buffer_save_async",
    "buffer_save_ext",
    "buffer_seek",
    "buffer_set_surface",
    "buffer_set_used_size",
    "buffer_sha1",
    "buffer_sizeof",
    "buffer_tell",
    "buffer_write",
    "call_cancel",
    "call_later",
    "camera_apply",
    "camera_copy_transforms",
    "camera_create",
    "camera_create_view",
    "camera_destroy",
    "camera_get_active",
    "camera_get_begin_script",
    "camera_get_default",
    "camera_get_end_script",
    "camera_get_proj_mat",
    "camera_get_update_script",
    "camera_get_view_angle",
    "camera_get_view_border_x",
    "camera_get_view_border_y",
    "camera_get_view_height",
    "camera_get_view_mat",
    "camera_get_view_speed_x",
    "camera_get_view_speed_y",
    "camera_get_view_target",
    "camera_get_view_width",
    "camera_get_view_x",
    "camera_get_view_y",
    "camera_set_begin_script",
    "camera_set_default",
    "camera_set_end_script",
    "camera_set_proj_mat",
    "camera_set_update_script",
    "camera_set_view_angle",
    "camera_set_view_border",
    "camera_set_view_mat",
    "camera_set_view_pos",
    "camera_set_view_size",
    "camera_set_view_speed",
    "camera_set_view_target",
    "ceil",
    "choose",
    "chr",
    "clamp",
    "clickable_add",
    "clickable_add_ext",
    "clickable_change",
    "clickable_change_ext",
    "clickable_delete",
    "clickable_exists",
    "clickable_set_style",
    "clipboard_get_text",
    "clipboard_has_text",
    "clipboard_set_text",
    "cloud_file_save",
    "cloud_string_save",
    "cloud_synchronise",
    "code_is_compiled",
    "collision_circle",
    "collision_circle_list",
    "collision_ellipse",
    "collision_ellipse_list",
    "collision_line",
    "collision_line_list",
    "collision_point",
    "collision_point_list",
    "collision_rectangle",
    "collision_rectangle_list",
    "color_get_blue",
    "color_get_green",
    "color_get_hue",
    "color_get_red",
    "color_get_saturation",
    "color_get_value",
    "colour_get_blue",
    "colour_get_green",
    "colour_get_hue",
    "colour_get_red",
    "colour_get_saturation",
    "colour_get_value",
    "cos",
    "darccos",
    "darcsin",
    "darctan",
    "darctan2",
    "date_compare_date",
    "date_compare_datetime",
    "date_compare_time",
    "date_create_datetime",
    "date_current_datetime",
    "date_date_of",
    "date_date_string",
    "date_datetime_string",
    "date_day_span",
    "date_days_in_month",
    "date_days_in_year",
    "date_get_day",
    "date_get_day_of_year",
    "date_get_hour",
    "date_get_hour_of_year",
    "date_get_minute",
    "date_get_minute_of_year",
    "date_get_month",
    "date_get_second",
    "date_get_second_of_year",
    "date_get_timezone",
    "date_get_week",
    "date_get_weekday",
    "date_get_year",
    "date_hour_span",
    "date_inc_day",
    "date_inc_hour",
    "date_inc_minute",
    "date_inc_month",
    "date_inc_second",
    "date_inc_week",
    "date_inc_year",
    "date_is_today",
    "date_leap_year",
    "date_minute_span",
    "date_month_span",
    "date_second_span",
    "date_set_timezone",
    "date_time_of",
    "date_time_string",
    "date_valid_datetime",
    "date_week_span",
    "date_year_span",
    "db_to_lin",
    "dbg_add_font_glyphs",
    "dbg_button",
    "dbg_checkbox",
    "dbg_color",
    "dbg_colour",
    "dbg_drop_down",
    "dbg_same_line",
    "dbg_section",
    "dbg_section_delete",
    "dbg_section_exists",
    "dbg_slider",
    "dbg_slider_int",
    "dbg_sprite",
    "dbg_text",
    "dbg_text_input",
    "dbg_view",
    "dbg_view_delete",
    "dbg_view_exists",
    "dbg_watch",
    "dcos",
    "debug_event",
    "debug_get_callstack",
    "degtorad",
    "device_get_tilt_x",
    "device_get_tilt_y",
    "device_get_tilt_z",
    "device_is_keypad_open",
    "device_mouse_check_button",
    "device_mouse_check_button_pressed",
    "device_mouse_check_button_released",
    "device_mouse_dbclick_enable",
    "device_mouse_raw_x",
    "device_mouse_raw_y",
    "device_mouse_x",
    "device_mouse_x_to_gui",
    "device_mouse_y",
    "device_mouse_y_to_gui",
    "directory_create",
    "directory_destroy",
    "directory_exists",
    "display_get_dpi_x",
    "display_get_dpi_y",
    "display_get_frequency",
    "display_get_gui_height",
    "display_get_gui_width",
    "display_get_height",
    "display_get_orientation",
    "display_get_sleep_margin",
    "display_get_timing_method",
    "display_get_width",
    "display_mouse_get_x",
    "display_mouse_get_y",
    "display_mouse_set",
    "display_reset",
    "display_set_gui_maximise",
    "display_set_gui_maximize",
    "display_set_gui_size",
    "display_set_sleep_margin",
    "display_set_timing_method",
    "display_set_ui_visibility",
    "distance_to_object",
    "distance_to_point",
    "dot_product",
    "dot_product_3d",
    "dot_product_3d_normalised",
    "dot_product_3d_normalized",
    "dot_product_normalised",
    "dot_product_normalized",
    "draw_arrow",
    "draw_button",
    "draw_circle",
    "draw_circle_color",
    "draw_circle_colour",
    "draw_clear",
    "draw_clear_alpha",
    "draw_ellipse",
    "draw_ellipse_color",
    "draw_ellipse_colour",
    "draw_enable_drawevent",
    "draw_enable_skeleton_blendmodes",
    "draw_enable_swf_aa",
    "draw_flush",
    "draw_get_alpha",
    "draw_get_color",
    "draw_get_colour",
    "draw_get_enable_skeleton_blendmodes",
    "draw_get_font",
    "draw_get_halign",
    "draw_get_lighting",
    "draw_get_swf_aa_level",
    "draw_get_valign",
    "draw_getpixel",
    "draw_getpixel_ext",
    "draw_healthbar",
    "draw_highscore",
    "draw_light_define_ambient",
    "draw_light_define_direction",
    "draw_light_define_point",
    "draw_light_enable",
    "draw_light_get",
    "draw_light_get_ambient",
    "draw_line",
    "draw_line_color",
    "draw_line_colour",
    "draw_line_width",
    "draw_line_width_color",
    "draw_line_width_colour",
    "draw_path",
    "draw_point",
    "draw_point_color",
    "draw_point_colour",
    "draw_primitive_begin",
    "draw_primitive_begin_texture",
    "draw_primitive_end",
    "draw_rectangle",
    "draw_rectangle_color",
    "draw_rectangle_colour",
    "draw_roundrect",
    "draw_roundrect_color",
    "draw_roundrect_color_ext",
    "draw_roundrect_colour",
    "draw_roundrect_colour_ext",
    "draw_roundrect_ext",
    "draw_self",
    "draw_set_alpha",
    "draw_set_circle_precision",
    "draw_set_color",
    "draw_set_colour",
    "draw_set_font",
    "draw_set_halign",
    "draw_set_lighting",
    "draw_set_swf_aa_level",
    "draw_set_valign",
    "draw_skeleton",
    "draw_skeleton_collision",
    "draw_skeleton_instance",
    "draw_skeleton_time",
    "draw_sprite",
    "draw_sprite_ext",
    "draw_sprite_general",
    "draw_sprite_part",
    "draw_sprite_part_ext",
    "draw_sprite_pos",
    "draw_sprite_stretched",
    "draw_sprite_stretched_ext",
    "draw_sprite_tiled",
    "draw_sprite_tiled_ext",
    "draw_surface",
    "draw_surface_ext",
    "draw_surface_general",
    "draw_surface_part",
    "draw_surface_part_ext",
    "draw_surface_stretched",
    "draw_surface_stretched_ext",
    "draw_surface_tiled",
    "draw_surface_tiled_ext",
    "draw_text",
    "draw_text_color",
    "draw_text_colour",
    "draw_text_ext",
    "draw_text_ext_color",
    "draw_text_ext_colour",
    "draw_text_ext_transformed",
    "draw_text_ext_transformed_color",
    "draw_text_ext_transformed_colour",
    "draw_text_transformed",
    "draw_text_transformed_color",
    "draw_text_transformed_colour",
    "draw_texture_flush",
    "draw_tile",
    "draw_tilemap",
    "draw_triangle",
    "draw_triangle_color",
    "draw_triangle_colour",
    "draw_vertex",
    "draw_vertex_color",
    "draw_vertex_colour",
    "draw_vertex_texture",
    "draw_vertex_texture_color",
    "draw_vertex_texture_colour",
    "ds_exists",
    "ds_grid_add",
    "ds_grid_add_disk",
    "ds_grid_add_grid_region",
    "ds_grid_add_region",
    "ds_grid_clear",
    "ds_grid_copy",
    "ds_grid_create",
    "ds_grid_destroy",
    "ds_grid_get",
    "ds_grid_get_disk_max",
    "ds_grid_get_disk_mean",
    "ds_grid_get_disk_min",
    "ds_grid_get_disk_sum",
    "ds_grid_get_max",
    "ds_grid_get_mean",
    "ds_grid_get_min",
    "ds_grid_get_sum",
    "ds_grid_height",
    "ds_grid_multiply",
    "ds_grid_multiply_disk",
    "ds_grid_multiply_grid_region",
    "ds_grid_multiply_region",
    "ds_grid_read",
    "ds_grid_resize",
    "ds_grid_set",
    "ds_grid_set_disk",
    "ds_grid_set_grid_region",
    "ds_grid_set_region",
    "ds_grid_shuffle",
    "ds_grid_sort",
    "ds_grid_to_mp_grid",
    "ds_grid_value_disk_exists",
    "ds_grid_value_disk_x",
    "ds_grid_value_disk_y",
    "ds_grid_value_exists",
    "ds_grid_value_x",
    "ds_grid_value_y",
    "ds_grid_width",
    "ds_grid_write",
    "ds_list_add",
    "ds_list_clear",
    "ds_list_copy",
    "ds_list_create",
    "ds_list_delete",
    "ds_list_destroy",
    "ds_list_empty",
    "ds_list_find_index",
    "ds_list_find_value",
    "ds_list_insert",
    "ds_list_is_list",
    "ds_list_is_map",
    "ds_list_mark_as_list",
    "ds_list_mark_as_map",
    "ds_list_read",
    "ds_list_replace",
    "ds_list_set",
    "ds_list_shuffle",
    "ds_list_size",
    "ds_list_sort",
    "ds_list_write",
    "ds_map_add",
    "ds_map_add_list",
    "ds_map_add_map",
    "ds_map_clear",
    "ds_map_copy",
    "ds_map_create",
    "ds_map_delete",
    "ds_map_destroy",
    "ds_map_empty",
    "ds_map_exists",
    "ds_map_find_first",
    "ds_map_find_last",
    "ds_map_find_next",
    "ds_map_find_previous",
    "ds_map_find_value",
    "ds_map_is_list",
    "ds_map_is_map",
    "ds_map_keys_to_array",
    "ds_map_read",
    "ds_map_replace",
    "ds_map_replace_list",
    "ds_map_replace_map",
    "ds_map_secure_load",
    "ds_map_secure_load_buffer",
    "ds_map_secure_save",
    "ds_map_secure_save_buffer",
    "ds_map_set",
    "ds_map_size",
    "ds_map_values_to_array",
    "ds_map_write",
    "ds_priority_add",
    "ds_priority_change_priority",
    "ds_priority_clear",
    "ds_priority_copy",
    "ds_priority_create",
    "ds_priority_delete_max",
    "ds_priority_delete_min",
    "ds_priority_delete_value",
    "ds_priority_destroy",
    "ds_priority_empty",
    "ds_priority_find_max",
    "ds_priority_find_min",
    "ds_priority_find_priority",
    "ds_priority_read",
    "ds_priority_size",
    "ds_priority_write",
    "ds_queue_clear",
    "ds_queue_copy",
    "ds_queue_create",
    "ds_queue_dequeue",
    "ds_queue_destroy",
    "ds_queue_empty",
    "ds_queue_enqueue",
    "ds_queue_head",
    "ds_queue_read",
    "ds_queue_size",
    "ds_queue_tail",
    "ds_queue_write",
    "ds_set_precision",
    "ds_stack_clear",
    "ds_stack_copy",
    "ds_stack_create",
    "ds_stack_destroy",
    "ds_stack_empty",
    "ds_stack_pop",
    "ds_stack_push",
    "ds_stack_read",
    "ds_stack_size",
    "ds_stack_top",
    "ds_stack_write",
    "dsin",
    "dtan",
    "effect_clear",
    "effect_create_above",
    "effect_create_below",
    "effect_create_depth",
    "effect_create_layer",
    "environment_get_variable",
    "event_inherited",
    "event_perform",
    "event_perform_async",
    "event_perform_object",
    "event_user",
    "exception_unhandled_handler",
    "exp",
    "extension_exists",
    "extension_get_option_count",
    "extension_get_option_names",
    "extension_get_option_value",
    "extension_get_options",
    "extension_get_version",
    "external_call",
    "external_define",
    "external_free",
    "file_attributes",
    "file_bin_close",
    "file_bin_open",
    "file_bin_position",
    "file_bin_read_byte",
    "file_bin_rewrite",
    "file_bin_seek",
    "file_bin_size",
    "file_bin_write_byte",
    "file_copy",
    "file_delete",
    "file_exists",
    "file_find_close",
    "file_find_first",
    "file_find_next",
    "file_rename",
    "file_text_close",
    "file_text_eof",
    "file_text_eoln",
    "file_text_open_append",
    "file_text_open_from_string",
    "file_text_open_read",
    "file_text_open_write",
    "file_text_read_real",
    "file_text_read_string",
    "file_text_readln",
    "file_text_write_real",
    "file_text_write_string",
    "file_text_writeln",
    "filename_change_ext",
    "filename_dir",
    "filename_drive",
    "filename_ext",
    "filename_name",
    "filename_path",
    "floor",
    "font_add",
    "font_add_enable_aa",
    "font_add_get_enable_aa",
    "font_add_sprite",
    "font_add_sprite_ext",
    "font_cache_glyph",
    "font_delete",
    "font_enable_effects",
    "font_enable_sdf",
    "font_exists",
    "font_get_bold",
    "font_get_first",
    "font_get_fontname",
    "font_get_info",
    "font_get_italic",
    "font_get_last",
    "font_get_name",
    "font_get_sdf_enabled",
    "font_get_sdf_spread",
    "font_get_size",
    "font_get_texture",
    "font_get_uvs",
    "font_replace_sprite",
    "font_replace_sprite_ext",
    "font_sdf_spread",
    "font_set_cache_size",
    "frac",
    "fx_create",
    "fx_get_name",
    "fx_get_parameter",
    "fx_get_parameter_names",
    "fx_get_parameters",
    "fx_get_single_layer",
    "fx_set_parameter",
    "fx_set_parameters",
    "fx_set_single_layer",
    "game_change",
    "game_end",
    "game_get_speed",
    "game_load",
    "game_load_buffer",
    "game_restart",
    "game_save",
    "game_save_buffer",
    "game_set_speed",
    "gamepad_axis_count",
    "gamepad_axis_value",
    "gamepad_button_check",
    "gamepad_button_check_pressed",
    "gamepad_button_check_released",
    "gamepad_button_count",
    "gamepad_button_value",
    "gamepad_get_axis_deadzone",
    "gamepad_get_button_threshold",
    "gamepad_get_description",
    "gamepad_get_device_count",
    "gamepad_get_guid",
    "gamepad_get_mapping",
    "gamepad_get_option",
    "gamepad_hat_count",
    "gamepad_hat_value",
    "gamepad_is_connected",
    "gamepad_is_supported",
    "gamepad_remove_mapping",
    "gamepad_set_axis_deadzone",
    "gamepad_set_button_threshold",
    "gamepad_set_color",
    "gamepad_set_colour",
    "gamepad_set_option",
    "gamepad_set_vibration",
    "gamepad_test_mapping",
    "gc_collect",
    "gc_enable",
    "gc_get_stats",
    "gc_get_target_frame_time",
    "gc_is_enabled",
    "gc_target_frame_time",
    "gesture_double_tap_distance",
    "gesture_double_tap_time",
    "gesture_drag_distance",
    "gesture_drag_time",
    "gesture_flick_speed",
    "gesture_get_double_tap_distance",
    "gesture_get_double_tap_time",
    "gesture_get_drag_distance",
    "gesture_get_drag_time",
    "gesture_get_flick_speed",
    "gesture_get_pinch_angle_away",
    "gesture_get_pinch_angle_towards",
    "gesture_get_pinch_distance",
    "gesture_get_rotate_angle",
    "gesture_get_rotate_time",
    "gesture_get_tap_count",
    "gesture_pinch_angle_away",
    "gesture_pinch_angle_towards",
    "gesture_pinch_distance",
    "gesture_rotate_angle",
    "gesture_rotate_time",
    "gesture_tap_count",
    "get_integer",
    "get_integer_async",
    "get_login_async",
    "get_open_filename",
    "get_open_filename_ext",
    "get_save_filename",
    "get_save_filename_ext",
    "get_string",
    "get_string_async",
    "get_timer",
    "gif_add_surface",
    "gif_open",
    "gif_save",
    "gif_save_buffer",
    "gml_pragma",
    "gml_release_mode",
    "gpu_get_alphatestenable",
    "gpu_get_alphatestref",
    "gpu_get_blendenable",
    "gpu_get_blendmode",
    "gpu_get_blendmode_dest",
    "gpu_get_blendmode_destalpha",
    "gpu_get_blendmode_ext",
    "gpu_get_blendmode_ext_sepalpha",
    "gpu_get_blendmode_src",
    "gpu_get_blendmode_srcalpha",
    "gpu_get_colorwriteenable",
    "gpu_get_colourwriteenable",
    "gpu_get_cullmode",
    "gpu_get_depth",
    "gpu_get_fog",
    "gpu_get_state",
    "gpu_get_tex_filter",
    "gpu_get_tex_filter_ext",
    "gpu_get_tex_max_aniso",
    "gpu_get_tex_max_aniso_ext",
    "gpu_get_tex_max_mip",
    "gpu_get_tex_max_mip_ext",
    "gpu_get_tex_min_mip",
    "gpu_get_tex_min_mip_ext",
    "gpu_get_tex_mip_bias",
    "gpu_get_tex_mip_bias_ext",
    "gpu_get_tex_mip_enable",
    "gpu_get_tex_mip_enable_ext",
    "gpu_get_tex_mip_filter",
    "gpu_get_tex_mip_filter_ext",
    "gpu_get_tex_repeat",
    "gpu_get_tex_repeat_ext",
    "gpu_get_texfilter",
    "gpu_get_texfilter_ext",
    "gpu_get_texrepeat",
    "gpu_get_texrepeat_ext",
    "gpu_get_zfunc",
    "gpu_get_ztestenable",
    "gpu_get_zwriteenable",
    "gpu_pop_state",
    "gpu_push_state",
    "gpu_set_alphatestenable",
    "gpu_set_alphatestref",
    "gpu_set_blendenable",
    "gpu_set_blendmode",
    "gpu_set_blendmode_ext",
    "gpu_set_blendmode_ext_sepalpha",
    "gpu_set_colorwriteenable",
    "gpu_set_colourwriteenable",
    "gpu_set_cullmode",
    "gpu_set_depth",
    "gpu_set_fog",
    "gpu_set_state",
    "gpu_set_tex_filter",
    "gpu_set_tex_filter_ext",
    "gpu_set_tex_max_aniso",
    "gpu_set_tex_max_aniso_ext",
    "gpu_set_tex_max_mip",
    "gpu_set_tex_max_mip_ext",
    "gpu_set_tex_min_mip",
    "gpu_set_tex_min_mip_ext",
    "gpu_set_tex_mip_bias",
    "gpu_set_tex_mip_bias_ext",
    "gpu_set_tex_mip_enable",
    "gpu_set_tex_mip_enable_ext",
    "gpu_set_tex_mip_filter",
    "gpu_set_tex_mip_filter_ext",
    "gpu_set_tex_repeat",
    "gpu_set_tex_repeat_ext",
    "gpu_set_texfilter",
    "gpu_set_texfilter_ext",
    "gpu_set_texrepeat",
    "gpu_set_texrepeat_ext",
    "gpu_set_zfunc",
    "gpu_set_ztestenable",
    "gpu_set_zwriteenable",
    "handle_parse",
    "highscore_add",
    "highscore_clear",
    "highscore_name",
    "highscore_value",
    "http_get",
    "http_get_file",
    "http_get_request_crossorigin",
    "http_post_string",
    "http_request",
    "http_set_request_crossorigin",
    "iap_acquire",
    "iap_activate",
    "iap_consume",
    "iap_enumerate_products",
    "iap_product_details",
    "iap_purchase_details",
    "iap_restore_all",
    "iap_status",
    "ini_close",
    "ini_key_delete",
    "ini_key_exists",
    "ini_open",
    "ini_open_from_string",
    "ini_read_real",
    "ini_read_string",
    "ini_section_delete",
    "ini_section_exists",
    "ini_write_real",
    "ini_write_string",
    "instance_activate_all",
    "instance_activate_layer",
    "instance_activate_object",
    "instance_activate_region",
    "instance_change",
    "instance_copy",
    "instance_create_depth",
    "instance_create_layer",
    "instance_deactivate_all",
    "instance_deactivate_layer",
    "instance_deactivate_object",
    "instance_deactivate_region",
    "instance_destroy",
    "instance_exists",
    "instance_find",
    "instance_furthest",
    "instance_id_get",
    "instance_nearest",
    "instance_number",
    "instance_place",
    "instance_place_list",
    "instance_position",
    "instance_position_list",
    "instanceof",
    "int64",
    "io_clear",
    "irandom",
    "irandom_range",
    "is_array",
    "is_bool",
    "is_callable",
    "is_debug_overlay_open",
    "is_handle",
    "is_infinity",
    "is_instanceof",
    "is_int32",
    "is_int64",
    "is_keyboard_used_debug_overlay",
    "is_method",
    "is_mouse_over_debug_overlay",
    "is_nan",
    "is_numeric",
    "is_ptr",
    "is_real",
    "is_string",
    "is_struct",
    "is_undefined",
    "json_decode",
    "json_encode",
    "json_parse",
    "json_stringify",
    "keyboard_check",
    "keyboard_check_direct",
    "keyboard_check_pressed",
    "keyboard_check_released",
    "keyboard_clear",
    "keyboard_get_map",
    "keyboard_get_numlock",
    "keyboard_key_press",
    "keyboard_key_release",
    "keyboard_set_map",
    "keyboard_set_numlock",
    "keyboard_unset_map",
    "keyboard_virtual_height",
    "keyboard_virtual_hide",
    "keyboard_virtual_show",
    "keyboard_virtual_status",
    "layer_add_instance",
    "layer_background_alpha",
    "layer_background_blend",
    "layer_background_change",
    "layer_background_create",
    "layer_background_destroy",
    "layer_background_exists",
    "layer_background_get_alpha",
    "layer_background_get_blend",
    "layer_background_get_htiled",
    "layer_background_get_id",
    "layer_background_get_index",
    "layer_background_get_speed",
    "layer_background_get_sprite",
    "layer_background_get_stretch",
    "layer_background_get_visible",
    "layer_background_get_vtiled",
    "layer_background_get_xscale",
    "layer_background_get_yscale",
    "layer_background_htiled",
    "layer_background_index",
    "layer_background_speed",
    "layer_background_sprite",
    "layer_background_stretch",
    "layer_background_visible",
    "layer_background_vtiled",
    "layer_background_xscale",
    "layer_background_yscale",
    "layer_clear_fx",
    "layer_create",
    "layer_depth",
    "layer_destroy",
    "layer_destroy_instances",
    "layer_element_move",
    "layer_enable_fx",
    "layer_exists",
    "layer_force_draw_depth",
    "layer_fx_is_enabled",
    "layer_get_all",
    "layer_get_all_elements",
    "layer_get_depth",
    "layer_get_element_layer",
    "layer_get_element_type",
    "layer_get_forced_depth",
    "layer_get_fx",
    "layer_get_hspeed",
    "layer_get_id",
    "layer_get_id_at_depth",
    "layer_get_name",
    "layer_get_script_begin",
    "layer_get_script_end",
    "layer_get_shader",
    "layer_get_target_room",
    "layer_get_visible",
    "layer_get_vspeed",
    "layer_get_x",
    "layer_get_y",
    "layer_has_instance",
    "layer_hspeed",
    "layer_instance_get_instance",
    "layer_is_draw_depth_forced",
    "layer_reset_target_room",
    "layer_script_begin",
    "layer_script_end",
    "layer_sequence_angle",
    "layer_sequence_create",
    "layer_sequence_destroy",
    "layer_sequence_exists",
    "layer_sequence_get_angle",
    "layer_sequence_get_headdir",
    "layer_sequence_get_headpos",
    "layer_sequence_get_instance",
    "layer_sequence_get_length",
    "layer_sequence_get_sequence",
    "layer_sequence_get_speedscale",
    "layer_sequence_get_x",
    "layer_sequence_get_xscale",
    "layer_sequence_get_y",
    "layer_sequence_get_yscale",
    "layer_sequence_headdir",
    "layer_sequence_headpos",
    "layer_sequence_is_finished",
    "layer_sequence_is_paused",
    "layer_sequence_pause",
    "layer_sequence_play",
    "layer_sequence_speedscale",
    "layer_sequence_x",
    "layer_sequence_xscale",
    "layer_sequence_y",
    "layer_sequence_yscale",
    "layer_set_fx",
    "layer_set_target_room",
    "layer_set_visible",
    "layer_shader",
    "layer_sprite_alpha",
    "layer_sprite_angle",
    "layer_sprite_blend",
    "layer_sprite_change",
    "layer_sprite_create",
    "layer_sprite_destroy",
    "layer_sprite_exists",
    "layer_sprite_get_alpha",
    "layer_sprite_get_angle",
    "layer_sprite_get_blend",
    "layer_sprite_get_id",
    "layer_sprite_get_index",
    "layer_sprite_get_speed",
    "layer_sprite_get_sprite",
    "layer_sprite_get_x",
    "layer_sprite_get_xscale",
    "layer_sprite_get_y",
    "layer_sprite_get_yscale",
    "layer_sprite_index",
    "layer_sprite_speed",
    "layer_sprite_x",
    "layer_sprite_xscale",
    "layer_sprite_y",
    "layer_sprite_yscale",
    "layer_tile_alpha",
    "layer_tile_blend",
    "layer_tile_change",
    "layer_tile_create",
    "layer_tile_destroy",
    "layer_tile_exists",
    "layer_tile_get_alpha",
    "layer_tile_get_blend",
    "layer_tile_get_region",
    "layer_tile_get_sprite",
    "layer_tile_get_visible",
    "layer_tile_get_x",
    "layer_tile_get_xscale",
    "layer_tile_get_y",
    "layer_tile_get_yscale",
    "layer_tile_region",
    "layer_tile_visible",
    "layer_tile_x",
    "layer_tile_xscale",
    "layer_tile_y",
    "layer_tile_yscale",
    "layer_tilemap_create",
    "layer_tilemap_destroy",
    "layer_tilemap_exists",
    "layer_tilemap_get_id",
    "layer_vspeed",
    "layer_x",
    "layer_y",
    "lengthdir_x",
    "lengthdir_y",
    "lerp",
    "lin_to_db",
    "ln",
    "load_csv",
    "log10",
    "log2",
    "logn",
    "make_color_hsv",
    "make_color_rgb",
    "make_colour_hsv",
    "make_colour_rgb",
    "math_get_epsilon",
    "math_set_epsilon",
    "matrix_build",
    "matrix_build_identity",
    "matrix_build_lookat",
    "matrix_build_projection_ortho",
    "matrix_build_projection_perspective",
    "matrix_build_projection_perspective_fov",
    "matrix_get",
    "matrix_multiply",
    "matrix_set",
    "matrix_stack_clear",
    "matrix_stack_is_empty",
    "matrix_stack_pop",
    "matrix_stack_push",
    "matrix_stack_set",
    "matrix_stack_top",
    "matrix_transform_vertex",
    "max",
    "md5_file",
    "md5_string_unicode",
    "md5_string_utf8",
    "mean",
    "median",
    "merge_color",
    "merge_colour",
    "method",
    "method_call",
    "method_get_index",
    "method_get_self",
    "min",
    "motion_add",
    "motion_set",
    "mouse_check_button",
    "mouse_check_button_pressed",
    "mouse_check_button_released",
    "mouse_clear",
    "mouse_wheel_down",
    "mouse_wheel_up",
    "move_and_collide",
    "move_bounce_all",
    "move_bounce_solid",
    "move_contact_all",
    "move_contact_solid",
    "move_outside_all",
    "move_outside_solid",
    "move_random",
    "move_snap",
    "move_towards_point",
    "move_wrap",
    "mp_grid_add_cell",
    "mp_grid_add_instances",
    "mp_grid_add_rectangle",
    "mp_grid_clear_all",
    "mp_grid_clear_cell",
    "mp_grid_clear_rectangle",
    "mp_grid_create",
    "mp_grid_destroy",
    "mp_grid_draw",
    "mp_grid_get_cell",
    "mp_grid_path",
    "mp_grid_to_ds_grid",
    "mp_linear_path",
    "mp_linear_path_object",
    "mp_linear_step",
    "mp_linear_step_object",
    "mp_potential_path",
    "mp_potential_path_object",
    "mp_potential_settings",
    "mp_potential_step",
    "mp_potential_step_object",
    "nameof",
    "network_connect",
    "network_connect_async",
    "network_connect_raw",
    "network_connect_raw_async",
    "network_create_server",
    "network_create_server_raw",
    "network_create_socket",
    "network_create_socket_ext",
    "network_destroy",
    "network_resolve",
    "network_send_broadcast",
    "network_send_packet",
    "network_send_raw",
    "network_send_udp",
    "network_send_udp_raw",
    "network_set_config",
    "network_set_timeout",
    "object_exists",
    "object_get_mask",
    "object_get_name",
    "object_get_parent",
    "object_get_persistent",
    "object_get_physics",
    "object_get_solid",
    "object_get_sprite",
    "object_get_visible",
    "object_is_ancestor",
    "object_set_mask",
    "object_set_persistent",
    "object_set_solid",
    "object_set_sprite",
    "object_set_visible",
    "ord",
    "os_check_permission",
    "os_get_config",
    "os_get_info",
    "os_get_language",
    "os_get_region",
    "os_is_network_connected",
    "os_is_paused",
    "os_lock_orientation",
    "os_powersave_enable",
    "os_request_permission",
    "os_set_orientation_lock",
    "parameter_count",
    "parameter_string",
    "part_emitter_burst",
    "part_emitter_clear",
    "part_emitter_create",
    "part_emitter_delay",
    "part_emitter_destroy",
    "part_emitter_destroy_all",
    "part_emitter_enable",
    "part_emitter_exists",
    "part_emitter_interval",
    "part_emitter_region",
    "part_emitter_relative",
    "part_emitter_stream",
    "part_particles_burst",
    "part_particles_clear",
    "part_particles_count",
    "part_particles_create",
    "part_particles_create_color",
    "part_particles_create_colour",
    "part_system_angle",
    "part_system_automatic_draw",
    "part_system_automatic_update",
    "part_system_clear",
    "part_system_color",
    "part_system_colour",
    "part_system_create",
    "part_system_create_layer",
    "part_system_depth",
    "part_system_destroy",
    "part_system_draw_order",
    "part_system_drawit",
    "part_system_exists",
    "part_system_get_info",
    "part_system_get_layer",
    "part_system_global_space",
    "part_system_layer",
    "part_system_position",
    "part_system_update",
    "part_type_alpha1",
    "part_type_alpha2",
    "part_type_alpha3",
    "part_type_blend",
    "part_type_clear",
    "part_type_color1",
    "part_type_color2",
    "part_type_color3",
    "part_type_color_hsv",
    "part_type_color_mix",
    "part_type_color_rgb",
    "part_type_colour1",
    "part_type_colour2",
    "part_type_colour3",
    "part_type_colour_hsv",
    "part_type_colour_mix",
    "part_type_colour_rgb",
    "part_type_create",
    "part_type_death",
    "part_type_destroy",
    "part_type_direction",
    "part_type_exists",
    "part_type_gravity",
    "part_type_life",
    "part_type_orientation",
    "part_type_scale",
    "part_type_shape",
    "part_type_size",
    "part_type_size_x",
    "part_type_size_y",
    "part_type_speed",
    "part_type_sprite",
    "part_type_step",
    "part_type_subimage",
    "particle_exists",
    "particle_get_info",
    "path_add",
    "path_add_point",
    "path_append",
    "path_assign",
    "path_change_point",
    "path_clear_points",
    "path_delete",
    "path_delete_point",
    "path_duplicate",
    "path_end",
    "path_exists",
    "path_flip",
    "path_get_closed",
    "path_get_kind",
    "path_get_length",
    "path_get_name",
    "path_get_number",
    "path_get_point_speed",
    "path_get_point_x",
    "path_get_point_y",
    "path_get_precision",
    "path_get_speed",
    "path_get_x",
    "path_get_y",
    "path_insert_point",
    "path_mirror",
    "path_rescale",
    "path_reverse",
    "path_rotate",
    "path_set_closed",
    "path_set_kind",
    "path_set_precision",
    "path_shift",
    "path_start",
    "physics_apply_angular_impulse",
    "physics_apply_force",
    "physics_apply_impulse",
    "physics_apply_local_force",
    "physics_apply_local_impulse",
    "physics_apply_torque",
    "physics_draw_debug",
    "physics_fixture_add_point",
    "physics_fixture_bind",
    "physics_fixture_bind_ext",
    "physics_fixture_create",
    "physics_fixture_delete",
    "physics_fixture_set_angular_damping",
    "physics_fixture_set_awake",
    "physics_fixture_set_box_shape",
    "physics_fixture_set_chain_shape",
    "physics_fixture_set_circle_shape",
    "physics_fixture_set_collision_group",
    "physics_fixture_set_density",
    "physics_fixture_set_edge_shape",
    "physics_fixture_set_friction",
    "physics_fixture_set_kinematic",
    "physics_fixture_set_linear_damping",
    "physics_fixture_set_polygon_shape",
    "physics_fixture_set_restitution",
    "physics_fixture_set_sensor",
    "physics_get_density",
    "physics_get_friction",
    "physics_get_restitution",
    "physics_joint_delete",
    "physics_joint_distance_create",
    "physics_joint_enable_motor",
    "physics_joint_friction_create",
    "physics_joint_gear_create",
    "physics_joint_get_value",
    "physics_joint_prismatic_create",
    "physics_joint_pulley_create",
    "physics_joint_revolute_create",
    "physics_joint_rope_create",
    "physics_joint_set_value",
    "physics_joint_weld_create",
    "physics_joint_wheel_create",
    "physics_mass_properties",
    "physics_particle_count",
    "physics_particle_create",
    "physics_particle_delete",
    "physics_particle_delete_region_box",
    "physics_particle_delete_region_circle",
    "physics_particle_delete_region_poly",
    "physics_particle_draw",
    "physics_particle_draw_ext",
    "physics_particle_get_damping",
    "physics_particle_get_data",
    "physics_particle_get_data_particle",
    "physics_particle_get_density",
    "physics_particle_get_gravity_scale",
    "physics_particle_get_group_flags",
    "physics_particle_get_max_count",
    "physics_particle_get_radius",
    "physics_particle_group_add_point",
    "physics_particle_group_begin",
    "physics_particle_group_box",
    "physics_particle_group_circle",
    "physics_particle_group_count",
    "physics_particle_group_delete",
    "physics_particle_group_end",
    "physics_particle_group_get_ang_vel",
    "physics_particle_group_get_angle",
    "physics_particle_group_get_centre_x",
    "physics_particle_group_get_centre_y",
    "physics_particle_group_get_data",
    "physics_particle_group_get_inertia",
    "physics_particle_group_get_mass",
    "physics_particle_group_get_vel_x",
    "physics_particle_group_get_vel_y",
    "physics_particle_group_get_x",
    "physics_particle_group_get_y",
    "physics_particle_group_join",
    "physics_particle_group_polygon",
    "physics_particle_set_category_flags",
    "physics_particle_set_damping",
    "physics_particle_set_density",
    "physics_particle_set_flags",
    "physics_particle_set_gravity_scale",
    "physics_particle_set_group_flags",
    "physics_particle_set_max_count",
    "physics_particle_set_radius",
    "physics_pause_enable",
    "physics_remove_fixture",
    "physics_set_density",
    "physics_set_friction",
    "physics_set_restitution",
    "physics_test_overlap",
    "physics_world_create",
    "physics_world_draw_debug",
    "physics_world_gravity",
    "physics_world_update_iterations",
    "physics_world_update_speed",
    "place_empty",
    "place_free",
    "place_meeting",
    "place_snapped",
    "point_direction",
    "point_distance",
    "point_distance_3d",
    "point_in_circle",
    "point_in_rectangle",
    "point_in_triangle",
    "position_change",
    "position_destroy",
    "position_empty",
    "position_meeting",
    "power",
    "ptr",
    "radtodeg",
    "random",
    "random_get_seed",
    "random_range",
    "random_set_seed",
    "randomise",
    "randomize",
    "real",
    "rectangle_in_circle",
    "rectangle_in_rectangle",
    "rectangle_in_triangle",
    "ref_create",
    "rollback_chat",
    "rollback_create_game",
    "rollback_define_extra_network_latency",
    "rollback_define_input",
    "rollback_define_input_frame_delay",
    "rollback_define_mock_input",
    "rollback_define_player",
    "rollback_display_events",
    "rollback_get_info",
    "rollback_get_input",
    "rollback_get_player_prefs",
    "rollback_join_game",
    "rollback_leave_game",
    "rollback_set_player_prefs",
    "rollback_start_game",
    "rollback_sync_on_frame",
    "rollback_use_late_join",
    "rollback_use_manual_start",
    "rollback_use_player_prefs",
    "rollback_use_random_input",
    "room_add",
    "room_assign",
    "room_duplicate",
    "room_exists",
    "room_get_camera",
    "room_get_info",
    "room_get_name",
    "room_get_viewport",
    "room_goto",
    "room_goto_next",
    "room_goto_previous",
    "room_instance_add",
    "room_instance_clear",
    "room_next",
    "room_previous",
    "room_restart",
    "room_set_camera",
    "room_set_height",
    "room_set_persistent",
    "room_set_view_enabled",
    "room_set_viewport",
    "room_set_width",
    "round",
    "scheduler_resolution_get",
    "scheduler_resolution_set",
    "screen_save",
    "screen_save_part",
    "script_execute",
    "script_execute_ext",
    "script_exists",
    "script_get_name",
    "sequence_create",
    "sequence_destroy",
    "sequence_exists",
    "sequence_get",
    "sequence_get_objects",
    "sequence_instance_override_object",
    "sequence_keyframe_new",
    "sequence_keyframedata_new",
    "sequence_track_new",
    "sha1_file",
    "sha1_string_unicode",
    "sha1_string_utf8",
    "shader_current",
    "shader_enable_corner_id",
    "shader_get_name",
    "shader_get_sampler_index",
    "shader_get_uniform",
    "shader_is_compiled",
    "shader_reset",
    "shader_set",
    "shader_set_uniform_f",
    "shader_set_uniform_f_array",
    "shader_set_uniform_f_buffer",
    "shader_set_uniform_i",
    "shader_set_uniform_i_array",
    "shader_set_uniform_matrix",
    "shader_set_uniform_matrix_array",
    "shaders_are_supported",
    "shop_leave_rating",
    "show_debug_message",
    "show_debug_message_ext",
    "show_debug_overlay",
    "show_error",
    "show_message",
    "show_message_async",
    "show_question",
    "show_question_async",
    "sign",
    "sin",
    "skeleton_animation_clear",
    "skeleton_animation_get",
    "skeleton_animation_get_duration",
    "skeleton_animation_get_event_frames",
    "skeleton_animation_get_ext",
    "skeleton_animation_get_frame",
    "skeleton_animation_get_frames",
    "skeleton_animation_get_position",
    "skeleton_animation_is_finished",
    "skeleton_animation_is_looping",
    "skeleton_animation_list",
    "skeleton_animation_mix",
    "skeleton_animation_set",
    "skeleton_animation_set_ext",
    "skeleton_animation_set_frame",
    "skeleton_animation_set_position",
    "skeleton_attachment_create",
    "skeleton_attachment_create_color",
    "skeleton_attachment_create_colour",
    "skeleton_attachment_destroy",
    "skeleton_attachment_exists",
    "skeleton_attachment_get",
    "skeleton_attachment_replace",
    "skeleton_attachment_replace_color",
    "skeleton_attachment_replace_colour",
    "skeleton_attachment_set",
    "skeleton_bone_data_get",
    "skeleton_bone_data_set",
    "skeleton_bone_list",
    "skeleton_bone_state_get",
    "skeleton_bone_state_set",
    "skeleton_collision_draw_set",
    "skeleton_find_slot",
    "skeleton_get_bounds",
    "skeleton_get_minmax",
    "skeleton_get_num_bounds",
    "skeleton_skin_create",
    "skeleton_skin_get",
    "skeleton_skin_list",
    "skeleton_skin_set",
    "skeleton_slot_alpha_get",
    "skeleton_slot_color_get",
    "skeleton_slot_color_set",
    "skeleton_slot_colour_get",
    "skeleton_slot_colour_set",
    "skeleton_slot_data",
    "skeleton_slot_data_instance",
    "skeleton_slot_list",
    "sprite_add",
    "sprite_add_ext",
    "sprite_add_from_surface",
    "sprite_assign",
    "sprite_collision_mask",
    "sprite_create_from_surface",
    "sprite_delete",
    "sprite_duplicate",
    "sprite_exists",
    "sprite_flush",
    "sprite_flush_multi",
    "sprite_get_bbox_bottom",
    "sprite_get_bbox_left",
    "sprite_get_bbox_mode",
    "sprite_get_bbox_right",
    "sprite_get_bbox_top",
    "sprite_get_height",
    "sprite_get_info",
    "sprite_get_name",
    "sprite_get_nineslice",
    "sprite_get_number",
    "sprite_get_speed",
    "sprite_get_speed_type",
    "sprite_get_texture",
    "sprite_get_tpe",
    "sprite_get_uvs",
    "sprite_get_width",
    "sprite_get_xoffset",
    "sprite_get_yoffset",
    "sprite_merge",
    "sprite_nineslice_create",
    "sprite_prefetch",
    "sprite_prefetch_multi",
    "sprite_replace",
    "sprite_save",
    "sprite_save_strip",
    "sprite_set_alpha_from_sprite",
    "sprite_set_bbox",
    "sprite_set_bbox_mode",
    "sprite_set_cache_size",
    "sprite_set_cache_size_ext",
    "sprite_set_nineslice",
    "sprite_set_offset",
    "sprite_set_speed",
    "sqr",
    "sqrt",
    "static_get",
    "static_set",
    "string",
    "string_byte_at",
    "string_byte_length",
    "string_char_at",
    "string_concat",
    "string_concat_ext",
    "string_copy",
    "string_count",
    "string_delete",
    "string_digits",
    "string_ends_with",
    "string_ext",
    "string_foreach",
    "string_format",
    "string_hash_to_newline",
    "string_height",
    "string_height_ext",
    "string_insert",
    "string_join",
    "string_join_ext",
    "string_last_pos",
    "string_last_pos_ext",
    "string_length",
    "string_letters",
    "string_lettersdigits",
    "string_lower",
    "string_ord_at",
    "string_pos",
    "string_pos_ext",
    "string_repeat",
    "string_replace",
    "string_replace_all",
    "string_set_byte_at",
    "string_split",
    "string_split_ext",
    "string_starts_with",
    "string_trim",
    "string_trim_end",
    "string_trim_start",
    "string_upper",
    "string_width",
    "string_width_ext",
    "struct_exists",
    "struct_foreach",
    "struct_get",
    "struct_get_from_hash",
    "struct_get_names",
    "struct_names_count",
    "struct_remove",
    "struct_set",
    "struct_set_from_hash",
    "surface_copy",
    "surface_copy_part",
    "surface_create",
    "surface_create_ext",
    "surface_depth_disable",
    "surface_exists",
    "surface_format_is_supported",
    "surface_free",
    "surface_get_depth_disable",
    "surface_get_format",
    "surface_get_height",
    "surface_get_target",
    "surface_get_target_ext",
    "surface_get_texture",
    "surface_get_width",
    "surface_getpixel",
    "surface_getpixel_ext",
    "surface_reset_target",
    "surface_resize",
    "surface_save",
    "surface_save_part",
    "surface_set_target",
    "surface_set_target_ext",
    "tag_get_asset_ids",
    "tag_get_assets",
    "tan",
    "texture_debug_messages",
    "texture_flush",
    "texture_get_height",
    "texture_get_texel_height",
    "texture_get_texel_width",
    "texture_get_uvs",
    "texture_get_width",
    "texture_global_scale",
    "texture_is_ready",
    "texture_prefetch",
    "texture_set_stage",
    "texturegroup_get_fonts",
    "texturegroup_get_names",
    "texturegroup_get_sprites",
    "texturegroup_get_status",
    "texturegroup_get_textures",
    "texturegroup_get_tilesets",
    "texturegroup_load",
    "texturegroup_set_mode",
    "texturegroup_unload",
    "tile_get_empty",
    "tile_get_flip",
    "tile_get_index",
    "tile_get_mirror",
    "tile_get_rotate",
    "tile_set_empty",
    "tile_set_flip",
    "tile_set_index",
    "tile_set_mirror",
    "tile_set_rotate",
    "tilemap_clear",
    "tilemap_get",
    "tilemap_get_at_pixel",
    "tilemap_get_cell_x_at_pixel",
    "tilemap_get_cell_y_at_pixel",
    "tilemap_get_frame",
    "tilemap_get_global_mask",
    "tilemap_get_height",
    "tilemap_get_mask",
    "tilemap_get_tile_height",
    "tilemap_get_tile_width",
    "tilemap_get_tileset",
    "tilemap_get_width",
    "tilemap_get_x",
    "tilemap_get_y",
    "tilemap_set",
    "tilemap_set_at_pixel",
    "tilemap_set_global_mask",
    "tilemap_set_height",
    "tilemap_set_mask",
    "tilemap_set_width",
    "tilemap_tileset",
    "tilemap_x",
    "tilemap_y",
    "tileset_get_info",
    "tileset_get_name",
    "tileset_get_texture",
    "tileset_get_uvs",
    "time_bpm_to_seconds",
    "time_seconds_to_bpm",
    "time_source_create",
    "time_source_destroy",
    "time_source_exists",
    "time_source_get_children",
    "time_source_get_parent",
    "time_source_get_period",
    "time_source_get_reps_completed",
    "time_source_get_reps_remaining",
    "time_source_get_state",
    "time_source_get_time_remaining",
    "time_source_get_units",
    "time_source_pause",
    "time_source_reconfigure",
    "time_source_reset",
    "time_source_resume",
    "time_source_start",
    "time_source_stop",
    "timeline_add",
    "timeline_clear",
    "timeline_delete",
    "timeline_exists",
    "timeline_get_name",
    "timeline_max_moment",
    "timeline_moment_add_script",
    "timeline_moment_clear",
    "timeline_size",
    "typeof",
    "url_get_domain",
    "url_open",
    "url_open_ext",
    "url_open_full",
    "uwp_device_touchscreen_available",
    "uwp_livetile_badge_clear",
    "uwp_livetile_badge_notification",
    "uwp_livetile_notification_begin",
    "uwp_livetile_notification_end",
    "uwp_livetile_notification_expiry",
    "uwp_livetile_notification_image_add",
    "uwp_livetile_notification_secondary_begin",
    "uwp_livetile_notification_tag",
    "uwp_livetile_notification_template_add",
    "uwp_livetile_notification_text_add",
    "uwp_livetile_queue_enable",
    "uwp_livetile_tile_clear",
    "uwp_secondarytile_badge_clear",
    "uwp_secondarytile_badge_notification",
    "uwp_secondarytile_delete",
    "uwp_secondarytile_pin",
    "uwp_secondarytile_tile_clear",
    "variable_clone",
    "variable_get_hash",
    "variable_global_exists",
    "variable_global_get",
    "variable_global_set",
    "variable_instance_exists",
    "variable_instance_get",
    "variable_instance_get_names",
    "variable_instance_names_count",
    "variable_instance_set",
    "variable_struct_exists",
    "variable_struct_get",
    "variable_struct_get_names",
    "variable_struct_names_count",
    "variable_struct_remove",
    "variable_struct_set",
    "vertex_argb",
    "vertex_begin",
    "vertex_color",
    "vertex_colour",
    "vertex_create_buffer",
    "vertex_create_buffer_ext",
    "vertex_create_buffer_from_buffer",
    "vertex_create_buffer_from_buffer_ext",
    "vertex_delete_buffer",
    "vertex_end",
    "vertex_float1",
    "vertex_float2",
    "vertex_float3",
    "vertex_float4",
    "vertex_format_add_color",
    "vertex_format_add_colour",
    "vertex_format_add_custom",
    "vertex_format_add_normal",
    "vertex_format_add_position",
    "vertex_format_add_position_3d",
    "vertex_format_add_texcoord",
    "vertex_format_begin",
    "vertex_format_delete",
    "vertex_format_end",
    "vertex_format_get_info",
    "vertex_freeze",
    "vertex_get_buffer_size",
    "vertex_get_number",
    "vertex_normal",
    "vertex_position",
    "vertex_position_3d",
    "vertex_submit",
    "vertex_submit_ext",
    "vertex_texcoord",
    "vertex_ubyte4",
    "vertex_update_buffer_from_buffer",
    "vertex_update_buffer_from_vertex",
    "video_close",
    "video_draw",
    "video_enable_loop",
    "video_get_duration",
    "video_get_format",
    "video_get_position",
    "video_get_status",
    "video_get_volume",
    "video_is_looping",
    "video_open",
    "video_pause",
    "video_resume",
    "video_seek_to",
    "video_set_volume",
    "view_get_camera",
    "view_get_hport",
    "view_get_surface_id",
    "view_get_visible",
    "view_get_wport",
    "view_get_xport",
    "view_get_yport",
    "view_set_camera",
    "view_set_hport",
    "view_set_surface_id",
    "view_set_visible",
    "view_set_wport",
    "view_set_xport",
    "view_set_yport",
    "virtual_key_add",
    "virtual_key_delete",
    "virtual_key_hide",
    "virtual_key_show",
    "wallpaper_set_config",
    "wallpaper_set_subscriptions",
    "weak_ref_alive",
    "weak_ref_any_alive",
    "weak_ref_create",
    "window_center",
    "window_device",
    "window_enable_borderless_fullscreen",
    "window_get_borderless_fullscreen",
    "window_get_caption",
    "window_get_color",
    "window_get_colour",
    "window_get_cursor",
    "window_get_fullscreen",
    "window_get_height",
    "window_get_showborder",
    "window_get_visible_rects",
    "window_get_width",
    "window_get_x",
    "window_get_y",
    "window_handle",
    "window_has_focus",
    "window_mouse_get_delta_x",
    "window_mouse_get_delta_y",
    "window_mouse_get_locked",
    "window_mouse_get_x",
    "window_mouse_get_y",
    "window_mouse_set",
    "window_mouse_set_locked",
    "window_set_caption",
    "window_set_color",
    "window_set_colour",
    "window_set_cursor",
    "window_set_fullscreen",
    "window_set_max_height",
    "window_set_max_width",
    "window_set_min_height",
    "window_set_min_width",
    "window_set_position",
    "window_set_rectangle",
    "window_set_showborder",
    "window_set_size",
    "window_view_mouse_get_x",
    "window_view_mouse_get_y",
    "window_views_mouse_get_x",
    "window_views_mouse_get_y",
    "winphone_tile_background_color",
    "winphone_tile_background_colour",
    "zip_add_file",
    "zip_create",
    "zip_save",
    "zip_unzip",
    "zip_unzip_async"
  ];
  const SYMBOLS = [
    "AudioEffect",
    "AudioEffectType",
    "AudioLFOType",
    "GM_build_date",
    "GM_build_type",
    "GM_is_sandboxed",
    "GM_project_filename",
    "GM_runtime_version",
    "GM_version",
    "NaN",
    "_GMFILE_",
    "_GMFUNCTION_",
    "_GMLINE_",
    "alignmentH",
    "alignmentV",
    "all",
    "animcurvetype_bezier",
    "animcurvetype_catmullrom",
    "animcurvetype_linear",
    "asset_animationcurve",
    "asset_font",
    "asset_object",
    "asset_path",
    "asset_room",
    "asset_script",
    "asset_sequence",
    "asset_shader",
    "asset_sound",
    "asset_sprite",
    "asset_tiles",
    "asset_timeline",
    "asset_unknown",
    "audio_3D",
    "audio_bus_main",
    "audio_falloff_exponent_distance",
    "audio_falloff_exponent_distance_clamped",
    "audio_falloff_exponent_distance_scaled",
    "audio_falloff_inverse_distance",
    "audio_falloff_inverse_distance_clamped",
    "audio_falloff_inverse_distance_scaled",
    "audio_falloff_linear_distance",
    "audio_falloff_linear_distance_clamped",
    "audio_falloff_none",
    "audio_mono",
    "audio_stereo",
    "bboxkind_diamond",
    "bboxkind_ellipse",
    "bboxkind_precise",
    "bboxkind_rectangular",
    "bboxmode_automatic",
    "bboxmode_fullimage",
    "bboxmode_manual",
    "bm_add",
    "bm_dest_alpha",
    "bm_dest_color",
    "bm_dest_colour",
    "bm_inv_dest_alpha",
    "bm_inv_dest_color",
    "bm_inv_dest_colour",
    "bm_inv_src_alpha",
    "bm_inv_src_color",
    "bm_inv_src_colour",
    "bm_max",
    "bm_normal",
    "bm_one",
    "bm_src_alpha",
    "bm_src_alpha_sat",
    "bm_src_color",
    "bm_src_colour",
    "bm_subtract",
    "bm_zero",
    "browser_chrome",
    "browser_edge",
    "browser_firefox",
    "browser_ie",
    "browser_ie_mobile",
    "browser_not_a_browser",
    "browser_opera",
    "browser_safari",
    "browser_safari_mobile",
    "browser_tizen",
    "browser_unknown",
    "browser_windows_store",
    "buffer_bool",
    "buffer_f16",
    "buffer_f32",
    "buffer_f64",
    "buffer_fast",
    "buffer_fixed",
    "buffer_grow",
    "buffer_s16",
    "buffer_s32",
    "buffer_s8",
    "buffer_seek_end",
    "buffer_seek_relative",
    "buffer_seek_start",
    "buffer_string",
    "buffer_text",
    "buffer_u16",
    "buffer_u32",
    "buffer_u64",
    "buffer_u8",
    "buffer_vbuffer",
    "buffer_wrap",
    "c_aqua",
    "c_black",
    "c_blue",
    "c_dkgray",
    "c_dkgrey",
    "c_fuchsia",
    "c_gray",
    "c_green",
    "c_grey",
    "c_lime",
    "c_ltgray",
    "c_ltgrey",
    "c_maroon",
    "c_navy",
    "c_olive",
    "c_orange",
    "c_purple",
    "c_red",
    "c_silver",
    "c_teal",
    "c_white",
    "c_yellow",
    "cache_directory",
    "characterSpacing",
    "cmpfunc_always",
    "cmpfunc_equal",
    "cmpfunc_greater",
    "cmpfunc_greaterequal",
    "cmpfunc_less",
    "cmpfunc_lessequal",
    "cmpfunc_never",
    "cmpfunc_notequal",
    "coreColor",
    "coreColour",
    "cr_appstart",
    "cr_arrow",
    "cr_beam",
    "cr_cross",
    "cr_default",
    "cr_drag",
    "cr_handpoint",
    "cr_hourglass",
    "cr_none",
    "cr_size_all",
    "cr_size_nesw",
    "cr_size_ns",
    "cr_size_nwse",
    "cr_size_we",
    "cr_uparrow",
    "cull_clockwise",
    "cull_counterclockwise",
    "cull_noculling",
    "device_emulator",
    "device_ios_ipad",
    "device_ios_ipad_retina",
    "device_ios_iphone",
    "device_ios_iphone5",
    "device_ios_iphone6",
    "device_ios_iphone6plus",
    "device_ios_iphone_retina",
    "device_ios_unknown",
    "device_tablet",
    "display_landscape",
    "display_landscape_flipped",
    "display_portrait",
    "display_portrait_flipped",
    "dll_cdecl",
    "dll_stdcall",
    "dropShadowEnabled",
    "dropShadowEnabled",
    "ds_type_grid",
    "ds_type_list",
    "ds_type_map",
    "ds_type_priority",
    "ds_type_queue",
    "ds_type_stack",
    "ef_cloud",
    "ef_ellipse",
    "ef_explosion",
    "ef_firework",
    "ef_flare",
    "ef_rain",
    "ef_ring",
    "ef_smoke",
    "ef_smokeup",
    "ef_snow",
    "ef_spark",
    "ef_star",
    "effectsEnabled",
    "effectsEnabled",
    "ev_alarm",
    "ev_animation_end",
    "ev_animation_event",
    "ev_animation_update",
    "ev_async_audio_playback",
    "ev_async_audio_playback_ended",
    "ev_async_audio_recording",
    "ev_async_dialog",
    "ev_async_push_notification",
    "ev_async_save_load",
    "ev_async_save_load",
    "ev_async_social",
    "ev_async_system_event",
    "ev_async_web",
    "ev_async_web_cloud",
    "ev_async_web_iap",
    "ev_async_web_image_load",
    "ev_async_web_networking",
    "ev_async_web_steam",
    "ev_audio_playback",
    "ev_audio_playback_ended",
    "ev_audio_recording",
    "ev_boundary",
    "ev_boundary_view0",
    "ev_boundary_view1",
    "ev_boundary_view2",
    "ev_boundary_view3",
    "ev_boundary_view4",
    "ev_boundary_view5",
    "ev_boundary_view6",
    "ev_boundary_view7",
    "ev_broadcast_message",
    "ev_cleanup",
    "ev_collision",
    "ev_create",
    "ev_destroy",
    "ev_dialog_async",
    "ev_draw",
    "ev_draw_begin",
    "ev_draw_end",
    "ev_draw_normal",
    "ev_draw_post",
    "ev_draw_pre",
    "ev_end_of_path",
    "ev_game_end",
    "ev_game_start",
    "ev_gesture",
    "ev_gesture_double_tap",
    "ev_gesture_drag_end",
    "ev_gesture_drag_start",
    "ev_gesture_dragging",
    "ev_gesture_flick",
    "ev_gesture_pinch_end",
    "ev_gesture_pinch_in",
    "ev_gesture_pinch_out",
    "ev_gesture_pinch_start",
    "ev_gesture_rotate_end",
    "ev_gesture_rotate_start",
    "ev_gesture_rotating",
    "ev_gesture_tap",
    "ev_global_gesture_double_tap",
    "ev_global_gesture_drag_end",
    "ev_global_gesture_drag_start",
    "ev_global_gesture_dragging",
    "ev_global_gesture_flick",
    "ev_global_gesture_pinch_end",
    "ev_global_gesture_pinch_in",
    "ev_global_gesture_pinch_out",
    "ev_global_gesture_pinch_start",
    "ev_global_gesture_rotate_end",
    "ev_global_gesture_rotate_start",
    "ev_global_gesture_rotating",
    "ev_global_gesture_tap",
    "ev_global_left_button",
    "ev_global_left_press",
    "ev_global_left_release",
    "ev_global_middle_button",
    "ev_global_middle_press",
    "ev_global_middle_release",
    "ev_global_right_button",
    "ev_global_right_press",
    "ev_global_right_release",
    "ev_gui",
    "ev_gui_begin",
    "ev_gui_end",
    "ev_joystick1_button1",
    "ev_joystick1_button2",
    "ev_joystick1_button3",
    "ev_joystick1_button4",
    "ev_joystick1_button5",
    "ev_joystick1_button6",
    "ev_joystick1_button7",
    "ev_joystick1_button8",
    "ev_joystick1_down",
    "ev_joystick1_left",
    "ev_joystick1_right",
    "ev_joystick1_up",
    "ev_joystick2_button1",
    "ev_joystick2_button2",
    "ev_joystick2_button3",
    "ev_joystick2_button4",
    "ev_joystick2_button5",
    "ev_joystick2_button6",
    "ev_joystick2_button7",
    "ev_joystick2_button8",
    "ev_joystick2_down",
    "ev_joystick2_left",
    "ev_joystick2_right",
    "ev_joystick2_up",
    "ev_keyboard",
    "ev_keypress",
    "ev_keyrelease",
    "ev_left_button",
    "ev_left_press",
    "ev_left_release",
    "ev_middle_button",
    "ev_middle_press",
    "ev_middle_release",
    "ev_mouse",
    "ev_mouse_enter",
    "ev_mouse_leave",
    "ev_mouse_wheel_down",
    "ev_mouse_wheel_up",
    "ev_no_button",
    "ev_no_more_health",
    "ev_no_more_lives",
    "ev_other",
    "ev_outside",
    "ev_outside_view0",
    "ev_outside_view1",
    "ev_outside_view2",
    "ev_outside_view3",
    "ev_outside_view4",
    "ev_outside_view5",
    "ev_outside_view6",
    "ev_outside_view7",
    "ev_pre_create",
    "ev_push_notification",
    "ev_right_button",
    "ev_right_press",
    "ev_right_release",
    "ev_room_end",
    "ev_room_start",
    "ev_social",
    "ev_step",
    "ev_step_begin",
    "ev_step_end",
    "ev_step_normal",
    "ev_system_event",
    "ev_trigger",
    "ev_user0",
    "ev_user1",
    "ev_user10",
    "ev_user11",
    "ev_user12",
    "ev_user13",
    "ev_user14",
    "ev_user15",
    "ev_user2",
    "ev_user3",
    "ev_user4",
    "ev_user5",
    "ev_user6",
    "ev_user7",
    "ev_user8",
    "ev_user9",
    "ev_web_async",
    "ev_web_cloud",
    "ev_web_iap",
    "ev_web_image_load",
    "ev_web_networking",
    "ev_web_sound_load",
    "ev_web_steam",
    "fa_archive",
    "fa_bottom",
    "fa_center",
    "fa_directory",
    "fa_hidden",
    "fa_left",
    "fa_middle",
    "fa_none",
    "fa_readonly",
    "fa_right",
    "fa_sysfile",
    "fa_top",
    "fa_volumeid",
    "false",
    "frameSizeX",
    "frameSizeY",
    "gamespeed_fps",
    "gamespeed_microseconds",
    "global",
    "glowColor",
    "glowColour",
    "glowEnabled",
    "glowEnabled",
    "glowEnd",
    "glowStart",
    "gp_axis_acceleration_x",
    "gp_axis_acceleration_y",
    "gp_axis_acceleration_z",
    "gp_axis_angular_velocity_x",
    "gp_axis_angular_velocity_y",
    "gp_axis_angular_velocity_z",
    "gp_axis_orientation_w",
    "gp_axis_orientation_x",
    "gp_axis_orientation_y",
    "gp_axis_orientation_z",
    "gp_axislh",
    "gp_axislv",
    "gp_axisrh",
    "gp_axisrv",
    "gp_face1",
    "gp_face2",
    "gp_face3",
    "gp_face4",
    "gp_padd",
    "gp_padl",
    "gp_padr",
    "gp_padu",
    "gp_select",
    "gp_shoulderl",
    "gp_shoulderlb",
    "gp_shoulderr",
    "gp_shoulderrb",
    "gp_start",
    "gp_stickl",
    "gp_stickr",
    "iap_available",
    "iap_canceled",
    "iap_ev_consume",
    "iap_ev_product",
    "iap_ev_purchase",
    "iap_ev_restore",
    "iap_ev_storeload",
    "iap_failed",
    "iap_purchased",
    "iap_refunded",
    "iap_status_available",
    "iap_status_loading",
    "iap_status_processing",
    "iap_status_restoring",
    "iap_status_unavailable",
    "iap_status_uninitialised",
    "iap_storeload_failed",
    "iap_storeload_ok",
    "iap_unavailable",
    "infinity",
    "kbv_autocapitalize_characters",
    "kbv_autocapitalize_none",
    "kbv_autocapitalize_sentences",
    "kbv_autocapitalize_words",
    "kbv_returnkey_continue",
    "kbv_returnkey_default",
    "kbv_returnkey_done",
    "kbv_returnkey_emergency",
    "kbv_returnkey_go",
    "kbv_returnkey_google",
    "kbv_returnkey_join",
    "kbv_returnkey_next",
    "kbv_returnkey_route",
    "kbv_returnkey_search",
    "kbv_returnkey_send",
    "kbv_returnkey_yahoo",
    "kbv_type_ascii",
    "kbv_type_default",
    "kbv_type_email",
    "kbv_type_numbers",
    "kbv_type_phone",
    "kbv_type_phone_name",
    "kbv_type_url",
    "layerelementtype_background",
    "layerelementtype_instance",
    "layerelementtype_oldtilemap",
    "layerelementtype_particlesystem",
    "layerelementtype_sequence",
    "layerelementtype_sprite",
    "layerelementtype_tile",
    "layerelementtype_tilemap",
    "layerelementtype_undefined",
    "leaderboard_type_number",
    "leaderboard_type_time_mins_secs",
    "lighttype_dir",
    "lighttype_point",
    "lineSpacing",
    "m_axisx",
    "m_axisx_gui",
    "m_axisy",
    "m_axisy_gui",
    "m_scroll_down",
    "m_scroll_up",
    "matrix_projection",
    "matrix_view",
    "matrix_world",
    "mb_any",
    "mb_left",
    "mb_middle",
    "mb_none",
    "mb_right",
    "mb_side1",
    "mb_side2",
    "mip_markedonly",
    "mip_off",
    "mip_on",
    "network_config_avoid_time_wait",
    "network_config_connect_timeout",
    "network_config_disable_multicast",
    "network_config_disable_reliable_udp",
    "network_config_enable_multicast",
    "network_config_enable_reliable_udp",
    "network_config_use_non_blocking_socket",
    "network_config_websocket_protocol",
    "network_connect_active",
    "network_connect_blocking",
    "network_connect_nonblocking",
    "network_connect_none",
    "network_connect_passive",
    "network_send_binary",
    "network_send_text",
    "network_socket_bluetooth",
    "network_socket_tcp",
    "network_socket_udp",
    "network_socket_ws",
    "network_socket_wss",
    "network_type_connect",
    "network_type_data",
    "network_type_disconnect",
    "network_type_down",
    "network_type_non_blocking_connect",
    "network_type_up",
    "network_type_up_failed",
    "nineslice_blank",
    "nineslice_bottom",
    "nineslice_center",
    "nineslice_centre",
    "nineslice_hide",
    "nineslice_left",
    "nineslice_mirror",
    "nineslice_repeat",
    "nineslice_right",
    "nineslice_stretch",
    "nineslice_top",
    "noone",
    "of_challenge_lose",
    "of_challenge_tie",
    "of_challenge_win",
    "os_android",
    "os_gdk",
    "os_gxgames",
    "os_ios",
    "os_linux",
    "os_macosx",
    "os_operagx",
    "os_permission_denied",
    "os_permission_denied_dont_request",
    "os_permission_granted",
    "os_ps3",
    "os_ps4",
    "os_ps5",
    "os_psvita",
    "os_switch",
    "os_tvos",
    "os_unknown",
    "os_uwp",
    "os_win8native",
    "os_windows",
    "os_winphone",
    "os_xboxone",
    "os_xboxseriesxs",
    "other",
    "outlineColor",
    "outlineColour",
    "outlineDist",
    "outlineEnabled",
    "outlineEnabled",
    "paragraphSpacing",
    "path_action_continue",
    "path_action_restart",
    "path_action_reverse",
    "path_action_stop",
    "phy_debug_render_aabb",
    "phy_debug_render_collision_pairs",
    "phy_debug_render_coms",
    "phy_debug_render_core_shapes",
    "phy_debug_render_joints",
    "phy_debug_render_obb",
    "phy_debug_render_shapes",
    "phy_joint_anchor_1_x",
    "phy_joint_anchor_1_y",
    "phy_joint_anchor_2_x",
    "phy_joint_anchor_2_y",
    "phy_joint_angle",
    "phy_joint_angle_limits",
    "phy_joint_damping_ratio",
    "phy_joint_frequency",
    "phy_joint_length_1",
    "phy_joint_length_2",
    "phy_joint_lower_angle_limit",
    "phy_joint_max_force",
    "phy_joint_max_length",
    "phy_joint_max_motor_force",
    "phy_joint_max_motor_torque",
    "phy_joint_max_torque",
    "phy_joint_motor_force",
    "phy_joint_motor_speed",
    "phy_joint_motor_torque",
    "phy_joint_reaction_force_x",
    "phy_joint_reaction_force_y",
    "phy_joint_reaction_torque",
    "phy_joint_speed",
    "phy_joint_translation",
    "phy_joint_upper_angle_limit",
    "phy_particle_data_flag_category",
    "phy_particle_data_flag_color",
    "phy_particle_data_flag_colour",
    "phy_particle_data_flag_position",
    "phy_particle_data_flag_typeflags",
    "phy_particle_data_flag_velocity",
    "phy_particle_flag_colormixing",
    "phy_particle_flag_colourmixing",
    "phy_particle_flag_elastic",
    "phy_particle_flag_powder",
    "phy_particle_flag_spring",
    "phy_particle_flag_tensile",
    "phy_particle_flag_viscous",
    "phy_particle_flag_wall",
    "phy_particle_flag_water",
    "phy_particle_flag_zombie",
    "phy_particle_group_flag_rigid",
    "phy_particle_group_flag_solid",
    "pi",
    "pointer_invalid",
    "pointer_null",
    "pr_linelist",
    "pr_linestrip",
    "pr_pointlist",
    "pr_trianglefan",
    "pr_trianglelist",
    "pr_trianglestrip",
    "ps_distr_gaussian",
    "ps_distr_invgaussian",
    "ps_distr_linear",
    "ps_mode_burst",
    "ps_mode_stream",
    "ps_shape_diamond",
    "ps_shape_ellipse",
    "ps_shape_line",
    "ps_shape_rectangle",
    "pt_shape_circle",
    "pt_shape_cloud",
    "pt_shape_disk",
    "pt_shape_explosion",
    "pt_shape_flare",
    "pt_shape_line",
    "pt_shape_pixel",
    "pt_shape_ring",
    "pt_shape_smoke",
    "pt_shape_snow",
    "pt_shape_spark",
    "pt_shape_sphere",
    "pt_shape_square",
    "pt_shape_star",
    "rollback_chat_message",
    "rollback_connect_error",
    "rollback_connect_info",
    "rollback_connected_to_peer",
    "rollback_connection_rejected",
    "rollback_disconnected_from_peer",
    "rollback_end_game",
    "rollback_game_full",
    "rollback_game_info",
    "rollback_game_interrupted",
    "rollback_game_resumed",
    "rollback_high_latency",
    "rollback_player_prefs",
    "rollback_protocol_rejected",
    "rollback_synchronized_with_peer",
    "rollback_synchronizing_with_peer",
    "self",
    "seqaudiokey_loop",
    "seqaudiokey_oneshot",
    "seqdir_left",
    "seqdir_right",
    "seqinterpolation_assign",
    "seqinterpolation_lerp",
    "seqplay_loop",
    "seqplay_oneshot",
    "seqplay_pingpong",
    "seqtextkey_bottom",
    "seqtextkey_center",
    "seqtextkey_justify",
    "seqtextkey_left",
    "seqtextkey_middle",
    "seqtextkey_right",
    "seqtextkey_top",
    "seqtracktype_audio",
    "seqtracktype_bool",
    "seqtracktype_clipmask",
    "seqtracktype_clipmask_mask",
    "seqtracktype_clipmask_subject",
    "seqtracktype_color",
    "seqtracktype_colour",
    "seqtracktype_empty",
    "seqtracktype_graphic",
    "seqtracktype_group",
    "seqtracktype_instance",
    "seqtracktype_message",
    "seqtracktype_moment",
    "seqtracktype_particlesystem",
    "seqtracktype_real",
    "seqtracktype_sequence",
    "seqtracktype_spriteframes",
    "seqtracktype_string",
    "seqtracktype_text",
    "shadowColor",
    "shadowColour",
    "shadowOffsetX",
    "shadowOffsetY",
    "shadowSoftness",
    "sprite_add_ext_error_cancelled",
    "sprite_add_ext_error_decompressfailed",
    "sprite_add_ext_error_loadfailed",
    "sprite_add_ext_error_setupfailed",
    "sprite_add_ext_error_spritenotfound",
    "sprite_add_ext_error_unknown",
    "spritespeed_framespergameframe",
    "spritespeed_framespersecond",
    "surface_r16float",
    "surface_r32float",
    "surface_r8unorm",
    "surface_rg8unorm",
    "surface_rgba16float",
    "surface_rgba32float",
    "surface_rgba4unorm",
    "surface_rgba8unorm",
    "texturegroup_status_fetched",
    "texturegroup_status_loaded",
    "texturegroup_status_loading",
    "texturegroup_status_unloaded",
    "tf_anisotropic",
    "tf_linear",
    "tf_point",
    "thickness",
    "tile_flip",
    "tile_index_mask",
    "tile_mirror",
    "tile_rotate",
    "time_source_expire_after",
    "time_source_expire_nearest",
    "time_source_game",
    "time_source_global",
    "time_source_state_active",
    "time_source_state_initial",
    "time_source_state_paused",
    "time_source_state_stopped",
    "time_source_units_frames",
    "time_source_units_seconds",
    "timezone_local",
    "timezone_utc",
    "tm_countvsyncs",
    "tm_sleep",
    "tm_systemtiming",
    "true",
    "ty_real",
    "ty_string",
    "undefined",
    "vertex_type_color",
    "vertex_type_colour",
    "vertex_type_float1",
    "vertex_type_float2",
    "vertex_type_float3",
    "vertex_type_float4",
    "vertex_type_ubyte4",
    "vertex_usage_binormal",
    "vertex_usage_blendindices",
    "vertex_usage_blendweight",
    "vertex_usage_color",
    "vertex_usage_colour",
    "vertex_usage_depth",
    "vertex_usage_fog",
    "vertex_usage_normal",
    "vertex_usage_position",
    "vertex_usage_psize",
    "vertex_usage_sample",
    "vertex_usage_tangent",
    "vertex_usage_texcoord",
    "video_format_rgba",
    "video_format_yuv",
    "video_status_closed",
    "video_status_paused",
    "video_status_playing",
    "video_status_preparing",
    "vk_add",
    "vk_alt",
    "vk_anykey",
    "vk_backspace",
    "vk_control",
    "vk_decimal",
    "vk_delete",
    "vk_divide",
    "vk_down",
    "vk_end",
    "vk_enter",
    "vk_escape",
    "vk_f1",
    "vk_f10",
    "vk_f11",
    "vk_f12",
    "vk_f2",
    "vk_f3",
    "vk_f4",
    "vk_f5",
    "vk_f6",
    "vk_f7",
    "vk_f8",
    "vk_f9",
    "vk_home",
    "vk_insert",
    "vk_lalt",
    "vk_lcontrol",
    "vk_left",
    "vk_lshift",
    "vk_multiply",
    "vk_nokey",
    "vk_numpad0",
    "vk_numpad1",
    "vk_numpad2",
    "vk_numpad3",
    "vk_numpad4",
    "vk_numpad5",
    "vk_numpad6",
    "vk_numpad7",
    "vk_numpad8",
    "vk_numpad9",
    "vk_pagedown",
    "vk_pageup",
    "vk_pause",
    "vk_printscreen",
    "vk_ralt",
    "vk_rcontrol",
    "vk_return",
    "vk_right",
    "vk_rshift",
    "vk_shift",
    "vk_space",
    "vk_subtract",
    "vk_tab",
    "vk_up",
    "wallpaper_config",
    "wallpaper_subscription_data",
    "wrap"
  ];
  const LANGUAGE_VARIABLES = [
    "alarm",
    "application_surface",
    "argument",
    "argument0",
    "argument1",
    "argument2",
    "argument3",
    "argument4",
    "argument5",
    "argument6",
    "argument7",
    "argument8",
    "argument9",
    "argument10",
    "argument11",
    "argument12",
    "argument13",
    "argument14",
    "argument15",
    "argument_count",
    "async_load",
    "background_color",
    "background_colour",
    "background_showcolor",
    "background_showcolour",
    "bbox_bottom",
    "bbox_left",
    "bbox_right",
    "bbox_top",
    "browser_height",
    "browser_width",
    "colour?ColourTrack",
    "current_day",
    "current_hour",
    "current_minute",
    "current_month",
    "current_second",
    "current_time",
    "current_weekday",
    "current_year",
    "cursor_sprite",
    "debug_mode",
    "delta_time",
    "depth",
    "direction",
    "display_aa",
    "drawn_by_sequence",
    "event_action",
    "event_data",
    "event_number",
    "event_object",
    "event_type",
    "font_texture_page_size",
    "fps",
    "fps_real",
    "friction",
    "game_display_name",
    "game_id",
    "game_project_name",
    "game_save_id",
    "gravity",
    "gravity_direction",
    "health",
    "hspeed",
    "iap_data",
    "id",
    "image_alpha",
    "image_angle",
    "image_blend",
    "image_index",
    "image_number",
    "image_speed",
    "image_xscale",
    "image_yscale",
    "in_collision_tree",
    "in_sequence",
    "instance_count",
    "instance_id",
    "keyboard_key",
    "keyboard_lastchar",
    "keyboard_lastkey",
    "keyboard_string",
    "layer",
    "lives",
    "longMessage",
    "managed",
    "mask_index",
    "message",
    "mouse_button",
    "mouse_lastbutton",
    "mouse_x",
    "mouse_y",
    "object_index",
    "os_browser",
    "os_device",
    "os_type",
    "os_version",
    "path_endaction",
    "path_index",
    "path_orientation",
    "path_position",
    "path_positionprevious",
    "path_scale",
    "path_speed",
    "persistent",
    "phy_active",
    "phy_angular_damping",
    "phy_angular_velocity",
    "phy_bullet",
    "phy_col_normal_x",
    "phy_col_normal_y",
    "phy_collision_points",
    "phy_collision_x",
    "phy_collision_y",
    "phy_com_x",
    "phy_com_y",
    "phy_dynamic",
    "phy_fixed_rotation",
    "phy_inertia",
    "phy_kinematic",
    "phy_linear_damping",
    "phy_linear_velocity_x",
    "phy_linear_velocity_y",
    "phy_mass",
    "phy_position_x",
    "phy_position_xprevious",
    "phy_position_y",
    "phy_position_yprevious",
    "phy_rotation",
    "phy_sleeping",
    "phy_speed",
    "phy_speed_x",
    "phy_speed_y",
    "player_avatar_sprite",
    "player_avatar_url",
    "player_id",
    "player_local",
    "player_type",
    "player_user_id",
    "program_directory",
    "rollback_api_server",
    "rollback_confirmed_frame",
    "rollback_current_frame",
    "rollback_event_id",
    "rollback_event_param",
    "rollback_game_running",
    "room",
    "room_first",
    "room_height",
    "room_last",
    "room_persistent",
    "room_speed",
    "room_width",
    "score",
    "script",
    "sequence_instance",
    "solid",
    "speed",
    "sprite_height",
    "sprite_index",
    "sprite_width",
    "sprite_xoffset",
    "sprite_yoffset",
    "stacktrace",
    "temp_directory",
    "timeline_index",
    "timeline_loop",
    "timeline_position",
    "timeline_running",
    "timeline_speed",
    "view_camera",
    "view_current",
    "view_enabled",
    "view_hport",
    "view_surface_id",
    "view_visible",
    "view_wport",
    "view_xport",
    "view_yport",
    "visible",
    "vspeed",
    "webgl_enabled",
    "working_directory",
    "x",
    "xprevious",
    "xstart",
    "y",
    "yprevious",
    "ystart"
  ];
  return {
    name: "GML",
    case_insensitive: false,
    // language is case-insensitive
    keywords: {
      keyword: KEYWORDS2,
      built_in: BUILT_INS2,
      symbol: SYMBOLS,
      "variable.language": LANGUAGE_VARIABLES
    },
    contains: [
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.APOS_STRING_MODE,
      hljs.QUOTE_STRING_MODE,
      hljs.C_NUMBER_MODE
    ]
  };
}
function golo(hljs) {
  const KEYWORDS2 = [
    "println",
    "readln",
    "print",
    "import",
    "module",
    "function",
    "local",
    "return",
    "let",
    "var",
    "while",
    "for",
    "foreach",
    "times",
    "in",
    "case",
    "when",
    "match",
    "with",
    "break",
    "continue",
    "augment",
    "augmentation",
    "each",
    "find",
    "filter",
    "reduce",
    "if",
    "then",
    "else",
    "otherwise",
    "try",
    "catch",
    "finally",
    "raise",
    "throw",
    "orIfNull",
    "DynamicObject|10",
    "DynamicVariable",
    "struct",
    "Observable",
    "map",
    "set",
    "vector",
    "list",
    "array"
  ];
  return {
    name: "Golo",
    keywords: {
      keyword: KEYWORDS2,
      literal: [
        "true",
        "false",
        "null"
      ]
    },
    contains: [
      hljs.HASH_COMMENT_MODE,
      hljs.QUOTE_STRING_MODE,
      hljs.C_NUMBER_MODE,
      {
        className: "meta",
        begin: "@[A-Za-z]+"
      }
    ]
  };
}
function gradle(hljs) {
  const KEYWORDS2 = [
    "task",
    "project",
    "allprojects",
    "subprojects",
    "artifacts",
    "buildscript",
    "configurations",
    "dependencies",
    "repositories",
    "sourceSets",
    "description",
    "delete",
    "from",
    "into",
    "include",
    "exclude",
    "source",
    "classpath",
    "destinationDir",
    "includes",
    "options",
    "sourceCompatibility",
    "targetCompatibility",
    "group",
    "flatDir",
    "doLast",
    "doFirst",
    "flatten",
    "todir",
    "fromdir",
    "ant",
    "def",
    "abstract",
    "break",
    "case",
    "catch",
    "continue",
    "default",
    "do",
    "else",
    "extends",
    "final",
    "finally",
    "for",
    "if",
    "implements",
    "instanceof",
    "native",
    "new",
    "private",
    "protected",
    "public",
    "return",
    "static",
    "switch",
    "synchronized",
    "throw",
    "throws",
    "transient",
    "try",
    "volatile",
    "while",
    "strictfp",
    "package",
    "import",
    "false",
    "null",
    "super",
    "this",
    "true",
    "antlrtask",
    "checkstyle",
    "codenarc",
    "copy",
    "boolean",
    "byte",
    "char",
    "class",
    "double",
    "float",
    "int",
    "interface",
    "long",
    "short",
    "void",
    "compile",
    "runTime",
    "file",
    "fileTree",
    "abs",
    "any",
    "append",
    "asList",
    "asWritable",
    "call",
    "collect",
    "compareTo",
    "count",
    "div",
    "dump",
    "each",
    "eachByte",
    "eachFile",
    "eachLine",
    "every",
    "find",
    "findAll",
    "flatten",
    "getAt",
    "getErr",
    "getIn",
    "getOut",
    "getText",
    "grep",
    "immutable",
    "inject",
    "inspect",
    "intersect",
    "invokeMethods",
    "isCase",
    "join",
    "leftShift",
    "minus",
    "multiply",
    "newInputStream",
    "newOutputStream",
    "newPrintWriter",
    "newReader",
    "newWriter",
    "next",
    "plus",
    "pop",
    "power",
    "previous",
    "print",
    "println",
    "push",
    "putAt",
    "read",
    "readBytes",
    "readLines",
    "reverse",
    "reverseEach",
    "round",
    "size",
    "sort",
    "splitEachLine",
    "step",
    "subMap",
    "times",
    "toInteger",
    "toList",
    "tokenize",
    "upto",
    "waitForOrKill",
    "withPrintWriter",
    "withReader",
    "withStream",
    "withWriter",
    "withWriterAppend",
    "write",
    "writeLine"
  ];
  return {
    name: "Gradle",
    case_insensitive: true,
    keywords: KEYWORDS2,
    contains: [
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.APOS_STRING_MODE,
      hljs.QUOTE_STRING_MODE,
      hljs.NUMBER_MODE,
      hljs.REGEXP_MODE
    ]
  };
}
function variants(variants2, obj = {}) {
  obj.variants = variants2;
  return obj;
}
function groovy(hljs) {
  const regex = hljs.regex;
  const IDENT_RE2 = "[A-Za-z0-9_$]+";
  const COMMENT = variants([
    hljs.C_LINE_COMMENT_MODE,
    hljs.C_BLOCK_COMMENT_MODE,
    hljs.COMMENT(
      "/\\*\\*",
      "\\*/",
      {
        relevance: 0,
        contains: [
          {
            // eat up @'s in emails to prevent them to be recognized as doctags
            begin: /\w+@/,
            relevance: 0
          },
          {
            className: "doctag",
            begin: "@[A-Za-z]+"
          }
        ]
      }
    )
  ]);
  const REGEXP = {
    className: "regexp",
    begin: /~?\/[^\/\n]+\//,
    contains: [hljs.BACKSLASH_ESCAPE]
  };
  const NUMBER = variants([
    hljs.BINARY_NUMBER_MODE,
    hljs.C_NUMBER_MODE
  ]);
  const STRING = variants(
    [
      {
        begin: /"""/,
        end: /"""/
      },
      {
        begin: /'''/,
        end: /'''/
      },
      {
        begin: "\\$/",
        end: "/\\$",
        relevance: 10
      },
      hljs.APOS_STRING_MODE,
      hljs.QUOTE_STRING_MODE
    ],
    { className: "string" }
  );
  const CLASS_DEFINITION = {
    match: [
      /(class|interface|trait|enum|record|extends|implements)/,
      /\s+/,
      hljs.UNDERSCORE_IDENT_RE
    ],
    scope: {
      1: "keyword",
      3: "title.class"
    }
  };
  const TYPES2 = [
    "byte",
    "short",
    "char",
    "int",
    "long",
    "boolean",
    "float",
    "double",
    "void"
  ];
  const KEYWORDS2 = [
    // groovy specific keywords
    "def",
    "as",
    "in",
    "assert",
    "trait",
    // common keywords with Java
    "abstract",
    "static",
    "volatile",
    "transient",
    "public",
    "private",
    "protected",
    "synchronized",
    "final",
    "class",
    "interface",
    "enum",
    "if",
    "else",
    "for",
    "while",
    "switch",
    "case",
    "break",
    "default",
    "continue",
    "throw",
    "throws",
    "try",
    "catch",
    "finally",
    "implements",
    "extends",
    "new",
    "import",
    "package",
    "return",
    "instanceof",
    "var"
  ];
  return {
    name: "Groovy",
    keywords: {
      "variable.language": "this super",
      literal: "true false null",
      type: TYPES2,
      keyword: KEYWORDS2
    },
    contains: [
      hljs.SHEBANG({
        binary: "groovy",
        relevance: 10
      }),
      COMMENT,
      STRING,
      REGEXP,
      NUMBER,
      CLASS_DEFINITION,
      {
        className: "meta",
        begin: "@[A-Za-z]+",
        relevance: 0
      },
      {
        // highlight map keys and named parameters as attrs
        className: "attr",
        begin: IDENT_RE2 + "[ 	]*:",
        relevance: 0
      },
      {
        // catch middle element of the ternary operator
        // to avoid highlight it as a label, named parameter, or map key
        begin: /\?/,
        end: /:/,
        relevance: 0,
        contains: [
          COMMENT,
          STRING,
          REGEXP,
          NUMBER,
          "self"
        ]
      },
      {
        // highlight labeled statements
        className: "symbol",
        begin: "^[ 	]*" + regex.lookahead(IDENT_RE2 + ":"),
        excludeBegin: true,
        end: IDENT_RE2 + ":",
        relevance: 0
      }
    ],
    illegal: /#|<\//
  };
}
function haml(hljs) {
  return {
    name: "HAML",
    case_insensitive: true,
    contains: [
      {
        className: "meta",
        begin: "^!!!( (5|1\\.1|Strict|Frameset|Basic|Mobile|RDFa|XML\\b.*))?$",
        relevance: 10
      },
      // FIXME these comments should be allowed to span indented lines
      hljs.COMMENT(
        "^\\s*(!=#|=#|-#|/).*$",
        null,
        { relevance: 0 }
      ),
      {
        begin: "^\\s*(-|=|!=)(?!#)",
        end: /$/,
        subLanguage: "ruby",
        excludeBegin: true,
        excludeEnd: true
      },
      {
        className: "tag",
        begin: "^\\s*%",
        contains: [
          {
            className: "selector-tag",
            begin: "\\w+"
          },
          {
            className: "selector-id",
            begin: "#[\\w-]+"
          },
          {
            className: "selector-class",
            begin: "\\.[\\w-]+"
          },
          {
            begin: /\{\s*/,
            end: /\s*\}/,
            contains: [
              {
                begin: ":\\w+\\s*=>",
                end: ",\\s+",
                returnBegin: true,
                endsWithParent: true,
                contains: [
                  {
                    className: "attr",
                    begin: ":\\w+"
                  },
                  hljs.APOS_STRING_MODE,
                  hljs.QUOTE_STRING_MODE,
                  {
                    begin: "\\w+",
                    relevance: 0
                  }
                ]
              }
            ]
          },
          {
            begin: "\\(\\s*",
            end: "\\s*\\)",
            excludeEnd: true,
            contains: [
              {
                begin: "\\w+\\s*=",
                end: "\\s+",
                returnBegin: true,
                endsWithParent: true,
                contains: [
                  {
                    className: "attr",
                    begin: "\\w+",
                    relevance: 0
                  },
                  hljs.APOS_STRING_MODE,
                  hljs.QUOTE_STRING_MODE,
                  {
                    begin: "\\w+",
                    relevance: 0
                  }
                ]
              }
            ]
          }
        ]
      },
      { begin: "^\\s*[=~]\\s*" },
      {
        begin: /#\{/,
        end: /\}/,
        subLanguage: "ruby",
        excludeBegin: true,
        excludeEnd: true
      }
    ]
  };
}
function handlebars(hljs) {
  const regex = hljs.regex;
  const BUILT_INS2 = {
    $pattern: /[\w.\/]+/,
    built_in: [
      "action",
      "bindattr",
      "collection",
      "component",
      "concat",
      "debugger",
      "each",
      "each-in",
      "get",
      "hash",
      "if",
      "in",
      "input",
      "link-to",
      "loc",
      "log",
      "lookup",
      "mut",
      "outlet",
      "partial",
      "query-params",
      "render",
      "template",
      "textarea",
      "unbound",
      "unless",
      "view",
      "with",
      "yield"
    ]
  };
  const LITERALS2 = {
    $pattern: /[\w.\/]+/,
    literal: [
      "true",
      "false",
      "undefined",
      "null"
    ]
  };
  const DOUBLE_QUOTED_ID_REGEX = /""|"[^"]+"/;
  const SINGLE_QUOTED_ID_REGEX = /''|'[^']+'/;
  const BRACKET_QUOTED_ID_REGEX = /\[\]|\[[^\]]+\]/;
  const PLAIN_ID_REGEX = /[^\s!"#%&'()*+,.\/;<=>@\[\\\]^`{|}~]+/;
  const PATH_DELIMITER_REGEX = /(\.|\/)/;
  const ANY_ID = regex.either(
    DOUBLE_QUOTED_ID_REGEX,
    SINGLE_QUOTED_ID_REGEX,
    BRACKET_QUOTED_ID_REGEX,
    PLAIN_ID_REGEX
  );
  const IDENTIFIER_REGEX = regex.concat(
    regex.optional(/\.|\.\/|\//),
    // relative or absolute path
    ANY_ID,
    regex.anyNumberOfTimes(regex.concat(
      PATH_DELIMITER_REGEX,
      ANY_ID
    ))
  );
  const HASH_PARAM_REGEX = regex.concat(
    "(",
    BRACKET_QUOTED_ID_REGEX,
    "|",
    PLAIN_ID_REGEX,
    ")(?==)"
  );
  const HELPER_NAME_OR_PATH_EXPRESSION = { begin: IDENTIFIER_REGEX };
  const HELPER_PARAMETER = hljs.inherit(HELPER_NAME_OR_PATH_EXPRESSION, { keywords: LITERALS2 });
  const SUB_EXPRESSION = {
    begin: /\(/,
    end: /\)/
    // the "contains" is added below when all necessary sub-modes are defined
  };
  const HASH = {
    // fka "attribute-assignment", parameters of the form 'key=value'
    className: "attr",
    begin: HASH_PARAM_REGEX,
    relevance: 0,
    starts: {
      begin: /=/,
      end: /=/,
      starts: { contains: [
        hljs.NUMBER_MODE,
        hljs.QUOTE_STRING_MODE,
        hljs.APOS_STRING_MODE,
        HELPER_PARAMETER,
        SUB_EXPRESSION
      ] }
    }
  };
  const BLOCK_PARAMS = {
    // parameters of the form '{{#with x as | y |}}...{{/with}}'
    begin: /as\s+\|/,
    keywords: { keyword: "as" },
    end: /\|/,
    contains: [
      {
        // define sub-mode in order to prevent highlighting of block-parameter named "as"
        begin: /\w+/
      }
    ]
  };
  const HELPER_PARAMETERS = {
    contains: [
      hljs.NUMBER_MODE,
      hljs.QUOTE_STRING_MODE,
      hljs.APOS_STRING_MODE,
      BLOCK_PARAMS,
      HASH,
      HELPER_PARAMETER,
      SUB_EXPRESSION
    ],
    returnEnd: true
    // the property "end" is defined through inheritance when the mode is used. If depends
    // on the surrounding mode, but "endsWithParent" does not work here (i.e. it includes the
    // end-token of the surrounding mode)
  };
  const SUB_EXPRESSION_CONTENTS = hljs.inherit(HELPER_NAME_OR_PATH_EXPRESSION, {
    className: "name",
    keywords: BUILT_INS2,
    starts: hljs.inherit(HELPER_PARAMETERS, { end: /\)/ })
  });
  SUB_EXPRESSION.contains = [SUB_EXPRESSION_CONTENTS];
  const OPENING_BLOCK_MUSTACHE_CONTENTS = hljs.inherit(HELPER_NAME_OR_PATH_EXPRESSION, {
    keywords: BUILT_INS2,
    className: "name",
    starts: hljs.inherit(HELPER_PARAMETERS, { end: /\}\}/ })
  });
  const CLOSING_BLOCK_MUSTACHE_CONTENTS = hljs.inherit(HELPER_NAME_OR_PATH_EXPRESSION, {
    keywords: BUILT_INS2,
    className: "name"
  });
  const BASIC_MUSTACHE_CONTENTS = hljs.inherit(HELPER_NAME_OR_PATH_EXPRESSION, {
    className: "name",
    keywords: BUILT_INS2,
    starts: hljs.inherit(HELPER_PARAMETERS, { end: /\}\}/ })
  });
  const ESCAPE_MUSTACHE_WITH_PRECEEDING_BACKSLASH = {
    begin: /\\\{\{/,
    skip: true
  };
  const PREVENT_ESCAPE_WITH_ANOTHER_PRECEEDING_BACKSLASH = {
    begin: /\\\\(?=\{\{)/,
    skip: true
  };
  return {
    name: "Handlebars",
    aliases: [
      "hbs",
      "html.hbs",
      "html.handlebars",
      "htmlbars"
    ],
    case_insensitive: true,
    subLanguage: "xml",
    contains: [
      ESCAPE_MUSTACHE_WITH_PRECEEDING_BACKSLASH,
      PREVENT_ESCAPE_WITH_ANOTHER_PRECEEDING_BACKSLASH,
      hljs.COMMENT(/\{\{!--/, /--\}\}/),
      hljs.COMMENT(/\{\{!/, /\}\}/),
      {
        // open raw block "{{{{raw}}}} content not evaluated {{{{/raw}}}}"
        className: "template-tag",
        begin: /\{\{\{\{(?!\/)/,
        end: /\}\}\}\}/,
        contains: [OPENING_BLOCK_MUSTACHE_CONTENTS],
        starts: {
          end: /\{\{\{\{\//,
          returnEnd: true,
          subLanguage: "xml"
        }
      },
      {
        // close raw block
        className: "template-tag",
        begin: /\{\{\{\{\//,
        end: /\}\}\}\}/,
        contains: [CLOSING_BLOCK_MUSTACHE_CONTENTS]
      },
      {
        // open block statement
        className: "template-tag",
        begin: /\{\{#/,
        end: /\}\}/,
        contains: [OPENING_BLOCK_MUSTACHE_CONTENTS]
      },
      {
        className: "template-tag",
        begin: /\{\{(?=else\}\})/,
        end: /\}\}/,
        keywords: "else"
      },
      {
        className: "template-tag",
        begin: /\{\{(?=else if)/,
        end: /\}\}/,
        keywords: "else if"
      },
      {
        // closing block statement
        className: "template-tag",
        begin: /\{\{\//,
        end: /\}\}/,
        contains: [CLOSING_BLOCK_MUSTACHE_CONTENTS]
      },
      {
        // template variable or helper-call that is NOT html-escaped
        className: "template-variable",
        begin: /\{\{\{/,
        end: /\}\}\}/,
        contains: [BASIC_MUSTACHE_CONTENTS]
      },
      {
        // template variable or helper-call that is html-escaped
        className: "template-variable",
        begin: /\{\{/,
        end: /\}\}/,
        contains: [BASIC_MUSTACHE_CONTENTS]
      }
    ]
  };
}
function haskell(hljs) {
  const decimalDigits2 = "([0-9]_*)+";
  const hexDigits2 = "([0-9a-fA-F]_*)+";
  const binaryDigits = "([01]_*)+";
  const octalDigits = "([0-7]_*)+";
  const ascSymbol = "[!#$%&*+.\\/<=>?@\\\\^~-]";
  const uniSymbol = "(\\p{S}|\\p{P})";
  const special = "[(),;\\[\\]`|{}]";
  const symbol = `(${ascSymbol}|(?!(${special}|[_:"']))${uniSymbol})`;
  const COMMENT = { variants: [
    // Double dash forms a valid comment only if it's not part of legal lexeme.
    // See: Haskell 98 report: https://www.haskell.org/onlinereport/lexemes.html
    //
    // The commented code does the job, but we can't use negative lookbehind,
    // due to poor support by Safari browser.
    // > hljs.COMMENT(`(?<!${symbol})--+(?!${symbol})`, '$'),
    // So instead, we'll add a no-markup rule before the COMMENT rule in the rules list
    // to match the problematic infix operators that contain double dash.
    hljs.COMMENT("--+", "$"),
    hljs.COMMENT(
      /\{-/,
      /-\}/,
      { contains: ["self"] }
    )
  ] };
  const PRAGMA = {
    className: "meta",
    begin: /\{-#/,
    end: /#-\}/
  };
  const PREPROCESSOR = {
    className: "meta",
    begin: "^#",
    end: "$"
  };
  const CONSTRUCTOR = {
    className: "type",
    begin: "\\b[A-Z][\\w']*",
    // TODO: other constructors (build-in, infix).
    relevance: 0
  };
  const LIST = {
    begin: "\\(",
    end: "\\)",
    illegal: '"',
    contains: [
      PRAGMA,
      PREPROCESSOR,
      {
        className: "type",
        begin: "\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"
      },
      hljs.inherit(hljs.TITLE_MODE, { begin: "[_a-z][\\w']*" }),
      COMMENT
    ]
  };
  const RECORD = {
    begin: /\{/,
    end: /\}/,
    contains: LIST.contains
  };
  const NUMBER = {
    className: "number",
    relevance: 0,
    variants: [
      // decimal floating-point-literal (subsumes decimal-literal)
      { match: `\\b(${decimalDigits2})(\\.(${decimalDigits2}))?([eE][+-]?(${decimalDigits2}))?\\b` },
      // hexadecimal floating-point-literal (subsumes hexadecimal-literal)
      { match: `\\b0[xX]_*(${hexDigits2})(\\.(${hexDigits2}))?([pP][+-]?(${decimalDigits2}))?\\b` },
      // octal-literal
      { match: `\\b0[oO](${octalDigits})\\b` },
      // binary-literal
      { match: `\\b0[bB](${binaryDigits})\\b` }
    ]
  };
  return {
    name: "Haskell",
    aliases: ["hs"],
    keywords: "let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",
    unicodeRegex: true,
    contains: [
      // Top-level constructions.
      {
        beginKeywords: "module",
        end: "where",
        keywords: "module where",
        contains: [
          LIST,
          COMMENT
        ],
        illegal: "\\W\\.|;"
      },
      {
        begin: "\\bimport\\b",
        end: "$",
        keywords: "import qualified as hiding",
        contains: [
          LIST,
          COMMENT
        ],
        illegal: "\\W\\.|;"
      },
      {
        className: "class",
        begin: "^(\\s*)?(class|instance)\\b",
        end: "where",
        keywords: "class family instance where",
        contains: [
          CONSTRUCTOR,
          LIST,
          COMMENT
        ]
      },
      {
        className: "class",
        begin: "\\b(data|(new)?type)\\b",
        end: "$",
        keywords: "data family type newtype deriving",
        contains: [
          PRAGMA,
          CONSTRUCTOR,
          LIST,
          RECORD,
          COMMENT
        ]
      },
      {
        beginKeywords: "default",
        end: "$",
        contains: [
          CONSTRUCTOR,
          LIST,
          COMMENT
        ]
      },
      {
        beginKeywords: "infix infixl infixr",
        end: "$",
        contains: [
          hljs.C_NUMBER_MODE,
          COMMENT
        ]
      },
      {
        begin: "\\bforeign\\b",
        end: "$",
        keywords: "foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",
        contains: [
          CONSTRUCTOR,
          hljs.QUOTE_STRING_MODE,
          COMMENT
        ]
      },
      {
        className: "meta",
        begin: "#!\\/usr\\/bin\\/env runhaskell",
        end: "$"
      },
      // "Whitespaces".
      PRAGMA,
      PREPROCESSOR,
      // Literals and names.
      // Single characters.
      {
        scope: "string",
        begin: /'(?=\\?.')/,
        end: /'/,
        contains: [
          {
            scope: "char.escape",
            match: /\\./
          }
        ]
      },
      hljs.QUOTE_STRING_MODE,
      NUMBER,
      CONSTRUCTOR,
      hljs.inherit(hljs.TITLE_MODE, { begin: "^[_a-z][\\w']*" }),
      // No markup, prevents infix operators from being recognized as comments.
      { begin: `(?!-)${symbol}--+|--+(?!-)${symbol}` },
      COMMENT,
      {
        // No markup, relevance booster
        begin: "->|<-"
      }
    ]
  };
}
function haxe(hljs) {
  const IDENT_RE2 = "[a-zA-Z_$][a-zA-Z0-9_$]*";
  const HAXE_NUMBER_RE = /(-?)(\b0[xX][a-fA-F0-9_]+|(\b\d+(\.[\d_]*)?|\.[\d_]+)(([eE][-+]?\d+)|i32|u32|i64|f64)?)/;
  const HAXE_BASIC_TYPES = "Int Float String Bool Dynamic Void Array ";
  return {
    name: "Haxe",
    aliases: ["hx"],
    keywords: {
      keyword: "abstract break case cast catch continue default do dynamic else enum extern final for function here if import in inline is macro never new override package private get set public return static super switch this throw trace try typedef untyped using var while " + HAXE_BASIC_TYPES,
      built_in: "trace this",
      literal: "true false null _"
    },
    contains: [
      {
        className: "string",
        // interpolate-able strings
        begin: "'",
        end: "'",
        contains: [
          hljs.BACKSLASH_ESCAPE,
          {
            className: "subst",
            // interpolation
            begin: /\$\{/,
            end: /\}/
          },
          {
            className: "subst",
            // interpolation
            begin: /\$/,
            end: /\W\}/
          }
        ]
      },
      hljs.QUOTE_STRING_MODE,
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      {
        className: "number",
        begin: HAXE_NUMBER_RE,
        relevance: 0
      },
      {
        className: "variable",
        begin: "\\$" + IDENT_RE2
      },
      {
        className: "meta",
        // compiler meta
        begin: /@:?/,
        end: /\(|$/,
        excludeEnd: true
      },
      {
        className: "meta",
        // compiler conditionals
        begin: "#",
        end: "$",
        keywords: { keyword: "if else elseif end error" }
      },
      {
        className: "type",
        // function types
        begin: /:[ \t]*/,
        end: /[^A-Za-z0-9_ \t\->]/,
        excludeBegin: true,
        excludeEnd: true,
        relevance: 0
      },
      {
        className: "type",
        // types
        begin: /:[ \t]*/,
        end: /\W/,
        excludeBegin: true,
        excludeEnd: true
      },
      {
        className: "type",
        // instantiation
        beginKeywords: "new",
        end: /\W/,
        excludeBegin: true,
        excludeEnd: true
      },
      {
        className: "title.class",
        // enums
        beginKeywords: "enum",
        end: /\{/,
        contains: [hljs.TITLE_MODE]
      },
      {
        className: "title.class",
        // abstracts
        begin: "\\babstract\\b(?=\\s*" + hljs.IDENT_RE + "\\s*\\()",
        end: /[\{$]/,
        contains: [
          {
            className: "type",
            begin: /\(/,
            end: /\)/,
            excludeBegin: true,
            excludeEnd: true
          },
          {
            className: "type",
            begin: /from +/,
            end: /\W/,
            excludeBegin: true,
            excludeEnd: true
          },
          {
            className: "type",
            begin: /to +/,
            end: /\W/,
            excludeBegin: true,
            excludeEnd: true
          },
          hljs.TITLE_MODE
        ],
        keywords: { keyword: "abstract from to" }
      },
      {
        className: "title.class",
        // classes
        begin: /\b(class|interface) +/,
        end: /[\{$]/,
        excludeEnd: true,
        keywords: "class interface",
        contains: [
          {
            className: "keyword",
            begin: /\b(extends|implements) +/,
            keywords: "extends implements",
            contains: [
              {
                className: "type",
                begin: hljs.IDENT_RE,
                relevance: 0
              }
            ]
          },
          hljs.TITLE_MODE
        ]
      },
      {
        className: "title.function",
        beginKeywords: "function",
        end: /\(/,
        excludeEnd: true,
        illegal: /\S/,
        contains: [hljs.TITLE_MODE]
      }
    ],
    illegal: /<\//
  };
}
function hsp(hljs) {
  return {
    name: "HSP",
    case_insensitive: true,
    keywords: {
      $pattern: /[\w._]+/,
      keyword: "goto gosub return break repeat loop continue wait await dim sdim foreach dimtype dup dupptr end stop newmod delmod mref run exgoto on mcall assert logmes newlab resume yield onexit onerror onkey onclick oncmd exist delete mkdir chdir dirlist bload bsave bcopy memfile if else poke wpoke lpoke getstr chdpm memexpand memcpy memset notesel noteadd notedel noteload notesave randomize noteunsel noteget split strrep setease button chgdisp exec dialog mmload mmplay mmstop mci pset pget syscolor mes print title pos circle cls font sysfont objsize picload color palcolor palette redraw width gsel gcopy gzoom gmode bmpsave hsvcolor getkey listbox chkbox combox input mesbox buffer screen bgscr mouse objsel groll line clrobj boxf objprm objmode stick grect grotate gsquare gradf objimage objskip objenable celload celdiv celput newcom querycom delcom cnvstow comres axobj winobj sendmsg comevent comevarg sarrayconv callfunc cnvwtos comevdisp libptr system hspstat hspver stat cnt err strsize looplev sublev iparam wparam lparam refstr refdval int rnd strlen length length2 length3 length4 vartype gettime peek wpeek lpeek varptr varuse noteinfo instr abs limit getease str strmid strf getpath strtrim sin cos tan atan sqrt double absf expf logf limitf powf geteasef mousex mousey mousew hwnd hinstance hdc ginfo objinfo dirinfo sysinfo thismod __hspver__ __hsp30__ __date__ __time__ __line__ __file__ _debug __hspdef__ and or xor not screen_normal screen_palette screen_hide screen_fixedsize screen_tool screen_frame gmode_gdi gmode_mem gmode_rgb0 gmode_alpha gmode_rgb0alpha gmode_add gmode_sub gmode_pixela ginfo_mx ginfo_my ginfo_act ginfo_sel ginfo_wx1 ginfo_wy1 ginfo_wx2 ginfo_wy2 ginfo_vx ginfo_vy ginfo_sizex ginfo_sizey ginfo_winx ginfo_winy ginfo_mesx ginfo_mesy ginfo_r ginfo_g ginfo_b ginfo_paluse ginfo_dispx ginfo_dispy ginfo_cx ginfo_cy ginfo_intid ginfo_newid ginfo_sx ginfo_sy objinfo_mode objinfo_bmscr objinfo_hwnd notemax notesize dir_cur dir_exe dir_win dir_sys dir_cmdline dir_desktop dir_mydoc dir_tv font_normal font_bold font_italic font_underline font_strikeout font_antialias objmode_normal objmode_guifont objmode_usefont gsquare_grad msgothic msmincho do until while wend for next _break _continue switch case default swbreak swend ddim ldim alloc m_pi rad2deg deg2rad ease_linear ease_quad_in ease_quad_out ease_quad_inout ease_cubic_in ease_cubic_out ease_cubic_inout ease_quartic_in ease_quartic_out ease_quartic_inout ease_bounce_in ease_bounce_out ease_bounce_inout ease_shake_in ease_shake_out ease_shake_inout ease_loop"
    },
    contains: [
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.QUOTE_STRING_MODE,
      hljs.APOS_STRING_MODE,
      {
        // multi-line string
        className: "string",
        begin: /\{"/,
        end: /"\}/,
        contains: [hljs.BACKSLASH_ESCAPE]
      },
      hljs.COMMENT(";", "$", { relevance: 0 }),
      {
        // pre-processor
        className: "meta",
        begin: "#",
        end: "$",
        keywords: { keyword: "addion cfunc cmd cmpopt comfunc const defcfunc deffunc define else endif enum epack func global if ifdef ifndef include modcfunc modfunc modinit modterm module pack packopt regcmd runtime undef usecom uselib" },
        contains: [
          hljs.inherit(hljs.QUOTE_STRING_MODE, { className: "string" }),
          hljs.NUMBER_MODE,
          hljs.C_NUMBER_MODE,
          hljs.C_LINE_COMMENT_MODE,
          hljs.C_BLOCK_COMMENT_MODE
        ]
      },
      {
        // label
        className: "symbol",
        begin: "^\\*(\\w+|@)"
      },
      hljs.NUMBER_MODE,
      hljs.C_NUMBER_MODE
    ]
  };
}
function http(hljs) {
  const regex = hljs.regex;
  const VERSION = "HTTP/([32]|1\\.[01])";
  const HEADER_NAME = /[A-Za-z][A-Za-z0-9-]*/;
  const HEADER = {
    className: "attribute",
    begin: regex.concat("^", HEADER_NAME, "(?=\\:\\s)"),
    starts: { contains: [
      {
        className: "punctuation",
        begin: /: /,
        relevance: 0,
        starts: {
          end: "$",
          relevance: 0
        }
      }
    ] }
  };
  const HEADERS_AND_BODY = [
    HEADER,
    {
      begin: "\\n\\n",
      starts: {
        subLanguage: [],
        endsWithParent: true
      }
    }
  ];
  return {
    name: "HTTP",
    aliases: ["https"],
    illegal: /\S/,
    contains: [
      // response
      {
        begin: "^(?=" + VERSION + " \\d{3})",
        end: /$/,
        contains: [
          {
            className: "meta",
            begin: VERSION
          },
          {
            className: "number",
            begin: "\\b\\d{3}\\b"
          }
        ],
        starts: {
          end: /\b\B/,
          illegal: /\S/,
          contains: HEADERS_AND_BODY
        }
      },
      // request
      {
        begin: "(?=^[A-Z]+ (.*?) " + VERSION + "$)",
        end: /$/,
        contains: [
          {
            className: "string",
            begin: " ",
            end: " ",
            excludeBegin: true,
            excludeEnd: true
          },
          {
            className: "meta",
            begin: VERSION
          },
          {
            className: "keyword",
            begin: "[A-Z]+"
          }
        ],
        starts: {
          end: /\b\B/,
          illegal: /\S/,
          contains: HEADERS_AND_BODY
        }
      },
      // to allow headers to work even without a preamble
      hljs.inherit(HEADER, { relevance: 0 })
    ]
  };
}
function hy(hljs) {
  const SYMBOLSTART = "a-zA-Z_\\-!.?+*=<>&#'";
  const SYMBOL_RE = "[" + SYMBOLSTART + "][" + SYMBOLSTART + "0-9/;:]*";
  const keywords2 = {
    $pattern: SYMBOL_RE,
    built_in: (
      // keywords
      "!= % %= & &= * ** **= *= *map + += , --build-class-- --import-- -= . / // //= /= < << <<= <= = > >= >> >>= @ @= ^ ^= abs accumulate all and any ap-compose ap-dotimes ap-each ap-each-while ap-filter ap-first ap-if ap-last ap-map ap-map-when ap-pipe ap-reduce ap-reject apply as-> ascii assert assoc bin break butlast callable calling-module-name car case cdr chain chr coll? combinations compile compress cond cons cons? continue count curry cut cycle dec def default-method defclass defmacro defmacro-alias defmacro/g! defmain defmethod defmulti defn defn-alias defnc defnr defreader defseq del delattr delete-route dict-comp dir disassemble dispatch-reader-macro distinct divmod do doto drop drop-last drop-while empty? end-sequence eval eval-and-compile eval-when-compile even? every? except exec filter first flatten float? fn fnc fnr for for* format fraction genexpr gensym get getattr global globals group-by hasattr hash hex id identity if if* if-not if-python2 import in inc input instance? integer integer-char? integer? interleave interpose is is-coll is-cons is-empty is-even is-every is-float is-instance is-integer is-integer-char is-iterable is-iterator is-keyword is-neg is-none is-not is-numeric is-odd is-pos is-string is-symbol is-zero isinstance islice issubclass iter iterable? iterate iterator? keyword keyword? lambda last len let lif lif-not list* list-comp locals loop macro-error macroexpand macroexpand-1 macroexpand-all map max merge-with method-decorator min multi-decorator multicombinations name neg? next none? nonlocal not not-in not? nth numeric? oct odd? open or ord partition permutations pos? post-route postwalk pow prewalk print product profile/calls profile/cpu put-route quasiquote quote raise range read read-str recursive-replace reduce remove repeat repeatedly repr require rest round route route-with-methods rwm second seq set-comp setattr setv some sorted string string? sum switch symbol? take take-nth take-while tee try unless unquote unquote-splicing vars walk when while with with* with-decorator with-gensyms xi xor yield yield-from zero? zip zip-longest | |= ~"
    )
  };
  const SIMPLE_NUMBER_RE = "[-+]?\\d+(\\.\\d+)?";
  const SYMBOL = {
    begin: SYMBOL_RE,
    relevance: 0
  };
  const NUMBER = {
    className: "number",
    begin: SIMPLE_NUMBER_RE,
    relevance: 0
  };
  const STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null });
  const COMMENT = hljs.COMMENT(
    ";",
    "$",
    { relevance: 0 }
  );
  const LITERAL = {
    className: "literal",
    begin: /\b([Tt]rue|[Ff]alse|nil|None)\b/
  };
  const COLLECTION = {
    begin: "[\\[\\{]",
    end: "[\\]\\}]",
    relevance: 0
  };
  const HINT = {
    className: "comment",
    begin: "\\^" + SYMBOL_RE
  };
  const HINT_COL = hljs.COMMENT("\\^\\{", "\\}");
  const KEY = {
    className: "symbol",
    begin: "[:]{1,2}" + SYMBOL_RE
  };
  const LIST = {
    begin: "\\(",
    end: "\\)"
  };
  const BODY = {
    endsWithParent: true,
    relevance: 0
  };
  const NAME = {
    className: "name",
    relevance: 0,
    keywords: keywords2,
    begin: SYMBOL_RE,
    starts: BODY
  };
  const DEFAULT_CONTAINS = [
    LIST,
    STRING,
    HINT,
    HINT_COL,
    COMMENT,
    KEY,
    COLLECTION,
    NUMBER,
    LITERAL,
    SYMBOL
  ];
  LIST.contains = [
    hljs.COMMENT("comment", ""),
    NAME,
    BODY
  ];
  BODY.contains = DEFAULT_CONTAINS;
  COLLECTION.contains = DEFAULT_CONTAINS;
  return {
    name: "Hy",
    aliases: ["hylang"],
    illegal: /\S/,
    contains: [
      hljs.SHEBANG(),
      LIST,
      STRING,
      HINT,
      HINT_COL,
      COMMENT,
      KEY,
      COLLECTION,
      NUMBER,
      LITERAL
    ]
  };
}
function inform7(hljs) {
  const START_BRACKET = "\\[";
  const END_BRACKET = "\\]";
  return {
    name: "Inform 7",
    aliases: ["i7"],
    case_insensitive: true,
    keywords: {
      // Some keywords more or less unique to I7, for relevance.
      keyword: (
        // kind:
        "thing room person man woman animal container supporter backdrop door scenery open closed locked inside gender is are say understand kind of rule"
      )
    },
    contains: [
      {
        className: "string",
        begin: '"',
        end: '"',
        relevance: 0,
        contains: [
          {
            className: "subst",
            begin: START_BRACKET,
            end: END_BRACKET
          }
        ]
      },
      {
        className: "section",
        begin: /^(Volume|Book|Part|Chapter|Section|Table)\b/,
        end: "$"
      },
      {
        // Rule definition
        // This is here for relevance.
        begin: /^(Check|Carry out|Report|Instead of|To|Rule|When|Before|After)\b/,
        end: ":",
        contains: [
          {
            // Rule name
            begin: "\\(This",
            end: "\\)"
          }
        ]
      },
      {
        className: "comment",
        begin: START_BRACKET,
        end: END_BRACKET,
        contains: ["self"]
      }
    ]
  };
}
function irpf90(hljs) {
  const regex = hljs.regex;
  const PARAMS = {
    className: "params",
    begin: "\\(",
    end: "\\)"
  };
  const OPTIONAL_NUMBER_SUFFIX = /(_[a-z_\d]+)?/;
  const OPTIONAL_NUMBER_EXP = /([de][+-]?\d+)?/;
  const NUMBER = {
    className: "number",
    variants: [
      { begin: regex.concat(/\b\d+/, /\.(\d*)/, OPTIONAL_NUMBER_EXP, OPTIONAL_NUMBER_SUFFIX) },
      { begin: regex.concat(/\b\d+/, OPTIONAL_NUMBER_EXP, OPTIONAL_NUMBER_SUFFIX) },
      { begin: regex.concat(/\.\d+/, OPTIONAL_NUMBER_EXP, OPTIONAL_NUMBER_SUFFIX) }
    ],
    relevance: 0
  };
  const F_KEYWORDS = {
    literal: ".False. .True.",
    keyword: "kind do while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated  c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure integer real character complex logical dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data begin_provider &begin_provider end_provider begin_shell end_shell begin_template end_template subst assert touch soft_touch provide no_dep free irp_if irp_else irp_endif irp_write irp_read",
    built_in: "alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_of acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image IRP_ALIGN irp_here"
  };
  return {
    name: "IRPF90",
    case_insensitive: true,
    keywords: F_KEYWORDS,
    illegal: /\/\*/,
    contains: [
      hljs.inherit(hljs.APOS_STRING_MODE, {
        className: "string",
        relevance: 0
      }),
      hljs.inherit(hljs.QUOTE_STRING_MODE, {
        className: "string",
        relevance: 0
      }),
      {
        className: "function",
        beginKeywords: "subroutine function program",
        illegal: "[${=\\n]",
        contains: [
          hljs.UNDERSCORE_TITLE_MODE,
          PARAMS
        ]
      },
      hljs.COMMENT("!", "$", { relevance: 0 }),
      hljs.COMMENT("begin_doc", "end_doc", { relevance: 10 }),
      NUMBER
    ]
  };
}
function isbl(hljs) {
  const UNDERSCORE_IDENT_RE = "[A-Za-zА-Яа-яёЁ_!][A-Za-zА-Яа-яёЁ_0-9]*";
  const FUNCTION_NAME_IDENT_RE = "[A-Za-zА-Яа-яёЁ_][A-Za-zА-Яа-яёЁ_0-9]*";
  const KEYWORD = "and и else иначе endexcept endfinally endforeach конецвсе endif конецесли endwhile конецпока except exitfor finally foreach все if если in в not не or или try while пока ";
  const sysres_constants = "SYSRES_CONST_ACCES_RIGHT_TYPE_EDIT SYSRES_CONST_ACCES_RIGHT_TYPE_FULL SYSRES_CONST_ACCES_RIGHT_TYPE_VIEW SYSRES_CONST_ACCESS_MODE_REQUISITE_CODE SYSRES_CONST_ACCESS_NO_ACCESS_VIEW SYSRES_CONST_ACCESS_NO_ACCESS_VIEW_CODE SYSRES_CONST_ACCESS_RIGHTS_ADD_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_ADD_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_CHANGE_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_CHANGE_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_DELETE_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_DELETE_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_EXECUTE_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_EXECUTE_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_NO_ACCESS_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_NO_ACCESS_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_RATIFY_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_RATIFY_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_VIEW SYSRES_CONST_ACCESS_RIGHTS_VIEW_CODE SYSRES_CONST_ACCESS_RIGHTS_VIEW_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_VIEW_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_TYPE_CHANGE SYSRES_CONST_ACCESS_TYPE_CHANGE_CODE SYSRES_CONST_ACCESS_TYPE_EXISTS SYSRES_CONST_ACCESS_TYPE_EXISTS_CODE SYSRES_CONST_ACCESS_TYPE_FULL SYSRES_CONST_ACCESS_TYPE_FULL_CODE SYSRES_CONST_ACCESS_TYPE_VIEW SYSRES_CONST_ACCESS_TYPE_VIEW_CODE SYSRES_CONST_ACTION_TYPE_ABORT SYSRES_CONST_ACTION_TYPE_ACCEPT SYSRES_CONST_ACTION_TYPE_ACCESS_RIGHTS SYSRES_CONST_ACTION_TYPE_ADD_ATTACHMENT SYSRES_CONST_ACTION_TYPE_CHANGE_CARD SYSRES_CONST_ACTION_TYPE_CHANGE_KIND SYSRES_CONST_ACTION_TYPE_CHANGE_STORAGE SYSRES_CONST_ACTION_TYPE_CONTINUE SYSRES_CONST_ACTION_TYPE_COPY SYSRES_CONST_ACTION_TYPE_CREATE SYSRES_CONST_ACTION_TYPE_CREATE_VERSION SYSRES_CONST_ACTION_TYPE_DELETE SYSRES_CONST_ACTION_TYPE_DELETE_ATTACHMENT SYSRES_CONST_ACTION_TYPE_DELETE_VERSION SYSRES_CONST_ACTION_TYPE_DISABLE_DELEGATE_ACCESS_RIGHTS SYSRES_CONST_ACTION_TYPE_ENABLE_DELEGATE_ACCESS_RIGHTS SYSRES_CONST_ACTION_TYPE_ENCRYPTION_BY_CERTIFICATE SYSRES_CONST_ACTION_TYPE_ENCRYPTION_BY_CERTIFICATE_AND_PASSWORD SYSRES_CONST_ACTION_TYPE_ENCRYPTION_BY_PASSWORD SYSRES_CONST_ACTION_TYPE_EXPORT_WITH_LOCK SYSRES_CONST_ACTION_TYPE_EXPORT_WITHOUT_LOCK SYSRES_CONST_ACTION_TYPE_IMPORT_WITH_UNLOCK SYSRES_CONST_ACTION_TYPE_IMPORT_WITHOUT_UNLOCK SYSRES_CONST_ACTION_TYPE_LIFE_CYCLE_STAGE SYSRES_CONST_ACTION_TYPE_LOCK SYSRES_CONST_ACTION_TYPE_LOCK_FOR_SERVER SYSRES_CONST_ACTION_TYPE_LOCK_MODIFY SYSRES_CONST_ACTION_TYPE_MARK_AS_READED SYSRES_CONST_ACTION_TYPE_MARK_AS_UNREADED SYSRES_CONST_ACTION_TYPE_MODIFY SYSRES_CONST_ACTION_TYPE_MODIFY_CARD SYSRES_CONST_ACTION_TYPE_MOVE_TO_ARCHIVE SYSRES_CONST_ACTION_TYPE_OFF_ENCRYPTION SYSRES_CONST_ACTION_TYPE_PASSWORD_CHANGE SYSRES_CONST_ACTION_TYPE_PERFORM SYSRES_CONST_ACTION_TYPE_RECOVER_FROM_LOCAL_COPY SYSRES_CONST_ACTION_TYPE_RESTART SYSRES_CONST_ACTION_TYPE_RESTORE_FROM_ARCHIVE SYSRES_CONST_ACTION_TYPE_REVISION SYSRES_CONST_ACTION_TYPE_SEND_BY_MAIL SYSRES_CONST_ACTION_TYPE_SIGN SYSRES_CONST_ACTION_TYPE_START SYSRES_CONST_ACTION_TYPE_UNLOCK SYSRES_CONST_ACTION_TYPE_UNLOCK_FROM_SERVER SYSRES_CONST_ACTION_TYPE_VERSION_STATE SYSRES_CONST_ACTION_TYPE_VERSION_VISIBILITY SYSRES_CONST_ACTION_TYPE_VIEW SYSRES_CONST_ACTION_TYPE_VIEW_SHADOW_COPY SYSRES_CONST_ACTION_TYPE_WORKFLOW_DESCRIPTION_MODIFY SYSRES_CONST_ACTION_TYPE_WRITE_HISTORY SYSRES_CONST_ACTIVE_VERSION_STATE_PICK_VALUE SYSRES_CONST_ADD_REFERENCE_MODE_NAME SYSRES_CONST_ADDITION_REQUISITE_CODE SYSRES_CONST_ADDITIONAL_PARAMS_REQUISITE_CODE SYSRES_CONST_ADITIONAL_JOB_END_DATE_REQUISITE_NAME SYSRES_CONST_ADITIONAL_JOB_READ_REQUISITE_NAME SYSRES_CONST_ADITIONAL_JOB_START_DATE_REQUISITE_NAME SYSRES_CONST_ADITIONAL_JOB_STATE_REQUISITE_NAME SYSRES_CONST_ADMINISTRATION_HISTORY_ADDING_USER_TO_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_ADDING_USER_TO_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_COMP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_COMP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_USER_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_USER_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_CREATION SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_CREATION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_DELETION SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_DELETION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_COMP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_COMP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_FROM_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_FROM_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_RESTRICTION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_RESTRICTION_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_PRIVILEGE_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_PRIVILEGE_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_RIGHTS_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_RIGHTS_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_IS_MAIN_SERVER_CHANGED_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_IS_MAIN_SERVER_CHANGED_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_IS_PUBLIC_CHANGED_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_IS_PUBLIC_CHANGED_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_RESTRICTION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_RESTRICTION_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_PRIVILEGE_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_PRIVILEGE_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_RIGHTS_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_RIGHTS_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_CREATION SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_CREATION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_DELETION SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_DELETION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_CATEGORY_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_CATEGORY_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_COMP_TITLE_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_COMP_TITLE_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_FULL_NAME_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_FULL_NAME_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_PARENT_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_PARENT_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_AUTH_TYPE_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_AUTH_TYPE_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_LOGIN_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_LOGIN_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_STATUS_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_STATUS_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_USER_PASSWORD_CHANGE SYSRES_CONST_ADMINISTRATION_HISTORY_USER_PASSWORD_CHANGE_ACTION SYSRES_CONST_ALL_ACCEPT_CONDITION_RUS SYSRES_CONST_ALL_USERS_GROUP SYSRES_CONST_ALL_USERS_GROUP_NAME SYSRES_CONST_ALL_USERS_SERVER_GROUP_NAME SYSRES_CONST_ALLOWED_ACCESS_TYPE_CODE SYSRES_CONST_ALLOWED_ACCESS_TYPE_NAME SYSRES_CONST_APP_VIEWER_TYPE_REQUISITE_CODE SYSRES_CONST_APPROVING_SIGNATURE_NAME SYSRES_CONST_APPROVING_SIGNATURE_REQUISITE_CODE SYSRES_CONST_ASSISTANT_SUBSTITUE_TYPE SYSRES_CONST_ASSISTANT_SUBSTITUE_TYPE_CODE SYSRES_CONST_ATTACH_TYPE_COMPONENT_TOKEN SYSRES_CONST_ATTACH_TYPE_DOC SYSRES_CONST_ATTACH_TYPE_EDOC SYSRES_CONST_ATTACH_TYPE_FOLDER SYSRES_CONST_ATTACH_TYPE_JOB SYSRES_CONST_ATTACH_TYPE_REFERENCE SYSRES_CONST_ATTACH_TYPE_TASK SYSRES_CONST_AUTH_ENCODED_PASSWORD SYSRES_CONST_AUTH_ENCODED_PASSWORD_CODE SYSRES_CONST_AUTH_NOVELL SYSRES_CONST_AUTH_PASSWORD SYSRES_CONST_AUTH_PASSWORD_CODE SYSRES_CONST_AUTH_WINDOWS SYSRES_CONST_AUTHENTICATING_SIGNATURE_NAME SYSRES_CONST_AUTHENTICATING_SIGNATURE_REQUISITE_CODE SYSRES_CONST_AUTO_ENUM_METHOD_FLAG SYSRES_CONST_AUTO_NUMERATION_CODE SYSRES_CONST_AUTO_STRONG_ENUM_METHOD_FLAG SYSRES_CONST_AUTOTEXT_NAME_REQUISITE_CODE SYSRES_CONST_AUTOTEXT_TEXT_REQUISITE_CODE SYSRES_CONST_AUTOTEXT_USAGE_ALL SYSRES_CONST_AUTOTEXT_USAGE_ALL_CODE SYSRES_CONST_AUTOTEXT_USAGE_SIGN SYSRES_CONST_AUTOTEXT_USAGE_SIGN_CODE SYSRES_CONST_AUTOTEXT_USAGE_WORK SYSRES_CONST_AUTOTEXT_USAGE_WORK_CODE SYSRES_CONST_AUTOTEXT_USE_ANYWHERE_CODE SYSRES_CONST_AUTOTEXT_USE_ON_SIGNING_CODE SYSRES_CONST_AUTOTEXT_USE_ON_WORK_CODE SYSRES_CONST_BEGIN_DATE_REQUISITE_CODE SYSRES_CONST_BLACK_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_BLUE_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_BTN_PART SYSRES_CONST_CALCULATED_ROLE_TYPE_CODE SYSRES_CONST_CALL_TYPE_VARIABLE_BUTTON_VALUE SYSRES_CONST_CALL_TYPE_VARIABLE_PROGRAM_VALUE SYSRES_CONST_CANCEL_MESSAGE_FUNCTION_RESULT SYSRES_CONST_CARD_PART SYSRES_CONST_CARD_REFERENCE_MODE_NAME SYSRES_CONST_CERTIFICATE_TYPE_REQUISITE_ENCRYPT_VALUE SYSRES_CONST_CERTIFICATE_TYPE_REQUISITE_SIGN_AND_ENCRYPT_VALUE SYSRES_CONST_CERTIFICATE_TYPE_REQUISITE_SIGN_VALUE SYSRES_CONST_CHECK_PARAM_VALUE_DATE_PARAM_TYPE SYSRES_CONST_CHECK_PARAM_VALUE_FLOAT_PARAM_TYPE SYSRES_CONST_CHECK_PARAM_VALUE_INTEGER_PARAM_TYPE SYSRES_CONST_CHECK_PARAM_VALUE_PICK_PARAM_TYPE SYSRES_CONST_CHECK_PARAM_VALUE_REEFRENCE_PARAM_TYPE SYSRES_CONST_CLOSED_RECORD_FLAG_VALUE_FEMININE SYSRES_CONST_CLOSED_RECORD_FLAG_VALUE_MASCULINE SYSRES_CONST_CODE_COMPONENT_TYPE_ADMIN SYSRES_CONST_CODE_COMPONENT_TYPE_DEVELOPER SYSRES_CONST_CODE_COMPONENT_TYPE_DOCS SYSRES_CONST_CODE_COMPONENT_TYPE_EDOC_CARDS SYSRES_CONST_CODE_COMPONENT_TYPE_EXTERNAL_EXECUTABLE SYSRES_CONST_CODE_COMPONENT_TYPE_OTHER SYSRES_CONST_CODE_COMPONENT_TYPE_REFERENCE SYSRES_CONST_CODE_COMPONENT_TYPE_REPORT SYSRES_CONST_CODE_COMPONENT_TYPE_SCRIPT SYSRES_CONST_CODE_COMPONENT_TYPE_URL SYSRES_CONST_CODE_REQUISITE_ACCESS SYSRES_CONST_CODE_REQUISITE_CODE SYSRES_CONST_CODE_REQUISITE_COMPONENT SYSRES_CONST_CODE_REQUISITE_DESCRIPTION SYSRES_CONST_CODE_REQUISITE_EXCLUDE_COMPONENT SYSRES_CONST_CODE_REQUISITE_RECORD SYSRES_CONST_COMMENT_REQ_CODE SYSRES_CONST_COMMON_SETTINGS_REQUISITE_CODE SYSRES_CONST_COMP_CODE_GRD SYSRES_CONST_COMPONENT_GROUP_TYPE_REQUISITE_CODE SYSRES_CONST_COMPONENT_TYPE_ADMIN_COMPONENTS SYSRES_CONST_COMPONENT_TYPE_DEVELOPER_COMPONENTS SYSRES_CONST_COMPONENT_TYPE_DOCS SYSRES_CONST_COMPONENT_TYPE_EDOC_CARDS SYSRES_CONST_COMPONENT_TYPE_EDOCS SYSRES_CONST_COMPONENT_TYPE_EXTERNAL_EXECUTABLE SYSRES_CONST_COMPONENT_TYPE_OTHER SYSRES_CONST_COMPONENT_TYPE_REFERENCE_TYPES SYSRES_CONST_COMPONENT_TYPE_REFERENCES SYSRES_CONST_COMPONENT_TYPE_REPORTS SYSRES_CONST_COMPONENT_TYPE_SCRIPTS SYSRES_CONST_COMPONENT_TYPE_URL SYSRES_CONST_COMPONENTS_REMOTE_SERVERS_VIEW_CODE SYSRES_CONST_CONDITION_BLOCK_DESCRIPTION SYSRES_CONST_CONST_FIRM_STATUS_COMMON SYSRES_CONST_CONST_FIRM_STATUS_INDIVIDUAL SYSRES_CONST_CONST_NEGATIVE_VALUE SYSRES_CONST_CONST_POSITIVE_VALUE SYSRES_CONST_CONST_SERVER_STATUS_DONT_REPLICATE SYSRES_CONST_CONST_SERVER_STATUS_REPLICATE SYSRES_CONST_CONTENTS_REQUISITE_CODE SYSRES_CONST_DATA_TYPE_BOOLEAN SYSRES_CONST_DATA_TYPE_DATE SYSRES_CONST_DATA_TYPE_FLOAT SYSRES_CONST_DATA_TYPE_INTEGER SYSRES_CONST_DATA_TYPE_PICK SYSRES_CONST_DATA_TYPE_REFERENCE SYSRES_CONST_DATA_TYPE_STRING SYSRES_CONST_DATA_TYPE_TEXT SYSRES_CONST_DATA_TYPE_VARIANT SYSRES_CONST_DATE_CLOSE_REQ_CODE SYSRES_CONST_DATE_FORMAT_DATE_ONLY_CHAR SYSRES_CONST_DATE_OPEN_REQ_CODE SYSRES_CONST_DATE_REQUISITE SYSRES_CONST_DATE_REQUISITE_CODE SYSRES_CONST_DATE_REQUISITE_NAME SYSRES_CONST_DATE_REQUISITE_TYPE SYSRES_CONST_DATE_TYPE_CHAR SYSRES_CONST_DATETIME_FORMAT_VALUE SYSRES_CONST_DEA_ACCESS_RIGHTS_ACTION_CODE SYSRES_CONST_DESCRIPTION_LOCALIZE_ID_REQUISITE_CODE SYSRES_CONST_DESCRIPTION_REQUISITE_CODE SYSRES_CONST_DET1_PART SYSRES_CONST_DET2_PART SYSRES_CONST_DET3_PART SYSRES_CONST_DET4_PART SYSRES_CONST_DET5_PART SYSRES_CONST_DET6_PART SYSRES_CONST_DETAIL_DATASET_KEY_REQUISITE_CODE SYSRES_CONST_DETAIL_PICK_REQUISITE_CODE SYSRES_CONST_DETAIL_REQ_CODE SYSRES_CONST_DO_NOT_USE_ACCESS_TYPE_CODE SYSRES_CONST_DO_NOT_USE_ACCESS_TYPE_NAME SYSRES_CONST_DO_NOT_USE_ON_VIEW_ACCESS_TYPE_CODE SYSRES_CONST_DO_NOT_USE_ON_VIEW_ACCESS_TYPE_NAME SYSRES_CONST_DOCUMENT_STORAGES_CODE SYSRES_CONST_DOCUMENT_TEMPLATES_TYPE_NAME SYSRES_CONST_DOUBLE_REQUISITE_CODE SYSRES_CONST_EDITOR_CLOSE_FILE_OBSERV_TYPE_CODE SYSRES_CONST_EDITOR_CLOSE_PROCESS_OBSERV_TYPE_CODE SYSRES_CONST_EDITOR_TYPE_REQUISITE_CODE SYSRES_CONST_EDITORS_APPLICATION_NAME_REQUISITE_CODE SYSRES_CONST_EDITORS_CREATE_SEVERAL_PROCESSES_REQUISITE_CODE SYSRES_CONST_EDITORS_EXTENSION_REQUISITE_CODE SYSRES_CONST_EDITORS_OBSERVER_BY_PROCESS_TYPE SYSRES_CONST_EDITORS_REFERENCE_CODE SYSRES_CONST_EDITORS_REPLACE_SPEC_CHARS_REQUISITE_CODE SYSRES_CONST_EDITORS_USE_PLUGINS_REQUISITE_CODE SYSRES_CONST_EDITORS_VIEW_DOCUMENT_OPENED_TO_EDIT_CODE SYSRES_CONST_EDOC_CARD_TYPE_REQUISITE_CODE SYSRES_CONST_EDOC_CARD_TYPES_LINK_REQUISITE_CODE SYSRES_CONST_EDOC_CERTIFICATE_AND_PASSWORD_ENCODE_CODE SYSRES_CONST_EDOC_CERTIFICATE_ENCODE_CODE SYSRES_CONST_EDOC_DATE_REQUISITE_CODE SYSRES_CONST_EDOC_KIND_REFERENCE_CODE SYSRES_CONST_EDOC_KINDS_BY_TEMPLATE_ACTION_CODE SYSRES_CONST_EDOC_MANAGE_ACCESS_CODE SYSRES_CONST_EDOC_NONE_ENCODE_CODE SYSRES_CONST_EDOC_NUMBER_REQUISITE_CODE SYSRES_CONST_EDOC_PASSWORD_ENCODE_CODE SYSRES_CONST_EDOC_READONLY_ACCESS_CODE SYSRES_CONST_EDOC_SHELL_LIFE_TYPE_VIEW_VALUE SYSRES_CONST_EDOC_SIZE_RESTRICTION_PRIORITY_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_CHECK_ACCESS_RIGHTS_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_COMPUTER_NAME_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_DATABASE_NAME_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_EDIT_IN_STORAGE_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_LOCAL_PATH_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_SHARED_SOURCE_NAME_REQUISITE_CODE SYSRES_CONST_EDOC_TEMPLATE_REQUISITE_CODE SYSRES_CONST_EDOC_TYPES_REFERENCE_CODE SYSRES_CONST_EDOC_VERSION_ACTIVE_STAGE_CODE SYSRES_CONST_EDOC_VERSION_DESIGN_STAGE_CODE SYSRES_CONST_EDOC_VERSION_OBSOLETE_STAGE_CODE SYSRES_CONST_EDOC_WRITE_ACCES_CODE SYSRES_CONST_EDOCUMENT_CARD_REQUISITES_REFERENCE_CODE_SELECTED_REQUISITE SYSRES_CONST_ENCODE_CERTIFICATE_TYPE_CODE SYSRES_CONST_END_DATE_REQUISITE_CODE SYSRES_CONST_ENUMERATION_TYPE_REQUISITE_CODE SYSRES_CONST_EXECUTE_ACCESS_RIGHTS_TYPE_CODE SYSRES_CONST_EXECUTIVE_FILE_STORAGE_TYPE SYSRES_CONST_EXIST_CONST SYSRES_CONST_EXIST_VALUE SYSRES_CONST_EXPORT_LOCK_TYPE_ASK SYSRES_CONST_EXPORT_LOCK_TYPE_WITH_LOCK SYSRES_CONST_EXPORT_LOCK_TYPE_WITHOUT_LOCK SYSRES_CONST_EXPORT_VERSION_TYPE_ASK SYSRES_CONST_EXPORT_VERSION_TYPE_LAST SYSRES_CONST_EXPORT_VERSION_TYPE_LAST_ACTIVE SYSRES_CONST_EXTENSION_REQUISITE_CODE SYSRES_CONST_FILTER_NAME_REQUISITE_CODE SYSRES_CONST_FILTER_REQUISITE_CODE SYSRES_CONST_FILTER_TYPE_COMMON_CODE SYSRES_CONST_FILTER_TYPE_COMMON_NAME SYSRES_CONST_FILTER_TYPE_USER_CODE SYSRES_CONST_FILTER_TYPE_USER_NAME SYSRES_CONST_FILTER_VALUE_REQUISITE_NAME SYSRES_CONST_FLOAT_NUMBER_FORMAT_CHAR SYSRES_CONST_FLOAT_REQUISITE_TYPE SYSRES_CONST_FOLDER_AUTHOR_VALUE SYSRES_CONST_FOLDER_KIND_ANY_OBJECTS SYSRES_CONST_FOLDER_KIND_COMPONENTS SYSRES_CONST_FOLDER_KIND_EDOCS SYSRES_CONST_FOLDER_KIND_JOBS SYSRES_CONST_FOLDER_KIND_TASKS SYSRES_CONST_FOLDER_TYPE_COMMON SYSRES_CONST_FOLDER_TYPE_COMPONENT SYSRES_CONST_FOLDER_TYPE_FAVORITES SYSRES_CONST_FOLDER_TYPE_INBOX SYSRES_CONST_FOLDER_TYPE_OUTBOX SYSRES_CONST_FOLDER_TYPE_QUICK_LAUNCH SYSRES_CONST_FOLDER_TYPE_SEARCH SYSRES_CONST_FOLDER_TYPE_SHORTCUTS SYSRES_CONST_FOLDER_TYPE_USER SYSRES_CONST_FROM_DICTIONARY_ENUM_METHOD_FLAG SYSRES_CONST_FULL_SUBSTITUTE_TYPE SYSRES_CONST_FULL_SUBSTITUTE_TYPE_CODE SYSRES_CONST_FUNCTION_CANCEL_RESULT SYSRES_CONST_FUNCTION_CATEGORY_SYSTEM SYSRES_CONST_FUNCTION_CATEGORY_USER SYSRES_CONST_FUNCTION_FAILURE_RESULT SYSRES_CONST_FUNCTION_SAVE_RESULT SYSRES_CONST_GENERATED_REQUISITE SYSRES_CONST_GREEN_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_GROUP_ACCOUNT_TYPE_VALUE_CODE SYSRES_CONST_GROUP_CATEGORY_NORMAL_CODE SYSRES_CONST_GROUP_CATEGORY_NORMAL_NAME SYSRES_CONST_GROUP_CATEGORY_SERVICE_CODE SYSRES_CONST_GROUP_CATEGORY_SERVICE_NAME SYSRES_CONST_GROUP_COMMON_CATEGORY_FIELD_VALUE SYSRES_CONST_GROUP_FULL_NAME_REQUISITE_CODE SYSRES_CONST_GROUP_NAME_REQUISITE_CODE SYSRES_CONST_GROUP_RIGHTS_T_REQUISITE_CODE SYSRES_CONST_GROUP_SERVER_CODES_REQUISITE_CODE SYSRES_CONST_GROUP_SERVER_NAME_REQUISITE_CODE SYSRES_CONST_GROUP_SERVICE_CATEGORY_FIELD_VALUE SYSRES_CONST_GROUP_USER_REQUISITE_CODE SYSRES_CONST_GROUPS_REFERENCE_CODE SYSRES_CONST_GROUPS_REQUISITE_CODE SYSRES_CONST_HIDDEN_MODE_NAME SYSRES_CONST_HIGH_LVL_REQUISITE_CODE SYSRES_CONST_HISTORY_ACTION_CREATE_CODE SYSRES_CONST_HISTORY_ACTION_DELETE_CODE SYSRES_CONST_HISTORY_ACTION_EDIT_CODE SYSRES_CONST_HOUR_CHAR SYSRES_CONST_ID_REQUISITE_CODE SYSRES_CONST_IDSPS_REQUISITE_CODE SYSRES_CONST_IMAGE_MODE_COLOR SYSRES_CONST_IMAGE_MODE_GREYSCALE SYSRES_CONST_IMAGE_MODE_MONOCHROME SYSRES_CONST_IMPORTANCE_HIGH SYSRES_CONST_IMPORTANCE_LOW SYSRES_CONST_IMPORTANCE_NORMAL SYSRES_CONST_IN_DESIGN_VERSION_STATE_PICK_VALUE SYSRES_CONST_INCOMING_WORK_RULE_TYPE_CODE SYSRES_CONST_INT_REQUISITE SYSRES_CONST_INT_REQUISITE_TYPE SYSRES_CONST_INTEGER_NUMBER_FORMAT_CHAR SYSRES_CONST_INTEGER_TYPE_CHAR SYSRES_CONST_IS_GENERATED_REQUISITE_NEGATIVE_VALUE SYSRES_CONST_IS_PUBLIC_ROLE_REQUISITE_CODE SYSRES_CONST_IS_REMOTE_USER_NEGATIVE_VALUE SYSRES_CONST_IS_REMOTE_USER_POSITIVE_VALUE SYSRES_CONST_IS_STORED_REQUISITE_NEGATIVE_VALUE SYSRES_CONST_IS_STORED_REQUISITE_STORED_VALUE SYSRES_CONST_ITALIC_LIFE_CYCLE_STAGE_DRAW_STYLE SYSRES_CONST_JOB_BLOCK_DESCRIPTION SYSRES_CONST_JOB_KIND_CONTROL_JOB SYSRES_CONST_JOB_KIND_JOB SYSRES_CONST_JOB_KIND_NOTICE SYSRES_CONST_JOB_STATE_ABORTED SYSRES_CONST_JOB_STATE_COMPLETE SYSRES_CONST_JOB_STATE_WORKING SYSRES_CONST_KIND_REQUISITE_CODE SYSRES_CONST_KIND_REQUISITE_NAME SYSRES_CONST_KINDS_CREATE_SHADOW_COPIES_REQUISITE_CODE SYSRES_CONST_KINDS_DEFAULT_EDOC_LIFE_STAGE_REQUISITE_CODE SYSRES_CONST_KINDS_EDOC_ALL_TEPLATES_ALLOWED_REQUISITE_CODE SYSRES_CONST_KINDS_EDOC_ALLOW_LIFE_CYCLE_STAGE_CHANGING_REQUISITE_CODE SYSRES_CONST_KINDS_EDOC_ALLOW_MULTIPLE_ACTIVE_VERSIONS_REQUISITE_CODE SYSRES_CONST_KINDS_EDOC_SHARE_ACCES_RIGHTS_BY_DEFAULT_CODE SYSRES_CONST_KINDS_EDOC_TEMPLATE_REQUISITE_CODE SYSRES_CONST_KINDS_EDOC_TYPE_REQUISITE_CODE SYSRES_CONST_KINDS_SIGNERS_REQUISITES_CODE SYSRES_CONST_KOD_INPUT_TYPE SYSRES_CONST_LAST_UPDATE_DATE_REQUISITE_CODE SYSRES_CONST_LIFE_CYCLE_START_STAGE_REQUISITE_CODE SYSRES_CONST_LILAC_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_LINK_OBJECT_KIND_COMPONENT SYSRES_CONST_LINK_OBJECT_KIND_DOCUMENT SYSRES_CONST_LINK_OBJECT_KIND_EDOC SYSRES_CONST_LINK_OBJECT_KIND_FOLDER SYSRES_CONST_LINK_OBJECT_KIND_JOB SYSRES_CONST_LINK_OBJECT_KIND_REFERENCE SYSRES_CONST_LINK_OBJECT_KIND_TASK SYSRES_CONST_LINK_REF_TYPE_REQUISITE_CODE SYSRES_CONST_LIST_REFERENCE_MODE_NAME SYSRES_CONST_LOCALIZATION_DICTIONARY_MAIN_VIEW_CODE SYSRES_CONST_MAIN_VIEW_CODE SYSRES_CONST_MANUAL_ENUM_METHOD_FLAG SYSRES_CONST_MASTER_COMP_TYPE_REQUISITE_CODE SYSRES_CONST_MASTER_TABLE_REC_ID_REQUISITE_CODE SYSRES_CONST_MAXIMIZED_MODE_NAME SYSRES_CONST_ME_VALUE SYSRES_CONST_MESSAGE_ATTENTION_CAPTION SYSRES_CONST_MESSAGE_CONFIRMATION_CAPTION SYSRES_CONST_MESSAGE_ERROR_CAPTION SYSRES_CONST_MESSAGE_INFORMATION_CAPTION SYSRES_CONST_MINIMIZED_MODE_NAME SYSRES_CONST_MINUTE_CHAR SYSRES_CONST_MODULE_REQUISITE_CODE SYSRES_CONST_MONITORING_BLOCK_DESCRIPTION SYSRES_CONST_MONTH_FORMAT_VALUE SYSRES_CONST_NAME_LOCALIZE_ID_REQUISITE_CODE SYSRES_CONST_NAME_REQUISITE_CODE SYSRES_CONST_NAME_SINGULAR_REQUISITE_CODE SYSRES_CONST_NAMEAN_INPUT_TYPE SYSRES_CONST_NEGATIVE_PICK_VALUE SYSRES_CONST_NEGATIVE_VALUE SYSRES_CONST_NO SYSRES_CONST_NO_PICK_VALUE SYSRES_CONST_NO_SIGNATURE_REQUISITE_CODE SYSRES_CONST_NO_VALUE SYSRES_CONST_NONE_ACCESS_RIGHTS_TYPE_CODE SYSRES_CONST_NONOPERATING_RECORD_FLAG_VALUE SYSRES_CONST_NONOPERATING_RECORD_FLAG_VALUE_MASCULINE SYSRES_CONST_NORMAL_ACCESS_RIGHTS_TYPE_CODE SYSRES_CONST_NORMAL_LIFE_CYCLE_STAGE_DRAW_STYLE SYSRES_CONST_NORMAL_MODE_NAME SYSRES_CONST_NOT_ALLOWED_ACCESS_TYPE_CODE SYSRES_CONST_NOT_ALLOWED_ACCESS_TYPE_NAME SYSRES_CONST_NOTE_REQUISITE_CODE SYSRES_CONST_NOTICE_BLOCK_DESCRIPTION SYSRES_CONST_NUM_REQUISITE SYSRES_CONST_NUM_STR_REQUISITE_CODE SYSRES_CONST_NUMERATION_AUTO_NOT_STRONG SYSRES_CONST_NUMERATION_AUTO_STRONG SYSRES_CONST_NUMERATION_FROM_DICTONARY SYSRES_CONST_NUMERATION_MANUAL SYSRES_CONST_NUMERIC_TYPE_CHAR SYSRES_CONST_NUMREQ_REQUISITE_CODE SYSRES_CONST_OBSOLETE_VERSION_STATE_PICK_VALUE SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE_CODE SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE_FEMININE SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE_MASCULINE SYSRES_CONST_OPTIONAL_FORM_COMP_REQCODE_PREFIX SYSRES_CONST_ORANGE_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_ORIGINALREF_REQUISITE_CODE SYSRES_CONST_OURFIRM_REF_CODE SYSRES_CONST_OURFIRM_REQUISITE_CODE SYSRES_CONST_OURFIRM_VAR SYSRES_CONST_OUTGOING_WORK_RULE_TYPE_CODE SYSRES_CONST_PICK_NEGATIVE_RESULT SYSRES_CONST_PICK_POSITIVE_RESULT SYSRES_CONST_PICK_REQUISITE SYSRES_CONST_PICK_REQUISITE_TYPE SYSRES_CONST_PICK_TYPE_CHAR SYSRES_CONST_PLAN_STATUS_REQUISITE_CODE SYSRES_CONST_PLATFORM_VERSION_COMMENT SYSRES_CONST_PLUGINS_SETTINGS_DESCRIPTION_REQUISITE_CODE SYSRES_CONST_POSITIVE_PICK_VALUE SYSRES_CONST_POWER_TO_CREATE_ACTION_CODE SYSRES_CONST_POWER_TO_SIGN_ACTION_CODE SYSRES_CONST_PRIORITY_REQUISITE_CODE SYSRES_CONST_QUALIFIED_TASK_TYPE SYSRES_CONST_QUALIFIED_TASK_TYPE_CODE SYSRES_CONST_RECSTAT_REQUISITE_CODE SYSRES_CONST_RED_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_REF_ID_T_REF_TYPE_REQUISITE_CODE SYSRES_CONST_REF_REQUISITE SYSRES_CONST_REF_REQUISITE_TYPE SYSRES_CONST_REF_REQUISITES_REFERENCE_CODE_SELECTED_REQUISITE SYSRES_CONST_REFERENCE_RECORD_HISTORY_CREATE_ACTION_CODE SYSRES_CONST_REFERENCE_RECORD_HISTORY_DELETE_ACTION_CODE SYSRES_CONST_REFERENCE_RECORD_HISTORY_MODIFY_ACTION_CODE SYSRES_CONST_REFERENCE_TYPE_CHAR SYSRES_CONST_REFERENCE_TYPE_REQUISITE_NAME SYSRES_CONST_REFERENCES_ADD_PARAMS_REQUISITE_CODE SYSRES_CONST_REFERENCES_DISPLAY_REQUISITE_REQUISITE_CODE SYSRES_CONST_REMOTE_SERVER_STATUS_WORKING SYSRES_CONST_REMOTE_SERVER_TYPE_MAIN SYSRES_CONST_REMOTE_SERVER_TYPE_SECONDARY SYSRES_CONST_REMOTE_USER_FLAG_VALUE_CODE SYSRES_CONST_REPORT_APP_EDITOR_INTERNAL SYSRES_CONST_REPORT_BASE_REPORT_ID_REQUISITE_CODE SYSRES_CONST_REPORT_BASE_REPORT_REQUISITE_CODE SYSRES_CONST_REPORT_SCRIPT_REQUISITE_CODE SYSRES_CONST_REPORT_TEMPLATE_REQUISITE_CODE SYSRES_CONST_REPORT_VIEWER_CODE_REQUISITE_CODE SYSRES_CONST_REQ_ALLOW_COMPONENT_DEFAULT_VALUE SYSRES_CONST_REQ_ALLOW_RECORD_DEFAULT_VALUE SYSRES_CONST_REQ_ALLOW_SERVER_COMPONENT_DEFAULT_VALUE SYSRES_CONST_REQ_MODE_AVAILABLE_CODE SYSRES_CONST_REQ_MODE_EDIT_CODE SYSRES_CONST_REQ_MODE_HIDDEN_CODE SYSRES_CONST_REQ_MODE_NOT_AVAILABLE_CODE SYSRES_CONST_REQ_MODE_VIEW_CODE SYSRES_CONST_REQ_NUMBER_REQUISITE_CODE SYSRES_CONST_REQ_SECTION_VALUE SYSRES_CONST_REQ_TYPE_VALUE SYSRES_CONST_REQUISITE_FORMAT_BY_UNIT SYSRES_CONST_REQUISITE_FORMAT_DATE_FULL SYSRES_CONST_REQUISITE_FORMAT_DATE_TIME SYSRES_CONST_REQUISITE_FORMAT_LEFT SYSRES_CONST_REQUISITE_FORMAT_RIGHT SYSRES_CONST_REQUISITE_FORMAT_WITHOUT_UNIT SYSRES_CONST_REQUISITE_NUMBER_REQUISITE_CODE SYSRES_CONST_REQUISITE_SECTION_ACTIONS SYSRES_CONST_REQUISITE_SECTION_BUTTON SYSRES_CONST_REQUISITE_SECTION_BUTTONS SYSRES_CONST_REQUISITE_SECTION_CARD SYSRES_CONST_REQUISITE_SECTION_TABLE SYSRES_CONST_REQUISITE_SECTION_TABLE10 SYSRES_CONST_REQUISITE_SECTION_TABLE11 SYSRES_CONST_REQUISITE_SECTION_TABLE12 SYSRES_CONST_REQUISITE_SECTION_TABLE13 SYSRES_CONST_REQUISITE_SECTION_TABLE14 SYSRES_CONST_REQUISITE_SECTION_TABLE15 SYSRES_CONST_REQUISITE_SECTION_TABLE16 SYSRES_CONST_REQUISITE_SECTION_TABLE17 SYSRES_CONST_REQUISITE_SECTION_TABLE18 SYSRES_CONST_REQUISITE_SECTION_TABLE19 SYSRES_CONST_REQUISITE_SECTION_TABLE2 SYSRES_CONST_REQUISITE_SECTION_TABLE20 SYSRES_CONST_REQUISITE_SECTION_TABLE21 SYSRES_CONST_REQUISITE_SECTION_TABLE22 SYSRES_CONST_REQUISITE_SECTION_TABLE23 SYSRES_CONST_REQUISITE_SECTION_TABLE24 SYSRES_CONST_REQUISITE_SECTION_TABLE3 SYSRES_CONST_REQUISITE_SECTION_TABLE4 SYSRES_CONST_REQUISITE_SECTION_TABLE5 SYSRES_CONST_REQUISITE_SECTION_TABLE6 SYSRES_CONST_REQUISITE_SECTION_TABLE7 SYSRES_CONST_REQUISITE_SECTION_TABLE8 SYSRES_CONST_REQUISITE_SECTION_TABLE9 SYSRES_CONST_REQUISITES_PSEUDOREFERENCE_REQUISITE_NUMBER_REQUISITE_CODE SYSRES_CONST_RIGHT_ALIGNMENT_CODE SYSRES_CONST_ROLES_REFERENCE_CODE SYSRES_CONST_ROUTE_STEP_AFTER_RUS SYSRES_CONST_ROUTE_STEP_AND_CONDITION_RUS SYSRES_CONST_ROUTE_STEP_OR_CONDITION_RUS SYSRES_CONST_ROUTE_TYPE_COMPLEX SYSRES_CONST_ROUTE_TYPE_PARALLEL SYSRES_CONST_ROUTE_TYPE_SERIAL SYSRES_CONST_SBDATASETDESC_NEGATIVE_VALUE SYSRES_CONST_SBDATASETDESC_POSITIVE_VALUE SYSRES_CONST_SBVIEWSDESC_POSITIVE_VALUE SYSRES_CONST_SCRIPT_BLOCK_DESCRIPTION SYSRES_CONST_SEARCH_BY_TEXT_REQUISITE_CODE SYSRES_CONST_SEARCHES_COMPONENT_CONTENT SYSRES_CONST_SEARCHES_CRITERIA_ACTION_NAME SYSRES_CONST_SEARCHES_EDOC_CONTENT SYSRES_CONST_SEARCHES_FOLDER_CONTENT SYSRES_CONST_SEARCHES_JOB_CONTENT SYSRES_CONST_SEARCHES_REFERENCE_CODE SYSRES_CONST_SEARCHES_TASK_CONTENT SYSRES_CONST_SECOND_CHAR SYSRES_CONST_SECTION_REQUISITE_ACTIONS_VALUE SYSRES_CONST_SECTION_REQUISITE_CARD_VALUE SYSRES_CONST_SECTION_REQUISITE_CODE SYSRES_CONST_SECTION_REQUISITE_DETAIL_1_VALUE SYSRES_CONST_SECTION_REQUISITE_DETAIL_2_VALUE SYSRES_CONST_SECTION_REQUISITE_DETAIL_3_VALUE SYSRES_CONST_SECTION_REQUISITE_DETAIL_4_VALUE SYSRES_CONST_SECTION_REQUISITE_DETAIL_5_VALUE SYSRES_CONST_SECTION_REQUISITE_DETAIL_6_VALUE SYSRES_CONST_SELECT_REFERENCE_MODE_NAME SYSRES_CONST_SELECT_TYPE_SELECTABLE SYSRES_CONST_SELECT_TYPE_SELECTABLE_ONLY_CHILD SYSRES_CONST_SELECT_TYPE_SELECTABLE_WITH_CHILD SYSRES_CONST_SELECT_TYPE_UNSLECTABLE SYSRES_CONST_SERVER_TYPE_MAIN SYSRES_CONST_SERVICE_USER_CATEGORY_FIELD_VALUE SYSRES_CONST_SETTINGS_USER_REQUISITE_CODE SYSRES_CONST_SIGNATURE_AND_ENCODE_CERTIFICATE_TYPE_CODE SYSRES_CONST_SIGNATURE_CERTIFICATE_TYPE_CODE SYSRES_CONST_SINGULAR_TITLE_REQUISITE_CODE SYSRES_CONST_SQL_SERVER_AUTHENTIFICATION_FLAG_VALUE_CODE SYSRES_CONST_SQL_SERVER_ENCODE_AUTHENTIFICATION_FLAG_VALUE_CODE SYSRES_CONST_STANDART_ROUTE_REFERENCE_CODE SYSRES_CONST_STANDART_ROUTE_REFERENCE_COMMENT_REQUISITE_CODE SYSRES_CONST_STANDART_ROUTES_GROUPS_REFERENCE_CODE SYSRES_CONST_STATE_REQ_NAME SYSRES_CONST_STATE_REQUISITE_ACTIVE_VALUE SYSRES_CONST_STATE_REQUISITE_CLOSED_VALUE SYSRES_CONST_STATE_REQUISITE_CODE SYSRES_CONST_STATIC_ROLE_TYPE_CODE SYSRES_CONST_STATUS_PLAN_DEFAULT_VALUE SYSRES_CONST_STATUS_VALUE_AUTOCLEANING SYSRES_CONST_STATUS_VALUE_BLUE_SQUARE SYSRES_CONST_STATUS_VALUE_COMPLETE SYSRES_CONST_STATUS_VALUE_GREEN_SQUARE SYSRES_CONST_STATUS_VALUE_ORANGE_SQUARE SYSRES_CONST_STATUS_VALUE_PURPLE_SQUARE SYSRES_CONST_STATUS_VALUE_RED_SQUARE SYSRES_CONST_STATUS_VALUE_SUSPEND SYSRES_CONST_STATUS_VALUE_YELLOW_SQUARE SYSRES_CONST_STDROUTE_SHOW_TO_USERS_REQUISITE_CODE SYSRES_CONST_STORAGE_TYPE_FILE SYSRES_CONST_STORAGE_TYPE_SQL_SERVER SYSRES_CONST_STR_REQUISITE SYSRES_CONST_STRIKEOUT_LIFE_CYCLE_STAGE_DRAW_STYLE SYSRES_CONST_STRING_FORMAT_LEFT_ALIGN_CHAR SYSRES_CONST_STRING_FORMAT_RIGHT_ALIGN_CHAR SYSRES_CONST_STRING_REQUISITE_CODE SYSRES_CONST_STRING_REQUISITE_TYPE SYSRES_CONST_STRING_TYPE_CHAR SYSRES_CONST_SUBSTITUTES_PSEUDOREFERENCE_CODE SYSRES_CONST_SUBTASK_BLOCK_DESCRIPTION SYSRES_CONST_SYSTEM_SETTING_CURRENT_USER_PARAM_VALUE SYSRES_CONST_SYSTEM_SETTING_EMPTY_VALUE_PARAM_VALUE SYSRES_CONST_SYSTEM_VERSION_COMMENT SYSRES_CONST_TASK_ACCESS_TYPE_ALL SYSRES_CONST_TASK_ACCESS_TYPE_ALL_MEMBERS SYSRES_CONST_TASK_ACCESS_TYPE_MANUAL SYSRES_CONST_TASK_ENCODE_TYPE_CERTIFICATION SYSRES_CONST_TASK_ENCODE_TYPE_CERTIFICATION_AND_PASSWORD SYSRES_CONST_TASK_ENCODE_TYPE_NONE SYSRES_CONST_TASK_ENCODE_TYPE_PASSWORD SYSRES_CONST_TASK_ROUTE_ALL_CONDITION SYSRES_CONST_TASK_ROUTE_AND_CONDITION SYSRES_CONST_TASK_ROUTE_OR_CONDITION SYSRES_CONST_TASK_STATE_ABORTED SYSRES_CONST_TASK_STATE_COMPLETE SYSRES_CONST_TASK_STATE_CONTINUED SYSRES_CONST_TASK_STATE_CONTROL SYSRES_CONST_TASK_STATE_INIT SYSRES_CONST_TASK_STATE_WORKING SYSRES_CONST_TASK_TITLE SYSRES_CONST_TASK_TYPES_GROUPS_REFERENCE_CODE SYSRES_CONST_TASK_TYPES_REFERENCE_CODE SYSRES_CONST_TEMPLATES_REFERENCE_CODE SYSRES_CONST_TEST_DATE_REQUISITE_NAME SYSRES_CONST_TEST_DEV_DATABASE_NAME SYSRES_CONST_TEST_DEV_SYSTEM_CODE SYSRES_CONST_TEST_EDMS_DATABASE_NAME SYSRES_CONST_TEST_EDMS_MAIN_CODE SYSRES_CONST_TEST_EDMS_MAIN_DB_NAME SYSRES_CONST_TEST_EDMS_SECOND_CODE SYSRES_CONST_TEST_EDMS_SECOND_DB_NAME SYSRES_CONST_TEST_EDMS_SYSTEM_CODE SYSRES_CONST_TEST_NUMERIC_REQUISITE_NAME SYSRES_CONST_TEXT_REQUISITE SYSRES_CONST_TEXT_REQUISITE_CODE SYSRES_CONST_TEXT_REQUISITE_TYPE SYSRES_CONST_TEXT_TYPE_CHAR SYSRES_CONST_TYPE_CODE_REQUISITE_CODE SYSRES_CONST_TYPE_REQUISITE_CODE SYSRES_CONST_UNDEFINED_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_UNITS_SECTION_ID_REQUISITE_CODE SYSRES_CONST_UNITS_SECTION_REQUISITE_CODE SYSRES_CONST_UNOPERATING_RECORD_FLAG_VALUE_CODE SYSRES_CONST_UNSTORED_DATA_REQUISITE_CODE SYSRES_CONST_UNSTORED_DATA_REQUISITE_NAME SYSRES_CONST_USE_ACCESS_TYPE_CODE SYSRES_CONST_USE_ACCESS_TYPE_NAME SYSRES_CONST_USER_ACCOUNT_TYPE_VALUE_CODE SYSRES_CONST_USER_ADDITIONAL_INFORMATION_REQUISITE_CODE SYSRES_CONST_USER_AND_GROUP_ID_FROM_PSEUDOREFERENCE_REQUISITE_CODE SYSRES_CONST_USER_CATEGORY_NORMAL SYSRES_CONST_USER_CERTIFICATE_REQUISITE_CODE SYSRES_CONST_USER_CERTIFICATE_STATE_REQUISITE_CODE SYSRES_CONST_USER_CERTIFICATE_SUBJECT_NAME_REQUISITE_CODE SYSRES_CONST_USER_CERTIFICATE_THUMBPRINT_REQUISITE_CODE SYSRES_CONST_USER_COMMON_CATEGORY SYSRES_CONST_USER_COMMON_CATEGORY_CODE SYSRES_CONST_USER_FULL_NAME_REQUISITE_CODE SYSRES_CONST_USER_GROUP_TYPE_REQUISITE_CODE SYSRES_CONST_USER_LOGIN_REQUISITE_CODE SYSRES_CONST_USER_REMOTE_CONTROLLER_REQUISITE_CODE SYSRES_CONST_USER_REMOTE_SYSTEM_REQUISITE_CODE SYSRES_CONST_USER_RIGHTS_T_REQUISITE_CODE SYSRES_CONST_USER_SERVER_NAME_REQUISITE_CODE SYSRES_CONST_USER_SERVICE_CATEGORY SYSRES_CONST_USER_SERVICE_CATEGORY_CODE SYSRES_CONST_USER_STATUS_ADMINISTRATOR_CODE SYSRES_CONST_USER_STATUS_ADMINISTRATOR_NAME SYSRES_CONST_USER_STATUS_DEVELOPER_CODE SYSRES_CONST_USER_STATUS_DEVELOPER_NAME SYSRES_CONST_USER_STATUS_DISABLED_CODE SYSRES_CONST_USER_STATUS_DISABLED_NAME SYSRES_CONST_USER_STATUS_SYSTEM_DEVELOPER_CODE SYSRES_CONST_USER_STATUS_USER_CODE SYSRES_CONST_USER_STATUS_USER_NAME SYSRES_CONST_USER_STATUS_USER_NAME_DEPRECATED SYSRES_CONST_USER_TYPE_FIELD_VALUE_USER SYSRES_CONST_USER_TYPE_REQUISITE_CODE SYSRES_CONST_USERS_CONTROLLER_REQUISITE_CODE SYSRES_CONST_USERS_IS_MAIN_SERVER_REQUISITE_CODE SYSRES_CONST_USERS_REFERENCE_CODE SYSRES_CONST_USERS_REGISTRATION_CERTIFICATES_ACTION_NAME SYSRES_CONST_USERS_REQUISITE_CODE SYSRES_CONST_USERS_SYSTEM_REQUISITE_CODE SYSRES_CONST_USERS_USER_ACCESS_RIGHTS_TYPR_REQUISITE_CODE SYSRES_CONST_USERS_USER_AUTHENTICATION_REQUISITE_CODE SYSRES_CONST_USERS_USER_COMPONENT_REQUISITE_CODE SYSRES_CONST_USERS_USER_GROUP_REQUISITE_CODE SYSRES_CONST_USERS_VIEW_CERTIFICATES_ACTION_NAME SYSRES_CONST_VIEW_DEFAULT_CODE SYSRES_CONST_VIEW_DEFAULT_NAME SYSRES_CONST_VIEWER_REQUISITE_CODE SYSRES_CONST_WAITING_BLOCK_DESCRIPTION SYSRES_CONST_WIZARD_FORM_LABEL_TEST_STRING  SYSRES_CONST_WIZARD_QUERY_PARAM_HEIGHT_ETALON_STRING SYSRES_CONST_WIZARD_REFERENCE_COMMENT_REQUISITE_CODE SYSRES_CONST_WORK_RULES_DESCRIPTION_REQUISITE_CODE SYSRES_CONST_WORK_TIME_CALENDAR_REFERENCE_CODE SYSRES_CONST_WORK_WORKFLOW_HARD_ROUTE_TYPE_VALUE SYSRES_CONST_WORK_WORKFLOW_HARD_ROUTE_TYPE_VALUE_CODE SYSRES_CONST_WORK_WORKFLOW_HARD_ROUTE_TYPE_VALUE_CODE_RUS SYSRES_CONST_WORK_WORKFLOW_SOFT_ROUTE_TYPE_VALUE_CODE_RUS SYSRES_CONST_WORKFLOW_ROUTE_TYPR_HARD SYSRES_CONST_WORKFLOW_ROUTE_TYPR_SOFT SYSRES_CONST_XML_ENCODING SYSRES_CONST_XREC_STAT_REQUISITE_CODE SYSRES_CONST_XRECID_FIELD_NAME SYSRES_CONST_YES SYSRES_CONST_YES_NO_2_REQUISITE_CODE SYSRES_CONST_YES_NO_REQUISITE_CODE SYSRES_CONST_YES_NO_T_REF_TYPE_REQUISITE_CODE SYSRES_CONST_YES_PICK_VALUE SYSRES_CONST_YES_VALUE ";
  const base_constants = "CR FALSE nil NO_VALUE NULL TAB TRUE YES_VALUE ";
  const base_group_name_constants = "ADMINISTRATORS_GROUP_NAME CUSTOMIZERS_GROUP_NAME DEVELOPERS_GROUP_NAME SERVICE_USERS_GROUP_NAME ";
  const decision_block_properties_constants = "DECISION_BLOCK_FIRST_OPERAND_PROPERTY DECISION_BLOCK_NAME_PROPERTY DECISION_BLOCK_OPERATION_PROPERTY DECISION_BLOCK_RESULT_TYPE_PROPERTY DECISION_BLOCK_SECOND_OPERAND_PROPERTY ";
  const file_extension_constants = "ANY_FILE_EXTENTION COMPRESSED_DOCUMENT_EXTENSION EXTENDED_DOCUMENT_EXTENSION SHORT_COMPRESSED_DOCUMENT_EXTENSION SHORT_EXTENDED_DOCUMENT_EXTENSION ";
  const job_block_properties_constants = "JOB_BLOCK_ABORT_DEADLINE_PROPERTY JOB_BLOCK_AFTER_FINISH_EVENT JOB_BLOCK_AFTER_QUERY_PARAMETERS_EVENT JOB_BLOCK_ATTACHMENT_PROPERTY JOB_BLOCK_ATTACHMENTS_RIGHTS_GROUP_PROPERTY JOB_BLOCK_ATTACHMENTS_RIGHTS_TYPE_PROPERTY JOB_BLOCK_BEFORE_QUERY_PARAMETERS_EVENT JOB_BLOCK_BEFORE_START_EVENT JOB_BLOCK_CREATED_JOBS_PROPERTY JOB_BLOCK_DEADLINE_PROPERTY JOB_BLOCK_EXECUTION_RESULTS_PROPERTY JOB_BLOCK_IS_PARALLEL_PROPERTY JOB_BLOCK_IS_RELATIVE_ABORT_DEADLINE_PROPERTY JOB_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY JOB_BLOCK_JOB_TEXT_PROPERTY JOB_BLOCK_NAME_PROPERTY JOB_BLOCK_NEED_SIGN_ON_PERFORM_PROPERTY JOB_BLOCK_PERFORMER_PROPERTY JOB_BLOCK_RELATIVE_ABORT_DEADLINE_TYPE_PROPERTY JOB_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY JOB_BLOCK_SUBJECT_PROPERTY ";
  const language_code_constants = "ENGLISH_LANGUAGE_CODE RUSSIAN_LANGUAGE_CODE ";
  const launching_external_applications_constants = "smHidden smMaximized smMinimized smNormal wmNo wmYes ";
  const link_kind_constants = "COMPONENT_TOKEN_LINK_KIND DOCUMENT_LINK_KIND EDOCUMENT_LINK_KIND FOLDER_LINK_KIND JOB_LINK_KIND REFERENCE_LINK_KIND TASK_LINK_KIND ";
  const lock_type_constants = "COMPONENT_TOKEN_LOCK_TYPE EDOCUMENT_VERSION_LOCK_TYPE ";
  const monitor_block_properties_constants = "MONITOR_BLOCK_AFTER_FINISH_EVENT MONITOR_BLOCK_BEFORE_START_EVENT MONITOR_BLOCK_DEADLINE_PROPERTY MONITOR_BLOCK_INTERVAL_PROPERTY MONITOR_BLOCK_INTERVAL_TYPE_PROPERTY MONITOR_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY MONITOR_BLOCK_NAME_PROPERTY MONITOR_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY MONITOR_BLOCK_SEARCH_SCRIPT_PROPERTY ";
  const notice_block_properties_constants = "NOTICE_BLOCK_AFTER_FINISH_EVENT NOTICE_BLOCK_ATTACHMENT_PROPERTY NOTICE_BLOCK_ATTACHMENTS_RIGHTS_GROUP_PROPERTY NOTICE_BLOCK_ATTACHMENTS_RIGHTS_TYPE_PROPERTY NOTICE_BLOCK_BEFORE_START_EVENT NOTICE_BLOCK_CREATED_NOTICES_PROPERTY NOTICE_BLOCK_DEADLINE_PROPERTY NOTICE_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY NOTICE_BLOCK_NAME_PROPERTY NOTICE_BLOCK_NOTICE_TEXT_PROPERTY NOTICE_BLOCK_PERFORMER_PROPERTY NOTICE_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY NOTICE_BLOCK_SUBJECT_PROPERTY ";
  const object_events_constants = "dseAfterCancel dseAfterClose dseAfterDelete dseAfterDeleteOutOfTransaction dseAfterInsert dseAfterOpen dseAfterScroll dseAfterUpdate dseAfterUpdateOutOfTransaction dseBeforeCancel dseBeforeClose dseBeforeDelete dseBeforeDetailUpdate dseBeforeInsert dseBeforeOpen dseBeforeUpdate dseOnAnyRequisiteChange dseOnCloseRecord dseOnDeleteError dseOnOpenRecord dseOnPrepareUpdate dseOnUpdateError dseOnUpdateRatifiedRecord dseOnValidDelete dseOnValidUpdate reOnChange reOnChangeValues SELECTION_BEGIN_ROUTE_EVENT SELECTION_END_ROUTE_EVENT ";
  const object_params_constants = "CURRENT_PERIOD_IS_REQUIRED PREVIOUS_CARD_TYPE_NAME SHOW_RECORD_PROPERTIES_FORM ";
  const other_constants = "ACCESS_RIGHTS_SETTING_DIALOG_CODE ADMINISTRATOR_USER_CODE ANALYTIC_REPORT_TYPE asrtHideLocal asrtHideRemote CALCULATED_ROLE_TYPE_CODE COMPONENTS_REFERENCE_DEVELOPER_VIEW_CODE DCTS_TEST_PROTOCOLS_FOLDER_PATH E_EDOC_VERSION_ALREADY_APPROVINGLY_SIGNED E_EDOC_VERSION_ALREADY_APPROVINGLY_SIGNED_BY_USER E_EDOC_VERSION_ALREDY_SIGNED E_EDOC_VERSION_ALREDY_SIGNED_BY_USER EDOC_TYPES_CODE_REQUISITE_FIELD_NAME EDOCUMENTS_ALIAS_NAME FILES_FOLDER_PATH FILTER_OPERANDS_DELIMITER FILTER_OPERATIONS_DELIMITER FORMCARD_NAME FORMLIST_NAME GET_EXTENDED_DOCUMENT_EXTENSION_CREATION_MODE GET_EXTENDED_DOCUMENT_EXTENSION_IMPORT_MODE INTEGRATED_REPORT_TYPE IS_BUILDER_APPLICATION_ROLE IS_BUILDER_APPLICATION_ROLE2 IS_BUILDER_USERS ISBSYSDEV LOG_FOLDER_PATH mbCancel mbNo mbNoToAll mbOK mbYes mbYesToAll MEMORY_DATASET_DESRIPTIONS_FILENAME mrNo mrNoToAll mrYes mrYesToAll MULTIPLE_SELECT_DIALOG_CODE NONOPERATING_RECORD_FLAG_FEMININE NONOPERATING_RECORD_FLAG_MASCULINE OPERATING_RECORD_FLAG_FEMININE OPERATING_RECORD_FLAG_MASCULINE PROFILING_SETTINGS_COMMON_SETTINGS_CODE_VALUE PROGRAM_INITIATED_LOOKUP_ACTION ratDelete ratEdit ratInsert REPORT_TYPE REQUIRED_PICK_VALUES_VARIABLE rmCard rmList SBRTE_PROGID_DEV SBRTE_PROGID_RELEASE STATIC_ROLE_TYPE_CODE SUPPRESS_EMPTY_TEMPLATE_CREATION SYSTEM_USER_CODE UPDATE_DIALOG_DATASET USED_IN_OBJECT_HINT_PARAM USER_INITIATED_LOOKUP_ACTION USER_NAME_FORMAT USER_SELECTION_RESTRICTIONS WORKFLOW_TEST_PROTOCOLS_FOLDER_PATH ELS_SUBTYPE_CONTROL_NAME ELS_FOLDER_KIND_CONTROL_NAME REPEAT_PROCESS_CURRENT_OBJECT_EXCEPTION_NAME ";
  const privileges_constants = "PRIVILEGE_COMPONENT_FULL_ACCESS PRIVILEGE_DEVELOPMENT_EXPORT PRIVILEGE_DEVELOPMENT_IMPORT PRIVILEGE_DOCUMENT_DELETE PRIVILEGE_ESD PRIVILEGE_FOLDER_DELETE PRIVILEGE_MANAGE_ACCESS_RIGHTS PRIVILEGE_MANAGE_REPLICATION PRIVILEGE_MANAGE_SESSION_SERVER PRIVILEGE_OBJECT_FULL_ACCESS PRIVILEGE_OBJECT_VIEW PRIVILEGE_RESERVE_LICENSE PRIVILEGE_SYSTEM_CUSTOMIZE PRIVILEGE_SYSTEM_DEVELOP PRIVILEGE_SYSTEM_INSTALL PRIVILEGE_TASK_DELETE PRIVILEGE_USER_PLUGIN_SETTINGS_CUSTOMIZE PRIVILEGES_PSEUDOREFERENCE_CODE ";
  const pseudoreference_code_constants = "ACCESS_TYPES_PSEUDOREFERENCE_CODE ALL_AVAILABLE_COMPONENTS_PSEUDOREFERENCE_CODE ALL_AVAILABLE_PRIVILEGES_PSEUDOREFERENCE_CODE ALL_REPLICATE_COMPONENTS_PSEUDOREFERENCE_CODE AVAILABLE_DEVELOPERS_COMPONENTS_PSEUDOREFERENCE_CODE COMPONENTS_PSEUDOREFERENCE_CODE FILTRATER_SETTINGS_CONFLICTS_PSEUDOREFERENCE_CODE GROUPS_PSEUDOREFERENCE_CODE RECEIVE_PROTOCOL_PSEUDOREFERENCE_CODE REFERENCE_REQUISITE_PSEUDOREFERENCE_CODE REFERENCE_REQUISITES_PSEUDOREFERENCE_CODE REFTYPES_PSEUDOREFERENCE_CODE REPLICATION_SEANCES_DIARY_PSEUDOREFERENCE_CODE SEND_PROTOCOL_PSEUDOREFERENCE_CODE SUBSTITUTES_PSEUDOREFERENCE_CODE SYSTEM_SETTINGS_PSEUDOREFERENCE_CODE UNITS_PSEUDOREFERENCE_CODE USERS_PSEUDOREFERENCE_CODE VIEWERS_PSEUDOREFERENCE_CODE ";
  const requisite_ISBCertificateType_values_constants = "CERTIFICATE_TYPE_ENCRYPT CERTIFICATE_TYPE_SIGN CERTIFICATE_TYPE_SIGN_AND_ENCRYPT ";
  const requisite_ISBEDocStorageType_values_constants = "STORAGE_TYPE_FILE STORAGE_TYPE_NAS_CIFS STORAGE_TYPE_SAPERION STORAGE_TYPE_SQL_SERVER ";
  const requisite_compType2_values_constants = "COMPTYPE2_REQUISITE_DOCUMENTS_VALUE COMPTYPE2_REQUISITE_TASKS_VALUE COMPTYPE2_REQUISITE_FOLDERS_VALUE COMPTYPE2_REQUISITE_REFERENCES_VALUE ";
  const requisite_name_constants = "SYSREQ_CODE SYSREQ_COMPTYPE2 SYSREQ_CONST_AVAILABLE_FOR_WEB SYSREQ_CONST_COMMON_CODE SYSREQ_CONST_COMMON_VALUE SYSREQ_CONST_FIRM_CODE SYSREQ_CONST_FIRM_STATUS SYSREQ_CONST_FIRM_VALUE SYSREQ_CONST_SERVER_STATUS SYSREQ_CONTENTS SYSREQ_DATE_OPEN SYSREQ_DATE_CLOSE SYSREQ_DESCRIPTION SYSREQ_DESCRIPTION_LOCALIZE_ID SYSREQ_DOUBLE SYSREQ_EDOC_ACCESS_TYPE SYSREQ_EDOC_AUTHOR SYSREQ_EDOC_CREATED SYSREQ_EDOC_DELEGATE_RIGHTS_REQUISITE_CODE SYSREQ_EDOC_EDITOR SYSREQ_EDOC_ENCODE_TYPE SYSREQ_EDOC_ENCRYPTION_PLUGIN_NAME SYSREQ_EDOC_ENCRYPTION_PLUGIN_VERSION SYSREQ_EDOC_EXPORT_DATE SYSREQ_EDOC_EXPORTER SYSREQ_EDOC_KIND SYSREQ_EDOC_LIFE_STAGE_NAME SYSREQ_EDOC_LOCKED_FOR_SERVER_CODE SYSREQ_EDOC_MODIFIED SYSREQ_EDOC_NAME SYSREQ_EDOC_NOTE SYSREQ_EDOC_QUALIFIED_ID SYSREQ_EDOC_SESSION_KEY SYSREQ_EDOC_SESSION_KEY_ENCRYPTION_PLUGIN_NAME SYSREQ_EDOC_SESSION_KEY_ENCRYPTION_PLUGIN_VERSION SYSREQ_EDOC_SIGNATURE_TYPE SYSREQ_EDOC_SIGNED SYSREQ_EDOC_STORAGE SYSREQ_EDOC_STORAGES_ARCHIVE_STORAGE SYSREQ_EDOC_STORAGES_CHECK_RIGHTS SYSREQ_EDOC_STORAGES_COMPUTER_NAME SYSREQ_EDOC_STORAGES_EDIT_IN_STORAGE SYSREQ_EDOC_STORAGES_EXECUTIVE_STORAGE SYSREQ_EDOC_STORAGES_FUNCTION SYSREQ_EDOC_STORAGES_INITIALIZED SYSREQ_EDOC_STORAGES_LOCAL_PATH SYSREQ_EDOC_STORAGES_SAPERION_DATABASE_NAME SYSREQ_EDOC_STORAGES_SEARCH_BY_TEXT SYSREQ_EDOC_STORAGES_SERVER_NAME SYSREQ_EDOC_STORAGES_SHARED_SOURCE_NAME SYSREQ_EDOC_STORAGES_TYPE SYSREQ_EDOC_TEXT_MODIFIED SYSREQ_EDOC_TYPE_ACT_CODE SYSREQ_EDOC_TYPE_ACT_DESCRIPTION SYSREQ_EDOC_TYPE_ACT_DESCRIPTION_LOCALIZE_ID SYSREQ_EDOC_TYPE_ACT_ON_EXECUTE SYSREQ_EDOC_TYPE_ACT_ON_EXECUTE_EXISTS SYSREQ_EDOC_TYPE_ACT_SECTION SYSREQ_EDOC_TYPE_ADD_PARAMS SYSREQ_EDOC_TYPE_COMMENT SYSREQ_EDOC_TYPE_EVENT_TEXT SYSREQ_EDOC_TYPE_NAME_IN_SINGULAR SYSREQ_EDOC_TYPE_NAME_IN_SINGULAR_LOCALIZE_ID SYSREQ_EDOC_TYPE_NAME_LOCALIZE_ID SYSREQ_EDOC_TYPE_NUMERATION_METHOD SYSREQ_EDOC_TYPE_PSEUDO_REQUISITE_CODE SYSREQ_EDOC_TYPE_REQ_CODE SYSREQ_EDOC_TYPE_REQ_DESCRIPTION SYSREQ_EDOC_TYPE_REQ_DESCRIPTION_LOCALIZE_ID SYSREQ_EDOC_TYPE_REQ_IS_LEADING SYSREQ_EDOC_TYPE_REQ_IS_REQUIRED SYSREQ_EDOC_TYPE_REQ_NUMBER SYSREQ_EDOC_TYPE_REQ_ON_CHANGE SYSREQ_EDOC_TYPE_REQ_ON_CHANGE_EXISTS SYSREQ_EDOC_TYPE_REQ_ON_SELECT SYSREQ_EDOC_TYPE_REQ_ON_SELECT_KIND SYSREQ_EDOC_TYPE_REQ_SECTION SYSREQ_EDOC_TYPE_VIEW_CARD SYSREQ_EDOC_TYPE_VIEW_CODE SYSREQ_EDOC_TYPE_VIEW_COMMENT SYSREQ_EDOC_TYPE_VIEW_IS_MAIN SYSREQ_EDOC_TYPE_VIEW_NAME SYSREQ_EDOC_TYPE_VIEW_NAME_LOCALIZE_ID SYSREQ_EDOC_VERSION_AUTHOR SYSREQ_EDOC_VERSION_CRC SYSREQ_EDOC_VERSION_DATA SYSREQ_EDOC_VERSION_EDITOR SYSREQ_EDOC_VERSION_EXPORT_DATE SYSREQ_EDOC_VERSION_EXPORTER SYSREQ_EDOC_VERSION_HIDDEN SYSREQ_EDOC_VERSION_LIFE_STAGE SYSREQ_EDOC_VERSION_MODIFIED SYSREQ_EDOC_VERSION_NOTE SYSREQ_EDOC_VERSION_SIGNATURE_TYPE SYSREQ_EDOC_VERSION_SIGNED SYSREQ_EDOC_VERSION_SIZE SYSREQ_EDOC_VERSION_SOURCE SYSREQ_EDOC_VERSION_TEXT_MODIFIED SYSREQ_EDOCKIND_DEFAULT_VERSION_STATE_CODE SYSREQ_FOLDER_KIND SYSREQ_FUNC_CATEGORY SYSREQ_FUNC_COMMENT SYSREQ_FUNC_GROUP SYSREQ_FUNC_GROUP_COMMENT SYSREQ_FUNC_GROUP_NUMBER SYSREQ_FUNC_HELP SYSREQ_FUNC_PARAM_DEF_VALUE SYSREQ_FUNC_PARAM_IDENT SYSREQ_FUNC_PARAM_NUMBER SYSREQ_FUNC_PARAM_TYPE SYSREQ_FUNC_TEXT SYSREQ_GROUP_CATEGORY SYSREQ_ID SYSREQ_LAST_UPDATE SYSREQ_LEADER_REFERENCE SYSREQ_LINE_NUMBER SYSREQ_MAIN_RECORD_ID SYSREQ_NAME SYSREQ_NAME_LOCALIZE_ID SYSREQ_NOTE SYSREQ_ORIGINAL_RECORD SYSREQ_OUR_FIRM SYSREQ_PROFILING_SETTINGS_BATCH_LOGING SYSREQ_PROFILING_SETTINGS_BATCH_SIZE SYSREQ_PROFILING_SETTINGS_PROFILING_ENABLED SYSREQ_PROFILING_SETTINGS_SQL_PROFILING_ENABLED SYSREQ_PROFILING_SETTINGS_START_LOGGED SYSREQ_RECORD_STATUS SYSREQ_REF_REQ_FIELD_NAME SYSREQ_REF_REQ_FORMAT SYSREQ_REF_REQ_GENERATED SYSREQ_REF_REQ_LENGTH SYSREQ_REF_REQ_PRECISION SYSREQ_REF_REQ_REFERENCE SYSREQ_REF_REQ_SECTION SYSREQ_REF_REQ_STORED SYSREQ_REF_REQ_TOKENS SYSREQ_REF_REQ_TYPE SYSREQ_REF_REQ_VIEW SYSREQ_REF_TYPE_ACT_CODE SYSREQ_REF_TYPE_ACT_DESCRIPTION SYSREQ_REF_TYPE_ACT_DESCRIPTION_LOCALIZE_ID SYSREQ_REF_TYPE_ACT_ON_EXECUTE SYSREQ_REF_TYPE_ACT_ON_EXECUTE_EXISTS SYSREQ_REF_TYPE_ACT_SECTION SYSREQ_REF_TYPE_ADD_PARAMS SYSREQ_REF_TYPE_COMMENT SYSREQ_REF_TYPE_COMMON_SETTINGS SYSREQ_REF_TYPE_DISPLAY_REQUISITE_NAME SYSREQ_REF_TYPE_EVENT_TEXT SYSREQ_REF_TYPE_MAIN_LEADING_REF SYSREQ_REF_TYPE_NAME_IN_SINGULAR SYSREQ_REF_TYPE_NAME_IN_SINGULAR_LOCALIZE_ID SYSREQ_REF_TYPE_NAME_LOCALIZE_ID SYSREQ_REF_TYPE_NUMERATION_METHOD SYSREQ_REF_TYPE_REQ_CODE SYSREQ_REF_TYPE_REQ_DESCRIPTION SYSREQ_REF_TYPE_REQ_DESCRIPTION_LOCALIZE_ID SYSREQ_REF_TYPE_REQ_IS_CONTROL SYSREQ_REF_TYPE_REQ_IS_FILTER SYSREQ_REF_TYPE_REQ_IS_LEADING SYSREQ_REF_TYPE_REQ_IS_REQUIRED SYSREQ_REF_TYPE_REQ_NUMBER SYSREQ_REF_TYPE_REQ_ON_CHANGE SYSREQ_REF_TYPE_REQ_ON_CHANGE_EXISTS SYSREQ_REF_TYPE_REQ_ON_SELECT SYSREQ_REF_TYPE_REQ_ON_SELECT_KIND SYSREQ_REF_TYPE_REQ_SECTION SYSREQ_REF_TYPE_VIEW_CARD SYSREQ_REF_TYPE_VIEW_CODE SYSREQ_REF_TYPE_VIEW_COMMENT SYSREQ_REF_TYPE_VIEW_IS_MAIN SYSREQ_REF_TYPE_VIEW_NAME SYSREQ_REF_TYPE_VIEW_NAME_LOCALIZE_ID SYSREQ_REFERENCE_TYPE_ID SYSREQ_STATE SYSREQ_STATЕ SYSREQ_SYSTEM_SETTINGS_VALUE SYSREQ_TYPE SYSREQ_UNIT SYSREQ_UNIT_ID SYSREQ_USER_GROUPS_GROUP_FULL_NAME SYSREQ_USER_GROUPS_GROUP_NAME SYSREQ_USER_GROUPS_GROUP_SERVER_NAME SYSREQ_USERS_ACCESS_RIGHTS SYSREQ_USERS_AUTHENTICATION SYSREQ_USERS_CATEGORY SYSREQ_USERS_COMPONENT SYSREQ_USERS_COMPONENT_USER_IS_PUBLIC SYSREQ_USERS_DOMAIN SYSREQ_USERS_FULL_USER_NAME SYSREQ_USERS_GROUP SYSREQ_USERS_IS_MAIN_SERVER SYSREQ_USERS_LOGIN SYSREQ_USERS_REFERENCE_USER_IS_PUBLIC SYSREQ_USERS_STATUS SYSREQ_USERS_USER_CERTIFICATE SYSREQ_USERS_USER_CERTIFICATE_INFO SYSREQ_USERS_USER_CERTIFICATE_PLUGIN_NAME SYSREQ_USERS_USER_CERTIFICATE_PLUGIN_VERSION SYSREQ_USERS_USER_CERTIFICATE_STATE SYSREQ_USERS_USER_CERTIFICATE_SUBJECT_NAME SYSREQ_USERS_USER_CERTIFICATE_THUMBPRINT SYSREQ_USERS_USER_DEFAULT_CERTIFICATE SYSREQ_USERS_USER_DESCRIPTION SYSREQ_USERS_USER_GLOBAL_NAME SYSREQ_USERS_USER_LOGIN SYSREQ_USERS_USER_MAIN_SERVER SYSREQ_USERS_USER_TYPE SYSREQ_WORK_RULES_FOLDER_ID ";
  const result_constants = "RESULT_VAR_NAME RESULT_VAR_NAME_ENG ";
  const rule_identification_constants = "AUTO_NUMERATION_RULE_ID CANT_CHANGE_ID_REQUISITE_RULE_ID CANT_CHANGE_OURFIRM_REQUISITE_RULE_ID CHECK_CHANGING_REFERENCE_RECORD_USE_RULE_ID CHECK_CODE_REQUISITE_RULE_ID CHECK_DELETING_REFERENCE_RECORD_USE_RULE_ID CHECK_FILTRATER_CHANGES_RULE_ID CHECK_RECORD_INTERVAL_RULE_ID CHECK_REFERENCE_INTERVAL_RULE_ID CHECK_REQUIRED_DATA_FULLNESS_RULE_ID CHECK_REQUIRED_REQUISITES_FULLNESS_RULE_ID MAKE_RECORD_UNRATIFIED_RULE_ID RESTORE_AUTO_NUMERATION_RULE_ID SET_FIRM_CONTEXT_FROM_RECORD_RULE_ID SET_FIRST_RECORD_IN_LIST_FORM_RULE_ID SET_IDSPS_VALUE_RULE_ID SET_NEXT_CODE_VALUE_RULE_ID SET_OURFIRM_BOUNDS_RULE_ID SET_OURFIRM_REQUISITE_RULE_ID ";
  const script_block_properties_constants = "SCRIPT_BLOCK_AFTER_FINISH_EVENT SCRIPT_BLOCK_BEFORE_START_EVENT SCRIPT_BLOCK_EXECUTION_RESULTS_PROPERTY SCRIPT_BLOCK_NAME_PROPERTY SCRIPT_BLOCK_SCRIPT_PROPERTY ";
  const subtask_block_properties_constants = "SUBTASK_BLOCK_ABORT_DEADLINE_PROPERTY SUBTASK_BLOCK_AFTER_FINISH_EVENT SUBTASK_BLOCK_ASSIGN_PARAMS_EVENT SUBTASK_BLOCK_ATTACHMENTS_PROPERTY SUBTASK_BLOCK_ATTACHMENTS_RIGHTS_GROUP_PROPERTY SUBTASK_BLOCK_ATTACHMENTS_RIGHTS_TYPE_PROPERTY SUBTASK_BLOCK_BEFORE_START_EVENT SUBTASK_BLOCK_CREATED_TASK_PROPERTY SUBTASK_BLOCK_CREATION_EVENT SUBTASK_BLOCK_DEADLINE_PROPERTY SUBTASK_BLOCK_IMPORTANCE_PROPERTY SUBTASK_BLOCK_INITIATOR_PROPERTY SUBTASK_BLOCK_IS_RELATIVE_ABORT_DEADLINE_PROPERTY SUBTASK_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY SUBTASK_BLOCK_JOBS_TYPE_PROPERTY SUBTASK_BLOCK_NAME_PROPERTY SUBTASK_BLOCK_PARALLEL_ROUTE_PROPERTY SUBTASK_BLOCK_PERFORMERS_PROPERTY SUBTASK_BLOCK_RELATIVE_ABORT_DEADLINE_TYPE_PROPERTY SUBTASK_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY SUBTASK_BLOCK_REQUIRE_SIGN_PROPERTY SUBTASK_BLOCK_STANDARD_ROUTE_PROPERTY SUBTASK_BLOCK_START_EVENT SUBTASK_BLOCK_STEP_CONTROL_PROPERTY SUBTASK_BLOCK_SUBJECT_PROPERTY SUBTASK_BLOCK_TASK_CONTROL_PROPERTY SUBTASK_BLOCK_TEXT_PROPERTY SUBTASK_BLOCK_UNLOCK_ATTACHMENTS_ON_STOP_PROPERTY SUBTASK_BLOCK_USE_STANDARD_ROUTE_PROPERTY SUBTASK_BLOCK_WAIT_FOR_TASK_COMPLETE_PROPERTY ";
  const system_component_constants = "SYSCOMP_CONTROL_JOBS SYSCOMP_FOLDERS SYSCOMP_JOBS SYSCOMP_NOTICES SYSCOMP_TASKS ";
  const system_dialogs_constants = "SYSDLG_CREATE_EDOCUMENT SYSDLG_CREATE_EDOCUMENT_VERSION SYSDLG_CURRENT_PERIOD SYSDLG_EDIT_FUNCTION_HELP SYSDLG_EDOCUMENT_KINDS_FOR_TEMPLATE SYSDLG_EXPORT_MULTIPLE_EDOCUMENTS SYSDLG_EXPORT_SINGLE_EDOCUMENT SYSDLG_IMPORT_EDOCUMENT SYSDLG_MULTIPLE_SELECT SYSDLG_SETUP_ACCESS_RIGHTS SYSDLG_SETUP_DEFAULT_RIGHTS SYSDLG_SETUP_FILTER_CONDITION SYSDLG_SETUP_SIGN_RIGHTS SYSDLG_SETUP_TASK_OBSERVERS SYSDLG_SETUP_TASK_ROUTE SYSDLG_SETUP_USERS_LIST SYSDLG_SIGN_EDOCUMENT SYSDLG_SIGN_MULTIPLE_EDOCUMENTS ";
  const system_reference_names_constants = "SYSREF_ACCESS_RIGHTS_TYPES SYSREF_ADMINISTRATION_HISTORY SYSREF_ALL_AVAILABLE_COMPONENTS SYSREF_ALL_AVAILABLE_PRIVILEGES SYSREF_ALL_REPLICATING_COMPONENTS SYSREF_AVAILABLE_DEVELOPERS_COMPONENTS SYSREF_CALENDAR_EVENTS SYSREF_COMPONENT_TOKEN_HISTORY SYSREF_COMPONENT_TOKENS SYSREF_COMPONENTS SYSREF_CONSTANTS SYSREF_DATA_RECEIVE_PROTOCOL SYSREF_DATA_SEND_PROTOCOL SYSREF_DIALOGS SYSREF_DIALOGS_REQUISITES SYSREF_EDITORS SYSREF_EDOC_CARDS SYSREF_EDOC_TYPES SYSREF_EDOCUMENT_CARD_REQUISITES SYSREF_EDOCUMENT_CARD_TYPES SYSREF_EDOCUMENT_CARD_TYPES_REFERENCE SYSREF_EDOCUMENT_CARDS SYSREF_EDOCUMENT_HISTORY SYSREF_EDOCUMENT_KINDS SYSREF_EDOCUMENT_REQUISITES SYSREF_EDOCUMENT_SIGNATURES SYSREF_EDOCUMENT_TEMPLATES SYSREF_EDOCUMENT_TEXT_STORAGES SYSREF_EDOCUMENT_VIEWS SYSREF_FILTERER_SETUP_CONFLICTS SYSREF_FILTRATER_SETTING_CONFLICTS SYSREF_FOLDER_HISTORY SYSREF_FOLDERS SYSREF_FUNCTION_GROUPS SYSREF_FUNCTION_PARAMS SYSREF_FUNCTIONS SYSREF_JOB_HISTORY SYSREF_LINKS SYSREF_LOCALIZATION_DICTIONARY SYSREF_LOCALIZATION_LANGUAGES SYSREF_MODULES SYSREF_PRIVILEGES SYSREF_RECORD_HISTORY SYSREF_REFERENCE_REQUISITES SYSREF_REFERENCE_TYPE_VIEWS SYSREF_REFERENCE_TYPES SYSREF_REFERENCES SYSREF_REFERENCES_REQUISITES SYSREF_REMOTE_SERVERS SYSREF_REPLICATION_SESSIONS_LOG SYSREF_REPLICATION_SESSIONS_PROTOCOL SYSREF_REPORTS SYSREF_ROLES SYSREF_ROUTE_BLOCK_GROUPS SYSREF_ROUTE_BLOCKS SYSREF_SCRIPTS SYSREF_SEARCHES SYSREF_SERVER_EVENTS SYSREF_SERVER_EVENTS_HISTORY SYSREF_STANDARD_ROUTE_GROUPS SYSREF_STANDARD_ROUTES SYSREF_STATUSES SYSREF_SYSTEM_SETTINGS SYSREF_TASK_HISTORY SYSREF_TASK_KIND_GROUPS SYSREF_TASK_KINDS SYSREF_TASK_RIGHTS SYSREF_TASK_SIGNATURES SYSREF_TASKS SYSREF_UNITS SYSREF_USER_GROUPS SYSREF_USER_GROUPS_REFERENCE SYSREF_USER_SUBSTITUTION SYSREF_USERS SYSREF_USERS_REFERENCE SYSREF_VIEWERS SYSREF_WORKING_TIME_CALENDARS ";
  const table_name_constants = "ACCESS_RIGHTS_TABLE_NAME EDMS_ACCESS_TABLE_NAME EDOC_TYPES_TABLE_NAME ";
  const test_constants = "TEST_DEV_DB_NAME TEST_DEV_SYSTEM_CODE TEST_EDMS_DB_NAME TEST_EDMS_MAIN_CODE TEST_EDMS_MAIN_DB_NAME TEST_EDMS_SECOND_CODE TEST_EDMS_SECOND_DB_NAME TEST_EDMS_SYSTEM_CODE TEST_ISB5_MAIN_CODE TEST_ISB5_SECOND_CODE TEST_SQL_SERVER_2005_NAME TEST_SQL_SERVER_NAME ";
  const using_the_dialog_windows_constants = "ATTENTION_CAPTION cbsCommandLinks cbsDefault CONFIRMATION_CAPTION ERROR_CAPTION INFORMATION_CAPTION mrCancel mrOk ";
  const using_the_document_constants = "EDOC_VERSION_ACTIVE_STAGE_CODE EDOC_VERSION_DESIGN_STAGE_CODE EDOC_VERSION_OBSOLETE_STAGE_CODE ";
  const using_the_EA_and_encryption_constants = "cpDataEnciphermentEnabled cpDigitalSignatureEnabled cpID cpIssuer cpPluginVersion cpSerial cpSubjectName cpSubjSimpleName cpValidFromDate cpValidToDate ";
  const using_the_ISBL_editor_constants = "ISBL_SYNTAX NO_SYNTAX XML_SYNTAX ";
  const wait_block_properties_constants = "WAIT_BLOCK_AFTER_FINISH_EVENT WAIT_BLOCK_BEFORE_START_EVENT WAIT_BLOCK_DEADLINE_PROPERTY WAIT_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY WAIT_BLOCK_NAME_PROPERTY WAIT_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY ";
  const sysres_common_constants = "SYSRES_COMMON SYSRES_CONST SYSRES_MBFUNC SYSRES_SBDATA SYSRES_SBGUI SYSRES_SBINTF SYSRES_SBREFDSC SYSRES_SQLERRORS SYSRES_SYSCOMP ";
  const CONSTANTS = sysres_constants + base_constants + base_group_name_constants + decision_block_properties_constants + file_extension_constants + job_block_properties_constants + language_code_constants + launching_external_applications_constants + link_kind_constants + lock_type_constants + monitor_block_properties_constants + notice_block_properties_constants + object_events_constants + object_params_constants + other_constants + privileges_constants + pseudoreference_code_constants + requisite_ISBCertificateType_values_constants + requisite_ISBEDocStorageType_values_constants + requisite_compType2_values_constants + requisite_name_constants + result_constants + rule_identification_constants + script_block_properties_constants + subtask_block_properties_constants + system_component_constants + system_dialogs_constants + system_reference_names_constants + table_name_constants + test_constants + using_the_dialog_windows_constants + using_the_document_constants + using_the_EA_and_encryption_constants + using_the_ISBL_editor_constants + wait_block_properties_constants + sysres_common_constants;
  const TAccountType = "atUser atGroup atRole ";
  const TActionEnabledMode = "aemEnabledAlways aemDisabledAlways aemEnabledOnBrowse aemEnabledOnEdit aemDisabledOnBrowseEmpty ";
  const TAddPosition = "apBegin apEnd ";
  const TAlignment = "alLeft alRight ";
  const TAreaShowMode = "asmNever asmNoButCustomize asmAsLastTime asmYesButCustomize asmAlways ";
  const TCertificateInvalidationReason = "cirCommon cirRevoked ";
  const TCertificateType = "ctSignature ctEncode ctSignatureEncode ";
  const TCheckListBoxItemState = "clbUnchecked clbChecked clbGrayed ";
  const TCloseOnEsc = "ceISB ceAlways ceNever ";
  const TCompType = "ctDocument ctReference ctScript ctUnknown ctReport ctDialog ctFunction ctFolder ctEDocument ctTask ctJob ctNotice ctControlJob ";
  const TConditionFormat = "cfInternal cfDisplay ";
  const TConnectionIntent = "ciUnspecified ciWrite ciRead ";
  const TContentKind = "ckFolder ckEDocument ckTask ckJob ckComponentToken ckAny ckReference ckScript ckReport ckDialog ";
  const TControlType = "ctISBLEditor ctBevel ctButton ctCheckListBox ctComboBox ctComboEdit ctGrid ctDBCheckBox ctDBComboBox ctDBEdit ctDBEllipsis ctDBMemo ctDBNavigator ctDBRadioGroup ctDBStatusLabel ctEdit ctGroupBox ctInplaceHint ctMemo ctPanel ctListBox ctRadioButton ctRichEdit ctTabSheet ctWebBrowser ctImage ctHyperLink ctLabel ctDBMultiEllipsis ctRibbon ctRichView ctInnerPanel ctPanelGroup ctBitButton ";
  const TCriterionContentType = "cctDate cctInteger cctNumeric cctPick cctReference cctString cctText ";
  const TCultureType = "cltInternal cltPrimary cltGUI ";
  const TDataSetEventType = "dseBeforeOpen dseAfterOpen dseBeforeClose dseAfterClose dseOnValidDelete dseBeforeDelete dseAfterDelete dseAfterDeleteOutOfTransaction dseOnDeleteError dseBeforeInsert dseAfterInsert dseOnValidUpdate dseBeforeUpdate dseOnUpdateRatifiedRecord dseAfterUpdate dseAfterUpdateOutOfTransaction dseOnUpdateError dseAfterScroll dseOnOpenRecord dseOnCloseRecord dseBeforeCancel dseAfterCancel dseOnUpdateDeadlockError dseBeforeDetailUpdate dseOnPrepareUpdate dseOnAnyRequisiteChange ";
  const TDataSetState = "dssEdit dssInsert dssBrowse dssInActive ";
  const TDateFormatType = "dftDate dftShortDate dftDateTime dftTimeStamp ";
  const TDateOffsetType = "dotDays dotHours dotMinutes dotSeconds ";
  const TDateTimeKind = "dtkndLocal dtkndUTC ";
  const TDeaAccessRights = "arNone arView arEdit arFull ";
  const TDocumentDefaultAction = "ddaView ddaEdit ";
  const TEditMode = "emLock emEdit emSign emExportWithLock emImportWithUnlock emChangeVersionNote emOpenForModify emChangeLifeStage emDelete emCreateVersion emImport emUnlockExportedWithLock emStart emAbort emReInit emMarkAsReaded emMarkAsUnreaded emPerform emAccept emResume emChangeRights emEditRoute emEditObserver emRecoveryFromLocalCopy emChangeWorkAccessType emChangeEncodeTypeToCertificate emChangeEncodeTypeToPassword emChangeEncodeTypeToNone emChangeEncodeTypeToCertificatePassword emChangeStandardRoute emGetText emOpenForView emMoveToStorage emCreateObject emChangeVersionHidden emDeleteVersion emChangeLifeCycleStage emApprovingSign emExport emContinue emLockFromEdit emUnLockForEdit emLockForServer emUnlockFromServer emDelegateAccessRights emReEncode ";
  const TEditorCloseObservType = "ecotFile ecotProcess ";
  const TEdmsApplicationAction = "eaGet eaCopy eaCreate eaCreateStandardRoute ";
  const TEDocumentLockType = "edltAll edltNothing edltQuery ";
  const TEDocumentStepShowMode = "essmText essmCard ";
  const TEDocumentStepVersionType = "esvtLast esvtLastActive esvtSpecified ";
  const TEDocumentStorageFunction = "edsfExecutive edsfArchive ";
  const TEDocumentStorageType = "edstSQLServer edstFile ";
  const TEDocumentVersionSourceType = "edvstNone edvstEDocumentVersionCopy edvstFile edvstTemplate edvstScannedFile ";
  const TEDocumentVersionState = "vsDefault vsDesign vsActive vsObsolete ";
  const TEncodeType = "etNone etCertificate etPassword etCertificatePassword ";
  const TExceptionCategory = "ecException ecWarning ecInformation ";
  const TExportedSignaturesType = "estAll estApprovingOnly ";
  const TExportedVersionType = "evtLast evtLastActive evtQuery ";
  const TFieldDataType = "fdtString fdtNumeric fdtInteger fdtDate fdtText fdtUnknown fdtWideString fdtLargeInteger ";
  const TFolderType = "ftInbox ftOutbox ftFavorites ftCommonFolder ftUserFolder ftComponents ftQuickLaunch ftShortcuts ftSearch ";
  const TGridRowHeight = "grhAuto grhX1 grhX2 grhX3 ";
  const THyperlinkType = "hltText hltRTF hltHTML ";
  const TImageFileFormat = "iffBMP iffJPEG iffMultiPageTIFF iffSinglePageTIFF iffTIFF iffPNG ";
  const TImageMode = "im8bGrayscale im24bRGB im1bMonochrome ";
  const TImageType = "itBMP itJPEG itWMF itPNG ";
  const TInplaceHintKind = "ikhInformation ikhWarning ikhError ikhNoIcon ";
  const TISBLContext = "icUnknown icScript icFunction icIntegratedReport icAnalyticReport icDataSetEventHandler icActionHandler icFormEventHandler icLookUpEventHandler icRequisiteChangeEventHandler icBeforeSearchEventHandler icRoleCalculation icSelectRouteEventHandler icBlockPropertyCalculation icBlockQueryParamsEventHandler icChangeSearchResultEventHandler icBlockEventHandler icSubTaskInitEventHandler icEDocDataSetEventHandler icEDocLookUpEventHandler icEDocActionHandler icEDocFormEventHandler icEDocRequisiteChangeEventHandler icStructuredConversionRule icStructuredConversionEventBefore icStructuredConversionEventAfter icWizardEventHandler icWizardFinishEventHandler icWizardStepEventHandler icWizardStepFinishEventHandler icWizardActionEnableEventHandler icWizardActionExecuteEventHandler icCreateJobsHandler icCreateNoticesHandler icBeforeLookUpEventHandler icAfterLookUpEventHandler icTaskAbortEventHandler icWorkflowBlockActionHandler icDialogDataSetEventHandler icDialogActionHandler icDialogLookUpEventHandler icDialogRequisiteChangeEventHandler icDialogFormEventHandler icDialogValidCloseEventHandler icBlockFormEventHandler icTaskFormEventHandler icReferenceMethod icEDocMethod icDialogMethod icProcessMessageHandler ";
  const TItemShow = "isShow isHide isByUserSettings ";
  const TJobKind = "jkJob jkNotice jkControlJob ";
  const TJoinType = "jtInner jtLeft jtRight jtFull jtCross ";
  const TLabelPos = "lbpAbove lbpBelow lbpLeft lbpRight ";
  const TLicensingType = "eltPerConnection eltPerUser ";
  const TLifeCycleStageFontColor = "sfcUndefined sfcBlack sfcGreen sfcRed sfcBlue sfcOrange sfcLilac ";
  const TLifeCycleStageFontStyle = "sfsItalic sfsStrikeout sfsNormal ";
  const TLockableDevelopmentComponentType = "ldctStandardRoute ldctWizard ldctScript ldctFunction ldctRouteBlock ldctIntegratedReport ldctAnalyticReport ldctReferenceType ldctEDocumentType ldctDialog ldctServerEvents ";
  const TMaxRecordCountRestrictionType = "mrcrtNone mrcrtUser mrcrtMaximal mrcrtCustom ";
  const TRangeValueType = "vtEqual vtGreaterOrEqual vtLessOrEqual vtRange ";
  const TRelativeDate = "rdYesterday rdToday rdTomorrow rdThisWeek rdThisMonth rdThisYear rdNextMonth rdNextWeek rdLastWeek rdLastMonth ";
  const TReportDestination = "rdWindow rdFile rdPrinter ";
  const TReqDataType = "rdtString rdtNumeric rdtInteger rdtDate rdtReference rdtAccount rdtText rdtPick rdtUnknown rdtLargeInteger rdtDocument ";
  const TRequisiteEventType = "reOnChange reOnChangeValues ";
  const TSBTimeType = "ttGlobal ttLocal ttUser ttSystem ";
  const TSearchShowMode = "ssmBrowse ssmSelect ssmMultiSelect ssmBrowseModal ";
  const TSelectMode = "smSelect smLike smCard ";
  const TSignatureType = "stNone stAuthenticating stApproving ";
  const TSignerContentType = "sctString sctStream ";
  const TStringsSortType = "sstAnsiSort sstNaturalSort ";
  const TStringValueType = "svtEqual svtContain ";
  const TStructuredObjectAttributeType = "soatString soatNumeric soatInteger soatDatetime soatReferenceRecord soatText soatPick soatBoolean soatEDocument soatAccount soatIntegerCollection soatNumericCollection soatStringCollection soatPickCollection soatDatetimeCollection soatBooleanCollection soatReferenceRecordCollection soatEDocumentCollection soatAccountCollection soatContents soatUnknown ";
  const TTaskAbortReason = "tarAbortByUser tarAbortByWorkflowException ";
  const TTextValueType = "tvtAllWords tvtExactPhrase tvtAnyWord ";
  const TUserObjectStatus = "usNone usCompleted usRedSquare usBlueSquare usYellowSquare usGreenSquare usOrangeSquare usPurpleSquare usFollowUp ";
  const TUserType = "utUnknown utUser utDeveloper utAdministrator utSystemDeveloper utDisconnected ";
  const TValuesBuildType = "btAnd btDetailAnd btOr btNotOr btOnly ";
  const TViewMode = "vmView vmSelect vmNavigation ";
  const TViewSelectionMode = "vsmSingle vsmMultiple vsmMultipleCheck vsmNoSelection ";
  const TWizardActionType = "wfatPrevious wfatNext wfatCancel wfatFinish ";
  const TWizardFormElementProperty = "wfepUndefined wfepText3 wfepText6 wfepText9 wfepSpinEdit wfepDropDown wfepRadioGroup wfepFlag wfepText12 wfepText15 wfepText18 wfepText21 wfepText24 wfepText27 wfepText30 wfepRadioGroupColumn1 wfepRadioGroupColumn2 wfepRadioGroupColumn3 ";
  const TWizardFormElementType = "wfetQueryParameter wfetText wfetDelimiter wfetLabel ";
  const TWizardParamType = "wptString wptInteger wptNumeric wptBoolean wptDateTime wptPick wptText wptUser wptUserList wptEDocumentInfo wptEDocumentInfoList wptReferenceRecordInfo wptReferenceRecordInfoList wptFolderInfo wptTaskInfo wptContents wptFileName wptDate ";
  const TWizardStepResult = "wsrComplete wsrGoNext wsrGoPrevious wsrCustom wsrCancel wsrGoFinal ";
  const TWizardStepType = "wstForm wstEDocument wstTaskCard wstReferenceRecordCard wstFinal ";
  const TWorkAccessType = "waAll waPerformers waManual ";
  const TWorkflowBlockType = "wsbStart wsbFinish wsbNotice wsbStep wsbDecision wsbWait wsbMonitor wsbScript wsbConnector wsbSubTask wsbLifeCycleStage wsbPause ";
  const TWorkflowDataType = "wdtInteger wdtFloat wdtString wdtPick wdtDateTime wdtBoolean wdtTask wdtJob wdtFolder wdtEDocument wdtReferenceRecord wdtUser wdtGroup wdtRole wdtIntegerCollection wdtFloatCollection wdtStringCollection wdtPickCollection wdtDateTimeCollection wdtBooleanCollection wdtTaskCollection wdtJobCollection wdtFolderCollection wdtEDocumentCollection wdtReferenceRecordCollection wdtUserCollection wdtGroupCollection wdtRoleCollection wdtContents wdtUserList wdtSearchDescription wdtDeadLine wdtPickSet wdtAccountCollection ";
  const TWorkImportance = "wiLow wiNormal wiHigh ";
  const TWorkRouteType = "wrtSoft wrtHard ";
  const TWorkState = "wsInit wsRunning wsDone wsControlled wsAborted wsContinued ";
  const TWorkTextBuildingMode = "wtmFull wtmFromCurrent wtmOnlyCurrent ";
  const ENUMS = TAccountType + TActionEnabledMode + TAddPosition + TAlignment + TAreaShowMode + TCertificateInvalidationReason + TCertificateType + TCheckListBoxItemState + TCloseOnEsc + TCompType + TConditionFormat + TConnectionIntent + TContentKind + TControlType + TCriterionContentType + TCultureType + TDataSetEventType + TDataSetState + TDateFormatType + TDateOffsetType + TDateTimeKind + TDeaAccessRights + TDocumentDefaultAction + TEditMode + TEditorCloseObservType + TEdmsApplicationAction + TEDocumentLockType + TEDocumentStepShowMode + TEDocumentStepVersionType + TEDocumentStorageFunction + TEDocumentStorageType + TEDocumentVersionSourceType + TEDocumentVersionState + TEncodeType + TExceptionCategory + TExportedSignaturesType + TExportedVersionType + TFieldDataType + TFolderType + TGridRowHeight + THyperlinkType + TImageFileFormat + TImageMode + TImageType + TInplaceHintKind + TISBLContext + TItemShow + TJobKind + TJoinType + TLabelPos + TLicensingType + TLifeCycleStageFontColor + TLifeCycleStageFontStyle + TLockableDevelopmentComponentType + TMaxRecordCountRestrictionType + TRangeValueType + TRelativeDate + TReportDestination + TReqDataType + TRequisiteEventType + TSBTimeType + TSearchShowMode + TSelectMode + TSignatureType + TSignerContentType + TStringsSortType + TStringValueType + TStructuredObjectAttributeType + TTaskAbortReason + TTextValueType + TUserObjectStatus + TUserType + TValuesBuildType + TViewMode + TViewSelectionMode + TWizardActionType + TWizardFormElementProperty + TWizardFormElementType + TWizardParamType + TWizardStepResult + TWizardStepType + TWorkAccessType + TWorkflowBlockType + TWorkflowDataType + TWorkImportance + TWorkRouteType + TWorkState + TWorkTextBuildingMode;
  const system_functions = "AddSubString AdjustLineBreaks AmountInWords Analysis ArrayDimCount ArrayHighBound ArrayLowBound ArrayOf ArrayReDim Assert Assigned BeginOfMonth BeginOfPeriod BuildProfilingOperationAnalysis CallProcedure CanReadFile CArrayElement CDataSetRequisite ChangeDate ChangeReferenceDataset Char CharPos CheckParam CheckParamValue CompareStrings ConstantExists ControlState ConvertDateStr Copy CopyFile CreateArray CreateCachedReference CreateConnection CreateDialog CreateDualListDialog CreateEditor CreateException CreateFile CreateFolderDialog CreateInputDialog CreateLinkFile CreateList CreateLock CreateMemoryDataSet CreateObject CreateOpenDialog CreateProgress CreateQuery CreateReference CreateReport CreateSaveDialog CreateScript CreateSQLPivotFunction CreateStringList CreateTreeListSelectDialog CSelectSQL CSQL CSubString CurrentUserID CurrentUserName CurrentVersion DataSetLocateEx DateDiff DateTimeDiff DateToStr DayOfWeek DeleteFile DirectoryExists DisableCheckAccessRights DisableCheckFullShowingRestriction DisableMassTaskSendingRestrictions DropTable DupeString EditText EnableCheckAccessRights EnableCheckFullShowingRestriction EnableMassTaskSendingRestrictions EndOfMonth EndOfPeriod ExceptionExists ExceptionsOff ExceptionsOn Execute ExecuteProcess Exit ExpandEnvironmentVariables ExtractFileDrive ExtractFileExt ExtractFileName ExtractFilePath ExtractParams FileExists FileSize FindFile FindSubString FirmContext ForceDirectories Format FormatDate FormatNumeric FormatSQLDate FormatString FreeException GetComponent GetComponentLaunchParam GetConstant GetLastException GetReferenceRecord GetRefTypeByRefID GetTableID GetTempFolder IfThen In IndexOf InputDialog InputDialogEx InteractiveMode IsFileLocked IsGraphicFile IsNumeric Length LoadString LoadStringFmt LocalTimeToUTC LowerCase Max MessageBox MessageBoxEx MimeDecodeBinary MimeDecodeString MimeEncodeBinary MimeEncodeString Min MoneyInWords MoveFile NewID Now OpenFile Ord Precision Raise ReadCertificateFromFile ReadFile ReferenceCodeByID ReferenceNumber ReferenceRequisiteMode ReferenceRequisiteValue RegionDateSettings RegionNumberSettings RegionTimeSettings RegRead RegWrite RenameFile Replace Round SelectServerCode SelectSQL ServerDateTime SetConstant SetManagedFolderFieldsState ShowConstantsInputDialog ShowMessage Sleep Split SQL SQL2XLSTAB SQLProfilingSendReport StrToDate SubString SubStringCount SystemSetting Time TimeDiff Today Transliterate Trim UpperCase UserStatus UTCToLocalTime ValidateXML VarIsClear VarIsEmpty VarIsNull WorkTimeDiff WriteFile WriteFileEx WriteObjectHistory Анализ БазаДанных БлокЕсть БлокЕстьРасш БлокИнфо БлокСнять БлокСнятьРасш БлокУстановить Ввод ВводМеню ВедС ВедСпр ВерхняяГраницаМассива ВнешПрогр Восст ВременнаяПапка Время ВыборSQL ВыбратьЗапись ВыделитьСтр Вызвать Выполнить ВыпПрогр ГрафическийФайл ГруппаДополнительно ДатаВремяСерв ДеньНедели ДиалогДаНет ДлинаСтр ДобПодстр ЕПусто ЕслиТо ЕЧисло ЗамПодстр ЗаписьСправочника ЗначПоляСпр ИДТипСпр ИзвлечьДиск ИзвлечьИмяФайла ИзвлечьПуть ИзвлечьРасширение ИзмДат ИзменитьРазмерМассива ИзмеренийМассива ИмяОрг ИмяПоляСпр Индекс ИндикаторЗакрыть ИндикаторОткрыть ИндикаторШаг ИнтерактивныйРежим ИтогТблСпр КодВидВедСпр КодВидСпрПоИД КодПоAnalit КодСимвола КодСпр КолПодстр КолПроп КонМес Конст КонстЕсть КонстЗнач КонТран КопироватьФайл КопияСтр КПериод КСтрТблСпр Макс МаксСтрТблСпр Массив Меню МенюРасш Мин НаборДанныхНайтиРасш НаимВидСпр НаимПоAnalit НаимСпр НастроитьПереводыСтрок НачМес НачТран НижняяГраницаМассива НомерСпр НПериод Окно Окр Окружение ОтлИнфДобавить ОтлИнфУдалить Отчет ОтчетАнал ОтчетИнт ПапкаСуществует Пауза ПВыборSQL ПереименоватьФайл Переменные ПереместитьФайл Подстр ПоискПодстр ПоискСтр ПолучитьИДТаблицы ПользовательДополнительно ПользовательИД ПользовательИмя ПользовательСтатус Прервать ПроверитьПараметр ПроверитьПараметрЗнач ПроверитьУсловие РазбСтр РазнВремя РазнДат РазнДатаВремя РазнРабВремя РегУстВрем РегУстДат РегУстЧсл РедТекст РеестрЗапись РеестрСписокИменПарам РеестрЧтение РеквСпр РеквСпрПр Сегодня Сейчас Сервер СерверПроцессИД СертификатФайлСчитать СжПроб Символ СистемаДиректумКод СистемаИнформация СистемаКод Содержит СоединениеЗакрыть СоединениеОткрыть СоздатьДиалог СоздатьДиалогВыбораИзДвухСписков СоздатьДиалогВыбораПапки СоздатьДиалогОткрытияФайла СоздатьДиалогСохраненияФайла СоздатьЗапрос СоздатьИндикатор СоздатьИсключение СоздатьКэшированныйСправочник СоздатьМассив СоздатьНаборДанных СоздатьОбъект СоздатьОтчет СоздатьПапку СоздатьРедактор СоздатьСоединение СоздатьСписок СоздатьСписокСтрок СоздатьСправочник СоздатьСценарий СоздСпр СостСпр Сохр СохрСпр СписокСистем Спр Справочник СпрБлокЕсть СпрБлокСнять СпрБлокСнятьРасш СпрБлокУстановить СпрИзмНабДан СпрКод СпрНомер СпрОбновить СпрОткрыть СпрОтменить СпрПарам СпрПолеЗнач СпрПолеИмя СпрРекв СпрРеквВведЗн СпрРеквНовые СпрРеквПр СпрРеквПредЗн СпрРеквРежим СпрРеквТипТекст СпрСоздать СпрСост СпрСохранить СпрТблИтог СпрТблСтр СпрТблСтрКол СпрТблСтрМакс СпрТблСтрМин СпрТблСтрПред СпрТблСтрСлед СпрТблСтрСозд СпрТблСтрУд СпрТекПредст СпрУдалить СравнитьСтр СтрВерхРегистр СтрНижнРегистр СтрТблСпр СумПроп Сценарий СценарийПарам ТекВерсия ТекОрг Точн Тран Транслитерация УдалитьТаблицу УдалитьФайл УдСпр УдСтрТблСпр Уст УстановкиКонстант ФайлАтрибутСчитать ФайлАтрибутУстановить ФайлВремя ФайлВремяУстановить ФайлВыбрать ФайлЗанят ФайлЗаписать ФайлИскать ФайлКопировать ФайлМожноЧитать ФайлОткрыть ФайлПереименовать ФайлПерекодировать ФайлПереместить ФайлПросмотреть ФайлРазмер ФайлСоздать ФайлСсылкаСоздать ФайлСуществует ФайлСчитать ФайлУдалить ФмтSQLДат ФмтДат ФмтСтр ФмтЧсл Формат ЦМассивЭлемент ЦНаборДанныхРеквизит ЦПодстр ";
  const predefined_variables = "AltState Application CallType ComponentTokens CreatedJobs CreatedNotices ControlState DialogResult Dialogs EDocuments EDocumentVersionSource Folders GlobalIDs Job Jobs InputValue LookUpReference LookUpRequisiteNames LookUpSearch Object ParentComponent Processes References Requisite ReportName Reports Result Scripts Searches SelectedAttachments SelectedItems SelectMode Sender ServerEvents ServiceFactory ShiftState SubTask SystemDialogs Tasks Wizard Wizards Work ВызовСпособ ИмяОтчета РеквЗнач ";
  const interfaces = "IApplication IAccessRights IAccountRepository IAccountSelectionRestrictions IAction IActionList IAdministrationHistoryDescription IAnchors IApplication IArchiveInfo IAttachment IAttachmentList ICheckListBox ICheckPointedList IColumn IComponent IComponentDescription IComponentToken IComponentTokenFactory IComponentTokenInfo ICompRecordInfo IConnection IContents IControl IControlJob IControlJobInfo IControlList ICrypto ICrypto2 ICustomJob ICustomJobInfo ICustomListBox ICustomObjectWizardStep ICustomWork ICustomWorkInfo IDataSet IDataSetAccessInfo IDataSigner IDateCriterion IDateRequisite IDateRequisiteDescription IDateValue IDeaAccessRights IDeaObjectInfo IDevelopmentComponentLock IDialog IDialogFactory IDialogPickRequisiteItems IDialogsFactory IDICSFactory IDocRequisite IDocumentInfo IDualListDialog IECertificate IECertificateInfo IECertificates IEditControl IEditorForm IEdmsExplorer IEdmsObject IEdmsObjectDescription IEdmsObjectFactory IEdmsObjectInfo IEDocument IEDocumentAccessRights IEDocumentDescription IEDocumentEditor IEDocumentFactory IEDocumentInfo IEDocumentStorage IEDocumentVersion IEDocumentVersionListDialog IEDocumentVersionSource IEDocumentWizardStep IEDocVerSignature IEDocVersionState IEnabledMode IEncodeProvider IEncrypter IEvent IEventList IException IExternalEvents IExternalHandler IFactory IField IFileDialog IFolder IFolderDescription IFolderDialog IFolderFactory IFolderInfo IForEach IForm IFormTitle IFormWizardStep IGlobalIDFactory IGlobalIDInfo IGrid IHasher IHistoryDescription IHyperLinkControl IImageButton IImageControl IInnerPanel IInplaceHint IIntegerCriterion IIntegerList IIntegerRequisite IIntegerValue IISBLEditorForm IJob IJobDescription IJobFactory IJobForm IJobInfo ILabelControl ILargeIntegerCriterion ILargeIntegerRequisite ILargeIntegerValue ILicenseInfo ILifeCycleStage IList IListBox ILocalIDInfo ILocalization ILock IMemoryDataSet IMessagingFactory IMetadataRepository INotice INoticeInfo INumericCriterion INumericRequisite INumericValue IObject IObjectDescription IObjectImporter IObjectInfo IObserver IPanelGroup IPickCriterion IPickProperty IPickRequisite IPickRequisiteDescription IPickRequisiteItem IPickRequisiteItems IPickValue IPrivilege IPrivilegeList IProcess IProcessFactory IProcessMessage IProgress IProperty IPropertyChangeEvent IQuery IReference IReferenceCriterion IReferenceEnabledMode IReferenceFactory IReferenceHistoryDescription IReferenceInfo IReferenceRecordCardWizardStep IReferenceRequisiteDescription IReferencesFactory IReferenceValue IRefRequisite IReport IReportFactory IRequisite IRequisiteDescription IRequisiteDescriptionList IRequisiteFactory IRichEdit IRouteStep IRule IRuleList ISchemeBlock IScript IScriptFactory ISearchCriteria ISearchCriterion ISearchDescription ISearchFactory ISearchFolderInfo ISearchForObjectDescription ISearchResultRestrictions ISecuredContext ISelectDialog IServerEvent IServerEventFactory IServiceDialog IServiceFactory ISignature ISignProvider ISignProvider2 ISignProvider3 ISimpleCriterion IStringCriterion IStringList IStringRequisite IStringRequisiteDescription IStringValue ISystemDialogsFactory ISystemInfo ITabSheet ITask ITaskAbortReasonInfo ITaskCardWizardStep ITaskDescription ITaskFactory ITaskInfo ITaskRoute ITextCriterion ITextRequisite ITextValue ITreeListSelectDialog IUser IUserList IValue IView IWebBrowserControl IWizard IWizardAction IWizardFactory IWizardFormElement IWizardParam IWizardPickParam IWizardReferenceParam IWizardStep IWorkAccessRights IWorkDescription IWorkflowAskableParam IWorkflowAskableParams IWorkflowBlock IWorkflowBlockResult IWorkflowEnabledMode IWorkflowParam IWorkflowPickParam IWorkflowReferenceParam IWorkState IWorkTreeCustomNode IWorkTreeJobNode IWorkTreeTaskNode IXMLEditorForm SBCrypto ";
  const BUILTIN = CONSTANTS + ENUMS;
  const CLASS = predefined_variables;
  const LITERAL = "null true false nil ";
  const NUMBERS = {
    className: "number",
    begin: hljs.NUMBER_RE,
    relevance: 0
  };
  const STRINGS = {
    className: "string",
    variants: [
      {
        begin: '"',
        end: '"'
      },
      {
        begin: "'",
        end: "'"
      }
    ]
  };
  const DOCTAGS = {
    className: "doctag",
    begin: "\\b(?:TODO|DONE|BEGIN|END|STUB|CHG|FIXME|NOTE|BUG|XXX)\\b",
    relevance: 0
  };
  const ISBL_LINE_COMMENT_MODE = {
    className: "comment",
    begin: "//",
    end: "$",
    relevance: 0,
    contains: [
      hljs.PHRASAL_WORDS_MODE,
      DOCTAGS
    ]
  };
  const ISBL_BLOCK_COMMENT_MODE = {
    className: "comment",
    begin: "/\\*",
    end: "\\*/",
    relevance: 0,
    contains: [
      hljs.PHRASAL_WORDS_MODE,
      DOCTAGS
    ]
  };
  const COMMENTS = { variants: [
    ISBL_LINE_COMMENT_MODE,
    ISBL_BLOCK_COMMENT_MODE
  ] };
  const KEYWORDS2 = {
    $pattern: UNDERSCORE_IDENT_RE,
    keyword: KEYWORD,
    built_in: BUILTIN,
    class: CLASS,
    literal: LITERAL
  };
  const METHODS = {
    begin: "\\.\\s*" + hljs.UNDERSCORE_IDENT_RE,
    keywords: KEYWORDS2,
    relevance: 0
  };
  const TYPES2 = {
    className: "type",
    begin: ":[ \\t]*(" + interfaces.trim().replace(/\s/g, "|") + ")",
    end: "[ \\t]*=",
    excludeEnd: true
  };
  const VARIABLES = {
    className: "variable",
    keywords: KEYWORDS2,
    begin: UNDERSCORE_IDENT_RE,
    relevance: 0,
    contains: [
      TYPES2,
      METHODS
    ]
  };
  const FUNCTION_TITLE = FUNCTION_NAME_IDENT_RE + "\\(";
  const TITLE_MODE = {
    className: "title",
    keywords: {
      $pattern: UNDERSCORE_IDENT_RE,
      built_in: system_functions
    },
    begin: FUNCTION_TITLE,
    end: "\\(",
    returnBegin: true,
    excludeEnd: true
  };
  const FUNCTIONS = {
    className: "function",
    begin: FUNCTION_TITLE,
    end: "\\)$",
    returnBegin: true,
    keywords: KEYWORDS2,
    illegal: "[\\[\\]\\|\\$\\?%,~#@]",
    contains: [
      TITLE_MODE,
      METHODS,
      VARIABLES,
      STRINGS,
      NUMBERS,
      COMMENTS
    ]
  };
  return {
    name: "ISBL",
    case_insensitive: true,
    keywords: KEYWORDS2,
    illegal: "\\$|\\?|%|,|;$|~|#|@|</",
    contains: [
      FUNCTIONS,
      TYPES2,
      METHODS,
      VARIABLES,
      STRINGS,
      NUMBERS,
      COMMENTS
    ]
  };
}
function jbossCli(hljs) {
  const PARAM = {
    begin: /[\w-]+ *=/,
    returnBegin: true,
    relevance: 0,
    contains: [
      {
        className: "attr",
        begin: /[\w-]+/
      }
    ]
  };
  const PARAMSBLOCK = {
    className: "params",
    begin: /\(/,
    end: /\)/,
    contains: [PARAM],
    relevance: 0
  };
  const OPERATION = {
    className: "function",
    begin: /:[\w\-.]+/,
    relevance: 0
  };
  const PATH = {
    className: "string",
    begin: /\B([\/.])[\w\-.\/=]+/
  };
  const COMMAND_PARAMS = {
    className: "params",
    begin: /--[\w\-=\/]+/
  };
  return {
    name: "JBoss CLI",
    aliases: ["wildfly-cli"],
    keywords: {
      $pattern: "[a-z-]+",
      keyword: "alias batch cd clear command connect connection-factory connection-info data-source deploy deployment-info deployment-overlay echo echo-dmr help history if jdbc-driver-info jms-queue|20 jms-topic|20 ls patch pwd quit read-attribute read-operation reload rollout-plan run-batch set shutdown try unalias undeploy unset version xa-data-source",
      // module
      literal: "true false"
    },
    contains: [
      hljs.HASH_COMMENT_MODE,
      hljs.QUOTE_STRING_MODE,
      COMMAND_PARAMS,
      OPERATION,
      PATH,
      PARAMSBLOCK
    ]
  };
}
function julia(hljs) {
  const VARIABLE_NAME_RE = "[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*";
  const KEYWORD_LIST = [
    "baremodule",
    "begin",
    "break",
    "catch",
    "ccall",
    "const",
    "continue",
    "do",
    "else",
    "elseif",
    "end",
    "export",
    "false",
    "finally",
    "for",
    "function",
    "global",
    "if",
    "import",
    "in",
    "isa",
    "let",
    "local",
    "macro",
    "module",
    "quote",
    "return",
    "true",
    "try",
    "using",
    "where",
    "while"
  ];
  const LITERAL_LIST = [
    "ARGS",
    "C_NULL",
    "DEPOT_PATH",
    "ENDIAN_BOM",
    "ENV",
    "Inf",
    "Inf16",
    "Inf32",
    "Inf64",
    "InsertionSort",
    "LOAD_PATH",
    "MergeSort",
    "NaN",
    "NaN16",
    "NaN32",
    "NaN64",
    "PROGRAM_FILE",
    "QuickSort",
    "RoundDown",
    "RoundFromZero",
    "RoundNearest",
    "RoundNearestTiesAway",
    "RoundNearestTiesUp",
    "RoundToZero",
    "RoundUp",
    "VERSION|0",
    "devnull",
    "false",
    "im",
    "missing",
    "nothing",
    "pi",
    "stderr",
    "stdin",
    "stdout",
    "true",
    "undef",
    "π",
    "ℯ"
  ];
  const BUILT_IN_LIST = [
    "AbstractArray",
    "AbstractChannel",
    "AbstractChar",
    "AbstractDict",
    "AbstractDisplay",
    "AbstractFloat",
    "AbstractIrrational",
    "AbstractMatrix",
    "AbstractRange",
    "AbstractSet",
    "AbstractString",
    "AbstractUnitRange",
    "AbstractVecOrMat",
    "AbstractVector",
    "Any",
    "ArgumentError",
    "Array",
    "AssertionError",
    "BigFloat",
    "BigInt",
    "BitArray",
    "BitMatrix",
    "BitSet",
    "BitVector",
    "Bool",
    "BoundsError",
    "CapturedException",
    "CartesianIndex",
    "CartesianIndices",
    "Cchar",
    "Cdouble",
    "Cfloat",
    "Channel",
    "Char",
    "Cint",
    "Cintmax_t",
    "Clong",
    "Clonglong",
    "Cmd",
    "Colon",
    "Complex",
    "ComplexF16",
    "ComplexF32",
    "ComplexF64",
    "CompositeException",
    "Condition",
    "Cptrdiff_t",
    "Cshort",
    "Csize_t",
    "Cssize_t",
    "Cstring",
    "Cuchar",
    "Cuint",
    "Cuintmax_t",
    "Culong",
    "Culonglong",
    "Cushort",
    "Cvoid",
    "Cwchar_t",
    "Cwstring",
    "DataType",
    "DenseArray",
    "DenseMatrix",
    "DenseVecOrMat",
    "DenseVector",
    "Dict",
    "DimensionMismatch",
    "Dims",
    "DivideError",
    "DomainError",
    "EOFError",
    "Enum",
    "ErrorException",
    "Exception",
    "ExponentialBackOff",
    "Expr",
    "Float16",
    "Float32",
    "Float64",
    "Function",
    "GlobalRef",
    "HTML",
    "IO",
    "IOBuffer",
    "IOContext",
    "IOStream",
    "IdDict",
    "IndexCartesian",
    "IndexLinear",
    "IndexStyle",
    "InexactError",
    "InitError",
    "Int",
    "Int128",
    "Int16",
    "Int32",
    "Int64",
    "Int8",
    "Integer",
    "InterruptException",
    "InvalidStateException",
    "Irrational",
    "KeyError",
    "LinRange",
    "LineNumberNode",
    "LinearIndices",
    "LoadError",
    "MIME",
    "Matrix",
    "Method",
    "MethodError",
    "Missing",
    "MissingException",
    "Module",
    "NTuple",
    "NamedTuple",
    "Nothing",
    "Number",
    "OrdinalRange",
    "OutOfMemoryError",
    "OverflowError",
    "Pair",
    "PartialQuickSort",
    "PermutedDimsArray",
    "Pipe",
    "ProcessFailedException",
    "Ptr",
    "QuoteNode",
    "Rational",
    "RawFD",
    "ReadOnlyMemoryError",
    "Real",
    "ReentrantLock",
    "Ref",
    "Regex",
    "RegexMatch",
    "RoundingMode",
    "SegmentationFault",
    "Set",
    "Signed",
    "Some",
    "StackOverflowError",
    "StepRange",
    "StepRangeLen",
    "StridedArray",
    "StridedMatrix",
    "StridedVecOrMat",
    "StridedVector",
    "String",
    "StringIndexError",
    "SubArray",
    "SubString",
    "SubstitutionString",
    "Symbol",
    "SystemError",
    "Task",
    "TaskFailedException",
    "Text",
    "TextDisplay",
    "Timer",
    "Tuple",
    "Type",
    "TypeError",
    "TypeVar",
    "UInt",
    "UInt128",
    "UInt16",
    "UInt32",
    "UInt64",
    "UInt8",
    "UndefInitializer",
    "UndefKeywordError",
    "UndefRefError",
    "UndefVarError",
    "Union",
    "UnionAll",
    "UnitRange",
    "Unsigned",
    "Val",
    "Vararg",
    "VecElement",
    "VecOrMat",
    "Vector",
    "VersionNumber",
    "WeakKeyDict",
    "WeakRef"
  ];
  const KEYWORDS2 = {
    $pattern: VARIABLE_NAME_RE,
    keyword: KEYWORD_LIST,
    literal: LITERAL_LIST,
    built_in: BUILT_IN_LIST
  };
  const DEFAULT = {
    keywords: KEYWORDS2,
    illegal: /<\//
  };
  const NUMBER = {
    className: "number",
    // supported numeric literals:
    //  * binary literal (e.g. 0x10)
    //  * octal literal (e.g. 0o76543210)
    //  * hexadecimal literal (e.g. 0xfedcba876543210)
    //  * hexadecimal floating point literal (e.g. 0x1p0, 0x1.2p2)
    //  * decimal literal (e.g. 9876543210, 100_000_000)
    //  * floating pointe literal (e.g. 1.2, 1.2f, .2, 1., 1.2e10, 1.2e-10)
    begin: /(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,
    relevance: 0
  };
  const CHAR = {
    className: "string",
    begin: /'(.|\\[xXuU][a-zA-Z0-9]+)'/
  };
  const INTERPOLATION = {
    className: "subst",
    begin: /\$\(/,
    end: /\)/,
    keywords: KEYWORDS2
  };
  const INTERPOLATED_VARIABLE = {
    className: "variable",
    begin: "\\$" + VARIABLE_NAME_RE
  };
  const STRING = {
    className: "string",
    contains: [
      hljs.BACKSLASH_ESCAPE,
      INTERPOLATION,
      INTERPOLATED_VARIABLE
    ],
    variants: [
      {
        begin: /\w*"""/,
        end: /"""\w*/,
        relevance: 10
      },
      {
        begin: /\w*"/,
        end: /"\w*/
      }
    ]
  };
  const COMMAND = {
    className: "string",
    contains: [
      hljs.BACKSLASH_ESCAPE,
      INTERPOLATION,
      INTERPOLATED_VARIABLE
    ],
    begin: "`",
    end: "`"
  };
  const MACROCALL = {
    className: "meta",
    begin: "@" + VARIABLE_NAME_RE
  };
  const COMMENT = {
    className: "comment",
    variants: [
      {
        begin: "#=",
        end: "=#",
        relevance: 10
      },
      {
        begin: "#",
        end: "$"
      }
    ]
  };
  DEFAULT.name = "Julia";
  DEFAULT.contains = [
    NUMBER,
    CHAR,
    STRING,
    COMMAND,
    MACROCALL,
    COMMENT,
    hljs.HASH_COMMENT_MODE,
    {
      className: "keyword",
      begin: "\\b(((abstract|primitive)\\s+)type|(mutable\\s+)?struct)\\b"
    },
    { begin: /<:/ }
    // relevance booster
  ];
  INTERPOLATION.contains = DEFAULT.contains;
  return DEFAULT;
}
function juliaRepl(hljs) {
  return {
    name: "Julia REPL",
    contains: [
      {
        className: "meta.prompt",
        begin: /^julia>/,
        relevance: 10,
        starts: {
          // end the highlighting if we are on a new line and the line does not have at
          // least six spaces in the beginning
          end: /^(?![ ]{6})/,
          subLanguage: "julia"
        }
      }
    ],
    // jldoctest Markdown blocks are used in the Julia manual and package docs indicate
    // code snippets that should be verified when the documentation is built. They can be
    // either REPL-like or script-like, but are usually REPL-like and therefore we apply
    // julia-repl highlighting to them. More information can be found in Documenter's
    // manual: https://juliadocs.github.io/Documenter.jl/latest/man/doctests.html
    aliases: ["jldoctest"]
  };
}
function lasso(hljs) {
  const LASSO_IDENT_RE = "[a-zA-Z_][\\w.]*";
  const LASSO_ANGLE_RE = "<\\?(lasso(script)?|=)";
  const LASSO_CLOSE_RE = "\\]|\\?>";
  const LASSO_KEYWORDS = {
    $pattern: LASSO_IDENT_RE + "|&[lg]t;",
    literal: "true false none minimal full all void and or not bw nbw ew new cn ncn lt lte gt gte eq neq rx nrx ft",
    built_in: "array date decimal duration integer map pair string tag xml null boolean bytes keyword list locale queue set stack staticarray local var variable global data self inherited currentcapture givenblock",
    keyword: "cache database_names database_schemanames database_tablenames define_tag define_type email_batch encode_set html_comment handle handle_error header if inline iterate ljax_target link link_currentaction link_currentgroup link_currentrecord link_detail link_firstgroup link_firstrecord link_lastgroup link_lastrecord link_nextgroup link_nextrecord link_prevgroup link_prevrecord log loop namespace_using output_none portal private protect records referer referrer repeating resultset rows search_args search_arguments select sort_args sort_arguments thread_atomic value_list while abort case else fail_if fail_ifnot fail if_empty if_false if_null if_true loop_abort loop_continue loop_count params params_up return return_value run_children soap_definetag soap_lastrequest soap_lastresponse tag_name ascending average by define descending do equals frozen group handle_failure import in into join let match max min on order parent protected provide public require returnhome skip split_thread sum take thread to trait type where with yield yieldhome"
  };
  const HTML_COMMENT = hljs.COMMENT(
    "<!--",
    "-->",
    { relevance: 0 }
  );
  const LASSO_NOPROCESS = {
    className: "meta",
    begin: "\\[noprocess\\]",
    starts: {
      end: "\\[/noprocess\\]",
      returnEnd: true,
      contains: [HTML_COMMENT]
    }
  };
  const LASSO_START = {
    className: "meta",
    begin: "\\[/noprocess|" + LASSO_ANGLE_RE
  };
  const LASSO_DATAMEMBER = {
    className: "symbol",
    begin: "'" + LASSO_IDENT_RE + "'"
  };
  const LASSO_CODE = [
    hljs.C_LINE_COMMENT_MODE,
    hljs.C_BLOCK_COMMENT_MODE,
    hljs.inherit(hljs.C_NUMBER_MODE, { begin: hljs.C_NUMBER_RE + "|(-?infinity|NaN)\\b" }),
    hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null }),
    hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }),
    {
      className: "string",
      begin: "`",
      end: "`"
    },
    {
      // variables
      variants: [
        { begin: "[#$]" + LASSO_IDENT_RE },
        {
          begin: "#",
          end: "\\d+",
          illegal: "\\W"
        }
      ]
    },
    {
      className: "type",
      begin: "::\\s*",
      end: LASSO_IDENT_RE,
      illegal: "\\W"
    },
    {
      className: "params",
      variants: [
        {
          begin: "-(?!infinity)" + LASSO_IDENT_RE,
          relevance: 0
        },
        { begin: "(\\.\\.\\.)" }
      ]
    },
    {
      begin: /(->|\.)\s*/,
      relevance: 0,
      contains: [LASSO_DATAMEMBER]
    },
    {
      className: "class",
      beginKeywords: "define",
      returnEnd: true,
      end: "\\(|=>",
      contains: [hljs.inherit(hljs.TITLE_MODE, { begin: LASSO_IDENT_RE + "(=(?!>))?|[-+*/%](?!>)" })]
    }
  ];
  return {
    name: "Lasso",
    aliases: [
      "ls",
      "lassoscript"
    ],
    case_insensitive: true,
    keywords: LASSO_KEYWORDS,
    contains: [
      {
        className: "meta",
        begin: LASSO_CLOSE_RE,
        relevance: 0,
        starts: {
          // markup
          end: "\\[|" + LASSO_ANGLE_RE,
          returnEnd: true,
          relevance: 0,
          contains: [HTML_COMMENT]
        }
      },
      LASSO_NOPROCESS,
      LASSO_START,
      {
        className: "meta",
        begin: "\\[no_square_brackets",
        starts: {
          end: "\\[/no_square_brackets\\]",
          // not implemented in the language
          keywords: LASSO_KEYWORDS,
          contains: [
            {
              className: "meta",
              begin: LASSO_CLOSE_RE,
              relevance: 0,
              starts: {
                end: "\\[noprocess\\]|" + LASSO_ANGLE_RE,
                returnEnd: true,
                contains: [HTML_COMMENT]
              }
            },
            LASSO_NOPROCESS,
            LASSO_START
          ].concat(LASSO_CODE)
        }
      },
      {
        className: "meta",
        begin: "\\[",
        relevance: 0
      },
      {
        className: "meta",
        begin: "^#!",
        end: "lasso9$",
        relevance: 10
      }
    ].concat(LASSO_CODE)
  };
}
function latex(hljs) {
  const regex = hljs.regex;
  const KNOWN_CONTROL_WORDS = regex.either(...[
    "(?:NeedsTeXFormat|RequirePackage|GetIdInfo)",
    "Provides(?:Expl)?(?:Package|Class|File)",
    "(?:DeclareOption|ProcessOptions)",
    "(?:documentclass|usepackage|input|include)",
    "makeat(?:letter|other)",
    "ExplSyntax(?:On|Off)",
    "(?:new|renew|provide)?command",
    "(?:re)newenvironment",
    "(?:New|Renew|Provide|Declare)(?:Expandable)?DocumentCommand",
    "(?:New|Renew|Provide|Declare)DocumentEnvironment",
    "(?:(?:e|g|x)?def|let)",
    "(?:begin|end)",
    "(?:part|chapter|(?:sub){0,2}section|(?:sub)?paragraph)",
    "caption",
    "(?:label|(?:eq|page|name)?ref|(?:paren|foot|super)?cite)",
    "(?:alpha|beta|[Gg]amma|[Dd]elta|(?:var)?epsilon|zeta|eta|[Tt]heta|vartheta)",
    "(?:iota|(?:var)?kappa|[Ll]ambda|mu|nu|[Xx]i|[Pp]i|varpi|(?:var)rho)",
    "(?:[Ss]igma|varsigma|tau|[Uu]psilon|[Pp]hi|varphi|chi|[Pp]si|[Oo]mega)",
    "(?:frac|sum|prod|lim|infty|times|sqrt|leq|geq|left|right|middle|[bB]igg?)",
    "(?:[lr]angle|q?quad|[lcvdi]?dots|d?dot|hat|tilde|bar)"
  ].map((word) => word + "(?![a-zA-Z@:_])"));
  const L3_REGEX = new RegExp([
    // A function \module_function_name:signature or \__module_function_name:signature,
    // where both module and function_name need at least two characters and
    // function_name may contain single underscores.
    "(?:__)?[a-zA-Z]{2,}_[a-zA-Z](?:_?[a-zA-Z])+:[a-zA-Z]*",
    // A variable \scope_module_and_name_type or \scope__module_ane_name_type,
    // where scope is one of l, g or c, type needs at least two characters
    // and module_and_name may contain single underscores.
    "[lgc]__?[a-zA-Z](?:_?[a-zA-Z])*_[a-zA-Z]{2,}",
    // A quark \q_the_name or \q__the_name or
    // scan mark \s_the_name or \s__vthe_name,
    // where variable_name needs at least two characters and
    // may contain single underscores.
    "[qs]__?[a-zA-Z](?:_?[a-zA-Z])+",
    // Other LaTeX3 macro names that are not covered by the three rules above.
    "use(?:_i)?:[a-zA-Z]*",
    "(?:else|fi|or):",
    "(?:if|cs|exp):w",
    "(?:hbox|vbox):n",
    "::[a-zA-Z]_unbraced",
    "::[a-zA-Z:]"
  ].map((pattern) => pattern + "(?![a-zA-Z:_])").join("|"));
  const L2_VARIANTS = [
    { begin: /[a-zA-Z@]+/ },
    // control word
    { begin: /[^a-zA-Z@]?/ }
    // control symbol
  ];
  const DOUBLE_CARET_VARIANTS = [
    { begin: /\^{6}[0-9a-f]{6}/ },
    { begin: /\^{5}[0-9a-f]{5}/ },
    { begin: /\^{4}[0-9a-f]{4}/ },
    { begin: /\^{3}[0-9a-f]{3}/ },
    { begin: /\^{2}[0-9a-f]{2}/ },
    { begin: /\^{2}[\u0000-\u007f]/ }
  ];
  const CONTROL_SEQUENCE = {
    className: "keyword",
    begin: /\\/,
    relevance: 0,
    contains: [
      {
        endsParent: true,
        begin: KNOWN_CONTROL_WORDS
      },
      {
        endsParent: true,
        begin: L3_REGEX
      },
      {
        endsParent: true,
        variants: DOUBLE_CARET_VARIANTS
      },
      {
        endsParent: true,
        relevance: 0,
        variants: L2_VARIANTS
      }
    ]
  };
  const MACRO_PARAM = {
    className: "params",
    relevance: 0,
    begin: /#+\d?/
  };
  const DOUBLE_CARET_CHAR = {
    // relevance: 1
    variants: DOUBLE_CARET_VARIANTS
  };
  const SPECIAL_CATCODE = {
    className: "built_in",
    relevance: 0,
    begin: /[$&^_]/
  };
  const MAGIC_COMMENT = {
    className: "meta",
    begin: /% ?!(T[eE]X|tex|BIB|bib)/,
    end: "$",
    relevance: 10
  };
  const COMMENT = hljs.COMMENT(
    "%",
    "$",
    { relevance: 0 }
  );
  const EVERYTHING_BUT_VERBATIM = [
    CONTROL_SEQUENCE,
    MACRO_PARAM,
    DOUBLE_CARET_CHAR,
    SPECIAL_CATCODE,
    MAGIC_COMMENT,
    COMMENT
  ];
  const BRACE_GROUP_NO_VERBATIM = {
    begin: /\{/,
    end: /\}/,
    relevance: 0,
    contains: [
      "self",
      ...EVERYTHING_BUT_VERBATIM
    ]
  };
  const ARGUMENT_BRACES = hljs.inherit(
    BRACE_GROUP_NO_VERBATIM,
    {
      relevance: 0,
      endsParent: true,
      contains: [
        BRACE_GROUP_NO_VERBATIM,
        ...EVERYTHING_BUT_VERBATIM
      ]
    }
  );
  const ARGUMENT_BRACKETS = {
    begin: /\[/,
    end: /\]/,
    endsParent: true,
    relevance: 0,
    contains: [
      BRACE_GROUP_NO_VERBATIM,
      ...EVERYTHING_BUT_VERBATIM
    ]
  };
  const SPACE_GOBBLER = {
    begin: /\s+/,
    relevance: 0
  };
  const ARGUMENT_M = [ARGUMENT_BRACES];
  const ARGUMENT_O = [ARGUMENT_BRACKETS];
  const ARGUMENT_AND_THEN = function(arg, starts_mode) {
    return {
      contains: [SPACE_GOBBLER],
      starts: {
        relevance: 0,
        contains: arg,
        starts: starts_mode
      }
    };
  };
  const CSNAME = function(csname, starts_mode) {
    return {
      begin: "\\\\" + csname + "(?![a-zA-Z@:_])",
      keywords: {
        $pattern: /\\[a-zA-Z]+/,
        keyword: "\\" + csname
      },
      relevance: 0,
      contains: [SPACE_GOBBLER],
      starts: starts_mode
    };
  };
  const BEGIN_ENV = function(envname, starts_mode) {
    return hljs.inherit(
      {
        begin: "\\\\begin(?=[ 	]*(\\r?\\n[ 	]*)?\\{" + envname + "\\})",
        keywords: {
          $pattern: /\\[a-zA-Z]+/,
          keyword: "\\begin"
        },
        relevance: 0
      },
      ARGUMENT_AND_THEN(ARGUMENT_M, starts_mode)
    );
  };
  const VERBATIM_DELIMITED_EQUAL = (innerName = "string") => {
    return hljs.END_SAME_AS_BEGIN({
      className: innerName,
      begin: /(.|\r?\n)/,
      end: /(.|\r?\n)/,
      excludeBegin: true,
      excludeEnd: true,
      endsParent: true
    });
  };
  const VERBATIM_DELIMITED_ENV = function(envname) {
    return {
      className: "string",
      end: "(?=\\\\end\\{" + envname + "\\})"
    };
  };
  const VERBATIM_DELIMITED_BRACES = (innerName = "string") => {
    return {
      relevance: 0,
      begin: /\{/,
      starts: {
        endsParent: true,
        contains: [
          {
            className: innerName,
            end: /(?=\})/,
            endsParent: true,
            contains: [
              {
                begin: /\{/,
                end: /\}/,
                relevance: 0,
                contains: ["self"]
              }
            ]
          }
        ]
      }
    };
  };
  const VERBATIM = [
    ...[
      "verb",
      "lstinline"
    ].map((csname) => CSNAME(csname, { contains: [VERBATIM_DELIMITED_EQUAL()] })),
    CSNAME("mint", ARGUMENT_AND_THEN(ARGUMENT_M, { contains: [VERBATIM_DELIMITED_EQUAL()] })),
    CSNAME("mintinline", ARGUMENT_AND_THEN(ARGUMENT_M, { contains: [
      VERBATIM_DELIMITED_BRACES(),
      VERBATIM_DELIMITED_EQUAL()
    ] })),
    CSNAME("url", { contains: [
      VERBATIM_DELIMITED_BRACES("link"),
      VERBATIM_DELIMITED_BRACES("link")
    ] }),
    CSNAME("hyperref", { contains: [VERBATIM_DELIMITED_BRACES("link")] }),
    CSNAME("href", ARGUMENT_AND_THEN(ARGUMENT_O, { contains: [VERBATIM_DELIMITED_BRACES("link")] })),
    ...[].concat(...[
      "",
      "\\*"
    ].map((suffix) => [
      BEGIN_ENV("verbatim" + suffix, VERBATIM_DELIMITED_ENV("verbatim" + suffix)),
      BEGIN_ENV("filecontents" + suffix, ARGUMENT_AND_THEN(ARGUMENT_M, VERBATIM_DELIMITED_ENV("filecontents" + suffix))),
      ...[
        "",
        "B",
        "L"
      ].map(
        (prefix) => BEGIN_ENV(prefix + "Verbatim" + suffix, ARGUMENT_AND_THEN(ARGUMENT_O, VERBATIM_DELIMITED_ENV(prefix + "Verbatim" + suffix)))
      )
    ])),
    BEGIN_ENV("minted", ARGUMENT_AND_THEN(ARGUMENT_O, ARGUMENT_AND_THEN(ARGUMENT_M, VERBATIM_DELIMITED_ENV("minted"))))
  ];
  return {
    name: "LaTeX",
    aliases: ["tex"],
    contains: [
      ...VERBATIM,
      ...EVERYTHING_BUT_VERBATIM
    ]
  };
}
function ldif(hljs) {
  return {
    name: "LDIF",
    contains: [
      {
        className: "attribute",
        match: "^dn(?=:)",
        relevance: 10
      },
      {
        className: "attribute",
        match: "^\\w+(?=:)"
      },
      {
        className: "literal",
        match: "^-"
      },
      hljs.HASH_COMMENT_MODE
    ]
  };
}
function leaf(hljs) {
  const IDENT = /([A-Za-z_][A-Za-z_0-9]*)?/;
  const LITERALS2 = [
    "true",
    "false",
    "in"
  ];
  const PARAMS = {
    scope: "params",
    begin: /\(/,
    end: /\)(?=\:?)/,
    endsParent: true,
    relevance: 7,
    contains: [
      {
        scope: "string",
        begin: '"',
        end: '"'
      },
      {
        scope: "keyword",
        match: LITERALS2.join("|")
      },
      {
        scope: "variable",
        match: /[A-Za-z_][A-Za-z_0-9]*/
      },
      {
        scope: "operator",
        match: /\+|\-|\*|\/|\%|\=\=|\=|\!|\>|\<|\&\&|\|\|/
      }
    ]
  };
  const INSIDE_DISPATCH = {
    match: [
      IDENT,
      /(?=\()/
    ],
    scope: {
      1: "keyword"
    },
    contains: [PARAMS]
  };
  PARAMS.contains.unshift(INSIDE_DISPATCH);
  return {
    name: "Leaf",
    contains: [
      // #ident():
      {
        match: [
          /#+/,
          IDENT,
          /(?=\()/
        ],
        scope: {
          1: "punctuation",
          2: "keyword"
        },
        // will start up after the ending `)` match from line ~44
        // just to grab the trailing `:` if we can match it
        starts: {
          contains: [
            {
              match: /\:/,
              scope: "punctuation"
            }
          ]
        },
        contains: [
          PARAMS
        ]
      },
      // #ident or #ident:
      {
        match: [
          /#+/,
          IDENT,
          /:?/
        ],
        scope: {
          1: "punctuation",
          2: "keyword",
          3: "punctuation"
        }
      }
    ]
  };
}
function lisp(hljs) {
  const LISP_IDENT_RE = "[a-zA-Z_\\-+\\*\\/<=>&#][a-zA-Z0-9_\\-+*\\/<=>&#!]*";
  const MEC_RE = "\\|[^]*?\\|";
  const LISP_SIMPLE_NUMBER_RE = "(-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\+|-)?\\d+)?";
  const LITERAL = {
    className: "literal",
    begin: "\\b(t{1}|nil)\\b"
  };
  const NUMBER = {
    className: "number",
    variants: [
      {
        begin: LISP_SIMPLE_NUMBER_RE,
        relevance: 0
      },
      { begin: "#(b|B)[0-1]+(/[0-1]+)?" },
      { begin: "#(o|O)[0-7]+(/[0-7]+)?" },
      { begin: "#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?" },
      {
        begin: "#(c|C)\\(" + LISP_SIMPLE_NUMBER_RE + " +" + LISP_SIMPLE_NUMBER_RE,
        end: "\\)"
      }
    ]
  };
  const STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null });
  const COMMENT = hljs.COMMENT(
    ";",
    "$",
    { relevance: 0 }
  );
  const VARIABLE = {
    begin: "\\*",
    end: "\\*"
  };
  const KEYWORD = {
    className: "symbol",
    begin: "[:&]" + LISP_IDENT_RE
  };
  const IDENT = {
    begin: LISP_IDENT_RE,
    relevance: 0
  };
  const MEC = { begin: MEC_RE };
  const QUOTED_LIST = {
    begin: "\\(",
    end: "\\)",
    contains: [
      "self",
      LITERAL,
      STRING,
      NUMBER,
      IDENT
    ]
  };
  const QUOTED = {
    contains: [
      NUMBER,
      STRING,
      VARIABLE,
      KEYWORD,
      QUOTED_LIST,
      IDENT
    ],
    variants: [
      {
        begin: "['`]\\(",
        end: "\\)"
      },
      {
        begin: "\\(quote ",
        end: "\\)",
        keywords: { name: "quote" }
      },
      { begin: "'" + MEC_RE }
    ]
  };
  const QUOTED_ATOM = { variants: [
    { begin: "'" + LISP_IDENT_RE },
    { begin: "#'" + LISP_IDENT_RE + "(::" + LISP_IDENT_RE + ")*" }
  ] };
  const LIST = {
    begin: "\\(\\s*",
    end: "\\)"
  };
  const BODY = {
    endsWithParent: true,
    relevance: 0
  };
  LIST.contains = [
    {
      className: "name",
      variants: [
        {
          begin: LISP_IDENT_RE,
          relevance: 0
        },
        { begin: MEC_RE }
      ]
    },
    BODY
  ];
  BODY.contains = [
    QUOTED,
    QUOTED_ATOM,
    LIST,
    LITERAL,
    NUMBER,
    STRING,
    COMMENT,
    VARIABLE,
    KEYWORD,
    MEC,
    IDENT
  ];
  return {
    name: "Lisp",
    illegal: /\S/,
    contains: [
      NUMBER,
      hljs.SHEBANG(),
      LITERAL,
      STRING,
      COMMENT,
      QUOTED,
      QUOTED_ATOM,
      LIST,
      IDENT
    ]
  };
}
function livecodeserver(hljs) {
  const VARIABLE = {
    className: "variable",
    variants: [
      { begin: "\\b([gtps][A-Z]{1}[a-zA-Z0-9]*)(\\[.+\\])?(?:\\s*?)" },
      { begin: "\\$_[A-Z]+" }
    ],
    relevance: 0
  };
  const COMMENT_MODES = [
    hljs.C_BLOCK_COMMENT_MODE,
    hljs.HASH_COMMENT_MODE,
    hljs.COMMENT("--", "$"),
    hljs.COMMENT("[^:]//", "$")
  ];
  const TITLE1 = hljs.inherit(hljs.TITLE_MODE, { variants: [
    { begin: "\\b_*rig[A-Z][A-Za-z0-9_\\-]*" },
    { begin: "\\b_[a-z0-9\\-]+" }
  ] });
  const TITLE2 = hljs.inherit(hljs.TITLE_MODE, { begin: "\\b([A-Za-z0-9_\\-]+)\\b" });
  return {
    name: "LiveCode",
    case_insensitive: false,
    keywords: {
      keyword: "$_COOKIE $_FILES $_GET $_GET_BINARY $_GET_RAW $_POST $_POST_BINARY $_POST_RAW $_SESSION $_SERVER codepoint codepoints segment segments codeunit codeunits sentence sentences trueWord trueWords paragraph after byte bytes english the until http forever descending using line real8 with seventh for stdout finally element word words fourth before black ninth sixth characters chars stderr uInt1 uInt1s uInt2 uInt2s stdin string lines relative rel any fifth items from middle mid at else of catch then third it file milliseconds seconds second secs sec int1 int1s int4 int4s internet int2 int2s normal text item last long detailed effective uInt4 uInt4s repeat end repeat URL in try into switch to words https token binfile each tenth as ticks tick system real4 by dateItems without char character ascending eighth whole dateTime numeric short first ftp integer abbreviated abbr abbrev private case while if div mod wrap and or bitAnd bitNot bitOr bitXor among not in a an within contains ends with begins the keys of keys",
      literal: "SIX TEN FORMFEED NINE ZERO NONE SPACE FOUR FALSE COLON CRLF PI COMMA ENDOFFILE EOF EIGHT FIVE QUOTE EMPTY ONE TRUE RETURN CR LINEFEED RIGHT BACKSLASH NULL SEVEN TAB THREE TWO six ten formfeed nine zero none space four false colon crlf pi comma endoffile eof eight five quote empty one true return cr linefeed right backslash null seven tab three two RIVERSION RISTATE FILE_READ_MODE FILE_WRITE_MODE FILE_WRITE_MODE DIR_WRITE_MODE FILE_READ_UMASK FILE_WRITE_UMASK DIR_READ_UMASK DIR_WRITE_UMASK",
      built_in: "put abs acos aliasReference annuity arrayDecode arrayEncode asin atan atan2 average avg avgDev base64Decode base64Encode baseConvert binaryDecode binaryEncode byteOffset byteToNum cachedURL cachedURLs charToNum cipherNames codepointOffset codepointProperty codepointToNum codeunitOffset commandNames compound compress constantNames cos date dateFormat decompress difference directories diskSpace DNSServers exp exp1 exp2 exp10 extents files flushEvents folders format functionNames geometricMean global globals hasMemory harmonicMean hostAddress hostAddressToName hostName hostNameToAddress isNumber ISOToMac itemOffset keys len length libURLErrorData libUrlFormData libURLftpCommand libURLLastHTTPHeaders libURLLastRHHeaders libUrlMultipartFormAddPart libUrlMultipartFormData libURLVersion lineOffset ln ln1 localNames log log2 log10 longFilePath lower macToISO matchChunk matchText matrixMultiply max md5Digest median merge messageAuthenticationCode messageDigest millisec millisecs millisecond milliseconds min monthNames nativeCharToNum normalizeText num number numToByte numToChar numToCodepoint numToNativeChar offset open openfiles openProcesses openProcessIDs openSockets paragraphOffset paramCount param params peerAddress pendingMessages platform popStdDev populationStandardDeviation populationVariance popVariance processID random randomBytes replaceText result revCreateXMLTree revCreateXMLTreeFromFile revCurrentRecord revCurrentRecordIsFirst revCurrentRecordIsLast revDatabaseColumnCount revDatabaseColumnIsNull revDatabaseColumnLengths revDatabaseColumnNames revDatabaseColumnNamed revDatabaseColumnNumbered revDatabaseColumnTypes revDatabaseConnectResult revDatabaseCursors revDatabaseID revDatabaseTableNames revDatabaseType revDataFromQuery revdb_closeCursor revdb_columnbynumber revdb_columncount revdb_columnisnull revdb_columnlengths revdb_columnnames revdb_columntypes revdb_commit revdb_connect revdb_connections revdb_connectionerr revdb_currentrecord revdb_cursorconnection revdb_cursorerr revdb_cursors revdb_dbtype revdb_disconnect revdb_execute revdb_iseof revdb_isbof revdb_movefirst revdb_movelast revdb_movenext revdb_moveprev revdb_query revdb_querylist revdb_recordcount revdb_rollback revdb_tablenames revGetDatabaseDriverPath revNumberOfRecords revOpenDatabase revOpenDatabases revQueryDatabase revQueryDatabaseBlob revQueryResult revQueryIsAtStart revQueryIsAtEnd revUnixFromMacPath revXMLAttribute revXMLAttributes revXMLAttributeValues revXMLChildContents revXMLChildNames revXMLCreateTreeFromFileWithNamespaces revXMLCreateTreeWithNamespaces revXMLDataFromXPathQuery revXMLEvaluateXPath revXMLFirstChild revXMLMatchingNode revXMLNextSibling revXMLNodeContents revXMLNumberOfChildren revXMLParent revXMLPreviousSibling revXMLRootNode revXMLRPC_CreateRequest revXMLRPC_Documents revXMLRPC_Error revXMLRPC_GetHost revXMLRPC_GetMethod revXMLRPC_GetParam revXMLText revXMLRPC_Execute revXMLRPC_GetParamCount revXMLRPC_GetParamNode revXMLRPC_GetParamType revXMLRPC_GetPath revXMLRPC_GetPort revXMLRPC_GetProtocol revXMLRPC_GetRequest revXMLRPC_GetResponse revXMLRPC_GetSocket revXMLTree revXMLTrees revXMLValidateDTD revZipDescribeItem revZipEnumerateItems revZipOpenArchives round sampVariance sec secs seconds sentenceOffset sha1Digest shell shortFilePath sin specialFolderPath sqrt standardDeviation statRound stdDev sum sysError systemVersion tan tempName textDecode textEncode tick ticks time to tokenOffset toLower toUpper transpose truewordOffset trunc uniDecode uniEncode upper URLDecode URLEncode URLStatus uuid value variableNames variance version waitDepth weekdayNames wordOffset xsltApplyStylesheet xsltApplyStylesheetFromFile xsltLoadStylesheet xsltLoadStylesheetFromFile add breakpoint cancel clear local variable file word line folder directory URL close socket process combine constant convert create new alias folder directory decrypt delete variable word line folder directory URL dispatch divide do encrypt filter get include intersect kill libURLDownloadToFile libURLFollowHttpRedirects libURLftpUpload libURLftpUploadFile libURLresetAll libUrlSetAuthCallback libURLSetDriver libURLSetCustomHTTPHeaders libUrlSetExpect100 libURLSetFTPListCommand libURLSetFTPMode libURLSetFTPStopTime libURLSetStatusCallback load extension loadedExtensions multiply socket prepare process post seek rel relative read from process rename replace require resetAll resolve revAddXMLNode revAppendXML revCloseCursor revCloseDatabase revCommitDatabase revCopyFile revCopyFolder revCopyXMLNode revDeleteFolder revDeleteXMLNode revDeleteAllXMLTrees revDeleteXMLTree revExecuteSQL revGoURL revInsertXMLNode revMoveFolder revMoveToFirstRecord revMoveToLastRecord revMoveToNextRecord revMoveToPreviousRecord revMoveToRecord revMoveXMLNode revPutIntoXMLNode revRollBackDatabase revSetDatabaseDriverPath revSetXMLAttribute revXMLRPC_AddParam revXMLRPC_DeleteAllDocuments revXMLAddDTD revXMLRPC_Free revXMLRPC_FreeAll revXMLRPC_DeleteDocument revXMLRPC_DeleteParam revXMLRPC_SetHost revXMLRPC_SetMethod revXMLRPC_SetPort revXMLRPC_SetProtocol revXMLRPC_SetSocket revZipAddItemWithData revZipAddItemWithFile revZipAddUncompressedItemWithData revZipAddUncompressedItemWithFile revZipCancel revZipCloseArchive revZipDeleteItem revZipExtractItemToFile revZipExtractItemToVariable revZipSetProgressCallback revZipRenameItem revZipReplaceItemWithData revZipReplaceItemWithFile revZipOpenArchive send set sort split start stop subtract symmetric union unload vectorDotProduct wait write"
    },
    contains: [
      VARIABLE,
      {
        className: "keyword",
        begin: "\\bend\\sif\\b"
      },
      {
        className: "function",
        beginKeywords: "function",
        end: "$",
        contains: [
          VARIABLE,
          TITLE2,
          hljs.APOS_STRING_MODE,
          hljs.QUOTE_STRING_MODE,
          hljs.BINARY_NUMBER_MODE,
          hljs.C_NUMBER_MODE,
          TITLE1
        ]
      },
      {
        className: "function",
        begin: "\\bend\\s+",
        end: "$",
        keywords: "end",
        contains: [
          TITLE2,
          TITLE1
        ],
        relevance: 0
      },
      {
        beginKeywords: "command on",
        end: "$",
        contains: [
          VARIABLE,
          TITLE2,
          hljs.APOS_STRING_MODE,
          hljs.QUOTE_STRING_MODE,
          hljs.BINARY_NUMBER_MODE,
          hljs.C_NUMBER_MODE,
          TITLE1
        ]
      },
      {
        className: "meta",
        variants: [
          {
            begin: "<\\?(rev|lc|livecode)",
            relevance: 10
          },
          { begin: "<\\?" },
          { begin: "\\?>" }
        ]
      },
      hljs.APOS_STRING_MODE,
      hljs.QUOTE_STRING_MODE,
      hljs.BINARY_NUMBER_MODE,
      hljs.C_NUMBER_MODE,
      TITLE1
    ].concat(COMMENT_MODES),
    illegal: ";$|^\\[|^=|&|\\{"
  };
}
const KEYWORDS$2 = [
  "as",
  // for exports
  "in",
  "of",
  "if",
  "for",
  "while",
  "finally",
  "var",
  "new",
  "function",
  "do",
  "return",
  "void",
  "else",
  "break",
  "catch",
  "instanceof",
  "with",
  "throw",
  "case",
  "default",
  "try",
  "switch",
  "continue",
  "typeof",
  "delete",
  "let",
  "yield",
  "const",
  "class",
  // JS handles these with a special rule
  // "get",
  // "set",
  "debugger",
  "async",
  "await",
  "static",
  "import",
  "from",
  "export",
  "extends",
  // It's reached stage 3, which is "recommended for implementation":
  "using"
];
const LITERALS$2 = [
  "true",
  "false",
  "null",
  "undefined",
  "NaN",
  "Infinity"
];
const TYPES$2 = [
  // Fundamental objects
  "Object",
  "Function",
  "Boolean",
  "Symbol",
  // numbers and dates
  "Math",
  "Date",
  "Number",
  "BigInt",
  // text
  "String",
  "RegExp",
  // Indexed collections
  "Array",
  "Float32Array",
  "Float64Array",
  "Int8Array",
  "Uint8Array",
  "Uint8ClampedArray",
  "Int16Array",
  "Int32Array",
  "Uint16Array",
  "Uint32Array",
  "BigInt64Array",
  "BigUint64Array",
  // Keyed collections
  "Set",
  "Map",
  "WeakSet",
  "WeakMap",
  // Structured data
  "ArrayBuffer",
  "SharedArrayBuffer",
  "Atomics",
  "DataView",
  "JSON",
  // Control abstraction objects
  "Promise",
  "Generator",
  "GeneratorFunction",
  "AsyncFunction",
  // Reflection
  "Reflect",
  "Proxy",
  // Internationalization
  "Intl",
  // WebAssembly
  "WebAssembly"
];
const ERROR_TYPES$2 = [
  "Error",
  "EvalError",
  "InternalError",
  "RangeError",
  "ReferenceError",
  "SyntaxError",
  "TypeError",
  "URIError"
];
const BUILT_IN_GLOBALS$2 = [
  "setInterval",
  "setTimeout",
  "clearInterval",
  "clearTimeout",
  "require",
  "exports",
  "eval",
  "isFinite",
  "isNaN",
  "parseFloat",
  "parseInt",
  "decodeURI",
  "decodeURIComponent",
  "encodeURI",
  "encodeURIComponent",
  "escape",
  "unescape"
];
const BUILT_INS$2 = [].concat(
  BUILT_IN_GLOBALS$2,
  TYPES$2,
  ERROR_TYPES$2
);
function livescript(hljs) {
  const LIVESCRIPT_BUILT_INS = [
    "npm",
    "print"
  ];
  const LIVESCRIPT_LITERALS = [
    "yes",
    "no",
    "on",
    "off",
    "it",
    "that",
    "void"
  ];
  const LIVESCRIPT_KEYWORDS = [
    "then",
    "unless",
    "until",
    "loop",
    "of",
    "by",
    "when",
    "and",
    "or",
    "is",
    "isnt",
    "not",
    "it",
    "that",
    "otherwise",
    "from",
    "to",
    "til",
    "fallthrough",
    "case",
    "enum",
    "native",
    "list",
    "map",
    "__hasProp",
    "__extends",
    "__slice",
    "__bind",
    "__indexOf"
  ];
  const KEYWORDS$12 = {
    keyword: KEYWORDS$2.concat(LIVESCRIPT_KEYWORDS),
    literal: LITERALS$2.concat(LIVESCRIPT_LITERALS),
    built_in: BUILT_INS$2.concat(LIVESCRIPT_BUILT_INS)
  };
  const JS_IDENT_RE = "[A-Za-z$_](?:-[0-9A-Za-z$_]|[0-9A-Za-z$_])*";
  const TITLE = hljs.inherit(hljs.TITLE_MODE, { begin: JS_IDENT_RE });
  const SUBST = {
    className: "subst",
    begin: /#\{/,
    end: /\}/,
    keywords: KEYWORDS$12
  };
  const SUBST_SIMPLE = {
    className: "subst",
    begin: /#[A-Za-z$_]/,
    end: /(?:-[0-9A-Za-z$_]|[0-9A-Za-z$_])*/,
    keywords: KEYWORDS$12
  };
  const EXPRESSIONS = [
    hljs.BINARY_NUMBER_MODE,
    {
      className: "number",
      begin: "(\\b0[xX][a-fA-F0-9_]+)|(\\b\\d(\\d|_\\d)*(\\.(\\d(\\d|_\\d)*)?)?(_*[eE]([-+]\\d(_\\d|\\d)*)?)?[_a-z]*)",
      relevance: 0,
      starts: {
        end: "(\\s*/)?",
        relevance: 0
      }
      // a number tries to eat the following slash to prevent treating it as a regexp
    },
    {
      className: "string",
      variants: [
        {
          begin: /'''/,
          end: /'''/,
          contains: [hljs.BACKSLASH_ESCAPE]
        },
        {
          begin: /'/,
          end: /'/,
          contains: [hljs.BACKSLASH_ESCAPE]
        },
        {
          begin: /"""/,
          end: /"""/,
          contains: [
            hljs.BACKSLASH_ESCAPE,
            SUBST,
            SUBST_SIMPLE
          ]
        },
        {
          begin: /"/,
          end: /"/,
          contains: [
            hljs.BACKSLASH_ESCAPE,
            SUBST,
            SUBST_SIMPLE
          ]
        },
        {
          begin: /\\/,
          end: /(\s|$)/,
          excludeEnd: true
        }
      ]
    },
    {
      className: "regexp",
      variants: [
        {
          begin: "//",
          end: "//[gim]*",
          contains: [
            SUBST,
            hljs.HASH_COMMENT_MODE
          ]
        },
        {
          // regex can't start with space to parse x / 2 / 3 as two divisions
          // regex can't start with *, and it supports an "illegal" in the main mode
          begin: /\/(?![ *])(\\.|[^\\\n])*?\/[gim]*(?=\W)/
        }
      ]
    },
    { begin: "@" + JS_IDENT_RE },
    {
      begin: "``",
      end: "``",
      excludeBegin: true,
      excludeEnd: true,
      subLanguage: "javascript"
    }
  ];
  SUBST.contains = EXPRESSIONS;
  const PARAMS = {
    className: "params",
    begin: "\\(",
    returnBegin: true,
    /* We need another contained nameless mode to not have every nested
    pair of parens to be called "params" */
    contains: [
      {
        begin: /\(/,
        end: /\)/,
        keywords: KEYWORDS$12,
        contains: ["self"].concat(EXPRESSIONS)
      }
    ]
  };
  const SYMBOLS = { begin: "(#=>|=>|\\|>>|-?->|!->)" };
  const CLASS_DEFINITION = {
    variants: [
      { match: [
        /class\s+/,
        JS_IDENT_RE,
        /\s+extends\s+/,
        JS_IDENT_RE
      ] },
      { match: [
        /class\s+/,
        JS_IDENT_RE
      ] }
    ],
    scope: {
      2: "title.class",
      4: "title.class.inherited"
    },
    keywords: KEYWORDS$12
  };
  return {
    name: "LiveScript",
    aliases: ["ls"],
    keywords: KEYWORDS$12,
    illegal: /\/\*/,
    contains: EXPRESSIONS.concat([
      hljs.COMMENT("\\/\\*", "\\*\\/"),
      hljs.HASH_COMMENT_MODE,
      SYMBOLS,
      // relevance booster
      {
        className: "function",
        contains: [
          TITLE,
          PARAMS
        ],
        returnBegin: true,
        variants: [
          {
            begin: "(" + JS_IDENT_RE + "\\s*(?:=|:=)\\s*)?(\\(.*\\)\\s*)?\\B->\\*?",
            end: "->\\*?"
          },
          {
            begin: "(" + JS_IDENT_RE + "\\s*(?:=|:=)\\s*)?!?(\\(.*\\)\\s*)?\\B[-~]{1,2}>\\*?",
            end: "[-~]{1,2}>\\*?"
          },
          {
            begin: "(" + JS_IDENT_RE + "\\s*(?:=|:=)\\s*)?(\\(.*\\)\\s*)?\\B!?[-~]{1,2}>\\*?",
            end: "!?[-~]{1,2}>\\*?"
          }
        ]
      },
      CLASS_DEFINITION,
      {
        begin: JS_IDENT_RE + ":",
        end: ":",
        returnBegin: true,
        returnEnd: true,
        relevance: 0
      }
    ])
  };
}
function llvm(hljs) {
  const regex = hljs.regex;
  const IDENT_RE2 = /([-a-zA-Z$._][\w$.-]*)/;
  const TYPE = {
    className: "type",
    begin: /\bi\d+(?=\s|\b)/
  };
  const OPERATOR = {
    className: "operator",
    relevance: 0,
    begin: /=/
  };
  const PUNCTUATION = {
    className: "punctuation",
    relevance: 0,
    begin: /,/
  };
  const NUMBER = {
    className: "number",
    variants: [
      { begin: /[su]?0[xX][KMLHR]?[a-fA-F0-9]+/ },
      { begin: /[-+]?\d+(?:[.]\d+)?(?:[eE][-+]?\d+(?:[.]\d+)?)?/ }
    ],
    relevance: 0
  };
  const LABEL = {
    className: "symbol",
    variants: [
      { begin: /^\s*[a-z]+:/ }
      // labels
    ],
    relevance: 0
  };
  const VARIABLE = {
    className: "variable",
    variants: [
      { begin: regex.concat(/%/, IDENT_RE2) },
      { begin: /%\d+/ },
      { begin: /#\d+/ }
    ]
  };
  const FUNCTION = {
    className: "title",
    variants: [
      { begin: regex.concat(/@/, IDENT_RE2) },
      { begin: /@\d+/ },
      { begin: regex.concat(/!/, IDENT_RE2) },
      { begin: regex.concat(/!\d+/, IDENT_RE2) },
      // https://llvm.org/docs/LangRef.html#namedmetadatastructure
      // obviously a single digit can also be used in this fashion
      { begin: /!\d+/ }
    ]
  };
  return {
    name: "LLVM IR",
    // TODO: split into different categories of keywords
    keywords: {
      keyword: "begin end true false declare define global constant private linker_private internal available_externally linkonce linkonce_odr weak weak_odr appending dllimport dllexport common default hidden protected extern_weak external thread_local zeroinitializer undef null to tail target triple datalayout volatile nuw nsw nnan ninf nsz arcp fast exact inbounds align addrspace section alias module asm sideeffect gc dbg linker_private_weak attributes blockaddress initialexec localdynamic localexec prefix unnamed_addr ccc fastcc coldcc x86_stdcallcc x86_fastcallcc arm_apcscc arm_aapcscc arm_aapcs_vfpcc ptx_device ptx_kernel intel_ocl_bicc msp430_intrcc spir_func spir_kernel x86_64_sysvcc x86_64_win64cc x86_thiscallcc cc c signext zeroext inreg sret nounwind noreturn noalias nocapture byval nest readnone readonly inlinehint noinline alwaysinline optsize ssp sspreq noredzone noimplicitfloat naked builtin cold nobuiltin noduplicate nonlazybind optnone returns_twice sanitize_address sanitize_memory sanitize_thread sspstrong uwtable returned type opaque eq ne slt sgt sle sge ult ugt ule uge oeq one olt ogt ole oge ord uno ueq une x acq_rel acquire alignstack atomic catch cleanup filter inteldialect max min monotonic nand personality release seq_cst singlethread umax umin unordered xchg add fadd sub fsub mul fmul udiv sdiv fdiv urem srem frem shl lshr ashr and or xor icmp fcmp phi call trunc zext sext fptrunc fpext uitofp sitofp fptoui fptosi inttoptr ptrtoint bitcast addrspacecast select va_arg ret br switch invoke unwind unreachable indirectbr landingpad resume malloc alloca free load store getelementptr extractelement insertelement shufflevector getresult extractvalue insertvalue atomicrmw cmpxchg fence argmemonly",
      type: "void half bfloat float double fp128 x86_fp80 ppc_fp128 x86_amx x86_mmx ptr label token metadata opaque"
    },
    contains: [
      TYPE,
      // this matches "empty comments"...
      // ...because it's far more likely this is a statement terminator in
      // another language than an actual comment
      hljs.COMMENT(/;\s*$/, null, { relevance: 0 }),
      hljs.COMMENT(/;/, /$/),
      {
        className: "string",
        begin: /"/,
        end: /"/,
        contains: [
          {
            className: "char.escape",
            match: /\\\d\d/
          }
        ]
      },
      FUNCTION,
      PUNCTUATION,
      OPERATOR,
      VARIABLE,
      LABEL,
      NUMBER
    ]
  };
}
function lsl(hljs) {
  const LSL_STRING_ESCAPE_CHARS = {
    className: "subst",
    begin: /\\[tn"\\]/
  };
  const LSL_STRINGS = {
    className: "string",
    begin: '"',
    end: '"',
    contains: [LSL_STRING_ESCAPE_CHARS]
  };
  const LSL_NUMBERS = {
    className: "number",
    relevance: 0,
    begin: hljs.C_NUMBER_RE
  };
  const LSL_CONSTANTS = {
    className: "literal",
    variants: [
      { begin: "\\b(PI|TWO_PI|PI_BY_TWO|DEG_TO_RAD|RAD_TO_DEG|SQRT2)\\b" },
      { begin: "\\b(XP_ERROR_(EXPERIENCES_DISABLED|EXPERIENCE_(DISABLED|SUSPENDED)|INVALID_(EXPERIENCE|PARAMETERS)|KEY_NOT_FOUND|MATURITY_EXCEEDED|NONE|NOT_(FOUND|PERMITTED(_LAND)?)|NO_EXPERIENCE|QUOTA_EXCEEDED|RETRY_UPDATE|STORAGE_EXCEPTION|STORE_DISABLED|THROTTLED|UNKNOWN_ERROR)|JSON_APPEND|STATUS_(PHYSICS|ROTATE_[XYZ]|PHANTOM|SANDBOX|BLOCK_GRAB(_OBJECT)?|(DIE|RETURN)_AT_EDGE|CAST_SHADOWS|OK|MALFORMED_PARAMS|TYPE_MISMATCH|BOUNDS_ERROR|NOT_(FOUND|SUPPORTED)|INTERNAL_ERROR|WHITELIST_FAILED)|AGENT(_(BY_(LEGACY_|USER)NAME|FLYING|ATTACHMENTS|SCRIPTED|MOUSELOOK|SITTING|ON_OBJECT|AWAY|WALKING|IN_AIR|TYPING|CROUCHING|BUSY|ALWAYS_RUN|AUTOPILOT|LIST_(PARCEL(_OWNER)?|REGION)))?|CAMERA_(PITCH|DISTANCE|BEHINDNESS_(ANGLE|LAG)|(FOCUS|POSITION)(_(THRESHOLD|LOCKED|LAG))?|FOCUS_OFFSET|ACTIVE)|ANIM_ON|LOOP|REVERSE|PING_PONG|SMOOTH|ROTATE|SCALE|ALL_SIDES|LINK_(ROOT|SET|ALL_(OTHERS|CHILDREN)|THIS)|ACTIVE|PASS(IVE|_(ALWAYS|IF_NOT_HANDLED|NEVER))|SCRIPTED|CONTROL_(FWD|BACK|(ROT_)?(LEFT|RIGHT)|UP|DOWN|(ML_)?LBUTTON)|PERMISSION_(RETURN_OBJECTS|DEBIT|OVERRIDE_ANIMATIONS|SILENT_ESTATE_MANAGEMENT|TAKE_CONTROLS|TRIGGER_ANIMATION|ATTACH|CHANGE_LINKS|(CONTROL|TRACK)_CAMERA|TELEPORT)|INVENTORY_(TEXTURE|SOUND|OBJECT|SCRIPT|LANDMARK|CLOTHING|NOTECARD|BODYPART|ANIMATION|GESTURE|ALL|NONE)|CHANGED_(INVENTORY|COLOR|SHAPE|SCALE|TEXTURE|LINK|ALLOWED_DROP|OWNER|REGION(_START)?|TELEPORT|MEDIA)|OBJECT_(CLICK_ACTION|HOVER_HEIGHT|LAST_OWNER_ID|(PHYSICS|SERVER|STREAMING)_COST|UNKNOWN_DETAIL|CHARACTER_TIME|PHANTOM|PHYSICS|TEMP_(ATTACHED|ON_REZ)|NAME|DESC|POS|PRIM_(COUNT|EQUIVALENCE)|RETURN_(PARCEL(_OWNER)?|REGION)|REZZER_KEY|ROO?T|VELOCITY|OMEGA|OWNER|GROUP(_TAG)?|CREATOR|ATTACHED_(POINT|SLOTS_AVAILABLE)|RENDER_WEIGHT|(BODY_SHAPE|PATHFINDING)_TYPE|(RUNNING|TOTAL)_SCRIPT_COUNT|TOTAL_INVENTORY_COUNT|SCRIPT_(MEMORY|TIME))|TYPE_(INTEGER|FLOAT|STRING|KEY|VECTOR|ROTATION|INVALID)|(DEBUG|PUBLIC)_CHANNEL|ATTACH_(AVATAR_CENTER|CHEST|HEAD|BACK|PELVIS|MOUTH|CHIN|NECK|NOSE|BELLY|[LR](SHOULDER|HAND|FOOT|EAR|EYE|[UL](ARM|LEG)|HIP)|(LEFT|RIGHT)_PEC|HUD_(CENTER_[12]|TOP_(RIGHT|CENTER|LEFT)|BOTTOM(_(RIGHT|LEFT))?)|[LR]HAND_RING1|TAIL_(BASE|TIP)|[LR]WING|FACE_(JAW|[LR]EAR|[LR]EYE|TOUNGE)|GROIN|HIND_[LR]FOOT)|LAND_(LEVEL|RAISE|LOWER|SMOOTH|NOISE|REVERT)|DATA_(ONLINE|NAME|BORN|SIM_(POS|STATUS|RATING)|PAYINFO)|PAYMENT_INFO_(ON_FILE|USED)|REMOTE_DATA_(CHANNEL|REQUEST|REPLY)|PSYS_(PART_(BF_(ZERO|ONE(_MINUS_(DEST_COLOR|SOURCE_(ALPHA|COLOR)))?|DEST_COLOR|SOURCE_(ALPHA|COLOR))|BLEND_FUNC_(DEST|SOURCE)|FLAGS|(START|END)_(COLOR|ALPHA|SCALE|GLOW)|MAX_AGE|(RIBBON|WIND|INTERP_(COLOR|SCALE)|BOUNCE|FOLLOW_(SRC|VELOCITY)|TARGET_(POS|LINEAR)|EMISSIVE)_MASK)|SRC_(MAX_AGE|PATTERN|ANGLE_(BEGIN|END)|BURST_(RATE|PART_COUNT|RADIUS|SPEED_(MIN|MAX))|ACCEL|TEXTURE|TARGET_KEY|OMEGA|PATTERN_(DROP|EXPLODE|ANGLE(_CONE(_EMPTY)?)?)))|VEHICLE_(REFERENCE_FRAME|TYPE_(NONE|SLED|CAR|BOAT|AIRPLANE|BALLOON)|(LINEAR|ANGULAR)_(FRICTION_TIMESCALE|MOTOR_DIRECTION)|LINEAR_MOTOR_OFFSET|HOVER_(HEIGHT|EFFICIENCY|TIMESCALE)|BUOYANCY|(LINEAR|ANGULAR)_(DEFLECTION_(EFFICIENCY|TIMESCALE)|MOTOR_(DECAY_)?TIMESCALE)|VERTICAL_ATTRACTION_(EFFICIENCY|TIMESCALE)|BANKING_(EFFICIENCY|MIX|TIMESCALE)|FLAG_(NO_DEFLECTION_UP|LIMIT_(ROLL_ONLY|MOTOR_UP)|HOVER_((WATER|TERRAIN|UP)_ONLY|GLOBAL_HEIGHT)|MOUSELOOK_(STEER|BANK)|CAMERA_DECOUPLED))|PRIM_(ALLOW_UNSIT|ALPHA_MODE(_(BLEND|EMISSIVE|MASK|NONE))?|NORMAL|SPECULAR|TYPE(_(BOX|CYLINDER|PRISM|SPHERE|TORUS|TUBE|RING|SCULPT))?|HOLE_(DEFAULT|CIRCLE|SQUARE|TRIANGLE)|MATERIAL(_(STONE|METAL|GLASS|WOOD|FLESH|PLASTIC|RUBBER))?|SHINY_(NONE|LOW|MEDIUM|HIGH)|BUMP_(NONE|BRIGHT|DARK|WOOD|BARK|BRICKS|CHECKER|CONCRETE|TILE|STONE|DISKS|GRAVEL|BLOBS|SIDING|LARGETILE|STUCCO|SUCTION|WEAVE)|TEXGEN_(DEFAULT|PLANAR)|SCRIPTED_SIT_ONLY|SCULPT_(TYPE_(SPHERE|TORUS|PLANE|CYLINDER|MASK)|FLAG_(MIRROR|INVERT))|PHYSICS(_(SHAPE_(CONVEX|NONE|PRIM|TYPE)))?|(POS|ROT)_LOCAL|SLICE|TEXT|FLEXIBLE|POINT_LIGHT|TEMP_ON_REZ|PHANTOM|POSITION|SIT_TARGET|SIZE|ROTATION|TEXTURE|NAME|OMEGA|DESC|LINK_TARGET|COLOR|BUMP_SHINY|FULLBRIGHT|TEXGEN|GLOW|MEDIA_(ALT_IMAGE_ENABLE|CONTROLS|(CURRENT|HOME)_URL|AUTO_(LOOP|PLAY|SCALE|ZOOM)|FIRST_CLICK_INTERACT|(WIDTH|HEIGHT)_PIXELS|WHITELIST(_ENABLE)?|PERMS_(INTERACT|CONTROL)|PARAM_MAX|CONTROLS_(STANDARD|MINI)|PERM_(NONE|OWNER|GROUP|ANYONE)|MAX_(URL_LENGTH|WHITELIST_(SIZE|COUNT)|(WIDTH|HEIGHT)_PIXELS)))|MASK_(BASE|OWNER|GROUP|EVERYONE|NEXT)|PERM_(TRANSFER|MODIFY|COPY|MOVE|ALL)|PARCEL_(MEDIA_COMMAND_(STOP|PAUSE|PLAY|LOOP|TEXTURE|URL|TIME|AGENT|UNLOAD|AUTO_ALIGN|TYPE|SIZE|DESC|LOOP_SET)|FLAG_(ALLOW_(FLY|(GROUP_)?SCRIPTS|LANDMARK|TERRAFORM|DAMAGE|CREATE_(GROUP_)?OBJECTS)|USE_(ACCESS_(GROUP|LIST)|BAN_LIST|LAND_PASS_LIST)|LOCAL_SOUND_ONLY|RESTRICT_PUSHOBJECT|ALLOW_(GROUP|ALL)_OBJECT_ENTRY)|COUNT_(TOTAL|OWNER|GROUP|OTHER|SELECTED|TEMP)|DETAILS_(NAME|DESC|OWNER|GROUP|AREA|ID|SEE_AVATARS))|LIST_STAT_(MAX|MIN|MEAN|MEDIAN|STD_DEV|SUM(_SQUARES)?|NUM_COUNT|GEOMETRIC_MEAN|RANGE)|PAY_(HIDE|DEFAULT)|REGION_FLAG_(ALLOW_DAMAGE|FIXED_SUN|BLOCK_TERRAFORM|SANDBOX|DISABLE_(COLLISIONS|PHYSICS)|BLOCK_FLY|ALLOW_DIRECT_TELEPORT|RESTRICT_PUSHOBJECT)|HTTP_(METHOD|MIMETYPE|BODY_(MAXLENGTH|TRUNCATED)|CUSTOM_HEADER|PRAGMA_NO_CACHE|VERBOSE_THROTTLE|VERIFY_CERT)|SIT_(INVALID_(AGENT|LINK_OBJECT)|NO(T_EXPERIENCE|_(ACCESS|EXPERIENCE_PERMISSION|SIT_TARGET)))|STRING_(TRIM(_(HEAD|TAIL))?)|CLICK_ACTION_(NONE|TOUCH|SIT|BUY|PAY|OPEN(_MEDIA)?|PLAY|ZOOM)|TOUCH_INVALID_FACE|PROFILE_(NONE|SCRIPT_MEMORY)|RC_(DATA_FLAGS|DETECT_PHANTOM|GET_(LINK_NUM|NORMAL|ROOT_KEY)|MAX_HITS|REJECT_(TYPES|AGENTS|(NON)?PHYSICAL|LAND))|RCERR_(CAST_TIME_EXCEEDED|SIM_PERF_LOW|UNKNOWN)|ESTATE_ACCESS_(ALLOWED_(AGENT|GROUP)_(ADD|REMOVE)|BANNED_AGENT_(ADD|REMOVE))|DENSITY|FRICTION|RESTITUTION|GRAVITY_MULTIPLIER|KFM_(COMMAND|CMD_(PLAY|STOP|PAUSE)|MODE|FORWARD|LOOP|PING_PONG|REVERSE|DATA|ROTATION|TRANSLATION)|ERR_(GENERIC|PARCEL_PERMISSIONS|MALFORMED_PARAMS|RUNTIME_PERMISSIONS|THROTTLED)|CHARACTER_(CMD_((SMOOTH_)?STOP|JUMP)|DESIRED_(TURN_)?SPEED|RADIUS|STAY_WITHIN_PARCEL|LENGTH|ORIENTATION|ACCOUNT_FOR_SKIPPED_FRAMES|AVOIDANCE_MODE|TYPE(_([ABCD]|NONE))?|MAX_(DECEL|TURN_RADIUS|(ACCEL|SPEED)))|PURSUIT_(OFFSET|FUZZ_FACTOR|GOAL_TOLERANCE|INTERCEPT)|REQUIRE_LINE_OF_SIGHT|FORCE_DIRECT_PATH|VERTICAL|HORIZONTAL|AVOID_(CHARACTERS|DYNAMIC_OBSTACLES|NONE)|PU_(EVADE_(HIDDEN|SPOTTED)|FAILURE_(DYNAMIC_PATHFINDING_DISABLED|INVALID_(GOAL|START)|NO_(NAVMESH|VALID_DESTINATION)|OTHER|TARGET_GONE|(PARCEL_)?UNREACHABLE)|(GOAL|SLOWDOWN_DISTANCE)_REACHED)|TRAVERSAL_TYPE(_(FAST|NONE|SLOW))?|CONTENT_TYPE_(ATOM|FORM|HTML|JSON|LLSD|RSS|TEXT|XHTML|XML)|GCNP_(RADIUS|STATIC)|(PATROL|WANDER)_PAUSE_AT_WAYPOINTS|OPT_(AVATAR|CHARACTER|EXCLUSION_VOLUME|LEGACY_LINKSET|MATERIAL_VOLUME|OTHER|STATIC_OBSTACLE|WALKABLE)|SIM_STAT_PCT_CHARS_STEPPED)\\b" },
      { begin: "\\b(FALSE|TRUE)\\b" },
      { begin: "\\b(ZERO_ROTATION)\\b" },
      { begin: "\\b(EOF|JSON_(ARRAY|DELETE|FALSE|INVALID|NULL|NUMBER|OBJECT|STRING|TRUE)|NULL_KEY|TEXTURE_(BLANK|DEFAULT|MEDIA|PLYWOOD|TRANSPARENT)|URL_REQUEST_(GRANTED|DENIED))\\b" },
      { begin: "\\b(ZERO_VECTOR|TOUCH_INVALID_(TEXCOORD|VECTOR))\\b" }
    ]
  };
  const LSL_FUNCTIONS = {
    className: "built_in",
    begin: "\\b(ll(AgentInExperience|(Create|DataSize|Delete|KeyCount|Keys|Read|Update)KeyValue|GetExperience(Details|ErrorMessage)|ReturnObjectsBy(ID|Owner)|Json(2List|[GS]etValue|ValueType)|Sin|Cos|Tan|Atan2|Sqrt|Pow|Abs|Fabs|Frand|Floor|Ceil|Round|Vec(Mag|Norm|Dist)|Rot(Between|2(Euler|Fwd|Left|Up))|(Euler|Axes)2Rot|Whisper|(Region|Owner)?Say|Shout|Listen(Control|Remove)?|Sensor(Repeat|Remove)?|Detected(Name|Key|Owner|Type|Pos|Vel|Grab|Rot|Group|LinkNumber)|Die|Ground|Wind|([GS]et)(AnimationOverride|MemoryLimit|PrimMediaParams|ParcelMusicURL|Object(Desc|Name)|PhysicsMaterial|Status|Scale|Color|Alpha|Texture|Pos|Rot|Force|Torque)|ResetAnimationOverride|(Scale|Offset|Rotate)Texture|(Rot)?Target(Remove)?|(Stop)?MoveToTarget|Apply(Rotational)?Impulse|Set(KeyframedMotion|ContentType|RegionPos|(Angular)?Velocity|Buoyancy|HoverHeight|ForceAndTorque|TimerEvent|ScriptState|Damage|TextureAnim|Sound(Queueing|Radius)|Vehicle(Type|(Float|Vector|Rotation)Param)|(Touch|Sit)?Text|Camera(Eye|At)Offset|PrimitiveParams|ClickAction|Link(Alpha|Color|PrimitiveParams(Fast)?|Texture(Anim)?|Camera|Media)|RemoteScriptAccessPin|PayPrice|LocalRot)|ScaleByFactor|Get((Max|Min)ScaleFactor|ClosestNavPoint|StaticPath|SimStats|Env|PrimitiveParams|Link(PrimitiveParams|Number(OfSides)?|Key|Name|Media)|HTTPHeader|FreeURLs|Object(Details|PermMask|PrimCount)|Parcel(MaxPrims|Details|Prim(Count|Owners))|Attached(List)?|(SPMax|Free|Used)Memory|Region(Name|TimeDilation|FPS|Corner|AgentCount)|Root(Position|Rotation)|UnixTime|(Parcel|Region)Flags|(Wall|GMT)clock|SimulatorHostname|BoundingBox|GeometricCenter|Creator|NumberOf(Prims|NotecardLines|Sides)|Animation(List)?|(Camera|Local)(Pos|Rot)|Vel|Accel|Omega|Time(stamp|OfDay)|(Object|CenterOf)?Mass|MassMKS|Energy|Owner|(Owner)?Key|SunDirection|Texture(Offset|Scale|Rot)|Inventory(Number|Name|Key|Type|Creator|PermMask)|Permissions(Key)?|StartParameter|List(Length|EntryType)|Date|Agent(Size|Info|Language|List)|LandOwnerAt|NotecardLine|Script(Name|State))|(Get|Reset|GetAndReset)Time|PlaySound(Slave)?|LoopSound(Master|Slave)?|(Trigger|Stop|Preload)Sound|((Get|Delete)Sub|Insert)String|To(Upper|Lower)|Give(InventoryList|Money)|RezObject|(Stop)?LookAt|Sleep|CollisionFilter|(Take|Release)Controls|DetachFromAvatar|AttachToAvatar(Temp)?|InstantMessage|(GetNext)?Email|StopHover|MinEventDelay|RotLookAt|String(Length|Trim)|(Start|Stop)Animation|TargetOmega|Request(Experience)?Permissions|(Create|Break)Link|BreakAllLinks|(Give|Remove)Inventory|Water|PassTouches|Request(Agent|Inventory)Data|TeleportAgent(Home|GlobalCoords)?|ModifyLand|CollisionSound|ResetScript|MessageLinked|PushObject|PassCollisions|AxisAngle2Rot|Rot2(Axis|Angle)|A(cos|sin)|AngleBetween|AllowInventoryDrop|SubStringIndex|List2(CSV|Integer|Json|Float|String|Key|Vector|Rot|List(Strided)?)|DeleteSubList|List(Statistics|Sort|Randomize|(Insert|Find|Replace)List)|EdgeOfWorld|AdjustSoundVolume|Key2Name|TriggerSoundLimited|EjectFromLand|(CSV|ParseString)2List|OverMyLand|SameGroup|UnSit|Ground(Slope|Normal|Contour)|GroundRepel|(Set|Remove)VehicleFlags|SitOnLink|(AvatarOn)?(Link)?SitTarget|Script(Danger|Profiler)|Dialog|VolumeDetect|ResetOtherScript|RemoteLoadScriptPin|(Open|Close)RemoteDataChannel|SendRemoteData|RemoteDataReply|(Integer|String)ToBase64|XorBase64|Log(10)?|Base64To(String|Integer)|ParseStringKeepNulls|RezAtRoot|RequestSimulatorData|ForceMouselook|(Load|Release|(E|Une)scape)URL|ParcelMedia(CommandList|Query)|ModPow|MapDestination|(RemoveFrom|AddTo|Reset)Land(Pass|Ban)List|(Set|Clear)CameraParams|HTTP(Request|Response)|TextBox|DetectedTouch(UV|Face|Pos|(N|Bin)ormal|ST)|(MD5|SHA1|DumpList2)String|Request(Secure)?URL|Clear(Prim|Link)Media|(Link)?ParticleSystem|(Get|Request)(Username|DisplayName)|RegionSayTo|CastRay|GenerateKey|TransferLindenDollars|ManageEstateAccess|(Create|Delete)Character|ExecCharacterCmd|Evade|FleeFrom|NavigateTo|PatrolPoints|Pursue|UpdateCharacter|WanderWithin))\\b"
  };
  return {
    name: "LSL (Linden Scripting Language)",
    illegal: ":",
    contains: [
      LSL_STRINGS,
      {
        className: "comment",
        variants: [
          hljs.COMMENT("//", "$"),
          hljs.COMMENT("/\\*", "\\*/")
        ],
        relevance: 0
      },
      LSL_NUMBERS,
      {
        className: "section",
        variants: [
          { begin: "\\b(state|default)\\b" },
          { begin: "\\b(state_(entry|exit)|touch(_(start|end))?|(land_)?collision(_(start|end))?|timer|listen|(no_)?sensor|control|(not_)?at_(rot_)?target|money|email|experience_permissions(_denied)?|run_time_permissions|changed|attach|dataserver|moving_(start|end)|link_message|(on|object)_rez|remote_data|http_re(sponse|quest)|path_update|transaction_result)\\b" }
        ]
      },
      LSL_FUNCTIONS,
      LSL_CONSTANTS,
      {
        className: "type",
        begin: "\\b(integer|float|string|key|vector|quaternion|rotation|list)\\b"
      }
    ]
  };
}
const SYSTEM_SYMBOLS = [
  "AASTriangle",
  "AbelianGroup",
  "Abort",
  "AbortKernels",
  "AbortProtect",
  "AbortScheduledTask",
  "Above",
  "Abs",
  "AbsArg",
  "AbsArgPlot",
  "Absolute",
  "AbsoluteCorrelation",
  "AbsoluteCorrelationFunction",
  "AbsoluteCurrentValue",
  "AbsoluteDashing",
  "AbsoluteFileName",
  "AbsoluteOptions",
  "AbsolutePointSize",
  "AbsoluteThickness",
  "AbsoluteTime",
  "AbsoluteTiming",
  "AcceptanceThreshold",
  "AccountingForm",
  "Accumulate",
  "Accuracy",
  "AccuracyGoal",
  "AcousticAbsorbingValue",
  "AcousticImpedanceValue",
  "AcousticNormalVelocityValue",
  "AcousticPDEComponent",
  "AcousticPressureCondition",
  "AcousticRadiationValue",
  "AcousticSoundHardValue",
  "AcousticSoundSoftCondition",
  "ActionDelay",
  "ActionMenu",
  "ActionMenuBox",
  "ActionMenuBoxOptions",
  "Activate",
  "Active",
  "ActiveClassification",
  "ActiveClassificationObject",
  "ActiveItem",
  "ActivePrediction",
  "ActivePredictionObject",
  "ActiveStyle",
  "AcyclicGraphQ",
  "AddOnHelpPath",
  "AddSides",
  "AddTo",
  "AddToSearchIndex",
  "AddUsers",
  "AdjacencyGraph",
  "AdjacencyList",
  "AdjacencyMatrix",
  "AdjacentMeshCells",
  "Adjugate",
  "AdjustmentBox",
  "AdjustmentBoxOptions",
  "AdjustTimeSeriesForecast",
  "AdministrativeDivisionData",
  "AffineHalfSpace",
  "AffineSpace",
  "AffineStateSpaceModel",
  "AffineTransform",
  "After",
  "AggregatedEntityClass",
  "AggregationLayer",
  "AircraftData",
  "AirportData",
  "AirPressureData",
  "AirSoundAttenuation",
  "AirTemperatureData",
  "AiryAi",
  "AiryAiPrime",
  "AiryAiZero",
  "AiryBi",
  "AiryBiPrime",
  "AiryBiZero",
  "AlgebraicIntegerQ",
  "AlgebraicNumber",
  "AlgebraicNumberDenominator",
  "AlgebraicNumberNorm",
  "AlgebraicNumberPolynomial",
  "AlgebraicNumberTrace",
  "AlgebraicRules",
  "AlgebraicRulesData",
  "Algebraics",
  "AlgebraicUnitQ",
  "Alignment",
  "AlignmentMarker",
  "AlignmentPoint",
  "All",
  "AllowAdultContent",
  "AllowChatServices",
  "AllowedCloudExtraParameters",
  "AllowedCloudParameterExtensions",
  "AllowedDimensions",
  "AllowedFrequencyRange",
  "AllowedHeads",
  "AllowGroupClose",
  "AllowIncomplete",
  "AllowInlineCells",
  "AllowKernelInitialization",
  "AllowLooseGrammar",
  "AllowReverseGroupClose",
  "AllowScriptLevelChange",
  "AllowVersionUpdate",
  "AllTrue",
  "Alphabet",
  "AlphabeticOrder",
  "AlphabeticSort",
  "AlphaChannel",
  "AlternateImage",
  "AlternatingFactorial",
  "AlternatingGroup",
  "AlternativeHypothesis",
  "Alternatives",
  "AltitudeMethod",
  "AmbientLight",
  "AmbiguityFunction",
  "AmbiguityList",
  "Analytic",
  "AnatomyData",
  "AnatomyForm",
  "AnatomyPlot3D",
  "AnatomySkinStyle",
  "AnatomyStyling",
  "AnchoredSearch",
  "And",
  "AndersonDarlingTest",
  "AngerJ",
  "AngleBisector",
  "AngleBracket",
  "AnglePath",
  "AnglePath3D",
  "AngleVector",
  "AngularGauge",
  "Animate",
  "AnimatedImage",
  "AnimationCycleOffset",
  "AnimationCycleRepetitions",
  "AnimationDirection",
  "AnimationDisplayTime",
  "AnimationRate",
  "AnimationRepetitions",
  "AnimationRunning",
  "AnimationRunTime",
  "AnimationTimeIndex",
  "AnimationVideo",
  "Animator",
  "AnimatorBox",
  "AnimatorBoxOptions",
  "AnimatorElements",
  "Annotate",
  "Annotation",
  "AnnotationDelete",
  "AnnotationKeys",
  "AnnotationRules",
  "AnnotationValue",
  "Annuity",
  "AnnuityDue",
  "Annulus",
  "AnomalyDetection",
  "AnomalyDetector",
  "AnomalyDetectorFunction",
  "Anonymous",
  "Antialiasing",
  "Antihermitian",
  "AntihermitianMatrixQ",
  "Antisymmetric",
  "AntisymmetricMatrixQ",
  "Antonyms",
  "AnyOrder",
  "AnySubset",
  "AnyTrue",
  "Apart",
  "ApartSquareFree",
  "APIFunction",
  "Appearance",
  "AppearanceElements",
  "AppearanceRules",
  "AppellF1",
  "Append",
  "AppendCheck",
  "AppendLayer",
  "AppendTo",
  "Application",
  "Apply",
  "ApplyReaction",
  "ApplySides",
  "ApplyTo",
  "ArcCos",
  "ArcCosh",
  "ArcCot",
  "ArcCoth",
  "ArcCsc",
  "ArcCsch",
  "ArcCurvature",
  "ARCHProcess",
  "ArcLength",
  "ArcSec",
  "ArcSech",
  "ArcSin",
  "ArcSinDistribution",
  "ArcSinh",
  "ArcTan",
  "ArcTanh",
  "Area",
  "Arg",
  "ArgMax",
  "ArgMin",
  "ArgumentCountQ",
  "ArgumentsOptions",
  "ARIMAProcess",
  "ArithmeticGeometricMean",
  "ARMAProcess",
  "Around",
  "AroundReplace",
  "ARProcess",
  "Array",
  "ArrayComponents",
  "ArrayDepth",
  "ArrayFilter",
  "ArrayFlatten",
  "ArrayMesh",
  "ArrayPad",
  "ArrayPlot",
  "ArrayPlot3D",
  "ArrayQ",
  "ArrayReduce",
  "ArrayResample",
  "ArrayReshape",
  "ArrayRules",
  "Arrays",
  "Arrow",
  "Arrow3DBox",
  "ArrowBox",
  "Arrowheads",
  "ASATriangle",
  "Ask",
  "AskAppend",
  "AskConfirm",
  "AskDisplay",
  "AskedQ",
  "AskedValue",
  "AskFunction",
  "AskState",
  "AskTemplateDisplay",
  "AspectRatio",
  "AspectRatioFixed",
  "Assert",
  "AssessmentFunction",
  "AssessmentResultObject",
  "AssociateTo",
  "Association",
  "AssociationFormat",
  "AssociationMap",
  "AssociationQ",
  "AssociationThread",
  "AssumeDeterministic",
  "Assuming",
  "Assumptions",
  "AstroAngularSeparation",
  "AstroBackground",
  "AstroCenter",
  "AstroDistance",
  "AstroGraphics",
  "AstroGridLines",
  "AstroGridLinesStyle",
  "AstronomicalData",
  "AstroPosition",
  "AstroProjection",
  "AstroRange",
  "AstroRangePadding",
  "AstroReferenceFrame",
  "AstroStyling",
  "AstroZoomLevel",
  "Asymptotic",
  "AsymptoticDSolveValue",
  "AsymptoticEqual",
  "AsymptoticEquivalent",
  "AsymptoticExpectation",
  "AsymptoticGreater",
  "AsymptoticGreaterEqual",
  "AsymptoticIntegrate",
  "AsymptoticLess",
  "AsymptoticLessEqual",
  "AsymptoticOutputTracker",
  "AsymptoticProbability",
  "AsymptoticProduct",
  "AsymptoticRSolveValue",
  "AsymptoticSolve",
  "AsymptoticSum",
  "Asynchronous",
  "AsynchronousTaskObject",
  "AsynchronousTasks",
  "Atom",
  "AtomCoordinates",
  "AtomCount",
  "AtomDiagramCoordinates",
  "AtomLabels",
  "AtomLabelStyle",
  "AtomList",
  "AtomQ",
  "AttachCell",
  "AttachedCell",
  "AttentionLayer",
  "Attributes",
  "Audio",
  "AudioAmplify",
  "AudioAnnotate",
  "AudioAnnotationLookup",
  "AudioBlockMap",
  "AudioCapture",
  "AudioChannelAssignment",
  "AudioChannelCombine",
  "AudioChannelMix",
  "AudioChannels",
  "AudioChannelSeparate",
  "AudioData",
  "AudioDelay",
  "AudioDelete",
  "AudioDevice",
  "AudioDistance",
  "AudioEncoding",
  "AudioFade",
  "AudioFrequencyShift",
  "AudioGenerator",
  "AudioIdentify",
  "AudioInputDevice",
  "AudioInsert",
  "AudioInstanceQ",
  "AudioIntervals",
  "AudioJoin",
  "AudioLabel",
  "AudioLength",
  "AudioLocalMeasurements",
  "AudioLooping",
  "AudioLoudness",
  "AudioMeasurements",
  "AudioNormalize",
  "AudioOutputDevice",
  "AudioOverlay",
  "AudioPad",
  "AudioPan",
  "AudioPartition",
  "AudioPause",
  "AudioPitchShift",
  "AudioPlay",
  "AudioPlot",
  "AudioQ",
  "AudioRecord",
  "AudioReplace",
  "AudioResample",
  "AudioReverb",
  "AudioReverse",
  "AudioSampleRate",
  "AudioSpectralMap",
  "AudioSpectralTransformation",
  "AudioSplit",
  "AudioStop",
  "AudioStream",
  "AudioStreams",
  "AudioTimeStretch",
  "AudioTrackApply",
  "AudioTrackSelection",
  "AudioTrim",
  "AudioType",
  "AugmentedPolyhedron",
  "AugmentedSymmetricPolynomial",
  "Authenticate",
  "Authentication",
  "AuthenticationDialog",
  "AutoAction",
  "Autocomplete",
  "AutocompletionFunction",
  "AutoCopy",
  "AutocorrelationTest",
  "AutoDelete",
  "AutoEvaluateEvents",
  "AutoGeneratedPackage",
  "AutoIndent",
  "AutoIndentSpacings",
  "AutoItalicWords",
  "AutoloadPath",
  "AutoMatch",
  "Automatic",
  "AutomaticImageSize",
  "AutoMultiplicationSymbol",
  "AutoNumberFormatting",
  "AutoOpenNotebooks",
  "AutoOpenPalettes",
  "AutoOperatorRenderings",
  "AutoQuoteCharacters",
  "AutoRefreshed",
  "AutoRemove",
  "AutorunSequencing",
  "AutoScaling",
  "AutoScroll",
  "AutoSpacing",
  "AutoStyleOptions",
  "AutoStyleWords",
  "AutoSubmitting",
  "Axes",
  "AxesEdge",
  "AxesLabel",
  "AxesOrigin",
  "AxesStyle",
  "AxiomaticTheory",
  "Axis",
  "Axis3DBox",
  "Axis3DBoxOptions",
  "AxisBox",
  "AxisBoxOptions",
  "AxisLabel",
  "AxisObject",
  "AxisStyle",
  "BabyMonsterGroupB",
  "Back",
  "BackFaceColor",
  "BackFaceGlowColor",
  "BackFaceOpacity",
  "BackFaceSpecularColor",
  "BackFaceSpecularExponent",
  "BackFaceSurfaceAppearance",
  "BackFaceTexture",
  "Background",
  "BackgroundAppearance",
  "BackgroundTasksSettings",
  "Backslash",
  "Backsubstitution",
  "Backward",
  "Ball",
  "Band",
  "BandpassFilter",
  "BandstopFilter",
  "BarabasiAlbertGraphDistribution",
  "BarChart",
  "BarChart3D",
  "BarcodeImage",
  "BarcodeRecognize",
  "BaringhausHenzeTest",
  "BarLegend",
  "BarlowProschanImportance",
  "BarnesG",
  "BarOrigin",
  "BarSpacing",
  "BartlettHannWindow",
  "BartlettWindow",
  "BaseDecode",
  "BaseEncode",
  "BaseForm",
  "Baseline",
  "BaselinePosition",
  "BaseStyle",
  "BasicRecurrentLayer",
  "BatchNormalizationLayer",
  "BatchSize",
  "BatesDistribution",
  "BattleLemarieWavelet",
  "BayesianMaximization",
  "BayesianMaximizationObject",
  "BayesianMinimization",
  "BayesianMinimizationObject",
  "Because",
  "BeckmannDistribution",
  "Beep",
  "Before",
  "Begin",
  "BeginDialogPacket",
  "BeginPackage",
  "BellB",
  "BellY",
  "Below",
  "BenfordDistribution",
  "BeniniDistribution",
  "BenktanderGibratDistribution",
  "BenktanderWeibullDistribution",
  "BernoulliB",
  "BernoulliDistribution",
  "BernoulliGraphDistribution",
  "BernoulliProcess",
  "BernsteinBasis",
  "BesagL",
  "BesselFilterModel",
  "BesselI",
  "BesselJ",
  "BesselJZero",
  "BesselK",
  "BesselY",
  "BesselYZero",
  "Beta",
  "BetaBinomialDistribution",
  "BetaDistribution",
  "BetaNegativeBinomialDistribution",
  "BetaPrimeDistribution",
  "BetaRegularized",
  "Between",
  "BetweennessCentrality",
  "Beveled",
  "BeveledPolyhedron",
  "BezierCurve",
  "BezierCurve3DBox",
  "BezierCurve3DBoxOptions",
  "BezierCurveBox",
  "BezierCurveBoxOptions",
  "BezierFunction",
  "BilateralFilter",
  "BilateralLaplaceTransform",
  "BilateralZTransform",
  "Binarize",
  "BinaryDeserialize",
  "BinaryDistance",
  "BinaryFormat",
  "BinaryImageQ",
  "BinaryRead",
  "BinaryReadList",
  "BinarySerialize",
  "BinaryWrite",
  "BinCounts",
  "BinLists",
  "BinnedVariogramList",
  "Binomial",
  "BinomialDistribution",
  "BinomialPointProcess",
  "BinomialProcess",
  "BinormalDistribution",
  "BiorthogonalSplineWavelet",
  "BioSequence",
  "BioSequenceBackTranslateList",
  "BioSequenceComplement",
  "BioSequenceInstances",
  "BioSequenceModify",
  "BioSequencePlot",
  "BioSequenceQ",
  "BioSequenceReverseComplement",
  "BioSequenceTranscribe",
  "BioSequenceTranslate",
  "BipartiteGraphQ",
  "BiquadraticFilterModel",
  "BirnbaumImportance",
  "BirnbaumSaundersDistribution",
  "BitAnd",
  "BitClear",
  "BitGet",
  "BitLength",
  "BitNot",
  "BitOr",
  "BitRate",
  "BitSet",
  "BitShiftLeft",
  "BitShiftRight",
  "BitXor",
  "BiweightLocation",
  "BiweightMidvariance",
  "Black",
  "BlackmanHarrisWindow",
  "BlackmanNuttallWindow",
  "BlackmanWindow",
  "Blank",
  "BlankForm",
  "BlankNullSequence",
  "BlankSequence",
  "Blend",
  "Block",
  "BlockchainAddressData",
  "BlockchainBase",
  "BlockchainBlockData",
  "BlockchainContractValue",
  "BlockchainData",
  "BlockchainGet",
  "BlockchainKeyEncode",
  "BlockchainPut",
  "BlockchainTokenData",
  "BlockchainTransaction",
  "BlockchainTransactionData",
  "BlockchainTransactionSign",
  "BlockchainTransactionSubmit",
  "BlockDiagonalMatrix",
  "BlockLowerTriangularMatrix",
  "BlockMap",
  "BlockRandom",
  "BlockUpperTriangularMatrix",
  "BlomqvistBeta",
  "BlomqvistBetaTest",
  "Blue",
  "Blur",
  "Blurring",
  "BodePlot",
  "BohmanWindow",
  "Bold",
  "Bond",
  "BondCount",
  "BondLabels",
  "BondLabelStyle",
  "BondList",
  "BondQ",
  "Bookmarks",
  "Boole",
  "BooleanConsecutiveFunction",
  "BooleanConvert",
  "BooleanCountingFunction",
  "BooleanFunction",
  "BooleanGraph",
  "BooleanMaxterms",
  "BooleanMinimize",
  "BooleanMinterms",
  "BooleanQ",
  "BooleanRegion",
  "Booleans",
  "BooleanStrings",
  "BooleanTable",
  "BooleanVariables",
  "BorderDimensions",
  "BorelTannerDistribution",
  "Bottom",
  "BottomHatTransform",
  "BoundaryDiscretizeGraphics",
  "BoundaryDiscretizeRegion",
  "BoundaryMesh",
  "BoundaryMeshRegion",
  "BoundaryMeshRegionQ",
  "BoundaryStyle",
  "BoundedRegionQ",
  "BoundingRegion",
  "Bounds",
  "Box",
  "BoxBaselineShift",
  "BoxData",
  "BoxDimensions",
  "Boxed",
  "Boxes",
  "BoxForm",
  "BoxFormFormatTypes",
  "BoxFrame",
  "BoxID",
  "BoxMargins",
  "BoxMatrix",
  "BoxObject",
  "BoxRatios",
  "BoxRotation",
  "BoxRotationPoint",
  "BoxStyle",
  "BoxWhiskerChart",
  "Bra",
  "BracketingBar",
  "BraKet",
  "BrayCurtisDistance",
  "BreadthFirstScan",
  "Break",
  "BridgeData",
  "BrightnessEqualize",
  "BroadcastStationData",
  "Brown",
  "BrownForsytheTest",
  "BrownianBridgeProcess",
  "BrowserCategory",
  "BSplineBasis",
  "BSplineCurve",
  "BSplineCurve3DBox",
  "BSplineCurve3DBoxOptions",
  "BSplineCurveBox",
  "BSplineCurveBoxOptions",
  "BSplineFunction",
  "BSplineSurface",
  "BSplineSurface3DBox",
  "BSplineSurface3DBoxOptions",
  "BubbleChart",
  "BubbleChart3D",
  "BubbleScale",
  "BubbleSizes",
  "BuckyballGraph",
  "BuildCompiledComponent",
  "BuildingData",
  "BulletGauge",
  "BusinessDayQ",
  "ButterflyGraph",
  "ButterworthFilterModel",
  "Button",
  "ButtonBar",
  "ButtonBox",
  "ButtonBoxOptions",
  "ButtonCell",
  "ButtonContents",
  "ButtonData",
  "ButtonEvaluator",
  "ButtonExpandable",
  "ButtonFrame",
  "ButtonFunction",
  "ButtonMargins",
  "ButtonMinHeight",
  "ButtonNote",
  "ButtonNotebook",
  "ButtonSource",
  "ButtonStyle",
  "ButtonStyleMenuListing",
  "Byte",
  "ByteArray",
  "ByteArrayFormat",
  "ByteArrayFormatQ",
  "ByteArrayQ",
  "ByteArrayToString",
  "ByteCount",
  "ByteOrdering",
  "C",
  "CachedValue",
  "CacheGraphics",
  "CachePersistence",
  "CalendarConvert",
  "CalendarData",
  "CalendarType",
  "Callout",
  "CalloutMarker",
  "CalloutStyle",
  "CallPacket",
  "CanberraDistance",
  "Cancel",
  "CancelButton",
  "CandlestickChart",
  "CanonicalGraph",
  "CanonicalizePolygon",
  "CanonicalizePolyhedron",
  "CanonicalizeRegion",
  "CanonicalName",
  "CanonicalWarpingCorrespondence",
  "CanonicalWarpingDistance",
  "CantorMesh",
  "CantorStaircase",
  "Canvas",
  "Cap",
  "CapForm",
  "CapitalDifferentialD",
  "Capitalize",
  "CapsuleShape",
  "CaptureRunning",
  "CaputoD",
  "CardinalBSplineBasis",
  "CarlemanLinearize",
  "CarlsonRC",
  "CarlsonRD",
  "CarlsonRE",
  "CarlsonRF",
  "CarlsonRG",
  "CarlsonRJ",
  "CarlsonRK",
  "CarlsonRM",
  "CarmichaelLambda",
  "CaseOrdering",
  "Cases",
  "CaseSensitive",
  "Cashflow",
  "Casoratian",
  "Cast",
  "Catalan",
  "CatalanNumber",
  "Catch",
  "CategoricalDistribution",
  "Catenate",
  "CatenateLayer",
  "CauchyDistribution",
  "CauchyMatrix",
  "CauchyPointProcess",
  "CauchyWindow",
  "CayleyGraph",
  "CDF",
  "CDFDeploy",
  "CDFInformation",
  "CDFWavelet",
  "Ceiling",
  "CelestialSystem",
  "Cell",
  "CellAutoOverwrite",
  "CellBaseline",
  "CellBoundingBox",
  "CellBracketOptions",
  "CellChangeTimes",
  "CellContents",
  "CellContext",
  "CellDingbat",
  "CellDingbatMargin",
  "CellDynamicExpression",
  "CellEditDuplicate",
  "CellElementsBoundingBox",
  "CellElementSpacings",
  "CellEpilog",
  "CellEvaluationDuplicate",
  "CellEvaluationFunction",
  "CellEvaluationLanguage",
  "CellEventActions",
  "CellFrame",
  "CellFrameColor",
  "CellFrameLabelMargins",
  "CellFrameLabels",
  "CellFrameMargins",
  "CellFrameStyle",
  "CellGroup",
  "CellGroupData",
  "CellGrouping",
  "CellGroupingRules",
  "CellHorizontalScrolling",
  "CellID",
  "CellInsertionPointCell",
  "CellLabel",
  "CellLabelAutoDelete",
  "CellLabelMargins",
  "CellLabelPositioning",
  "CellLabelStyle",
  "CellLabelTemplate",
  "CellMargins",
  "CellObject",
  "CellOpen",
  "CellPrint",
  "CellProlog",
  "Cells",
  "CellSize",
  "CellStyle",
  "CellTags",
  "CellTrayPosition",
  "CellTrayWidgets",
  "CellularAutomaton",
  "CensoredDistribution",
  "Censoring",
  "Center",
  "CenterArray",
  "CenterDot",
  "CenteredInterval",
  "CentralFeature",
  "CentralMoment",
  "CentralMomentGeneratingFunction",
  "Cepstrogram",
  "CepstrogramArray",
  "CepstrumArray",
  "CForm",
  "ChampernowneNumber",
  "ChangeOptions",
  "ChannelBase",
  "ChannelBrokerAction",
  "ChannelDatabin",
  "ChannelHistoryLength",
  "ChannelListen",
  "ChannelListener",
  "ChannelListeners",
  "ChannelListenerWait",
  "ChannelObject",
  "ChannelPreSendFunction",
  "ChannelReceiverFunction",
  "ChannelSend",
  "ChannelSubscribers",
  "ChanVeseBinarize",
  "Character",
  "CharacterCounts",
  "CharacterEncoding",
  "CharacterEncodingsPath",
  "CharacteristicFunction",
  "CharacteristicPolynomial",
  "CharacterName",
  "CharacterNormalize",
  "CharacterRange",
  "Characters",
  "ChartBaseStyle",
  "ChartElementData",
  "ChartElementDataFunction",
  "ChartElementFunction",
  "ChartElements",
  "ChartLabels",
  "ChartLayout",
  "ChartLegends",
  "ChartStyle",
  "Chebyshev1FilterModel",
  "Chebyshev2FilterModel",
  "ChebyshevDistance",
  "ChebyshevT",
  "ChebyshevU",
  "Check",
  "CheckAbort",
  "CheckAll",
  "CheckArguments",
  "Checkbox",
  "CheckboxBar",
  "CheckboxBox",
  "CheckboxBoxOptions",
  "ChemicalConvert",
  "ChemicalData",
  "ChemicalFormula",
  "ChemicalInstance",
  "ChemicalReaction",
  "ChessboardDistance",
  "ChiDistribution",
  "ChineseRemainder",
  "ChiSquareDistribution",
  "ChoiceButtons",
  "ChoiceDialog",
  "CholeskyDecomposition",
  "Chop",
  "ChromaticityPlot",
  "ChromaticityPlot3D",
  "ChromaticPolynomial",
  "Circle",
  "CircleBox",
  "CircleDot",
  "CircleMinus",
  "CirclePlus",
  "CirclePoints",
  "CircleThrough",
  "CircleTimes",
  "CirculantGraph",
  "CircularArcThrough",
  "CircularOrthogonalMatrixDistribution",
  "CircularQuaternionMatrixDistribution",
  "CircularRealMatrixDistribution",
  "CircularSymplecticMatrixDistribution",
  "CircularUnitaryMatrixDistribution",
  "Circumsphere",
  "CityData",
  "ClassifierFunction",
  "ClassifierInformation",
  "ClassifierMeasurements",
  "ClassifierMeasurementsObject",
  "Classify",
  "ClassPriors",
  "Clear",
  "ClearAll",
  "ClearAttributes",
  "ClearCookies",
  "ClearPermissions",
  "ClearSystemCache",
  "ClebschGordan",
  "ClickPane",
  "ClickToCopy",
  "ClickToCopyEnabled",
  "Clip",
  "ClipboardNotebook",
  "ClipFill",
  "ClippingStyle",
  "ClipPlanes",
  "ClipPlanesStyle",
  "ClipRange",
  "Clock",
  "ClockGauge",
  "ClockwiseContourIntegral",
  "Close",
  "Closed",
  "CloseKernels",
  "ClosenessCentrality",
  "Closing",
  "ClosingAutoSave",
  "ClosingEvent",
  "CloudAccountData",
  "CloudBase",
  "CloudConnect",
  "CloudConnections",
  "CloudDeploy",
  "CloudDirectory",
  "CloudDisconnect",
  "CloudEvaluate",
  "CloudExport",
  "CloudExpression",
  "CloudExpressions",
  "CloudFunction",
  "CloudGet",
  "CloudImport",
  "CloudLoggingData",
  "CloudObject",
  "CloudObjectInformation",
  "CloudObjectInformationData",
  "CloudObjectNameFormat",
  "CloudObjects",
  "CloudObjectURLType",
  "CloudPublish",
  "CloudPut",
  "CloudRenderingMethod",
  "CloudSave",
  "CloudShare",
  "CloudSubmit",
  "CloudSymbol",
  "CloudUnshare",
  "CloudUserID",
  "ClusterClassify",
  "ClusterDissimilarityFunction",
  "ClusteringComponents",
  "ClusteringMeasurements",
  "ClusteringTree",
  "CMYKColor",
  "Coarse",
  "CodeAssistOptions",
  "Coefficient",
  "CoefficientArrays",
  "CoefficientDomain",
  "CoefficientList",
  "CoefficientRules",
  "CoifletWavelet",
  "Collect",
  "CollinearPoints",
  "Colon",
  "ColonForm",
  "ColorBalance",
  "ColorCombine",
  "ColorConvert",
  "ColorCoverage",
  "ColorData",
  "ColorDataFunction",
  "ColorDetect",
  "ColorDistance",
  "ColorFunction",
  "ColorFunctionBinning",
  "ColorFunctionScaling",
  "Colorize",
  "ColorNegate",
  "ColorOutput",
  "ColorProfileData",
  "ColorQ",
  "ColorQuantize",
  "ColorReplace",
  "ColorRules",
  "ColorSelectorSettings",
  "ColorSeparate",
  "ColorSetter",
  "ColorSetterBox",
  "ColorSetterBoxOptions",
  "ColorSlider",
  "ColorsNear",
  "ColorSpace",
  "ColorToneMapping",
  "Column",
  "ColumnAlignments",
  "ColumnBackgrounds",
  "ColumnForm",
  "ColumnLines",
  "ColumnsEqual",
  "ColumnSpacings",
  "ColumnWidths",
  "CombinatorB",
  "CombinatorC",
  "CombinatorI",
  "CombinatorK",
  "CombinatorS",
  "CombinatorW",
  "CombinatorY",
  "CombinedEntityClass",
  "CombinerFunction",
  "CometData",
  "CommonDefaultFormatTypes",
  "Commonest",
  "CommonestFilter",
  "CommonName",
  "CommonUnits",
  "CommunityBoundaryStyle",
  "CommunityGraphPlot",
  "CommunityLabels",
  "CommunityRegionStyle",
  "CompanyData",
  "CompatibleUnitQ",
  "CompilationOptions",
  "CompilationTarget",
  "Compile",
  "Compiled",
  "CompiledCodeFunction",
  "CompiledComponent",
  "CompiledExpressionDeclaration",
  "CompiledFunction",
  "CompiledLayer",
  "CompilerCallback",
  "CompilerEnvironment",
  "CompilerEnvironmentAppend",
  "CompilerEnvironmentAppendTo",
  "CompilerEnvironmentObject",
  "CompilerOptions",
  "Complement",
  "ComplementedEntityClass",
  "CompleteGraph",
  "CompleteGraphQ",
  "CompleteIntegral",
  "CompleteKaryTree",
  "CompletionsListPacket",
  "Complex",
  "ComplexArrayPlot",
  "ComplexContourPlot",
  "Complexes",
  "ComplexExpand",
  "ComplexInfinity",
  "ComplexityFunction",
  "ComplexListPlot",
  "ComplexPlot",
  "ComplexPlot3D",
  "ComplexRegionPlot",
  "ComplexStreamPlot",
  "ComplexVectorPlot",
  "ComponentMeasurements",
  "ComponentwiseContextMenu",
  "Compose",
  "ComposeList",
  "ComposeSeries",
  "CompositeQ",
  "Composition",
  "CompoundElement",
  "CompoundExpression",
  "CompoundPoissonDistribution",
  "CompoundPoissonProcess",
  "CompoundRenewalProcess",
  "Compress",
  "CompressedData",
  "CompressionLevel",
  "ComputeUncertainty",
  "ConcaveHullMesh",
  "Condition",
  "ConditionalExpression",
  "Conditioned",
  "Cone",
  "ConeBox",
  "ConfidenceLevel",
  "ConfidenceRange",
  "ConfidenceTransform",
  "ConfigurationPath",
  "Confirm",
  "ConfirmAssert",
  "ConfirmBy",
  "ConfirmMatch",
  "ConfirmQuiet",
  "ConformationMethod",
  "ConformAudio",
  "ConformImages",
  "Congruent",
  "ConicGradientFilling",
  "ConicHullRegion",
  "ConicHullRegion3DBox",
  "ConicHullRegion3DBoxOptions",
  "ConicHullRegionBox",
  "ConicHullRegionBoxOptions",
  "ConicOptimization",
  "Conjugate",
  "ConjugateTranspose",
  "Conjunction",
  "Connect",
  "ConnectedComponents",
  "ConnectedGraphComponents",
  "ConnectedGraphQ",
  "ConnectedMeshComponents",
  "ConnectedMoleculeComponents",
  "ConnectedMoleculeQ",
  "ConnectionSettings",
  "ConnectLibraryCallbackFunction",
  "ConnectSystemModelComponents",
  "ConnectSystemModelController",
  "ConnesWindow",
  "ConoverTest",
  "ConservativeConvectionPDETerm",
  "ConsoleMessage",
  "Constant",
  "ConstantArray",
  "ConstantArrayLayer",
  "ConstantImage",
  "ConstantPlusLayer",
  "ConstantRegionQ",
  "Constants",
  "ConstantTimesLayer",
  "ConstellationData",
  "ConstrainedMax",
  "ConstrainedMin",
  "Construct",
  "Containing",
  "ContainsAll",
  "ContainsAny",
  "ContainsExactly",
  "ContainsNone",
  "ContainsOnly",
  "ContentDetectorFunction",
  "ContentFieldOptions",
  "ContentLocationFunction",
  "ContentObject",
  "ContentPadding",
  "ContentsBoundingBox",
  "ContentSelectable",
  "ContentSize",
  "Context",
  "ContextMenu",
  "Contexts",
  "ContextToFileName",
  "Continuation",
  "Continue",
  "ContinuedFraction",
  "ContinuedFractionK",
  "ContinuousAction",
  "ContinuousMarkovProcess",
  "ContinuousTask",
  "ContinuousTimeModelQ",
  "ContinuousWaveletData",
  "ContinuousWaveletTransform",
  "ContourDetect",
  "ContourGraphics",
  "ContourIntegral",
  "ContourLabels",
  "ContourLines",
  "ContourPlot",
  "ContourPlot3D",
  "Contours",
  "ContourShading",
  "ContourSmoothing",
  "ContourStyle",
  "ContraharmonicMean",
  "ContrastiveLossLayer",
  "Control",
  "ControlActive",
  "ControlAlignment",
  "ControlGroupContentsBox",
  "ControllabilityGramian",
  "ControllabilityMatrix",
  "ControllableDecomposition",
  "ControllableModelQ",
  "ControllerDuration",
  "ControllerInformation",
  "ControllerInformationData",
  "ControllerLinking",
  "ControllerManipulate",
  "ControllerMethod",
  "ControllerPath",
  "ControllerState",
  "ControlPlacement",
  "ControlsRendering",
  "ControlType",
  "ConvectionPDETerm",
  "Convergents",
  "ConversionOptions",
  "ConversionRules",
  "ConvertToPostScript",
  "ConvertToPostScriptPacket",
  "ConvexHullMesh",
  "ConvexHullRegion",
  "ConvexOptimization",
  "ConvexPolygonQ",
  "ConvexPolyhedronQ",
  "ConvexRegionQ",
  "ConvolutionLayer",
  "Convolve",
  "ConwayGroupCo1",
  "ConwayGroupCo2",
  "ConwayGroupCo3",
  "CookieFunction",
  "Cookies",
  "CoordinateBoundingBox",
  "CoordinateBoundingBoxArray",
  "CoordinateBounds",
  "CoordinateBoundsArray",
  "CoordinateChartData",
  "CoordinatesToolOptions",
  "CoordinateTransform",
  "CoordinateTransformData",
  "CoplanarPoints",
  "CoprimeQ",
  "Coproduct",
  "CopulaDistribution",
  "Copyable",
  "CopyDatabin",
  "CopyDirectory",
  "CopyFile",
  "CopyFunction",
  "CopyTag",
  "CopyToClipboard",
  "CoreNilpotentDecomposition",
  "CornerFilter",
  "CornerNeighbors",
  "Correlation",
  "CorrelationDistance",
  "CorrelationFunction",
  "CorrelationTest",
  "Cos",
  "Cosh",
  "CoshIntegral",
  "CosineDistance",
  "CosineWindow",
  "CosIntegral",
  "Cot",
  "Coth",
  "CoulombF",
  "CoulombG",
  "CoulombH1",
  "CoulombH2",
  "Count",
  "CountDistinct",
  "CountDistinctBy",
  "CounterAssignments",
  "CounterBox",
  "CounterBoxOptions",
  "CounterClockwiseContourIntegral",
  "CounterEvaluator",
  "CounterFunction",
  "CounterIncrements",
  "CounterStyle",
  "CounterStyleMenuListing",
  "CountRoots",
  "CountryData",
  "Counts",
  "CountsBy",
  "Covariance",
  "CovarianceEstimatorFunction",
  "CovarianceFunction",
  "CoxianDistribution",
  "CoxIngersollRossProcess",
  "CoxModel",
  "CoxModelFit",
  "CramerVonMisesTest",
  "CreateArchive",
  "CreateCellID",
  "CreateChannel",
  "CreateCloudExpression",
  "CreateCompilerEnvironment",
  "CreateDatabin",
  "CreateDataStructure",
  "CreateDataSystemModel",
  "CreateDialog",
  "CreateDirectory",
  "CreateDocument",
  "CreateFile",
  "CreateIntermediateDirectories",
  "CreateLicenseEntitlement",
  "CreateManagedLibraryExpression",
  "CreateNotebook",
  "CreatePacletArchive",
  "CreatePalette",
  "CreatePermissionsGroup",
  "CreateScheduledTask",
  "CreateSearchIndex",
  "CreateSystemModel",
  "CreateTemporary",
  "CreateTypeInstance",
  "CreateUUID",
  "CreateWindow",
  "CriterionFunction",
  "CriticalityFailureImportance",
  "CriticalitySuccessImportance",
  "CriticalSection",
  "Cross",
  "CrossEntropyLossLayer",
  "CrossingCount",
  "CrossingDetect",
  "CrossingPolygon",
  "CrossMatrix",
  "Csc",
  "Csch",
  "CSGRegion",
  "CSGRegionQ",
  "CSGRegionTree",
  "CTCLossLayer",
  "Cube",
  "CubeRoot",
  "Cubics",
  "Cuboid",
  "CuboidBox",
  "CuboidBoxOptions",
  "Cumulant",
  "CumulantGeneratingFunction",
  "CumulativeFeatureImpactPlot",
  "Cup",
  "CupCap",
  "Curl",
  "CurlyDoubleQuote",
  "CurlyQuote",
  "CurrencyConvert",
  "CurrentDate",
  "CurrentImage",
  "CurrentNotebookImage",
  "CurrentScreenImage",
  "CurrentValue",
  "Curry",
  "CurryApplied",
  "CurvatureFlowFilter",
  "CurveClosed",
  "Cyan",
  "CycleGraph",
  "CycleIndexPolynomial",
  "Cycles",
  "CyclicGroup",
  "Cyclotomic",
  "Cylinder",
  "CylinderBox",
  "CylinderBoxOptions",
  "CylindricalDecomposition",
  "CylindricalDecompositionFunction",
  "D",
  "DagumDistribution",
  "DamData",
  "DamerauLevenshteinDistance",
  "DampingFactor",
  "Darker",
  "Dashed",
  "Dashing",
  "DatabaseConnect",
  "DatabaseDisconnect",
  "DatabaseReference",
  "Databin",
  "DatabinAdd",
  "DatabinRemove",
  "Databins",
  "DatabinSubmit",
  "DatabinUpload",
  "DataCompression",
  "DataDistribution",
  "DataRange",
  "DataReversed",
  "Dataset",
  "DatasetDisplayPanel",
  "DatasetTheme",
  "DataStructure",
  "DataStructureQ",
  "Date",
  "DateBounds",
  "Dated",
  "DateDelimiters",
  "DateDifference",
  "DatedUnit",
  "DateFormat",
  "DateFunction",
  "DateGranularity",
  "DateHistogram",
  "DateInterval",
  "DateList",
  "DateListLogPlot",
  "DateListPlot",
  "DateListStepPlot",
  "DateObject",
  "DateObjectQ",
  "DateOverlapsQ",
  "DatePattern",
  "DatePlus",
  "DateRange",
  "DateReduction",
  "DateScale",
  "DateSelect",
  "DateString",
  "DateTicksFormat",
  "DateValue",
  "DateWithinQ",
  "DaubechiesWavelet",
  "DavisDistribution",
  "DawsonF",
  "DayCount",
  "DayCountConvention",
  "DayHemisphere",
  "DaylightQ",
  "DayMatchQ",
  "DayName",
  "DayNightTerminator",
  "DayPlus",
  "DayRange",
  "DayRound",
  "DeBruijnGraph",
  "DeBruijnSequence",
  "Debug",
  "DebugTag",
  "Decapitalize",
  "Decimal",
  "DecimalForm",
  "DeclareCompiledComponent",
  "DeclareKnownSymbols",
  "DeclarePackage",
  "Decompose",
  "DeconvolutionLayer",
  "Decrement",
  "Decrypt",
  "DecryptFile",
  "DedekindEta",
  "DeepSpaceProbeData",
  "Default",
  "Default2DTool",
  "Default3DTool",
  "DefaultAttachedCellStyle",
  "DefaultAxesStyle",
  "DefaultBaseStyle",
  "DefaultBoxStyle",
  "DefaultButton",
  "DefaultColor",
  "DefaultControlPlacement",
  "DefaultDockedCellStyle",
  "DefaultDuplicateCellStyle",
  "DefaultDuration",
  "DefaultElement",
  "DefaultFaceGridsStyle",
  "DefaultFieldHintStyle",
  "DefaultFont",
  "DefaultFontProperties",
  "DefaultFormatType",
  "DefaultFrameStyle",
  "DefaultFrameTicksStyle",
  "DefaultGridLinesStyle",
  "DefaultInlineFormatType",
  "DefaultInputFormatType",
  "DefaultLabelStyle",
  "DefaultMenuStyle",
  "DefaultNaturalLanguage",
  "DefaultNewCellStyle",
  "DefaultNewInlineCellStyle",
  "DefaultNotebook",
  "DefaultOptions",
  "DefaultOutputFormatType",
  "DefaultPrintPrecision",
  "DefaultStyle",
  "DefaultStyleDefinitions",
  "DefaultTextFormatType",
  "DefaultTextInlineFormatType",
  "DefaultTicksStyle",
  "DefaultTooltipStyle",
  "DefaultValue",
  "DefaultValues",
  "Defer",
  "DefineExternal",
  "DefineInputStreamMethod",
  "DefineOutputStreamMethod",
  "DefineResourceFunction",
  "Definition",
  "Degree",
  "DegreeCentrality",
  "DegreeGraphDistribution",
  "DegreeLexicographic",
  "DegreeReverseLexicographic",
  "DEigensystem",
  "DEigenvalues",
  "Deinitialization",
  "Del",
  "DelaunayMesh",
  "Delayed",
  "Deletable",
  "Delete",
  "DeleteAdjacentDuplicates",
  "DeleteAnomalies",
  "DeleteBorderComponents",
  "DeleteCases",
  "DeleteChannel",
  "DeleteCloudExpression",
  "DeleteContents",
  "DeleteDirectory",
  "DeleteDuplicates",
  "DeleteDuplicatesBy",
  "DeleteElements",
  "DeleteFile",
  "DeleteMissing",
  "DeleteObject",
  "DeletePermissionsKey",
  "DeleteSearchIndex",
  "DeleteSmallComponents",
  "DeleteStopwords",
  "DeleteWithContents",
  "DeletionWarning",
  "DelimitedArray",
  "DelimitedSequence",
  "Delimiter",
  "DelimiterAutoMatching",
  "DelimiterFlashTime",
  "DelimiterMatching",
  "Delimiters",
  "DeliveryFunction",
  "Dendrogram",
  "Denominator",
  "DensityGraphics",
  "DensityHistogram",
  "DensityPlot",
  "DensityPlot3D",
  "DependentVariables",
  "Deploy",
  "Deployed",
  "Depth",
  "DepthFirstScan",
  "Derivative",
  "DerivativeFilter",
  "DerivativePDETerm",
  "DerivedKey",
  "DescriptorStateSpace",
  "DesignMatrix",
  "DestroyAfterEvaluation",
  "Det",
  "DeviceClose",
  "DeviceConfigure",
  "DeviceExecute",
  "DeviceExecuteAsynchronous",
  "DeviceObject",
  "DeviceOpen",
  "DeviceOpenQ",
  "DeviceRead",
  "DeviceReadBuffer",
  "DeviceReadLatest",
  "DeviceReadList",
  "DeviceReadTimeSeries",
  "Devices",
  "DeviceStreams",
  "DeviceWrite",
  "DeviceWriteBuffer",
  "DGaussianWavelet",
  "DiacriticalPositioning",
  "Diagonal",
  "DiagonalizableMatrixQ",
  "DiagonalMatrix",
  "DiagonalMatrixQ",
  "Dialog",
  "DialogIndent",
  "DialogInput",
  "DialogLevel",
  "DialogNotebook",
  "DialogProlog",
  "DialogReturn",
  "DialogSymbols",
  "Diamond",
  "DiamondMatrix",
  "DiceDissimilarity",
  "DictionaryLookup",
  "DictionaryWordQ",
  "DifferenceDelta",
  "DifferenceOrder",
  "DifferenceQuotient",
  "DifferenceRoot",
  "DifferenceRootReduce",
  "Differences",
  "DifferentialD",
  "DifferentialRoot",
  "DifferentialRootReduce",
  "DifferentiatorFilter",
  "DiffusionPDETerm",
  "DiggleGatesPointProcess",
  "DiggleGrattonPointProcess",
  "DigitalSignature",
  "DigitBlock",
  "DigitBlockMinimum",
  "DigitCharacter",
  "DigitCount",
  "DigitQ",
  "DihedralAngle",
  "DihedralGroup",
  "Dilation",
  "DimensionalCombinations",
  "DimensionalMeshComponents",
  "DimensionReduce",
  "DimensionReducerFunction",
  "DimensionReduction",
  "Dimensions",
  "DiracComb",
  "DiracDelta",
  "DirectedEdge",
  "DirectedEdges",
  "DirectedGraph",
  "DirectedGraphQ",
  "DirectedInfinity",
  "Direction",
  "DirectionalLight",
  "Directive",
  "Directory",
  "DirectoryName",
  "DirectoryQ",
  "DirectoryStack",
  "DirichletBeta",
  "DirichletCharacter",
  "DirichletCondition",
  "DirichletConvolve",
  "DirichletDistribution",
  "DirichletEta",
  "DirichletL",
  "DirichletLambda",
  "DirichletTransform",
  "DirichletWindow",
  "DisableConsolePrintPacket",
  "DisableFormatting",
  "DiscreteAsymptotic",
  "DiscreteChirpZTransform",
  "DiscreteConvolve",
  "DiscreteDelta",
  "DiscreteHadamardTransform",
  "DiscreteIndicator",
  "DiscreteInputOutputModel",
  "DiscreteLimit",
  "DiscreteLQEstimatorGains",
  "DiscreteLQRegulatorGains",
  "DiscreteLyapunovSolve",
  "DiscreteMarkovProcess",
  "DiscreteMaxLimit",
  "DiscreteMinLimit",
  "DiscretePlot",
  "DiscretePlot3D",
  "DiscreteRatio",
  "DiscreteRiccatiSolve",
  "DiscreteShift",
  "DiscreteTimeModelQ",
  "DiscreteUniformDistribution",
  "DiscreteVariables",
  "DiscreteWaveletData",
  "DiscreteWaveletPacketTransform",
  "DiscreteWaveletTransform",
  "DiscretizeGraphics",
  "DiscretizeRegion",
  "Discriminant",
  "DisjointQ",
  "Disjunction",
  "Disk",
  "DiskBox",
  "DiskBoxOptions",
  "DiskMatrix",
  "DiskSegment",
  "Dispatch",
  "DispatchQ",
  "DispersionEstimatorFunction",
  "Display",
  "DisplayAllSteps",
  "DisplayEndPacket",
  "DisplayForm",
  "DisplayFunction",
  "DisplayPacket",
  "DisplayRules",
  "DisplayString",
  "DisplayTemporary",
  "DisplayWith",
  "DisplayWithRef",
  "DisplayWithVariable",
  "DistanceFunction",
  "DistanceMatrix",
  "DistanceTransform",
  "Distribute",
  "Distributed",
  "DistributedContexts",
  "DistributeDefinitions",
  "DistributionChart",
  "DistributionDomain",
  "DistributionFitTest",
  "DistributionParameterAssumptions",
  "DistributionParameterQ",
  "Dithering",
  "Div",
  "Divergence",
  "Divide",
  "DivideBy",
  "Dividers",
  "DivideSides",
  "Divisible",
  "Divisors",
  "DivisorSigma",
  "DivisorSum",
  "DMSList",
  "DMSString",
  "Do",
  "DockedCell",
  "DockedCells",
  "DocumentGenerator",
  "DocumentGeneratorInformation",
  "DocumentGeneratorInformationData",
  "DocumentGenerators",
  "DocumentNotebook",
  "DocumentWeightingRules",
  "Dodecahedron",
  "DomainRegistrationInformation",
  "DominantColors",
  "DominatorTreeGraph",
  "DominatorVertexList",
  "DOSTextFormat",
  "Dot",
  "DotDashed",
  "DotEqual",
  "DotLayer",
  "DotPlusLayer",
  "Dotted",
  "DoubleBracketingBar",
  "DoubleContourIntegral",
  "DoubleDownArrow",
  "DoubleLeftArrow",
  "DoubleLeftRightArrow",
  "DoubleLeftTee",
  "DoubleLongLeftArrow",
  "DoubleLongLeftRightArrow",
  "DoubleLongRightArrow",
  "DoubleRightArrow",
  "DoubleRightTee",
  "DoubleUpArrow",
  "DoubleUpDownArrow",
  "DoubleVerticalBar",
  "DoublyInfinite",
  "Down",
  "DownArrow",
  "DownArrowBar",
  "DownArrowUpArrow",
  "DownLeftRightVector",
  "DownLeftTeeVector",
  "DownLeftVector",
  "DownLeftVectorBar",
  "DownRightTeeVector",
  "DownRightVector",
  "DownRightVectorBar",
  "Downsample",
  "DownTee",
  "DownTeeArrow",
  "DownValues",
  "DownValuesFunction",
  "DragAndDrop",
  "DrawBackFaces",
  "DrawEdges",
  "DrawFrontFaces",
  "DrawHighlighted",
  "DrazinInverse",
  "Drop",
  "DropoutLayer",
  "DropShadowing",
  "DSolve",
  "DSolveChangeVariables",
  "DSolveValue",
  "Dt",
  "DualLinearProgramming",
  "DualPlanarGraph",
  "DualPolyhedron",
  "DualSystemsModel",
  "DumpGet",
  "DumpSave",
  "DuplicateFreeQ",
  "Duration",
  "Dynamic",
  "DynamicBox",
  "DynamicBoxOptions",
  "DynamicEvaluationTimeout",
  "DynamicGeoGraphics",
  "DynamicImage",
  "DynamicLocation",
  "DynamicModule",
  "DynamicModuleBox",
  "DynamicModuleBoxOptions",
  "DynamicModuleParent",
  "DynamicModuleValues",
  "DynamicName",
  "DynamicNamespace",
  "DynamicReference",
  "DynamicSetting",
  "DynamicUpdating",
  "DynamicWrapper",
  "DynamicWrapperBox",
  "DynamicWrapperBoxOptions",
  "E",
  "EarthImpactData",
  "EarthquakeData",
  "EccentricityCentrality",
  "Echo",
  "EchoEvaluation",
  "EchoFunction",
  "EchoLabel",
  "EchoTiming",
  "EclipseType",
  "EdgeAdd",
  "EdgeBetweennessCentrality",
  "EdgeCapacity",
  "EdgeCapForm",
  "EdgeChromaticNumber",
  "EdgeColor",
  "EdgeConnectivity",
  "EdgeContract",
  "EdgeCost",
  "EdgeCount",
  "EdgeCoverQ",
  "EdgeCycleMatrix",
  "EdgeDashing",
  "EdgeDelete",
  "EdgeDetect",
  "EdgeForm",
  "EdgeIndex",
  "EdgeJoinForm",
  "EdgeLabeling",
  "EdgeLabels",
  "EdgeLabelStyle",
  "EdgeList",
  "EdgeOpacity",
  "EdgeQ",
  "EdgeRenderingFunction",
  "EdgeRules",
  "EdgeShapeFunction",
  "EdgeStyle",
  "EdgeTaggedGraph",
  "EdgeTaggedGraphQ",
  "EdgeTags",
  "EdgeThickness",
  "EdgeTransitiveGraphQ",
  "EdgeValueRange",
  "EdgeValueSizes",
  "EdgeWeight",
  "EdgeWeightedGraphQ",
  "Editable",
  "EditButtonSettings",
  "EditCellTagsSettings",
  "EditDistance",
  "EffectiveInterest",
  "Eigensystem",
  "Eigenvalues",
  "EigenvectorCentrality",
  "Eigenvectors",
  "Element",
  "ElementData",
  "ElementwiseLayer",
  "ElidedForms",
  "Eliminate",
  "EliminationOrder",
  "Ellipsoid",
  "EllipticE",
  "EllipticExp",
  "EllipticExpPrime",
  "EllipticF",
  "EllipticFilterModel",
  "EllipticK",
  "EllipticLog",
  "EllipticNomeQ",
  "EllipticPi",
  "EllipticReducedHalfPeriods",
  "EllipticTheta",
  "EllipticThetaPrime",
  "EmbedCode",
  "EmbeddedHTML",
  "EmbeddedService",
  "EmbeddedSQLEntityClass",
  "EmbeddedSQLExpression",
  "EmbeddingLayer",
  "EmbeddingObject",
  "EmitSound",
  "EmphasizeSyntaxErrors",
  "EmpiricalDistribution",
  "Empty",
  "EmptyGraphQ",
  "EmptyRegion",
  "EmptySpaceF",
  "EnableConsolePrintPacket",
  "Enabled",
  "Enclose",
  "Encode",
  "Encrypt",
  "EncryptedObject",
  "EncryptFile",
  "End",
  "EndAdd",
  "EndDialogPacket",
  "EndOfBuffer",
  "EndOfFile",
  "EndOfLine",
  "EndOfString",
  "EndPackage",
  "EngineEnvironment",
  "EngineeringForm",
  "Enter",
  "EnterExpressionPacket",
  "EnterTextPacket",
  "Entity",
  "EntityClass",
  "EntityClassList",
  "EntityCopies",
  "EntityFunction",
  "EntityGroup",
  "EntityInstance",
  "EntityList",
  "EntityPrefetch",
  "EntityProperties",
  "EntityProperty",
  "EntityPropertyClass",
  "EntityRegister",
  "EntityStore",
  "EntityStores",
  "EntityTypeName",
  "EntityUnregister",
  "EntityValue",
  "Entropy",
  "EntropyFilter",
  "Environment",
  "Epilog",
  "EpilogFunction",
  "Equal",
  "EqualColumns",
  "EqualRows",
  "EqualTilde",
  "EqualTo",
  "EquatedTo",
  "Equilibrium",
  "EquirippleFilterKernel",
  "Equivalent",
  "Erf",
  "Erfc",
  "Erfi",
  "ErlangB",
  "ErlangC",
  "ErlangDistribution",
  "Erosion",
  "ErrorBox",
  "ErrorBoxOptions",
  "ErrorNorm",
  "ErrorPacket",
  "ErrorsDialogSettings",
  "EscapeRadius",
  "EstimatedBackground",
  "EstimatedDistribution",
  "EstimatedPointNormals",
  "EstimatedPointProcess",
  "EstimatedProcess",
  "EstimatedVariogramModel",
  "EstimatorGains",
  "EstimatorRegulator",
  "EuclideanDistance",
  "EulerAngles",
  "EulerCharacteristic",
  "EulerE",
  "EulerGamma",
  "EulerianGraphQ",
  "EulerMatrix",
  "EulerPhi",
  "Evaluatable",
  "Evaluate",
  "Evaluated",
  "EvaluatePacket",
  "EvaluateScheduledTask",
  "EvaluationBox",
  "EvaluationCell",
  "EvaluationCompletionAction",
  "EvaluationData",
  "EvaluationElements",
  "EvaluationEnvironment",
  "EvaluationMode",
  "EvaluationMonitor",
  "EvaluationNotebook",
  "EvaluationObject",
  "EvaluationOrder",
  "EvaluationPrivileges",
  "EvaluationRateLimit",
  "Evaluator",
  "EvaluatorNames",
  "EvenQ",
  "EventData",
  "EventEvaluator",
  "EventHandler",
  "EventHandlerTag",
  "EventLabels",
  "EventSeries",
  "ExactBlackmanWindow",
  "ExactNumberQ",
  "ExactRootIsolation",
  "ExampleData",
  "Except",
  "ExcludedContexts",
  "ExcludedForms",
  "ExcludedLines",
  "ExcludedPhysicalQuantities",
  "ExcludePods",
  "Exclusions",
  "ExclusionsStyle",
  "Exists",
  "Exit",
  "ExitDialog",
  "ExoplanetData",
  "Exp",
  "Expand",
  "ExpandAll",
  "ExpandDenominator",
  "ExpandFileName",
  "ExpandNumerator",
  "Expectation",
  "ExpectationE",
  "ExpectedValue",
  "ExpGammaDistribution",
  "ExpIntegralE",
  "ExpIntegralEi",
  "ExpirationDate",
  "Exponent",
  "ExponentFunction",
  "ExponentialDistribution",
  "ExponentialFamily",
  "ExponentialGeneratingFunction",
  "ExponentialMovingAverage",
  "ExponentialPowerDistribution",
  "ExponentPosition",
  "ExponentStep",
  "Export",
  "ExportAutoReplacements",
  "ExportByteArray",
  "ExportForm",
  "ExportPacket",
  "ExportString",
  "Expression",
  "ExpressionCell",
  "ExpressionGraph",
  "ExpressionPacket",
  "ExpressionTree",
  "ExpressionUUID",
  "ExpToTrig",
  "ExtendedEntityClass",
  "ExtendedGCD",
  "Extension",
  "ExtentElementFunction",
  "ExtentMarkers",
  "ExtentSize",
  "ExternalBundle",
  "ExternalCall",
  "ExternalDataCharacterEncoding",
  "ExternalEvaluate",
  "ExternalFunction",
  "ExternalFunctionName",
  "ExternalIdentifier",
  "ExternalObject",
  "ExternalOptions",
  "ExternalSessionObject",
  "ExternalSessions",
  "ExternalStorageBase",
  "ExternalStorageDownload",
  "ExternalStorageGet",
  "ExternalStorageObject",
  "ExternalStoragePut",
  "ExternalStorageUpload",
  "ExternalTypeSignature",
  "ExternalValue",
  "Extract",
  "ExtractArchive",
  "ExtractLayer",
  "ExtractPacletArchive",
  "ExtremeValueDistribution",
  "FaceAlign",
  "FaceForm",
  "FaceGrids",
  "FaceGridsStyle",
  "FaceRecognize",
  "FacialFeatures",
  "Factor",
  "FactorComplete",
  "Factorial",
  "Factorial2",
  "FactorialMoment",
  "FactorialMomentGeneratingFunction",
  "FactorialPower",
  "FactorInteger",
  "FactorList",
  "FactorSquareFree",
  "FactorSquareFreeList",
  "FactorTerms",
  "FactorTermsList",
  "Fail",
  "Failure",
  "FailureAction",
  "FailureDistribution",
  "FailureQ",
  "False",
  "FareySequence",
  "FARIMAProcess",
  "FeatureDistance",
  "FeatureExtract",
  "FeatureExtraction",
  "FeatureExtractor",
  "FeatureExtractorFunction",
  "FeatureImpactPlot",
  "FeatureNames",
  "FeatureNearest",
  "FeatureSpacePlot",
  "FeatureSpacePlot3D",
  "FeatureTypes",
  "FeatureValueDependencyPlot",
  "FeatureValueImpactPlot",
  "FEDisableConsolePrintPacket",
  "FeedbackLinearize",
  "FeedbackSector",
  "FeedbackSectorStyle",
  "FeedbackType",
  "FEEnableConsolePrintPacket",
  "FetalGrowthData",
  "Fibonacci",
  "Fibonorial",
  "FieldCompletionFunction",
  "FieldHint",
  "FieldHintStyle",
  "FieldMasked",
  "FieldSize",
  "File",
  "FileBaseName",
  "FileByteCount",
  "FileConvert",
  "FileDate",
  "FileExistsQ",
  "FileExtension",
  "FileFormat",
  "FileFormatProperties",
  "FileFormatQ",
  "FileHandler",
  "FileHash",
  "FileInformation",
  "FileName",
  "FileNameDepth",
  "FileNameDialogSettings",
  "FileNameDrop",
  "FileNameForms",
  "FileNameJoin",
  "FileNames",
  "FileNameSetter",
  "FileNameSplit",
  "FileNameTake",
  "FileNameToFormatList",
  "FilePrint",
  "FileSize",
  "FileSystemMap",
  "FileSystemScan",
  "FileSystemTree",
  "FileTemplate",
  "FileTemplateApply",
  "FileType",
  "FilledCurve",
  "FilledCurveBox",
  "FilledCurveBoxOptions",
  "FilledTorus",
  "FillForm",
  "Filling",
  "FillingStyle",
  "FillingTransform",
  "FilteredEntityClass",
  "FilterRules",
  "FinancialBond",
  "FinancialData",
  "FinancialDerivative",
  "FinancialIndicator",
  "Find",
  "FindAnomalies",
  "FindArgMax",
  "FindArgMin",
  "FindChannels",
  "FindClique",
  "FindClusters",
  "FindCookies",
  "FindCurvePath",
  "FindCycle",
  "FindDevices",
  "FindDistribution",
  "FindDistributionParameters",
  "FindDivisions",
  "FindEdgeColoring",
  "FindEdgeCover",
  "FindEdgeCut",
  "FindEdgeIndependentPaths",
  "FindEquationalProof",
  "FindEulerianCycle",
  "FindExternalEvaluators",
  "FindFaces",
  "FindFile",
  "FindFit",
  "FindFormula",
  "FindFundamentalCycles",
  "FindGeneratingFunction",
  "FindGeoLocation",
  "FindGeometricConjectures",
  "FindGeometricTransform",
  "FindGraphCommunities",
  "FindGraphIsomorphism",
  "FindGraphPartition",
  "FindHamiltonianCycle",
  "FindHamiltonianPath",
  "FindHiddenMarkovStates",
  "FindImageText",
  "FindIndependentEdgeSet",
  "FindIndependentVertexSet",
  "FindInstance",
  "FindIntegerNullVector",
  "FindIsomers",
  "FindIsomorphicSubgraph",
  "FindKClan",
  "FindKClique",
  "FindKClub",
  "FindKPlex",
  "FindLibrary",
  "FindLinearRecurrence",
  "FindList",
  "FindMatchingColor",
  "FindMaximum",
  "FindMaximumCut",
  "FindMaximumFlow",
  "FindMaxValue",
  "FindMeshDefects",
  "FindMinimum",
  "FindMinimumCostFlow",
  "FindMinimumCut",
  "FindMinValue",
  "FindMoleculeSubstructure",
  "FindPath",
  "FindPeaks",
  "FindPermutation",
  "FindPlanarColoring",
  "FindPointProcessParameters",
  "FindPostmanTour",
  "FindProcessParameters",
  "FindRegionTransform",
  "FindRepeat",
  "FindRoot",
  "FindSequenceFunction",
  "FindSettings",
  "FindShortestPath",
  "FindShortestTour",
  "FindSpanningTree",
  "FindSubgraphIsomorphism",
  "FindSystemModelEquilibrium",
  "FindTextualAnswer",
  "FindThreshold",
  "FindTransientRepeat",
  "FindVertexColoring",
  "FindVertexCover",
  "FindVertexCut",
  "FindVertexIndependentPaths",
  "Fine",
  "FinishDynamic",
  "FiniteAbelianGroupCount",
  "FiniteGroupCount",
  "FiniteGroupData",
  "First",
  "FirstCase",
  "FirstPassageTimeDistribution",
  "FirstPosition",
  "FischerGroupFi22",
  "FischerGroupFi23",
  "FischerGroupFi24Prime",
  "FisherHypergeometricDistribution",
  "FisherRatioTest",
  "FisherZDistribution",
  "Fit",
  "FitAll",
  "FitRegularization",
  "FittedModel",
  "FixedOrder",
  "FixedPoint",
  "FixedPointList",
  "FlashSelection",
  "Flat",
  "FlatShading",
  "Flatten",
  "FlattenAt",
  "FlattenLayer",
  "FlatTopWindow",
  "FlightData",
  "FlipView",
  "Floor",
  "FlowPolynomial",
  "Fold",
  "FoldList",
  "FoldPair",
  "FoldPairList",
  "FoldWhile",
  "FoldWhileList",
  "FollowRedirects",
  "Font",
  "FontColor",
  "FontFamily",
  "FontForm",
  "FontName",
  "FontOpacity",
  "FontPostScriptName",
  "FontProperties",
  "FontReencoding",
  "FontSize",
  "FontSlant",
  "FontSubstitutions",
  "FontTracking",
  "FontVariations",
  "FontWeight",
  "For",
  "ForAll",
  "ForAllType",
  "ForceVersionInstall",
  "Format",
  "FormatRules",
  "FormatType",
  "FormatTypeAutoConvert",
  "FormatValues",
  "FormBox",
  "FormBoxOptions",
  "FormControl",
  "FormFunction",
  "FormLayoutFunction",
  "FormObject",
  "FormPage",
  "FormProtectionMethod",
  "FormTheme",
  "FormulaData",
  "FormulaLookup",
  "FortranForm",
  "Forward",
  "ForwardBackward",
  "ForwardCloudCredentials",
  "Fourier",
  "FourierCoefficient",
  "FourierCosCoefficient",
  "FourierCosSeries",
  "FourierCosTransform",
  "FourierDCT",
  "FourierDCTFilter",
  "FourierDCTMatrix",
  "FourierDST",
  "FourierDSTMatrix",
  "FourierMatrix",
  "FourierParameters",
  "FourierSequenceTransform",
  "FourierSeries",
  "FourierSinCoefficient",
  "FourierSinSeries",
  "FourierSinTransform",
  "FourierTransform",
  "FourierTrigSeries",
  "FoxH",
  "FoxHReduce",
  "FractionalBrownianMotionProcess",
  "FractionalD",
  "FractionalGaussianNoiseProcess",
  "FractionalPart",
  "FractionBox",
  "FractionBoxOptions",
  "FractionLine",
  "Frame",
  "FrameBox",
  "FrameBoxOptions",
  "Framed",
  "FrameInset",
  "FrameLabel",
  "Frameless",
  "FrameListVideo",
  "FrameMargins",
  "FrameRate",
  "FrameStyle",
  "FrameTicks",
  "FrameTicksStyle",
  "FRatioDistribution",
  "FrechetDistribution",
  "FreeQ",
  "FrenetSerretSystem",
  "FrequencySamplingFilterKernel",
  "FresnelC",
  "FresnelF",
  "FresnelG",
  "FresnelS",
  "Friday",
  "FrobeniusNumber",
  "FrobeniusSolve",
  "FromAbsoluteTime",
  "FromCharacterCode",
  "FromCoefficientRules",
  "FromContinuedFraction",
  "FromDate",
  "FromDateString",
  "FromDigits",
  "FromDMS",
  "FromEntity",
  "FromJulianDate",
  "FromLetterNumber",
  "FromPolarCoordinates",
  "FromRawPointer",
  "FromRomanNumeral",
  "FromSphericalCoordinates",
  "FromUnixTime",
  "Front",
  "FrontEndDynamicExpression",
  "FrontEndEventActions",
  "FrontEndExecute",
  "FrontEndObject",
  "FrontEndResource",
  "FrontEndResourceString",
  "FrontEndStackSize",
  "FrontEndToken",
  "FrontEndTokenExecute",
  "FrontEndValueCache",
  "FrontEndVersion",
  "FrontFaceColor",
  "FrontFaceGlowColor",
  "FrontFaceOpacity",
  "FrontFaceSpecularColor",
  "FrontFaceSpecularExponent",
  "FrontFaceSurfaceAppearance",
  "FrontFaceTexture",
  "Full",
  "FullAxes",
  "FullDefinition",
  "FullForm",
  "FullGraphics",
  "FullInformationOutputRegulator",
  "FullOptions",
  "FullRegion",
  "FullSimplify",
  "Function",
  "FunctionAnalytic",
  "FunctionBijective",
  "FunctionCompile",
  "FunctionCompileExport",
  "FunctionCompileExportByteArray",
  "FunctionCompileExportLibrary",
  "FunctionCompileExportString",
  "FunctionContinuous",
  "FunctionConvexity",
  "FunctionDeclaration",
  "FunctionDiscontinuities",
  "FunctionDomain",
  "FunctionExpand",
  "FunctionInjective",
  "FunctionInterpolation",
  "FunctionLayer",
  "FunctionMeromorphic",
  "FunctionMonotonicity",
  "FunctionPeriod",
  "FunctionPoles",
  "FunctionRange",
  "FunctionSign",
  "FunctionSingularities",
  "FunctionSpace",
  "FunctionSurjective",
  "FussellVeselyImportance",
  "GaborFilter",
  "GaborMatrix",
  "GaborWavelet",
  "GainMargins",
  "GainPhaseMargins",
  "GalaxyData",
  "GalleryView",
  "Gamma",
  "GammaDistribution",
  "GammaRegularized",
  "GapPenalty",
  "GARCHProcess",
  "GatedRecurrentLayer",
  "Gather",
  "GatherBy",
  "GaugeFaceElementFunction",
  "GaugeFaceStyle",
  "GaugeFrameElementFunction",
  "GaugeFrameSize",
  "GaugeFrameStyle",
  "GaugeLabels",
  "GaugeMarkers",
  "GaugeStyle",
  "GaussianFilter",
  "GaussianIntegers",
  "GaussianMatrix",
  "GaussianOrthogonalMatrixDistribution",
  "GaussianSymplecticMatrixDistribution",
  "GaussianUnitaryMatrixDistribution",
  "GaussianWindow",
  "GCD",
  "GegenbauerC",
  "General",
  "GeneralizedLinearModelFit",
  "GenerateAsymmetricKeyPair",
  "GenerateConditions",
  "GeneratedAssetFormat",
  "GeneratedAssetLocation",
  "GeneratedCell",
  "GeneratedCellStyles",
  "GeneratedDocumentBinding",
  "GenerateDerivedKey",
  "GenerateDigitalSignature",
  "GenerateDocument",
  "GeneratedParameters",
  "GeneratedQuantityMagnitudes",
  "GenerateFileSignature",
  "GenerateHTTPResponse",
  "GenerateSecuredAuthenticationKey",
  "GenerateSymmetricKey",
  "GeneratingFunction",
  "GeneratorDescription",
  "GeneratorHistoryLength",
  "GeneratorOutputType",
  "Generic",
  "GenericCylindricalDecomposition",
  "GenomeData",
  "GenomeLookup",
  "GeoAntipode",
  "GeoArea",
  "GeoArraySize",
  "GeoBackground",
  "GeoBoundary",
  "GeoBoundingBox",
  "GeoBounds",
  "GeoBoundsRegion",
  "GeoBoundsRegionBoundary",
  "GeoBubbleChart",
  "GeoCenter",
  "GeoCircle",
  "GeoContourPlot",
  "GeoDensityPlot",
  "GeodesicClosing",
  "GeodesicDilation",
  "GeodesicErosion",
  "GeodesicOpening",
  "GeodesicPolyhedron",
  "GeoDestination",
  "GeodesyData",
  "GeoDirection",
  "GeoDisk",
  "GeoDisplacement",
  "GeoDistance",
  "GeoDistanceList",
  "GeoElevationData",
  "GeoEntities",
  "GeoGraphics",
  "GeoGraphPlot",
  "GeoGraphValuePlot",
  "GeogravityModelData",
  "GeoGridDirectionDifference",
  "GeoGridLines",
  "GeoGridLinesStyle",
  "GeoGridPosition",
  "GeoGridRange",
  "GeoGridRangePadding",
  "GeoGridUnitArea",
  "GeoGridUnitDistance",
  "GeoGridVector",
  "GeoGroup",
  "GeoHemisphere",
  "GeoHemisphereBoundary",
  "GeoHistogram",
  "GeoIdentify",
  "GeoImage",
  "GeoLabels",
  "GeoLength",
  "GeoListPlot",
  "GeoLocation",
  "GeologicalPeriodData",
  "GeomagneticModelData",
  "GeoMarker",
  "GeometricAssertion",
  "GeometricBrownianMotionProcess",
  "GeometricDistribution",
  "GeometricMean",
  "GeometricMeanFilter",
  "GeometricOptimization",
  "GeometricScene",
  "GeometricStep",
  "GeometricStylingRules",
  "GeometricTest",
  "GeometricTransformation",
  "GeometricTransformation3DBox",
  "GeometricTransformation3DBoxOptions",
  "GeometricTransformationBox",
  "GeometricTransformationBoxOptions",
  "GeoModel",
  "GeoNearest",
  "GeoOrientationData",
  "GeoPath",
  "GeoPolygon",
  "GeoPosition",
  "GeoPositionENU",
  "GeoPositionXYZ",
  "GeoProjection",
  "GeoProjectionData",
  "GeoRange",
  "GeoRangePadding",
  "GeoRegionValuePlot",
  "GeoResolution",
  "GeoScaleBar",
  "GeoServer",
  "GeoSmoothHistogram",
  "GeoStreamPlot",
  "GeoStyling",
  "GeoStylingImageFunction",
  "GeoVariant",
  "GeoVector",
  "GeoVectorENU",
  "GeoVectorPlot",
  "GeoVectorXYZ",
  "GeoVisibleRegion",
  "GeoVisibleRegionBoundary",
  "GeoWithinQ",
  "GeoZoomLevel",
  "GestureHandler",
  "GestureHandlerTag",
  "Get",
  "GetContext",
  "GetEnvironment",
  "GetFileName",
  "GetLinebreakInformationPacket",
  "GibbsPointProcess",
  "Glaisher",
  "GlobalClusteringCoefficient",
  "GlobalPreferences",
  "GlobalSession",
  "Glow",
  "GoldenAngle",
  "GoldenRatio",
  "GompertzMakehamDistribution",
  "GoochShading",
  "GoodmanKruskalGamma",
  "GoodmanKruskalGammaTest",
  "Goto",
  "GouraudShading",
  "Grad",
  "Gradient",
  "GradientFilter",
  "GradientFittedMesh",
  "GradientOrientationFilter",
  "GrammarApply",
  "GrammarRules",
  "GrammarToken",
  "Graph",
  "Graph3D",
  "GraphAssortativity",
  "GraphAutomorphismGroup",
  "GraphCenter",
  "GraphComplement",
  "GraphData",
  "GraphDensity",
  "GraphDiameter",
  "GraphDifference",
  "GraphDisjointUnion",
  "GraphDistance",
  "GraphDistanceMatrix",
  "GraphEmbedding",
  "GraphHighlight",
  "GraphHighlightStyle",
  "GraphHub",
  "Graphics",
  "Graphics3D",
  "Graphics3DBox",
  "Graphics3DBoxOptions",
  "GraphicsArray",
  "GraphicsBaseline",
  "GraphicsBox",
  "GraphicsBoxOptions",
  "GraphicsColor",
  "GraphicsColumn",
  "GraphicsComplex",
  "GraphicsComplex3DBox",
  "GraphicsComplex3DBoxOptions",
  "GraphicsComplexBox",
  "GraphicsComplexBoxOptions",
  "GraphicsContents",
  "GraphicsData",
  "GraphicsGrid",
  "GraphicsGridBox",
  "GraphicsGroup",
  "GraphicsGroup3DBox",
  "GraphicsGroup3DBoxOptions",
  "GraphicsGroupBox",
  "GraphicsGroupBoxOptions",
  "GraphicsGrouping",
  "GraphicsHighlightColor",
  "GraphicsRow",
  "GraphicsSpacing",
  "GraphicsStyle",
  "GraphIntersection",
  "GraphJoin",
  "GraphLayerLabels",
  "GraphLayers",
  "GraphLayerStyle",
  "GraphLayout",
  "GraphLinkEfficiency",
  "GraphPeriphery",
  "GraphPlot",
  "GraphPlot3D",
  "GraphPower",
  "GraphProduct",
  "GraphPropertyDistribution",
  "GraphQ",
  "GraphRadius",
  "GraphReciprocity",
  "GraphRoot",
  "GraphStyle",
  "GraphSum",
  "GraphTree",
  "GraphUnion",
  "Gray",
  "GrayLevel",
  "Greater",
  "GreaterEqual",
  "GreaterEqualLess",
  "GreaterEqualThan",
  "GreaterFullEqual",
  "GreaterGreater",
  "GreaterLess",
  "GreaterSlantEqual",
  "GreaterThan",
  "GreaterTilde",
  "GreekStyle",
  "Green",
  "GreenFunction",
  "Grid",
  "GridBaseline",
  "GridBox",
  "GridBoxAlignment",
  "GridBoxBackground",
  "GridBoxDividers",
  "GridBoxFrame",
  "GridBoxItemSize",
  "GridBoxItemStyle",
  "GridBoxOptions",
  "GridBoxSpacings",
  "GridCreationSettings",
  "GridDefaultElement",
  "GridElementStyleOptions",
  "GridFrame",
  "GridFrameMargins",
  "GridGraph",
  "GridLines",
  "GridLinesStyle",
  "GridVideo",
  "GroebnerBasis",
  "GroupActionBase",
  "GroupBy",
  "GroupCentralizer",
  "GroupElementFromWord",
  "GroupElementPosition",
  "GroupElementQ",
  "GroupElements",
  "GroupElementToWord",
  "GroupGenerators",
  "Groupings",
  "GroupMultiplicationTable",
  "GroupOpenerColor",
  "GroupOpenerInsideFrame",
  "GroupOrbits",
  "GroupOrder",
  "GroupPageBreakWithin",
  "GroupSetwiseStabilizer",
  "GroupStabilizer",
  "GroupStabilizerChain",
  "GroupTogetherGrouping",
  "GroupTogetherNestedGrouping",
  "GrowCutComponents",
  "Gudermannian",
  "GuidedFilter",
  "GumbelDistribution",
  "HaarWavelet",
  "HadamardMatrix",
  "HalfLine",
  "HalfNormalDistribution",
  "HalfPlane",
  "HalfSpace",
  "HalftoneShading",
  "HamiltonianGraphQ",
  "HammingDistance",
  "HammingWindow",
  "HandlerFunctions",
  "HandlerFunctionsKeys",
  "HankelH1",
  "HankelH2",
  "HankelMatrix",
  "HankelTransform",
  "HannPoissonWindow",
  "HannWindow",
  "HaradaNortonGroupHN",
  "HararyGraph",
  "HardcorePointProcess",
  "HarmonicMean",
  "HarmonicMeanFilter",
  "HarmonicNumber",
  "Hash",
  "HatchFilling",
  "HatchShading",
  "Haversine",
  "HazardFunction",
  "Head",
  "HeadCompose",
  "HeaderAlignment",
  "HeaderBackground",
  "HeaderDisplayFunction",
  "HeaderLines",
  "Headers",
  "HeaderSize",
  "HeaderStyle",
  "Heads",
  "HeatFluxValue",
  "HeatInsulationValue",
  "HeatOutflowValue",
  "HeatRadiationValue",
  "HeatSymmetryValue",
  "HeatTemperatureCondition",
  "HeatTransferPDEComponent",
  "HeatTransferValue",
  "HeavisideLambda",
  "HeavisidePi",
  "HeavisideTheta",
  "HeldGroupHe",
  "HeldPart",
  "HelmholtzPDEComponent",
  "HelpBrowserLookup",
  "HelpBrowserNotebook",
  "HelpBrowserSettings",
  "HelpViewerSettings",
  "Here",
  "HermiteDecomposition",
  "HermiteH",
  "Hermitian",
  "HermitianMatrixQ",
  "HessenbergDecomposition",
  "Hessian",
  "HeunB",
  "HeunBPrime",
  "HeunC",
  "HeunCPrime",
  "HeunD",
  "HeunDPrime",
  "HeunG",
  "HeunGPrime",
  "HeunT",
  "HeunTPrime",
  "HexadecimalCharacter",
  "Hexahedron",
  "HexahedronBox",
  "HexahedronBoxOptions",
  "HiddenItems",
  "HiddenMarkovProcess",
  "HiddenSurface",
  "Highlighted",
  "HighlightGraph",
  "HighlightImage",
  "HighlightMesh",
  "HighlightString",
  "HighpassFilter",
  "HigmanSimsGroupHS",
  "HilbertCurve",
  "HilbertFilter",
  "HilbertMatrix",
  "Histogram",
  "Histogram3D",
  "HistogramDistribution",
  "HistogramList",
  "HistogramPointDensity",
  "HistogramTransform",
  "HistogramTransformInterpolation",
  "HistoricalPeriodData",
  "HitMissTransform",
  "HITSCentrality",
  "HjorthDistribution",
  "HodgeDual",
  "HoeffdingD",
  "HoeffdingDTest",
  "Hold",
  "HoldAll",
  "HoldAllComplete",
  "HoldComplete",
  "HoldFirst",
  "HoldForm",
  "HoldPattern",
  "HoldRest",
  "HolidayCalendar",
  "HomeDirectory",
  "HomePage",
  "Horizontal",
  "HorizontalForm",
  "HorizontalGauge",
  "HorizontalScrollPosition",
  "HornerForm",
  "HostLookup",
  "HotellingTSquareDistribution",
  "HoytDistribution",
  "HTMLSave",
  "HTTPErrorResponse",
  "HTTPRedirect",
  "HTTPRequest",
  "HTTPRequestData",
  "HTTPResponse",
  "Hue",
  "HumanGrowthData",
  "HumpDownHump",
  "HumpEqual",
  "HurwitzLerchPhi",
  "HurwitzZeta",
  "HyperbolicDistribution",
  "HypercubeGraph",
  "HyperexponentialDistribution",
  "Hyperfactorial",
  "Hypergeometric0F1",
  "Hypergeometric0F1Regularized",
  "Hypergeometric1F1",
  "Hypergeometric1F1Regularized",
  "Hypergeometric2F1",
  "Hypergeometric2F1Regularized",
  "HypergeometricDistribution",
  "HypergeometricPFQ",
  "HypergeometricPFQRegularized",
  "HypergeometricU",
  "Hyperlink",
  "HyperlinkAction",
  "HyperlinkCreationSettings",
  "Hyperplane",
  "Hyphenation",
  "HyphenationOptions",
  "HypoexponentialDistribution",
  "HypothesisTestData",
  "I",
  "IconData",
  "Iconize",
  "IconizedObject",
  "IconRules",
  "Icosahedron",
  "Identity",
  "IdentityMatrix",
  "If",
  "IfCompiled",
  "IgnoreCase",
  "IgnoreDiacritics",
  "IgnoreIsotopes",
  "IgnorePunctuation",
  "IgnoreSpellCheck",
  "IgnoreStereochemistry",
  "IgnoringInactive",
  "Im",
  "Image",
  "Image3D",
  "Image3DProjection",
  "Image3DSlices",
  "ImageAccumulate",
  "ImageAdd",
  "ImageAdjust",
  "ImageAlign",
  "ImageApply",
  "ImageApplyIndexed",
  "ImageAspectRatio",
  "ImageAssemble",
  "ImageAugmentationLayer",
  "ImageBoundingBoxes",
  "ImageCache",
  "ImageCacheValid",
  "ImageCapture",
  "ImageCaptureFunction",
  "ImageCases",
  "ImageChannels",
  "ImageClip",
  "ImageCollage",
  "ImageColorSpace",
  "ImageCompose",
  "ImageContainsQ",
  "ImageContents",
  "ImageConvolve",
  "ImageCooccurrence",
  "ImageCorners",
  "ImageCorrelate",
  "ImageCorrespondingPoints",
  "ImageCrop",
  "ImageData",
  "ImageDeconvolve",
  "ImageDemosaic",
  "ImageDifference",
  "ImageDimensions",
  "ImageDisplacements",
  "ImageDistance",
  "ImageEditMode",
  "ImageEffect",
  "ImageExposureCombine",
  "ImageFeatureTrack",
  "ImageFileApply",
  "ImageFileFilter",
  "ImageFileScan",
  "ImageFilter",
  "ImageFocusCombine",
  "ImageForestingComponents",
  "ImageFormattingWidth",
  "ImageForwardTransformation",
  "ImageGraphics",
  "ImageHistogram",
  "ImageIdentify",
  "ImageInstanceQ",
  "ImageKeypoints",
  "ImageLabels",
  "ImageLegends",
  "ImageLevels",
  "ImageLines",
  "ImageMargins",
  "ImageMarker",
  "ImageMarkers",
  "ImageMeasurements",
  "ImageMesh",
  "ImageMultiply",
  "ImageOffset",
  "ImagePad",
  "ImagePadding",
  "ImagePartition",
  "ImagePeriodogram",
  "ImagePerspectiveTransformation",
  "ImagePosition",
  "ImagePreviewFunction",
  "ImagePyramid",
  "ImagePyramidApply",
  "ImageQ",
  "ImageRangeCache",
  "ImageRecolor",
  "ImageReflect",
  "ImageRegion",
  "ImageResize",
  "ImageResolution",
  "ImageRestyle",
  "ImageRotate",
  "ImageRotated",
  "ImageSaliencyFilter",
  "ImageScaled",
  "ImageScan",
  "ImageSize",
  "ImageSizeAction",
  "ImageSizeCache",
  "ImageSizeMultipliers",
  "ImageSizeRaw",
  "ImageStitch",
  "ImageSubtract",
  "ImageTake",
  "ImageTransformation",
  "ImageTrim",
  "ImageType",
  "ImageValue",
  "ImageValuePositions",
  "ImageVectorscopePlot",
  "ImageWaveformPlot",
  "ImagingDevice",
  "ImplicitD",
  "ImplicitRegion",
  "Implies",
  "Import",
  "ImportAutoReplacements",
  "ImportByteArray",
  "ImportedObject",
  "ImportOptions",
  "ImportString",
  "ImprovementImportance",
  "In",
  "Inactivate",
  "Inactive",
  "InactiveStyle",
  "IncidenceGraph",
  "IncidenceList",
  "IncidenceMatrix",
  "IncludeAromaticBonds",
  "IncludeConstantBasis",
  "IncludedContexts",
  "IncludeDefinitions",
  "IncludeDirectories",
  "IncludeFileExtension",
  "IncludeGeneratorTasks",
  "IncludeHydrogens",
  "IncludeInflections",
  "IncludeMetaInformation",
  "IncludePods",
  "IncludeQuantities",
  "IncludeRelatedTables",
  "IncludeSingularSolutions",
  "IncludeSingularTerm",
  "IncludeWindowTimes",
  "Increment",
  "IndefiniteMatrixQ",
  "Indent",
  "IndentingNewlineSpacings",
  "IndentMaxFraction",
  "IndependenceTest",
  "IndependentEdgeSetQ",
  "IndependentPhysicalQuantity",
  "IndependentUnit",
  "IndependentUnitDimension",
  "IndependentVertexSetQ",
  "Indeterminate",
  "IndeterminateThreshold",
  "IndexCreationOptions",
  "Indexed",
  "IndexEdgeTaggedGraph",
  "IndexGraph",
  "IndexTag",
  "Inequality",
  "InertEvaluate",
  "InertExpression",
  "InexactNumberQ",
  "InexactNumbers",
  "InfiniteFuture",
  "InfiniteLine",
  "InfiniteLineThrough",
  "InfinitePast",
  "InfinitePlane",
  "Infinity",
  "Infix",
  "InflationAdjust",
  "InflationMethod",
  "Information",
  "InformationData",
  "InformationDataGrid",
  "Inherited",
  "InheritScope",
  "InhomogeneousPoissonPointProcess",
  "InhomogeneousPoissonProcess",
  "InitialEvaluationHistory",
  "Initialization",
  "InitializationCell",
  "InitializationCellEvaluation",
  "InitializationCellWarning",
  "InitializationObject",
  "InitializationObjects",
  "InitializationValue",
  "Initialize",
  "InitialSeeding",
  "InlineCounterAssignments",
  "InlineCounterIncrements",
  "InlineRules",
  "Inner",
  "InnerPolygon",
  "InnerPolyhedron",
  "Inpaint",
  "Input",
  "InputAliases",
  "InputAssumptions",
  "InputAutoReplacements",
  "InputField",
  "InputFieldBox",
  "InputFieldBoxOptions",
  "InputForm",
  "InputGrouping",
  "InputNamePacket",
  "InputNotebook",
  "InputPacket",
  "InputPorts",
  "InputSettings",
  "InputStream",
  "InputString",
  "InputStringPacket",
  "InputToBoxFormPacket",
  "Insert",
  "InsertionFunction",
  "InsertionPointObject",
  "InsertLinebreaks",
  "InsertResults",
  "Inset",
  "Inset3DBox",
  "Inset3DBoxOptions",
  "InsetBox",
  "InsetBoxOptions",
  "Insphere",
  "Install",
  "InstallService",
  "InstanceNormalizationLayer",
  "InString",
  "Integer",
  "IntegerDigits",
  "IntegerExponent",
  "IntegerLength",
  "IntegerName",
  "IntegerPart",
  "IntegerPartitions",
  "IntegerQ",
  "IntegerReverse",
  "Integers",
  "IntegerString",
  "Integral",
  "Integrate",
  "IntegrateChangeVariables",
  "Interactive",
  "InteractiveTradingChart",
  "InterfaceSwitched",
  "Interlaced",
  "Interleaving",
  "InternallyBalancedDecomposition",
  "InterpolatingFunction",
  "InterpolatingPolynomial",
  "Interpolation",
  "InterpolationOrder",
  "InterpolationPoints",
  "InterpolationPrecision",
  "Interpretation",
  "InterpretationBox",
  "InterpretationBoxOptions",
  "InterpretationFunction",
  "Interpreter",
  "InterpretTemplate",
  "InterquartileRange",
  "Interrupt",
  "InterruptSettings",
  "IntersectedEntityClass",
  "IntersectingQ",
  "Intersection",
  "Interval",
  "IntervalIntersection",
  "IntervalMarkers",
  "IntervalMarkersStyle",
  "IntervalMemberQ",
  "IntervalSlider",
  "IntervalUnion",
  "Into",
  "Inverse",
  "InverseBetaRegularized",
  "InverseBilateralLaplaceTransform",
  "InverseBilateralZTransform",
  "InverseCDF",
  "InverseChiSquareDistribution",
  "InverseContinuousWaveletTransform",
  "InverseDistanceTransform",
  "InverseEllipticNomeQ",
  "InverseErf",
  "InverseErfc",
  "InverseFourier",
  "InverseFourierCosTransform",
  "InverseFourierSequenceTransform",
  "InverseFourierSinTransform",
  "InverseFourierTransform",
  "InverseFunction",
  "InverseFunctions",
  "InverseGammaDistribution",
  "InverseGammaRegularized",
  "InverseGaussianDistribution",
  "InverseGudermannian",
  "InverseHankelTransform",
  "InverseHaversine",
  "InverseImagePyramid",
  "InverseJacobiCD",
  "InverseJacobiCN",
  "InverseJacobiCS",
  "InverseJacobiDC",
  "InverseJacobiDN",
  "InverseJacobiDS",
  "InverseJacobiNC",
  "InverseJacobiND",
  "InverseJacobiNS",
  "InverseJacobiSC",
  "InverseJacobiSD",
  "InverseJacobiSN",
  "InverseLaplaceTransform",
  "InverseMellinTransform",
  "InversePermutation",
  "InverseRadon",
  "InverseRadonTransform",
  "InverseSeries",
  "InverseShortTimeFourier",
  "InverseSpectrogram",
  "InverseSurvivalFunction",
  "InverseTransformedRegion",
  "InverseWaveletTransform",
  "InverseWeierstrassP",
  "InverseWishartMatrixDistribution",
  "InverseZTransform",
  "Invisible",
  "InvisibleApplication",
  "InvisibleTimes",
  "IPAddress",
  "IrreduciblePolynomialQ",
  "IslandData",
  "IsolatingInterval",
  "IsomorphicGraphQ",
  "IsomorphicSubgraphQ",
  "IsotopeData",
  "Italic",
  "Item",
  "ItemAspectRatio",
  "ItemBox",
  "ItemBoxOptions",
  "ItemDisplayFunction",
  "ItemSize",
  "ItemStyle",
  "ItoProcess",
  "JaccardDissimilarity",
  "JacobiAmplitude",
  "Jacobian",
  "JacobiCD",
  "JacobiCN",
  "JacobiCS",
  "JacobiDC",
  "JacobiDN",
  "JacobiDS",
  "JacobiEpsilon",
  "JacobiNC",
  "JacobiND",
  "JacobiNS",
  "JacobiP",
  "JacobiSC",
  "JacobiSD",
  "JacobiSN",
  "JacobiSymbol",
  "JacobiZeta",
  "JacobiZN",
  "JankoGroupJ1",
  "JankoGroupJ2",
  "JankoGroupJ3",
  "JankoGroupJ4",
  "JarqueBeraALMTest",
  "JohnsonDistribution",
  "Join",
  "JoinAcross",
  "Joined",
  "JoinedCurve",
  "JoinedCurveBox",
  "JoinedCurveBoxOptions",
  "JoinForm",
  "JordanDecomposition",
  "JordanModelDecomposition",
  "JulianDate",
  "JuliaSetBoettcher",
  "JuliaSetIterationCount",
  "JuliaSetPlot",
  "JuliaSetPoints",
  "K",
  "KagiChart",
  "KaiserBesselWindow",
  "KaiserWindow",
  "KalmanEstimator",
  "KalmanFilter",
  "KarhunenLoeveDecomposition",
  "KaryTree",
  "KatzCentrality",
  "KCoreComponents",
  "KDistribution",
  "KEdgeConnectedComponents",
  "KEdgeConnectedGraphQ",
  "KeepExistingVersion",
  "KelvinBei",
  "KelvinBer",
  "KelvinKei",
  "KelvinKer",
  "KendallTau",
  "KendallTauTest",
  "KernelConfiguration",
  "KernelExecute",
  "KernelFunction",
  "KernelMixtureDistribution",
  "KernelObject",
  "Kernels",
  "Ket",
  "Key",
  "KeyCollisionFunction",
  "KeyComplement",
  "KeyDrop",
  "KeyDropFrom",
  "KeyExistsQ",
  "KeyFreeQ",
  "KeyIntersection",
  "KeyMap",
  "KeyMemberQ",
  "KeypointStrength",
  "Keys",
  "KeySelect",
  "KeySort",
  "KeySortBy",
  "KeyTake",
  "KeyUnion",
  "KeyValueMap",
  "KeyValuePattern",
  "Khinchin",
  "KillProcess",
  "KirchhoffGraph",
  "KirchhoffMatrix",
  "KleinInvariantJ",
  "KnapsackSolve",
  "KnightTourGraph",
  "KnotData",
  "KnownUnitQ",
  "KochCurve",
  "KolmogorovSmirnovTest",
  "KroneckerDelta",
  "KroneckerModelDecomposition",
  "KroneckerProduct",
  "KroneckerSymbol",
  "KuiperTest",
  "KumaraswamyDistribution",
  "Kurtosis",
  "KuwaharaFilter",
  "KVertexConnectedComponents",
  "KVertexConnectedGraphQ",
  "LABColor",
  "Label",
  "Labeled",
  "LabeledSlider",
  "LabelingFunction",
  "LabelingSize",
  "LabelStyle",
  "LabelVisibility",
  "LaguerreL",
  "LakeData",
  "LambdaComponents",
  "LambertW",
  "LameC",
  "LameCPrime",
  "LameEigenvalueA",
  "LameEigenvalueB",
  "LameS",
  "LameSPrime",
  "LaminaData",
  "LanczosWindow",
  "LandauDistribution",
  "Language",
  "LanguageCategory",
  "LanguageData",
  "LanguageIdentify",
  "LanguageOptions",
  "LaplaceDistribution",
  "LaplaceTransform",
  "Laplacian",
  "LaplacianFilter",
  "LaplacianGaussianFilter",
  "LaplacianPDETerm",
  "Large",
  "Larger",
  "Last",
  "Latitude",
  "LatitudeLongitude",
  "LatticeData",
  "LatticeReduce",
  "Launch",
  "LaunchKernels",
  "LayeredGraphPlot",
  "LayeredGraphPlot3D",
  "LayerSizeFunction",
  "LayoutInformation",
  "LCHColor",
  "LCM",
  "LeaderSize",
  "LeafCount",
  "LeapVariant",
  "LeapYearQ",
  "LearnDistribution",
  "LearnedDistribution",
  "LearningRate",
  "LearningRateMultipliers",
  "LeastSquares",
  "LeastSquaresFilterKernel",
  "Left",
  "LeftArrow",
  "LeftArrowBar",
  "LeftArrowRightArrow",
  "LeftDownTeeVector",
  "LeftDownVector",
  "LeftDownVectorBar",
  "LeftRightArrow",
  "LeftRightVector",
  "LeftTee",
  "LeftTeeArrow",
  "LeftTeeVector",
  "LeftTriangle",
  "LeftTriangleBar",
  "LeftTriangleEqual",
  "LeftUpDownVector",
  "LeftUpTeeVector",
  "LeftUpVector",
  "LeftUpVectorBar",
  "LeftVector",
  "LeftVectorBar",
  "LegendAppearance",
  "Legended",
  "LegendFunction",
  "LegendLabel",
  "LegendLayout",
  "LegendMargins",
  "LegendMarkers",
  "LegendMarkerSize",
  "LegendreP",
  "LegendreQ",
  "LegendreType",
  "Length",
  "LengthWhile",
  "LerchPhi",
  "Less",
  "LessEqual",
  "LessEqualGreater",
  "LessEqualThan",
  "LessFullEqual",
  "LessGreater",
  "LessLess",
  "LessSlantEqual",
  "LessThan",
  "LessTilde",
  "LetterCharacter",
  "LetterCounts",
  "LetterNumber",
  "LetterQ",
  "Level",
  "LeveneTest",
  "LeviCivitaTensor",
  "LevyDistribution",
  "Lexicographic",
  "LexicographicOrder",
  "LexicographicSort",
  "LibraryDataType",
  "LibraryFunction",
  "LibraryFunctionDeclaration",
  "LibraryFunctionError",
  "LibraryFunctionInformation",
  "LibraryFunctionLoad",
  "LibraryFunctionUnload",
  "LibraryLoad",
  "LibraryUnload",
  "LicenseEntitlementObject",
  "LicenseEntitlements",
  "LicenseID",
  "LicensingSettings",
  "LiftingFilterData",
  "LiftingWaveletTransform",
  "LightBlue",
  "LightBrown",
  "LightCyan",
  "Lighter",
  "LightGray",
  "LightGreen",
  "Lighting",
  "LightingAngle",
  "LightMagenta",
  "LightOrange",
  "LightPink",
  "LightPurple",
  "LightRed",
  "LightSources",
  "LightYellow",
  "Likelihood",
  "Limit",
  "LimitsPositioning",
  "LimitsPositioningTokens",
  "LindleyDistribution",
  "Line",
  "Line3DBox",
  "Line3DBoxOptions",
  "LinearFilter",
  "LinearFractionalOptimization",
  "LinearFractionalTransform",
  "LinearGradientFilling",
  "LinearGradientImage",
  "LinearizingTransformationData",
  "LinearLayer",
  "LinearModelFit",
  "LinearOffsetFunction",
  "LinearOptimization",
  "LinearProgramming",
  "LinearRecurrence",
  "LinearSolve",
  "LinearSolveFunction",
  "LineBox",
  "LineBoxOptions",
  "LineBreak",
  "LinebreakAdjustments",
  "LineBreakChart",
  "LinebreakSemicolonWeighting",
  "LineBreakWithin",
  "LineColor",
  "LineGraph",
  "LineIndent",
  "LineIndentMaxFraction",
  "LineIntegralConvolutionPlot",
  "LineIntegralConvolutionScale",
  "LineLegend",
  "LineOpacity",
  "LineSpacing",
  "LineWrapParts",
  "LinkActivate",
  "LinkClose",
  "LinkConnect",
  "LinkConnectedQ",
  "LinkCreate",
  "LinkError",
  "LinkFlush",
  "LinkFunction",
  "LinkHost",
  "LinkInterrupt",
  "LinkLaunch",
  "LinkMode",
  "LinkObject",
  "LinkOpen",
  "LinkOptions",
  "LinkPatterns",
  "LinkProtocol",
  "LinkRankCentrality",
  "LinkRead",
  "LinkReadHeld",
  "LinkReadyQ",
  "Links",
  "LinkService",
  "LinkWrite",
  "LinkWriteHeld",
  "LiouvilleLambda",
  "List",
  "Listable",
  "ListAnimate",
  "ListContourPlot",
  "ListContourPlot3D",
  "ListConvolve",
  "ListCorrelate",
  "ListCurvePathPlot",
  "ListDeconvolve",
  "ListDensityPlot",
  "ListDensityPlot3D",
  "Listen",
  "ListFormat",
  "ListFourierSequenceTransform",
  "ListInterpolation",
  "ListLineIntegralConvolutionPlot",
  "ListLinePlot",
  "ListLinePlot3D",
  "ListLogLinearPlot",
  "ListLogLogPlot",
  "ListLogPlot",
  "ListPicker",
  "ListPickerBox",
  "ListPickerBoxBackground",
  "ListPickerBoxOptions",
  "ListPlay",
  "ListPlot",
  "ListPlot3D",
  "ListPointPlot3D",
  "ListPolarPlot",
  "ListQ",
  "ListSliceContourPlot3D",
  "ListSliceDensityPlot3D",
  "ListSliceVectorPlot3D",
  "ListStepPlot",
  "ListStreamDensityPlot",
  "ListStreamPlot",
  "ListStreamPlot3D",
  "ListSurfacePlot3D",
  "ListVectorDensityPlot",
  "ListVectorDisplacementPlot",
  "ListVectorDisplacementPlot3D",
  "ListVectorPlot",
  "ListVectorPlot3D",
  "ListZTransform",
  "Literal",
  "LiteralSearch",
  "LiteralType",
  "LoadCompiledComponent",
  "LocalAdaptiveBinarize",
  "LocalCache",
  "LocalClusteringCoefficient",
  "LocalEvaluate",
  "LocalizeDefinitions",
  "LocalizeVariables",
  "LocalObject",
  "LocalObjects",
  "LocalResponseNormalizationLayer",
  "LocalSubmit",
  "LocalSymbol",
  "LocalTime",
  "LocalTimeZone",
  "LocationEquivalenceTest",
  "LocationTest",
  "Locator",
  "LocatorAutoCreate",
  "LocatorBox",
  "LocatorBoxOptions",
  "LocatorCentering",
  "LocatorPane",
  "LocatorPaneBox",
  "LocatorPaneBoxOptions",
  "LocatorRegion",
  "Locked",
  "Log",
  "Log10",
  "Log2",
  "LogBarnesG",
  "LogGamma",
  "LogGammaDistribution",
  "LogicalExpand",
  "LogIntegral",
  "LogisticDistribution",
  "LogisticSigmoid",
  "LogitModelFit",
  "LogLikelihood",
  "LogLinearPlot",
  "LogLogisticDistribution",
  "LogLogPlot",
  "LogMultinormalDistribution",
  "LogNormalDistribution",
  "LogPlot",
  "LogRankTest",
  "LogSeriesDistribution",
  "LongEqual",
  "Longest",
  "LongestCommonSequence",
  "LongestCommonSequencePositions",
  "LongestCommonSubsequence",
  "LongestCommonSubsequencePositions",
  "LongestMatch",
  "LongestOrderedSequence",
  "LongForm",
  "Longitude",
  "LongLeftArrow",
  "LongLeftRightArrow",
  "LongRightArrow",
  "LongShortTermMemoryLayer",
  "Lookup",
  "Loopback",
  "LoopFreeGraphQ",
  "Looping",
  "LossFunction",
  "LowerCaseQ",
  "LowerLeftArrow",
  "LowerRightArrow",
  "LowerTriangularize",
  "LowerTriangularMatrix",
  "LowerTriangularMatrixQ",
  "LowpassFilter",
  "LQEstimatorGains",
  "LQGRegulator",
  "LQOutputRegulatorGains",
  "LQRegulatorGains",
  "LUBackSubstitution",
  "LucasL",
  "LuccioSamiComponents",
  "LUDecomposition",
  "LunarEclipse",
  "LUVColor",
  "LyapunovSolve",
  "LyonsGroupLy",
  "MachineID",
  "MachineName",
  "MachineNumberQ",
  "MachinePrecision",
  "MacintoshSystemPageSetup",
  "Magenta",
  "Magnification",
  "Magnify",
  "MailAddressValidation",
  "MailExecute",
  "MailFolder",
  "MailItem",
  "MailReceiverFunction",
  "MailResponseFunction",
  "MailSearch",
  "MailServerConnect",
  "MailServerConnection",
  "MailSettings",
  "MainSolve",
  "MaintainDynamicCaches",
  "Majority",
  "MakeBoxes",
  "MakeExpression",
  "MakeRules",
  "ManagedLibraryExpressionID",
  "ManagedLibraryExpressionQ",
  "MandelbrotSetBoettcher",
  "MandelbrotSetDistance",
  "MandelbrotSetIterationCount",
  "MandelbrotSetMemberQ",
  "MandelbrotSetPlot",
  "MangoldtLambda",
  "ManhattanDistance",
  "Manipulate",
  "Manipulator",
  "MannedSpaceMissionData",
  "MannWhitneyTest",
  "MantissaExponent",
  "Manual",
  "Map",
  "MapAll",
  "MapApply",
  "MapAt",
  "MapIndexed",
  "MAProcess",
  "MapThread",
  "MarchenkoPasturDistribution",
  "MarcumQ",
  "MardiaCombinedTest",
  "MardiaKurtosisTest",
  "MardiaSkewnessTest",
  "MarginalDistribution",
  "MarkovProcessProperties",
  "Masking",
  "MassConcentrationCondition",
  "MassFluxValue",
  "MassImpermeableBoundaryValue",
  "MassOutflowValue",
  "MassSymmetryValue",
  "MassTransferValue",
  "MassTransportPDEComponent",
  "MatchingDissimilarity",
  "MatchLocalNameQ",
  "MatchLocalNames",
  "MatchQ",
  "Material",
  "MaterialShading",
  "MaternPointProcess",
  "MathematicalFunctionData",
  "MathematicaNotation",
  "MathieuC",
  "MathieuCharacteristicA",
  "MathieuCharacteristicB",
  "MathieuCharacteristicExponent",
  "MathieuCPrime",
  "MathieuGroupM11",
  "MathieuGroupM12",
  "MathieuGroupM22",
  "MathieuGroupM23",
  "MathieuGroupM24",
  "MathieuS",
  "MathieuSPrime",
  "MathMLForm",
  "MathMLText",
  "Matrices",
  "MatrixExp",
  "MatrixForm",
  "MatrixFunction",
  "MatrixLog",
  "MatrixNormalDistribution",
  "MatrixPlot",
  "MatrixPower",
  "MatrixPropertyDistribution",
  "MatrixQ",
  "MatrixRank",
  "MatrixTDistribution",
  "Max",
  "MaxBend",
  "MaxCellMeasure",
  "MaxColorDistance",
  "MaxDate",
  "MaxDetect",
  "MaxDisplayedChildren",
  "MaxDuration",
  "MaxExtraBandwidths",
  "MaxExtraConditions",
  "MaxFeatureDisplacement",
  "MaxFeatures",
  "MaxFilter",
  "MaximalBy",
  "Maximize",
  "MaxItems",
  "MaxIterations",
  "MaxLimit",
  "MaxMemoryUsed",
  "MaxMixtureKernels",
  "MaxOverlapFraction",
  "MaxPlotPoints",
  "MaxPoints",
  "MaxRecursion",
  "MaxStableDistribution",
  "MaxStepFraction",
  "MaxSteps",
  "MaxStepSize",
  "MaxTrainingRounds",
  "MaxValue",
  "MaxwellDistribution",
  "MaxWordGap",
  "McLaughlinGroupMcL",
  "Mean",
  "MeanAbsoluteLossLayer",
  "MeanAround",
  "MeanClusteringCoefficient",
  "MeanDegreeConnectivity",
  "MeanDeviation",
  "MeanFilter",
  "MeanGraphDistance",
  "MeanNeighborDegree",
  "MeanPointDensity",
  "MeanShift",
  "MeanShiftFilter",
  "MeanSquaredLossLayer",
  "Median",
  "MedianDeviation",
  "MedianFilter",
  "MedicalTestData",
  "Medium",
  "MeijerG",
  "MeijerGReduce",
  "MeixnerDistribution",
  "MellinConvolve",
  "MellinTransform",
  "MemberQ",
  "MemoryAvailable",
  "MemoryConstrained",
  "MemoryConstraint",
  "MemoryInUse",
  "MengerMesh",
  "Menu",
  "MenuAppearance",
  "MenuCommandKey",
  "MenuEvaluator",
  "MenuItem",
  "MenuList",
  "MenuPacket",
  "MenuSortingValue",
  "MenuStyle",
  "MenuView",
  "Merge",
  "MergeDifferences",
  "MergingFunction",
  "MersennePrimeExponent",
  "MersennePrimeExponentQ",
  "Mesh",
  "MeshCellCentroid",
  "MeshCellCount",
  "MeshCellHighlight",
  "MeshCellIndex",
  "MeshCellLabel",
  "MeshCellMarker",
  "MeshCellMeasure",
  "MeshCellQuality",
  "MeshCells",
  "MeshCellShapeFunction",
  "MeshCellStyle",
  "MeshConnectivityGraph",
  "MeshCoordinates",
  "MeshFunctions",
  "MeshPrimitives",
  "MeshQualityGoal",
  "MeshRange",
  "MeshRefinementFunction",
  "MeshRegion",
  "MeshRegionQ",
  "MeshShading",
  "MeshStyle",
  "Message",
  "MessageDialog",
  "MessageList",
  "MessageName",
  "MessageObject",
  "MessageOptions",
  "MessagePacket",
  "Messages",
  "MessagesNotebook",
  "MetaCharacters",
  "MetaInformation",
  "MeteorShowerData",
  "Method",
  "MethodOptions",
  "MexicanHatWavelet",
  "MeyerWavelet",
  "Midpoint",
  "MIMETypeToFormatList",
  "Min",
  "MinColorDistance",
  "MinDate",
  "MinDetect",
  "MineralData",
  "MinFilter",
  "MinimalBy",
  "MinimalPolynomial",
  "MinimalStateSpaceModel",
  "Minimize",
  "MinimumTimeIncrement",
  "MinIntervalSize",
  "MinkowskiQuestionMark",
  "MinLimit",
  "MinMax",
  "MinorPlanetData",
  "Minors",
  "MinPointSeparation",
  "MinRecursion",
  "MinSize",
  "MinStableDistribution",
  "Minus",
  "MinusPlus",
  "MinValue",
  "Missing",
  "MissingBehavior",
  "MissingDataMethod",
  "MissingDataRules",
  "MissingQ",
  "MissingString",
  "MissingStyle",
  "MissingValuePattern",
  "MissingValueSynthesis",
  "MittagLefflerE",
  "MixedFractionParts",
  "MixedGraphQ",
  "MixedMagnitude",
  "MixedRadix",
  "MixedRadixQuantity",
  "MixedUnit",
  "MixtureDistribution",
  "Mod",
  "Modal",
  "Mode",
  "ModelPredictiveController",
  "Modular",
  "ModularInverse",
  "ModularLambda",
  "Module",
  "Modulus",
  "MoebiusMu",
  "Molecule",
  "MoleculeAlign",
  "MoleculeContainsQ",
  "MoleculeDraw",
  "MoleculeEquivalentQ",
  "MoleculeFreeQ",
  "MoleculeGraph",
  "MoleculeMatchQ",
  "MoleculeMaximumCommonSubstructure",
  "MoleculeModify",
  "MoleculeName",
  "MoleculePattern",
  "MoleculePlot",
  "MoleculePlot3D",
  "MoleculeProperty",
  "MoleculeQ",
  "MoleculeRecognize",
  "MoleculeSubstructureCount",
  "MoleculeValue",
  "Moment",
  "MomentConvert",
  "MomentEvaluate",
  "MomentGeneratingFunction",
  "MomentOfInertia",
  "Monday",
  "Monitor",
  "MonomialList",
  "MonomialOrder",
  "MonsterGroupM",
  "MoonPhase",
  "MoonPosition",
  "MorletWavelet",
  "MorphologicalBinarize",
  "MorphologicalBranchPoints",
  "MorphologicalComponents",
  "MorphologicalEulerNumber",
  "MorphologicalGraph",
  "MorphologicalPerimeter",
  "MorphologicalTransform",
  "MortalityData",
  "Most",
  "MountainData",
  "MouseAnnotation",
  "MouseAppearance",
  "MouseAppearanceTag",
  "MouseButtons",
  "Mouseover",
  "MousePointerNote",
  "MousePosition",
  "MovieData",
  "MovingAverage",
  "MovingMap",
  "MovingMedian",
  "MoyalDistribution",
  "MultiaxisArrangement",
  "Multicolumn",
  "MultiedgeStyle",
  "MultigraphQ",
  "MultilaunchWarning",
  "MultiLetterItalics",
  "MultiLetterStyle",
  "MultilineFunction",
  "Multinomial",
  "MultinomialDistribution",
  "MultinormalDistribution",
  "MultiplicativeOrder",
  "Multiplicity",
  "MultiplySides",
  "MultiscriptBoxOptions",
  "Multiselection",
  "MultivariateHypergeometricDistribution",
  "MultivariatePoissonDistribution",
  "MultivariateTDistribution",
  "N",
  "NakagamiDistribution",
  "NameQ",
  "Names",
  "NamespaceBox",
  "NamespaceBoxOptions",
  "Nand",
  "NArgMax",
  "NArgMin",
  "NBernoulliB",
  "NBodySimulation",
  "NBodySimulationData",
  "NCache",
  "NCaputoD",
  "NDEigensystem",
  "NDEigenvalues",
  "NDSolve",
  "NDSolveValue",
  "Nearest",
  "NearestFunction",
  "NearestMeshCells",
  "NearestNeighborG",
  "NearestNeighborGraph",
  "NearestTo",
  "NebulaData",
  "NeedlemanWunschSimilarity",
  "Needs",
  "Negative",
  "NegativeBinomialDistribution",
  "NegativeDefiniteMatrixQ",
  "NegativeIntegers",
  "NegativelyOrientedPoints",
  "NegativeMultinomialDistribution",
  "NegativeRationals",
  "NegativeReals",
  "NegativeSemidefiniteMatrixQ",
  "NeighborhoodData",
  "NeighborhoodGraph",
  "Nest",
  "NestedGreaterGreater",
  "NestedLessLess",
  "NestedScriptRules",
  "NestGraph",
  "NestList",
  "NestTree",
  "NestWhile",
  "NestWhileList",
  "NetAppend",
  "NetArray",
  "NetArrayLayer",
  "NetBidirectionalOperator",
  "NetChain",
  "NetDecoder",
  "NetDelete",
  "NetDrop",
  "NetEncoder",
  "NetEvaluationMode",
  "NetExternalObject",
  "NetExtract",
  "NetFlatten",
  "NetFoldOperator",
  "NetGANOperator",
  "NetGraph",
  "NetInformation",
  "NetInitialize",
  "NetInsert",
  "NetInsertSharedArrays",
  "NetJoin",
  "NetMapOperator",
  "NetMapThreadOperator",
  "NetMeasurements",
  "NetModel",
  "NetNestOperator",
  "NetPairEmbeddingOperator",
  "NetPort",
  "NetPortGradient",
  "NetPrepend",
  "NetRename",
  "NetReplace",
  "NetReplacePart",
  "NetSharedArray",
  "NetStateObject",
  "NetTake",
  "NetTrain",
  "NetTrainResultsObject",
  "NetUnfold",
  "NetworkPacketCapture",
  "NetworkPacketRecording",
  "NetworkPacketRecordingDuring",
  "NetworkPacketTrace",
  "NeumannValue",
  "NevilleThetaC",
  "NevilleThetaD",
  "NevilleThetaN",
  "NevilleThetaS",
  "NewPrimitiveStyle",
  "NExpectation",
  "Next",
  "NextCell",
  "NextDate",
  "NextPrime",
  "NextScheduledTaskTime",
  "NeymanScottPointProcess",
  "NFractionalD",
  "NHoldAll",
  "NHoldFirst",
  "NHoldRest",
  "NicholsGridLines",
  "NicholsPlot",
  "NightHemisphere",
  "NIntegrate",
  "NMaximize",
  "NMaxValue",
  "NMinimize",
  "NMinValue",
  "NominalScale",
  "NominalVariables",
  "NonAssociative",
  "NoncentralBetaDistribution",
  "NoncentralChiSquareDistribution",
  "NoncentralFRatioDistribution",
  "NoncentralStudentTDistribution",
  "NonCommutativeMultiply",
  "NonConstants",
  "NondimensionalizationTransform",
  "None",
  "NoneTrue",
  "NonlinearModelFit",
  "NonlinearStateSpaceModel",
  "NonlocalMeansFilter",
  "NonNegative",
  "NonNegativeIntegers",
  "NonNegativeRationals",
  "NonNegativeReals",
  "NonPositive",
  "NonPositiveIntegers",
  "NonPositiveRationals",
  "NonPositiveReals",
  "Nor",
  "NorlundB",
  "Norm",
  "Normal",
  "NormalDistribution",
  "NormalGrouping",
  "NormalizationLayer",
  "Normalize",
  "Normalized",
  "NormalizedSquaredEuclideanDistance",
  "NormalMatrixQ",
  "NormalsFunction",
  "NormFunction",
  "Not",
  "NotCongruent",
  "NotCupCap",
  "NotDoubleVerticalBar",
  "Notebook",
  "NotebookApply",
  "NotebookAutoSave",
  "NotebookBrowseDirectory",
  "NotebookClose",
  "NotebookConvertSettings",
  "NotebookCreate",
  "NotebookDefault",
  "NotebookDelete",
  "NotebookDirectory",
  "NotebookDynamicExpression",
  "NotebookEvaluate",
  "NotebookEventActions",
  "NotebookFileName",
  "NotebookFind",
  "NotebookGet",
  "NotebookImport",
  "NotebookInformation",
  "NotebookInterfaceObject",
  "NotebookLocate",
  "NotebookObject",
  "NotebookOpen",
  "NotebookPath",
  "NotebookPrint",
  "NotebookPut",
  "NotebookRead",
  "Notebooks",
  "NotebookSave",
  "NotebookSelection",
  "NotebooksMenu",
  "NotebookTemplate",
  "NotebookWrite",
  "NotElement",
  "NotEqualTilde",
  "NotExists",
  "NotGreater",
  "NotGreaterEqual",
  "NotGreaterFullEqual",
  "NotGreaterGreater",
  "NotGreaterLess",
  "NotGreaterSlantEqual",
  "NotGreaterTilde",
  "Nothing",
  "NotHumpDownHump",
  "NotHumpEqual",
  "NotificationFunction",
  "NotLeftTriangle",
  "NotLeftTriangleBar",
  "NotLeftTriangleEqual",
  "NotLess",
  "NotLessEqual",
  "NotLessFullEqual",
  "NotLessGreater",
  "NotLessLess",
  "NotLessSlantEqual",
  "NotLessTilde",
  "NotNestedGreaterGreater",
  "NotNestedLessLess",
  "NotPrecedes",
  "NotPrecedesEqual",
  "NotPrecedesSlantEqual",
  "NotPrecedesTilde",
  "NotReverseElement",
  "NotRightTriangle",
  "NotRightTriangleBar",
  "NotRightTriangleEqual",
  "NotSquareSubset",
  "NotSquareSubsetEqual",
  "NotSquareSuperset",
  "NotSquareSupersetEqual",
  "NotSubset",
  "NotSubsetEqual",
  "NotSucceeds",
  "NotSucceedsEqual",
  "NotSucceedsSlantEqual",
  "NotSucceedsTilde",
  "NotSuperset",
  "NotSupersetEqual",
  "NotTilde",
  "NotTildeEqual",
  "NotTildeFullEqual",
  "NotTildeTilde",
  "NotVerticalBar",
  "Now",
  "NoWhitespace",
  "NProbability",
  "NProduct",
  "NProductFactors",
  "NRoots",
  "NSolve",
  "NSolveValues",
  "NSum",
  "NSumTerms",
  "NuclearExplosionData",
  "NuclearReactorData",
  "Null",
  "NullRecords",
  "NullSpace",
  "NullWords",
  "Number",
  "NumberCompose",
  "NumberDecompose",
  "NumberDigit",
  "NumberExpand",
  "NumberFieldClassNumber",
  "NumberFieldDiscriminant",
  "NumberFieldFundamentalUnits",
  "NumberFieldIntegralBasis",
  "NumberFieldNormRepresentatives",
  "NumberFieldRegulator",
  "NumberFieldRootsOfUnity",
  "NumberFieldSignature",
  "NumberForm",
  "NumberFormat",
  "NumberLinePlot",
  "NumberMarks",
  "NumberMultiplier",
  "NumberPadding",
  "NumberPoint",
  "NumberQ",
  "NumberSeparator",
  "NumberSigns",
  "NumberString",
  "Numerator",
  "NumeratorDenominator",
  "NumericalOrder",
  "NumericalSort",
  "NumericArray",
  "NumericArrayQ",
  "NumericArrayType",
  "NumericFunction",
  "NumericQ",
  "NuttallWindow",
  "NValues",
  "NyquistGridLines",
  "NyquistPlot",
  "O",
  "ObjectExistsQ",
  "ObservabilityGramian",
  "ObservabilityMatrix",
  "ObservableDecomposition",
  "ObservableModelQ",
  "OceanData",
  "Octahedron",
  "OddQ",
  "Off",
  "Offset",
  "OLEData",
  "On",
  "ONanGroupON",
  "Once",
  "OneIdentity",
  "Opacity",
  "OpacityFunction",
  "OpacityFunctionScaling",
  "Open",
  "OpenAppend",
  "Opener",
  "OpenerBox",
  "OpenerBoxOptions",
  "OpenerView",
  "OpenFunctionInspectorPacket",
  "Opening",
  "OpenRead",
  "OpenSpecialOptions",
  "OpenTemporary",
  "OpenWrite",
  "Operate",
  "OperatingSystem",
  "OperatorApplied",
  "OptimumFlowData",
  "Optional",
  "OptionalElement",
  "OptionInspectorSettings",
  "OptionQ",
  "Options",
  "OptionsPacket",
  "OptionsPattern",
  "OptionValue",
  "OptionValueBox",
  "OptionValueBoxOptions",
  "Or",
  "Orange",
  "Order",
  "OrderDistribution",
  "OrderedQ",
  "Ordering",
  "OrderingBy",
  "OrderingLayer",
  "Orderless",
  "OrderlessPatternSequence",
  "OrdinalScale",
  "OrnsteinUhlenbeckProcess",
  "Orthogonalize",
  "OrthogonalMatrixQ",
  "Out",
  "Outer",
  "OuterPolygon",
  "OuterPolyhedron",
  "OutputAutoOverwrite",
  "OutputControllabilityMatrix",
  "OutputControllableModelQ",
  "OutputForm",
  "OutputFormData",
  "OutputGrouping",
  "OutputMathEditExpression",
  "OutputNamePacket",
  "OutputPorts",
  "OutputResponse",
  "OutputSizeLimit",
  "OutputStream",
  "Over",
  "OverBar",
  "OverDot",
  "Overflow",
  "OverHat",
  "Overlaps",
  "Overlay",
  "OverlayBox",
  "OverlayBoxOptions",
  "OverlayVideo",
  "Overscript",
  "OverscriptBox",
  "OverscriptBoxOptions",
  "OverTilde",
  "OverVector",
  "OverwriteTarget",
  "OwenT",
  "OwnValues",
  "Package",
  "PackingMethod",
  "PackPaclet",
  "PacletDataRebuild",
  "PacletDirectoryAdd",
  "PacletDirectoryLoad",
  "PacletDirectoryRemove",
  "PacletDirectoryUnload",
  "PacletDisable",
  "PacletEnable",
  "PacletFind",
  "PacletFindRemote",
  "PacletInformation",
  "PacletInstall",
  "PacletInstallSubmit",
  "PacletNewerQ",
  "PacletObject",
  "PacletObjectQ",
  "PacletSite",
  "PacletSiteObject",
  "PacletSiteRegister",
  "PacletSites",
  "PacletSiteUnregister",
  "PacletSiteUpdate",
  "PacletSymbol",
  "PacletUninstall",
  "PacletUpdate",
  "PaddedForm",
  "Padding",
  "PaddingLayer",
  "PaddingSize",
  "PadeApproximant",
  "PadLeft",
  "PadRight",
  "PageBreakAbove",
  "PageBreakBelow",
  "PageBreakWithin",
  "PageFooterLines",
  "PageFooters",
  "PageHeaderLines",
  "PageHeaders",
  "PageHeight",
  "PageRankCentrality",
  "PageTheme",
  "PageWidth",
  "Pagination",
  "PairCorrelationG",
  "PairedBarChart",
  "PairedHistogram",
  "PairedSmoothHistogram",
  "PairedTTest",
  "PairedZTest",
  "PaletteNotebook",
  "PalettePath",
  "PalettesMenuSettings",
  "PalindromeQ",
  "Pane",
  "PaneBox",
  "PaneBoxOptions",
  "Panel",
  "PanelBox",
  "PanelBoxOptions",
  "Paneled",
  "PaneSelector",
  "PaneSelectorBox",
  "PaneSelectorBoxOptions",
  "PaperWidth",
  "ParabolicCylinderD",
  "ParagraphIndent",
  "ParagraphSpacing",
  "ParallelArray",
  "ParallelAxisPlot",
  "ParallelCombine",
  "ParallelDo",
  "Parallelepiped",
  "ParallelEvaluate",
  "Parallelization",
  "Parallelize",
  "ParallelKernels",
  "ParallelMap",
  "ParallelNeeds",
  "Parallelogram",
  "ParallelProduct",
  "ParallelSubmit",
  "ParallelSum",
  "ParallelTable",
  "ParallelTry",
  "Parameter",
  "ParameterEstimator",
  "ParameterMixtureDistribution",
  "ParameterVariables",
  "ParametricConvexOptimization",
  "ParametricFunction",
  "ParametricNDSolve",
  "ParametricNDSolveValue",
  "ParametricPlot",
  "ParametricPlot3D",
  "ParametricRampLayer",
  "ParametricRegion",
  "ParentBox",
  "ParentCell",
  "ParentConnect",
  "ParentDirectory",
  "ParentEdgeLabel",
  "ParentEdgeLabelFunction",
  "ParentEdgeLabelStyle",
  "ParentEdgeShapeFunction",
  "ParentEdgeStyle",
  "ParentEdgeStyleFunction",
  "ParentForm",
  "Parenthesize",
  "ParentList",
  "ParentNotebook",
  "ParetoDistribution",
  "ParetoPickandsDistribution",
  "ParkData",
  "Part",
  "PartBehavior",
  "PartialCorrelationFunction",
  "PartialD",
  "ParticleAcceleratorData",
  "ParticleData",
  "Partition",
  "PartitionGranularity",
  "PartitionsP",
  "PartitionsQ",
  "PartLayer",
  "PartOfSpeech",
  "PartProtection",
  "ParzenWindow",
  "PascalDistribution",
  "PassEventsDown",
  "PassEventsUp",
  "Paste",
  "PasteAutoQuoteCharacters",
  "PasteBoxFormInlineCells",
  "PasteButton",
  "Path",
  "PathGraph",
  "PathGraphQ",
  "Pattern",
  "PatternFilling",
  "PatternReaction",
  "PatternSequence",
  "PatternTest",
  "PauliMatrix",
  "PaulWavelet",
  "Pause",
  "PausedTime",
  "PDF",
  "PeakDetect",
  "PeanoCurve",
  "PearsonChiSquareTest",
  "PearsonCorrelationTest",
  "PearsonDistribution",
  "PenttinenPointProcess",
  "PercentForm",
  "PerfectNumber",
  "PerfectNumberQ",
  "PerformanceGoal",
  "Perimeter",
  "PeriodicBoundaryCondition",
  "PeriodicInterpolation",
  "Periodogram",
  "PeriodogramArray",
  "Permanent",
  "Permissions",
  "PermissionsGroup",
  "PermissionsGroupMemberQ",
  "PermissionsGroups",
  "PermissionsKey",
  "PermissionsKeys",
  "PermutationCycles",
  "PermutationCyclesQ",
  "PermutationGroup",
  "PermutationLength",
  "PermutationList",
  "PermutationListQ",
  "PermutationMatrix",
  "PermutationMax",
  "PermutationMin",
  "PermutationOrder",
  "PermutationPower",
  "PermutationProduct",
  "PermutationReplace",
  "Permutations",
  "PermutationSupport",
  "Permute",
  "PeronaMalikFilter",
  "Perpendicular",
  "PerpendicularBisector",
  "PersistenceLocation",
  "PersistenceTime",
  "PersistentObject",
  "PersistentObjects",
  "PersistentSymbol",
  "PersistentValue",
  "PersonData",
  "PERTDistribution",
  "PetersenGraph",
  "PhaseMargins",
  "PhaseRange",
  "PhongShading",
  "PhysicalSystemData",
  "Pi",
  "Pick",
  "PickedElements",
  "PickMode",
  "PIDData",
  "PIDDerivativeFilter",
  "PIDFeedforward",
  "PIDTune",
  "Piecewise",
  "PiecewiseExpand",
  "PieChart",
  "PieChart3D",
  "PillaiTrace",
  "PillaiTraceTest",
  "PingTime",
  "Pink",
  "PitchRecognize",
  "Pivoting",
  "PixelConstrained",
  "PixelValue",
  "PixelValuePositions",
  "Placed",
  "Placeholder",
  "PlaceholderLayer",
  "PlaceholderReplace",
  "Plain",
  "PlanarAngle",
  "PlanarFaceList",
  "PlanarGraph",
  "PlanarGraphQ",
  "PlanckRadiationLaw",
  "PlaneCurveData",
  "PlanetaryMoonData",
  "PlanetData",
  "PlantData",
  "Play",
  "PlaybackSettings",
  "PlayRange",
  "Plot",
  "Plot3D",
  "Plot3Matrix",
  "PlotDivision",
  "PlotJoined",
  "PlotLabel",
  "PlotLabels",
  "PlotLayout",
  "PlotLegends",
  "PlotMarkers",
  "PlotPoints",
  "PlotRange",
  "PlotRangeClipping",
  "PlotRangeClipPlanesStyle",
  "PlotRangePadding",
  "PlotRegion",
  "PlotStyle",
  "PlotTheme",
  "Pluralize",
  "Plus",
  "PlusMinus",
  "Pochhammer",
  "PodStates",
  "PodWidth",
  "Point",
  "Point3DBox",
  "Point3DBoxOptions",
  "PointBox",
  "PointBoxOptions",
  "PointCountDistribution",
  "PointDensity",
  "PointDensityFunction",
  "PointFigureChart",
  "PointLegend",
  "PointLight",
  "PointProcessEstimator",
  "PointProcessFitTest",
  "PointProcessParameterAssumptions",
  "PointProcessParameterQ",
  "PointSize",
  "PointStatisticFunction",
  "PointValuePlot",
  "PoissonConsulDistribution",
  "PoissonDistribution",
  "PoissonPDEComponent",
  "PoissonPointProcess",
  "PoissonProcess",
  "PoissonWindow",
  "PolarAxes",
  "PolarAxesOrigin",
  "PolarGridLines",
  "PolarPlot",
  "PolarTicks",
  "PoleZeroMarkers",
  "PolyaAeppliDistribution",
  "PolyGamma",
  "Polygon",
  "Polygon3DBox",
  "Polygon3DBoxOptions",
  "PolygonalNumber",
  "PolygonAngle",
  "PolygonBox",
  "PolygonBoxOptions",
  "PolygonCoordinates",
  "PolygonDecomposition",
  "PolygonHoleScale",
  "PolygonIntersections",
  "PolygonScale",
  "Polyhedron",
  "PolyhedronAngle",
  "PolyhedronBox",
  "PolyhedronBoxOptions",
  "PolyhedronCoordinates",
  "PolyhedronData",
  "PolyhedronDecomposition",
  "PolyhedronGenus",
  "PolyLog",
  "PolynomialExpressionQ",
  "PolynomialExtendedGCD",
  "PolynomialForm",
  "PolynomialGCD",
  "PolynomialLCM",
  "PolynomialMod",
  "PolynomialQ",
  "PolynomialQuotient",
  "PolynomialQuotientRemainder",
  "PolynomialReduce",
  "PolynomialRemainder",
  "Polynomials",
  "PolynomialSumOfSquaresList",
  "PoolingLayer",
  "PopupMenu",
  "PopupMenuBox",
  "PopupMenuBoxOptions",
  "PopupView",
  "PopupWindow",
  "Position",
  "PositionIndex",
  "PositionLargest",
  "PositionSmallest",
  "Positive",
  "PositiveDefiniteMatrixQ",
  "PositiveIntegers",
  "PositivelyOrientedPoints",
  "PositiveRationals",
  "PositiveReals",
  "PositiveSemidefiniteMatrixQ",
  "PossibleZeroQ",
  "Postfix",
  "PostScript",
  "Power",
  "PowerDistribution",
  "PowerExpand",
  "PowerMod",
  "PowerModList",
  "PowerRange",
  "PowerSpectralDensity",
  "PowersRepresentations",
  "PowerSymmetricPolynomial",
  "Precedence",
  "PrecedenceForm",
  "Precedes",
  "PrecedesEqual",
  "PrecedesSlantEqual",
  "PrecedesTilde",
  "Precision",
  "PrecisionGoal",
  "PreDecrement",
  "Predict",
  "PredictionRoot",
  "PredictorFunction",
  "PredictorInformation",
  "PredictorMeasurements",
  "PredictorMeasurementsObject",
  "PreemptProtect",
  "PreferencesPath",
  "PreferencesSettings",
  "Prefix",
  "PreIncrement",
  "Prepend",
  "PrependLayer",
  "PrependTo",
  "PreprocessingRules",
  "PreserveColor",
  "PreserveImageOptions",
  "Previous",
  "PreviousCell",
  "PreviousDate",
  "PriceGraphDistribution",
  "PrimaryPlaceholder",
  "Prime",
  "PrimeNu",
  "PrimeOmega",
  "PrimePi",
  "PrimePowerQ",
  "PrimeQ",
  "Primes",
  "PrimeZetaP",
  "PrimitivePolynomialQ",
  "PrimitiveRoot",
  "PrimitiveRootList",
  "PrincipalComponents",
  "PrincipalValue",
  "Print",
  "PrintableASCIIQ",
  "PrintAction",
  "PrintForm",
  "PrintingCopies",
  "PrintingOptions",
  "PrintingPageRange",
  "PrintingStartingPageNumber",
  "PrintingStyleEnvironment",
  "Printout3D",
  "Printout3DPreviewer",
  "PrintPrecision",
  "PrintTemporary",
  "Prism",
  "PrismBox",
  "PrismBoxOptions",
  "PrivateCellOptions",
  "PrivateEvaluationOptions",
  "PrivateFontOptions",
  "PrivateFrontEndOptions",
  "PrivateKey",
  "PrivateNotebookOptions",
  "PrivatePaths",
  "Probability",
  "ProbabilityDistribution",
  "ProbabilityPlot",
  "ProbabilityPr",
  "ProbabilityScalePlot",
  "ProbitModelFit",
  "ProcessConnection",
  "ProcessDirectory",
  "ProcessEnvironment",
  "Processes",
  "ProcessEstimator",
  "ProcessInformation",
  "ProcessObject",
  "ProcessParameterAssumptions",
  "ProcessParameterQ",
  "ProcessStateDomain",
  "ProcessStatus",
  "ProcessTimeDomain",
  "Product",
  "ProductDistribution",
  "ProductLog",
  "ProgressIndicator",
  "ProgressIndicatorBox",
  "ProgressIndicatorBoxOptions",
  "ProgressReporting",
  "Projection",
  "Prolog",
  "PromptForm",
  "ProofObject",
  "PropagateAborts",
  "Properties",
  "Property",
  "PropertyList",
  "PropertyValue",
  "Proportion",
  "Proportional",
  "Protect",
  "Protected",
  "ProteinData",
  "Pruning",
  "PseudoInverse",
  "PsychrometricPropertyData",
  "PublicKey",
  "PublisherID",
  "PulsarData",
  "PunctuationCharacter",
  "Purple",
  "Put",
  "PutAppend",
  "Pyramid",
  "PyramidBox",
  "PyramidBoxOptions",
  "QBinomial",
  "QFactorial",
  "QGamma",
  "QHypergeometricPFQ",
  "QnDispersion",
  "QPochhammer",
  "QPolyGamma",
  "QRDecomposition",
  "QuadraticIrrationalQ",
  "QuadraticOptimization",
  "Quantile",
  "QuantilePlot",
  "Quantity",
  "QuantityArray",
  "QuantityDistribution",
  "QuantityForm",
  "QuantityMagnitude",
  "QuantityQ",
  "QuantityUnit",
  "QuantityVariable",
  "QuantityVariableCanonicalUnit",
  "QuantityVariableDimensions",
  "QuantityVariableIdentifier",
  "QuantityVariablePhysicalQuantity",
  "Quartics",
  "QuartileDeviation",
  "Quartiles",
  "QuartileSkewness",
  "Query",
  "QuestionGenerator",
  "QuestionInterface",
  "QuestionObject",
  "QuestionSelector",
  "QueueingNetworkProcess",
  "QueueingProcess",
  "QueueProperties",
  "Quiet",
  "QuietEcho",
  "Quit",
  "Quotient",
  "QuotientRemainder",
  "RadialAxisPlot",
  "RadialGradientFilling",
  "RadialGradientImage",
  "RadialityCentrality",
  "RadicalBox",
  "RadicalBoxOptions",
  "RadioButton",
  "RadioButtonBar",
  "RadioButtonBox",
  "RadioButtonBoxOptions",
  "Radon",
  "RadonTransform",
  "RamanujanTau",
  "RamanujanTauL",
  "RamanujanTauTheta",
  "RamanujanTauZ",
  "Ramp",
  "Random",
  "RandomArrayLayer",
  "RandomChoice",
  "RandomColor",
  "RandomComplex",
  "RandomDate",
  "RandomEntity",
  "RandomFunction",
  "RandomGeneratorState",
  "RandomGeoPosition",
  "RandomGraph",
  "RandomImage",
  "RandomInstance",
  "RandomInteger",
  "RandomPermutation",
  "RandomPoint",
  "RandomPointConfiguration",
  "RandomPolygon",
  "RandomPolyhedron",
  "RandomPrime",
  "RandomReal",
  "RandomSample",
  "RandomSeed",
  "RandomSeeding",
  "RandomTime",
  "RandomTree",
  "RandomVariate",
  "RandomWalkProcess",
  "RandomWord",
  "Range",
  "RangeFilter",
  "RangeSpecification",
  "RankedMax",
  "RankedMin",
  "RarerProbability",
  "Raster",
  "Raster3D",
  "Raster3DBox",
  "Raster3DBoxOptions",
  "RasterArray",
  "RasterBox",
  "RasterBoxOptions",
  "Rasterize",
  "RasterSize",
  "Rational",
  "RationalExpressionQ",
  "RationalFunctions",
  "Rationalize",
  "Rationals",
  "Ratios",
  "RawArray",
  "RawBoxes",
  "RawData",
  "RawMedium",
  "RayleighDistribution",
  "Re",
  "ReactionBalance",
  "ReactionBalancedQ",
  "ReactionPDETerm",
  "Read",
  "ReadByteArray",
  "ReadLine",
  "ReadList",
  "ReadProtected",
  "ReadString",
  "Real",
  "RealAbs",
  "RealBlockDiagonalForm",
  "RealDigits",
  "RealExponent",
  "Reals",
  "RealSign",
  "Reap",
  "RebuildPacletData",
  "RecalibrationFunction",
  "RecognitionPrior",
  "RecognitionThreshold",
  "ReconstructionMesh",
  "Record",
  "RecordLists",
  "RecordSeparators",
  "Rectangle",
  "RectangleBox",
  "RectangleBoxOptions",
  "RectangleChart",
  "RectangleChart3D",
  "RectangularRepeatingElement",
  "RecurrenceFilter",
  "RecurrenceTable",
  "RecurringDigitsForm",
  "Red",
  "Reduce",
  "RefBox",
  "ReferenceLineStyle",
  "ReferenceMarkers",
  "ReferenceMarkerStyle",
  "Refine",
  "ReflectionMatrix",
  "ReflectionTransform",
  "Refresh",
  "RefreshRate",
  "Region",
  "RegionBinarize",
  "RegionBoundary",
  "RegionBoundaryStyle",
  "RegionBounds",
  "RegionCentroid",
  "RegionCongruent",
  "RegionConvert",
  "RegionDifference",
  "RegionDilation",
  "RegionDimension",
  "RegionDisjoint",
  "RegionDistance",
  "RegionDistanceFunction",
  "RegionEmbeddingDimension",
  "RegionEqual",
  "RegionErosion",
  "RegionFillingStyle",
  "RegionFit",
  "RegionFunction",
  "RegionImage",
  "RegionIntersection",
  "RegionMeasure",
  "RegionMember",
  "RegionMemberFunction",
  "RegionMoment",
  "RegionNearest",
  "RegionNearestFunction",
  "RegionPlot",
  "RegionPlot3D",
  "RegionProduct",
  "RegionQ",
  "RegionResize",
  "RegionSimilar",
  "RegionSize",
  "RegionSymmetricDifference",
  "RegionUnion",
  "RegionWithin",
  "RegisterExternalEvaluator",
  "RegularExpression",
  "Regularization",
  "RegularlySampledQ",
  "RegularPolygon",
  "ReIm",
  "ReImLabels",
  "ReImPlot",
  "ReImStyle",
  "Reinstall",
  "RelationalDatabase",
  "RelationGraph",
  "Release",
  "ReleaseHold",
  "ReliabilityDistribution",
  "ReliefImage",
  "ReliefPlot",
  "RemoteAuthorizationCaching",
  "RemoteBatchJobAbort",
  "RemoteBatchJobObject",
  "RemoteBatchJobs",
  "RemoteBatchMapSubmit",
  "RemoteBatchSubmissionEnvironment",
  "RemoteBatchSubmit",
  "RemoteConnect",
  "RemoteConnectionObject",
  "RemoteEvaluate",
  "RemoteFile",
  "RemoteInputFiles",
  "RemoteKernelObject",
  "RemoteProviderSettings",
  "RemoteRun",
  "RemoteRunProcess",
  "RemovalConditions",
  "Remove",
  "RemoveAlphaChannel",
  "RemoveAsynchronousTask",
  "RemoveAudioStream",
  "RemoveBackground",
  "RemoveChannelListener",
  "RemoveChannelSubscribers",
  "Removed",
  "RemoveDiacritics",
  "RemoveInputStreamMethod",
  "RemoveOutputStreamMethod",
  "RemoveProperty",
  "RemoveScheduledTask",
  "RemoveUsers",
  "RemoveVideoStream",
  "RenameDirectory",
  "RenameFile",
  "RenderAll",
  "RenderingOptions",
  "RenewalProcess",
  "RenkoChart",
  "RepairMesh",
  "Repeated",
  "RepeatedNull",
  "RepeatedString",
  "RepeatedTiming",
  "RepeatingElement",
  "Replace",
  "ReplaceAll",
  "ReplaceAt",
  "ReplaceHeldPart",
  "ReplaceImageValue",
  "ReplaceList",
  "ReplacePart",
  "ReplacePixelValue",
  "ReplaceRepeated",
  "ReplicateLayer",
  "RequiredPhysicalQuantities",
  "Resampling",
  "ResamplingAlgorithmData",
  "ResamplingMethod",
  "Rescale",
  "RescalingTransform",
  "ResetDirectory",
  "ResetScheduledTask",
  "ReshapeLayer",
  "Residue",
  "ResidueSum",
  "ResizeLayer",
  "Resolve",
  "ResolveContextAliases",
  "ResourceAcquire",
  "ResourceData",
  "ResourceFunction",
  "ResourceObject",
  "ResourceRegister",
  "ResourceRemove",
  "ResourceSearch",
  "ResourceSubmissionObject",
  "ResourceSubmit",
  "ResourceSystemBase",
  "ResourceSystemPath",
  "ResourceUpdate",
  "ResourceVersion",
  "ResponseForm",
  "Rest",
  "RestartInterval",
  "Restricted",
  "Resultant",
  "ResumePacket",
  "Return",
  "ReturnCreatesNewCell",
  "ReturnEntersInput",
  "ReturnExpressionPacket",
  "ReturnInputFormPacket",
  "ReturnPacket",
  "ReturnReceiptFunction",
  "ReturnTextPacket",
  "Reverse",
  "ReverseApplied",
  "ReverseBiorthogonalSplineWavelet",
  "ReverseElement",
  "ReverseEquilibrium",
  "ReverseGraph",
  "ReverseSort",
  "ReverseSortBy",
  "ReverseUpEquilibrium",
  "RevolutionAxis",
  "RevolutionPlot3D",
  "RGBColor",
  "RiccatiSolve",
  "RiceDistribution",
  "RidgeFilter",
  "RiemannR",
  "RiemannSiegelTheta",
  "RiemannSiegelZ",
  "RiemannXi",
  "Riffle",
  "Right",
  "RightArrow",
  "RightArrowBar",
  "RightArrowLeftArrow",
  "RightComposition",
  "RightCosetRepresentative",
  "RightDownTeeVector",
  "RightDownVector",
  "RightDownVectorBar",
  "RightTee",
  "RightTeeArrow",
  "RightTeeVector",
  "RightTriangle",
  "RightTriangleBar",
  "RightTriangleEqual",
  "RightUpDownVector",
  "RightUpTeeVector",
  "RightUpVector",
  "RightUpVectorBar",
  "RightVector",
  "RightVectorBar",
  "RipleyK",
  "RipleyRassonRegion",
  "RiskAchievementImportance",
  "RiskReductionImportance",
  "RobustConvexOptimization",
  "RogersTanimotoDissimilarity",
  "RollPitchYawAngles",
  "RollPitchYawMatrix",
  "RomanNumeral",
  "Root",
  "RootApproximant",
  "RootIntervals",
  "RootLocusPlot",
  "RootMeanSquare",
  "RootOfUnityQ",
  "RootReduce",
  "Roots",
  "RootSum",
  "RootTree",
  "Rotate",
  "RotateLabel",
  "RotateLeft",
  "RotateRight",
  "RotationAction",
  "RotationBox",
  "RotationBoxOptions",
  "RotationMatrix",
  "RotationTransform",
  "Round",
  "RoundImplies",
  "RoundingRadius",
  "Row",
  "RowAlignments",
  "RowBackgrounds",
  "RowBox",
  "RowHeights",
  "RowLines",
  "RowMinHeight",
  "RowReduce",
  "RowsEqual",
  "RowSpacings",
  "RSolve",
  "RSolveValue",
  "RudinShapiro",
  "RudvalisGroupRu",
  "Rule",
  "RuleCondition",
  "RuleDelayed",
  "RuleForm",
  "RulePlot",
  "RulerUnits",
  "RulesTree",
  "Run",
  "RunProcess",
  "RunScheduledTask",
  "RunThrough",
  "RuntimeAttributes",
  "RuntimeOptions",
  "RussellRaoDissimilarity",
  "SameAs",
  "SameQ",
  "SameTest",
  "SameTestProperties",
  "SampledEntityClass",
  "SampleDepth",
  "SampledSoundFunction",
  "SampledSoundList",
  "SampleRate",
  "SamplingPeriod",
  "SARIMAProcess",
  "SARMAProcess",
  "SASTriangle",
  "SatelliteData",
  "SatisfiabilityCount",
  "SatisfiabilityInstances",
  "SatisfiableQ",
  "Saturday",
  "Save",
  "Saveable",
  "SaveAutoDelete",
  "SaveConnection",
  "SaveDefinitions",
  "SavitzkyGolayMatrix",
  "SawtoothWave",
  "Scale",
  "Scaled",
  "ScaleDivisions",
  "ScaledMousePosition",
  "ScaleOrigin",
  "ScalePadding",
  "ScaleRanges",
  "ScaleRangeStyle",
  "ScalingFunctions",
  "ScalingMatrix",
  "ScalingTransform",
  "Scan",
  "ScheduledTask",
  "ScheduledTaskActiveQ",
  "ScheduledTaskInformation",
  "ScheduledTaskInformationData",
  "ScheduledTaskObject",
  "ScheduledTasks",
  "SchurDecomposition",
  "ScientificForm",
  "ScientificNotationThreshold",
  "ScorerGi",
  "ScorerGiPrime",
  "ScorerHi",
  "ScorerHiPrime",
  "ScreenRectangle",
  "ScreenStyleEnvironment",
  "ScriptBaselineShifts",
  "ScriptForm",
  "ScriptLevel",
  "ScriptMinSize",
  "ScriptRules",
  "ScriptSizeMultipliers",
  "Scrollbars",
  "ScrollingOptions",
  "ScrollPosition",
  "SearchAdjustment",
  "SearchIndexObject",
  "SearchIndices",
  "SearchQueryString",
  "SearchResultObject",
  "Sec",
  "Sech",
  "SechDistribution",
  "SecondOrderConeOptimization",
  "SectionGrouping",
  "SectorChart",
  "SectorChart3D",
  "SectorOrigin",
  "SectorSpacing",
  "SecuredAuthenticationKey",
  "SecuredAuthenticationKeys",
  "SecurityCertificate",
  "SeedRandom",
  "Select",
  "Selectable",
  "SelectComponents",
  "SelectedCells",
  "SelectedNotebook",
  "SelectFirst",
  "Selection",
  "SelectionAnimate",
  "SelectionCell",
  "SelectionCellCreateCell",
  "SelectionCellDefaultStyle",
  "SelectionCellParentStyle",
  "SelectionCreateCell",
  "SelectionDebuggerTag",
  "SelectionEvaluate",
  "SelectionEvaluateCreateCell",
  "SelectionMove",
  "SelectionPlaceholder",
  "SelectWithContents",
  "SelfLoops",
  "SelfLoopStyle",
  "SemanticImport",
  "SemanticImportString",
  "SemanticInterpretation",
  "SemialgebraicComponentInstances",
  "SemidefiniteOptimization",
  "SendMail",
  "SendMessage",
  "Sequence",
  "SequenceAlignment",
  "SequenceAttentionLayer",
  "SequenceCases",
  "SequenceCount",
  "SequenceFold",
  "SequenceFoldList",
  "SequenceForm",
  "SequenceHold",
  "SequenceIndicesLayer",
  "SequenceLastLayer",
  "SequenceMostLayer",
  "SequencePosition",
  "SequencePredict",
  "SequencePredictorFunction",
  "SequenceReplace",
  "SequenceRestLayer",
  "SequenceReverseLayer",
  "SequenceSplit",
  "Series",
  "SeriesCoefficient",
  "SeriesData",
  "SeriesTermGoal",
  "ServiceConnect",
  "ServiceDisconnect",
  "ServiceExecute",
  "ServiceObject",
  "ServiceRequest",
  "ServiceResponse",
  "ServiceSubmit",
  "SessionSubmit",
  "SessionTime",
  "Set",
  "SetAccuracy",
  "SetAlphaChannel",
  "SetAttributes",
  "Setbacks",
  "SetCloudDirectory",
  "SetCookies",
  "SetDelayed",
  "SetDirectory",
  "SetEnvironment",
  "SetFileDate",
  "SetFileFormatProperties",
  "SetOptions",
  "SetOptionsPacket",
  "SetPermissions",
  "SetPrecision",
  "SetProperty",
  "SetSecuredAuthenticationKey",
  "SetSelectedNotebook",
  "SetSharedFunction",
  "SetSharedVariable",
  "SetStreamPosition",
  "SetSystemModel",
  "SetSystemOptions",
  "Setter",
  "SetterBar",
  "SetterBox",
  "SetterBoxOptions",
  "Setting",
  "SetUsers",
  "Shading",
  "Shallow",
  "ShannonWavelet",
  "ShapiroWilkTest",
  "Share",
  "SharingList",
  "Sharpen",
  "ShearingMatrix",
  "ShearingTransform",
  "ShellRegion",
  "ShenCastanMatrix",
  "ShiftedGompertzDistribution",
  "ShiftRegisterSequence",
  "Short",
  "ShortDownArrow",
  "Shortest",
  "ShortestMatch",
  "ShortestPathFunction",
  "ShortLeftArrow",
  "ShortRightArrow",
  "ShortTimeFourier",
  "ShortTimeFourierData",
  "ShortUpArrow",
  "Show",
  "ShowAutoConvert",
  "ShowAutoSpellCheck",
  "ShowAutoStyles",
  "ShowCellBracket",
  "ShowCellLabel",
  "ShowCellTags",
  "ShowClosedCellArea",
  "ShowCodeAssist",
  "ShowContents",
  "ShowControls",
  "ShowCursorTracker",
  "ShowGroupOpenCloseIcon",
  "ShowGroupOpener",
  "ShowInvisibleCharacters",
  "ShowPageBreaks",
  "ShowPredictiveInterface",
  "ShowSelection",
  "ShowShortBoxForm",
  "ShowSpecialCharacters",
  "ShowStringCharacters",
  "ShowSyntaxStyles",
  "ShrinkingDelay",
  "ShrinkWrapBoundingBox",
  "SiderealTime",
  "SiegelTheta",
  "SiegelTukeyTest",
  "SierpinskiCurve",
  "SierpinskiMesh",
  "Sign",
  "Signature",
  "SignedRankTest",
  "SignedRegionDistance",
  "SignificanceLevel",
  "SignPadding",
  "SignTest",
  "SimilarityRules",
  "SimpleGraph",
  "SimpleGraphQ",
  "SimplePolygonQ",
  "SimplePolyhedronQ",
  "Simplex",
  "Simplify",
  "Sin",
  "Sinc",
  "SinghMaddalaDistribution",
  "SingleEvaluation",
  "SingleLetterItalics",
  "SingleLetterStyle",
  "SingularValueDecomposition",
  "SingularValueList",
  "SingularValuePlot",
  "SingularValues",
  "Sinh",
  "SinhIntegral",
  "SinIntegral",
  "SixJSymbol",
  "Skeleton",
  "SkeletonTransform",
  "SkellamDistribution",
  "Skewness",
  "SkewNormalDistribution",
  "SkinStyle",
  "Skip",
  "SliceContourPlot3D",
  "SliceDensityPlot3D",
  "SliceDistribution",
  "SliceVectorPlot3D",
  "Slider",
  "Slider2D",
  "Slider2DBox",
  "Slider2DBoxOptions",
  "SliderBox",
  "SliderBoxOptions",
  "SlideShowVideo",
  "SlideView",
  "Slot",
  "SlotSequence",
  "Small",
  "SmallCircle",
  "Smaller",
  "SmithDecomposition",
  "SmithDelayCompensator",
  "SmithWatermanSimilarity",
  "SmoothDensityHistogram",
  "SmoothHistogram",
  "SmoothHistogram3D",
  "SmoothKernelDistribution",
  "SmoothPointDensity",
  "SnDispersion",
  "Snippet",
  "SnippetsVideo",
  "SnubPolyhedron",
  "SocialMediaData",
  "Socket",
  "SocketConnect",
  "SocketListen",
  "SocketListener",
  "SocketObject",
  "SocketOpen",
  "SocketReadMessage",
  "SocketReadyQ",
  "Sockets",
  "SocketWaitAll",
  "SocketWaitNext",
  "SoftmaxLayer",
  "SokalSneathDissimilarity",
  "SolarEclipse",
  "SolarSystemFeatureData",
  "SolarTime",
  "SolidAngle",
  "SolidBoundaryLoadValue",
  "SolidData",
  "SolidDisplacementCondition",
  "SolidFixedCondition",
  "SolidMechanicsPDEComponent",
  "SolidMechanicsStrain",
  "SolidMechanicsStress",
  "SolidRegionQ",
  "Solve",
  "SolveAlways",
  "SolveDelayed",
  "SolveValues",
  "Sort",
  "SortBy",
  "SortedBy",
  "SortedEntityClass",
  "Sound",
  "SoundAndGraphics",
  "SoundNote",
  "SoundVolume",
  "SourceLink",
  "SourcePDETerm",
  "Sow",
  "Space",
  "SpaceCurveData",
  "SpaceForm",
  "Spacer",
  "Spacings",
  "Span",
  "SpanAdjustments",
  "SpanCharacterRounding",
  "SpanFromAbove",
  "SpanFromBoth",
  "SpanFromLeft",
  "SpanLineThickness",
  "SpanMaxSize",
  "SpanMinSize",
  "SpanningCharacters",
  "SpanSymmetric",
  "SparseArray",
  "SparseArrayQ",
  "SpatialBinnedPointData",
  "SpatialBoundaryCorrection",
  "SpatialEstimate",
  "SpatialEstimatorFunction",
  "SpatialGraphDistribution",
  "SpatialJ",
  "SpatialMedian",
  "SpatialNoiseLevel",
  "SpatialObservationRegionQ",
  "SpatialPointData",
  "SpatialPointSelect",
  "SpatialRandomnessTest",
  "SpatialTransformationLayer",
  "SpatialTrendFunction",
  "Speak",
  "SpeakerMatchQ",
  "SpearmanRankTest",
  "SpearmanRho",
  "SpeciesData",
  "SpecificityGoal",
  "SpectralLineData",
  "Spectrogram",
  "SpectrogramArray",
  "Specularity",
  "SpeechCases",
  "SpeechInterpreter",
  "SpeechRecognize",
  "SpeechSynthesize",
  "SpellingCorrection",
  "SpellingCorrectionList",
  "SpellingDictionaries",
  "SpellingDictionariesPath",
  "SpellingOptions",
  "Sphere",
  "SphereBox",
  "SphereBoxOptions",
  "SpherePoints",
  "SphericalBesselJ",
  "SphericalBesselY",
  "SphericalHankelH1",
  "SphericalHankelH2",
  "SphericalHarmonicY",
  "SphericalPlot3D",
  "SphericalRegion",
  "SphericalShell",
  "SpheroidalEigenvalue",
  "SpheroidalJoiningFactor",
  "SpheroidalPS",
  "SpheroidalPSPrime",
  "SpheroidalQS",
  "SpheroidalQSPrime",
  "SpheroidalRadialFactor",
  "SpheroidalS1",
  "SpheroidalS1Prime",
  "SpheroidalS2",
  "SpheroidalS2Prime",
  "Splice",
  "SplicedDistribution",
  "SplineClosed",
  "SplineDegree",
  "SplineKnots",
  "SplineWeights",
  "Split",
  "SplitBy",
  "SpokenString",
  "SpotLight",
  "Sqrt",
  "SqrtBox",
  "SqrtBoxOptions",
  "Square",
  "SquaredEuclideanDistance",
  "SquareFreeQ",
  "SquareIntersection",
  "SquareMatrixQ",
  "SquareRepeatingElement",
  "SquaresR",
  "SquareSubset",
  "SquareSubsetEqual",
  "SquareSuperset",
  "SquareSupersetEqual",
  "SquareUnion",
  "SquareWave",
  "SSSTriangle",
  "StabilityMargins",
  "StabilityMarginsStyle",
  "StableDistribution",
  "Stack",
  "StackBegin",
  "StackComplete",
  "StackedDateListPlot",
  "StackedListPlot",
  "StackInhibit",
  "StadiumShape",
  "StandardAtmosphereData",
  "StandardDeviation",
  "StandardDeviationFilter",
  "StandardForm",
  "Standardize",
  "Standardized",
  "StandardOceanData",
  "StandbyDistribution",
  "Star",
  "StarClusterData",
  "StarData",
  "StarGraph",
  "StartAsynchronousTask",
  "StartExternalSession",
  "StartingStepSize",
  "StartOfLine",
  "StartOfString",
  "StartProcess",
  "StartScheduledTask",
  "StartupSound",
  "StartWebSession",
  "StateDimensions",
  "StateFeedbackGains",
  "StateOutputEstimator",
  "StateResponse",
  "StateSpaceModel",
  "StateSpaceRealization",
  "StateSpaceTransform",
  "StateTransformationLinearize",
  "StationaryDistribution",
  "StationaryWaveletPacketTransform",
  "StationaryWaveletTransform",
  "StatusArea",
  "StatusCentrality",
  "StepMonitor",
  "StereochemistryElements",
  "StieltjesGamma",
  "StippleShading",
  "StirlingS1",
  "StirlingS2",
  "StopAsynchronousTask",
  "StoppingPowerData",
  "StopScheduledTask",
  "StrataVariables",
  "StratonovichProcess",
  "StraussHardcorePointProcess",
  "StraussPointProcess",
  "StreamColorFunction",
  "StreamColorFunctionScaling",
  "StreamDensityPlot",
  "StreamMarkers",
  "StreamPlot",
  "StreamPlot3D",
  "StreamPoints",
  "StreamPosition",
  "Streams",
  "StreamScale",
  "StreamStyle",
  "StrictInequalities",
  "String",
  "StringBreak",
  "StringByteCount",
  "StringCases",
  "StringContainsQ",
  "StringCount",
  "StringDelete",
  "StringDrop",
  "StringEndsQ",
  "StringExpression",
  "StringExtract",
  "StringForm",
  "StringFormat",
  "StringFormatQ",
  "StringFreeQ",
  "StringInsert",
  "StringJoin",
  "StringLength",
  "StringMatchQ",
  "StringPadLeft",
  "StringPadRight",
  "StringPart",
  "StringPartition",
  "StringPosition",
  "StringQ",
  "StringRepeat",
  "StringReplace",
  "StringReplaceList",
  "StringReplacePart",
  "StringReverse",
  "StringRiffle",
  "StringRotateLeft",
  "StringRotateRight",
  "StringSkeleton",
  "StringSplit",
  "StringStartsQ",
  "StringTake",
  "StringTakeDrop",
  "StringTemplate",
  "StringToByteArray",
  "StringToStream",
  "StringTrim",
  "StripBoxes",
  "StripOnInput",
  "StripStyleOnPaste",
  "StripWrapperBoxes",
  "StrokeForm",
  "Struckthrough",
  "StructuralImportance",
  "StructuredArray",
  "StructuredArrayHeadQ",
  "StructuredSelection",
  "StruveH",
  "StruveL",
  "Stub",
  "StudentTDistribution",
  "Style",
  "StyleBox",
  "StyleBoxAutoDelete",
  "StyleData",
  "StyleDefinitions",
  "StyleForm",
  "StyleHints",
  "StyleKeyMapping",
  "StyleMenuListing",
  "StyleNameDialogSettings",
  "StyleNames",
  "StylePrint",
  "StyleSheetPath",
  "Subdivide",
  "Subfactorial",
  "Subgraph",
  "SubMinus",
  "SubPlus",
  "SubresultantPolynomialRemainders",
  "SubresultantPolynomials",
  "Subresultants",
  "Subscript",
  "SubscriptBox",
  "SubscriptBoxOptions",
  "Subscripted",
  "Subsequences",
  "Subset",
  "SubsetCases",
  "SubsetCount",
  "SubsetEqual",
  "SubsetMap",
  "SubsetPosition",
  "SubsetQ",
  "SubsetReplace",
  "Subsets",
  "SubStar",
  "SubstitutionSystem",
  "Subsuperscript",
  "SubsuperscriptBox",
  "SubsuperscriptBoxOptions",
  "SubtitleEncoding",
  "SubtitleTrackSelection",
  "Subtract",
  "SubtractFrom",
  "SubtractSides",
  "SubValues",
  "Succeeds",
  "SucceedsEqual",
  "SucceedsSlantEqual",
  "SucceedsTilde",
  "Success",
  "SuchThat",
  "Sum",
  "SumConvergence",
  "SummationLayer",
  "Sunday",
  "SunPosition",
  "Sunrise",
  "Sunset",
  "SuperDagger",
  "SuperMinus",
  "SupernovaData",
  "SuperPlus",
  "Superscript",
  "SuperscriptBox",
  "SuperscriptBoxOptions",
  "Superset",
  "SupersetEqual",
  "SuperStar",
  "Surd",
  "SurdForm",
  "SurfaceAppearance",
  "SurfaceArea",
  "SurfaceColor",
  "SurfaceData",
  "SurfaceGraphics",
  "SurvivalDistribution",
  "SurvivalFunction",
  "SurvivalModel",
  "SurvivalModelFit",
  "SuspendPacket",
  "SuzukiDistribution",
  "SuzukiGroupSuz",
  "SwatchLegend",
  "Switch",
  "Symbol",
  "SymbolName",
  "SymletWavelet",
  "Symmetric",
  "SymmetricDifference",
  "SymmetricGroup",
  "SymmetricKey",
  "SymmetricMatrixQ",
  "SymmetricPolynomial",
  "SymmetricReduction",
  "Symmetrize",
  "SymmetrizedArray",
  "SymmetrizedArrayRules",
  "SymmetrizedDependentComponents",
  "SymmetrizedIndependentComponents",
  "SymmetrizedReplacePart",
  "SynchronousInitialization",
  "SynchronousUpdating",
  "Synonyms",
  "Syntax",
  "SyntaxForm",
  "SyntaxInformation",
  "SyntaxLength",
  "SyntaxPacket",
  "SyntaxQ",
  "SynthesizeMissingValues",
  "SystemCredential",
  "SystemCredentialData",
  "SystemCredentialKey",
  "SystemCredentialKeys",
  "SystemCredentialStoreObject",
  "SystemDialogInput",
  "SystemException",
  "SystemGet",
  "SystemHelpPath",
  "SystemInformation",
  "SystemInformationData",
  "SystemInstall",
  "SystemModel",
  "SystemModeler",
  "SystemModelExamples",
  "SystemModelLinearize",
  "SystemModelMeasurements",
  "SystemModelParametricSimulate",
  "SystemModelPlot",
  "SystemModelProgressReporting",
  "SystemModelReliability",
  "SystemModels",
  "SystemModelSimulate",
  "SystemModelSimulateSensitivity",
  "SystemModelSimulationData",
  "SystemOpen",
  "SystemOptions",
  "SystemProcessData",
  "SystemProcesses",
  "SystemsConnectionsModel",
  "SystemsModelControllerData",
  "SystemsModelDelay",
  "SystemsModelDelayApproximate",
  "SystemsModelDelete",
  "SystemsModelDimensions",
  "SystemsModelExtract",
  "SystemsModelFeedbackConnect",
  "SystemsModelLabels",
  "SystemsModelLinearity",
  "SystemsModelMerge",
  "SystemsModelOrder",
  "SystemsModelParallelConnect",
  "SystemsModelSeriesConnect",
  "SystemsModelStateFeedbackConnect",
  "SystemsModelVectorRelativeOrders",
  "SystemStub",
  "SystemTest",
  "Tab",
  "TabFilling",
  "Table",
  "TableAlignments",
  "TableDepth",
  "TableDirections",
  "TableForm",
  "TableHeadings",
  "TableSpacing",
  "TableView",
  "TableViewBox",
  "TableViewBoxAlignment",
  "TableViewBoxBackground",
  "TableViewBoxHeaders",
  "TableViewBoxItemSize",
  "TableViewBoxItemStyle",
  "TableViewBoxOptions",
  "TabSpacings",
  "TabView",
  "TabViewBox",
  "TabViewBoxOptions",
  "TagBox",
  "TagBoxNote",
  "TagBoxOptions",
  "TaggingRules",
  "TagSet",
  "TagSetDelayed",
  "TagStyle",
  "TagUnset",
  "Take",
  "TakeDrop",
  "TakeLargest",
  "TakeLargestBy",
  "TakeList",
  "TakeSmallest",
  "TakeSmallestBy",
  "TakeWhile",
  "Tally",
  "Tan",
  "Tanh",
  "TargetDevice",
  "TargetFunctions",
  "TargetSystem",
  "TargetUnits",
  "TaskAbort",
  "TaskExecute",
  "TaskObject",
  "TaskRemove",
  "TaskResume",
  "Tasks",
  "TaskSuspend",
  "TaskWait",
  "TautologyQ",
  "TelegraphProcess",
  "TemplateApply",
  "TemplateArgBox",
  "TemplateBox",
  "TemplateBoxOptions",
  "TemplateEvaluate",
  "TemplateExpression",
  "TemplateIf",
  "TemplateObject",
  "TemplateSequence",
  "TemplateSlot",
  "TemplateSlotSequence",
  "TemplateUnevaluated",
  "TemplateVerbatim",
  "TemplateWith",
  "TemporalData",
  "TemporalRegularity",
  "Temporary",
  "TemporaryVariable",
  "TensorContract",
  "TensorDimensions",
  "TensorExpand",
  "TensorProduct",
  "TensorQ",
  "TensorRank",
  "TensorReduce",
  "TensorSymmetry",
  "TensorTranspose",
  "TensorWedge",
  "TerminatedEvaluation",
  "TernaryListPlot",
  "TernaryPlotCorners",
  "TestID",
  "TestReport",
  "TestReportObject",
  "TestResultObject",
  "Tetrahedron",
  "TetrahedronBox",
  "TetrahedronBoxOptions",
  "TeXForm",
  "TeXSave",
  "Text",
  "Text3DBox",
  "Text3DBoxOptions",
  "TextAlignment",
  "TextBand",
  "TextBoundingBox",
  "TextBox",
  "TextCases",
  "TextCell",
  "TextClipboardType",
  "TextContents",
  "TextData",
  "TextElement",
  "TextForm",
  "TextGrid",
  "TextJustification",
  "TextLine",
  "TextPacket",
  "TextParagraph",
  "TextPosition",
  "TextRecognize",
  "TextSearch",
  "TextSearchReport",
  "TextSentences",
  "TextString",
  "TextStructure",
  "TextStyle",
  "TextTranslation",
  "Texture",
  "TextureCoordinateFunction",
  "TextureCoordinateScaling",
  "TextWords",
  "Therefore",
  "ThermodynamicData",
  "ThermometerGauge",
  "Thick",
  "Thickness",
  "Thin",
  "Thinning",
  "ThisLink",
  "ThomasPointProcess",
  "ThompsonGroupTh",
  "Thread",
  "Threaded",
  "ThreadingLayer",
  "ThreeJSymbol",
  "Threshold",
  "Through",
  "Throw",
  "ThueMorse",
  "Thumbnail",
  "Thursday",
  "TickDirection",
  "TickLabelOrientation",
  "TickLabelPositioning",
  "TickLabels",
  "TickLengths",
  "TickPositions",
  "Ticks",
  "TicksStyle",
  "TideData",
  "Tilde",
  "TildeEqual",
  "TildeFullEqual",
  "TildeTilde",
  "TimeConstrained",
  "TimeConstraint",
  "TimeDirection",
  "TimeFormat",
  "TimeGoal",
  "TimelinePlot",
  "TimeObject",
  "TimeObjectQ",
  "TimeRemaining",
  "Times",
  "TimesBy",
  "TimeSeries",
  "TimeSeriesAggregate",
  "TimeSeriesForecast",
  "TimeSeriesInsert",
  "TimeSeriesInvertibility",
  "TimeSeriesMap",
  "TimeSeriesMapThread",
  "TimeSeriesModel",
  "TimeSeriesModelFit",
  "TimeSeriesResample",
  "TimeSeriesRescale",
  "TimeSeriesShift",
  "TimeSeriesThread",
  "TimeSeriesWindow",
  "TimeSystem",
  "TimeSystemConvert",
  "TimeUsed",
  "TimeValue",
  "TimeWarpingCorrespondence",
  "TimeWarpingDistance",
  "TimeZone",
  "TimeZoneConvert",
  "TimeZoneOffset",
  "Timing",
  "Tiny",
  "TitleGrouping",
  "TitsGroupT",
  "ToBoxes",
  "ToCharacterCode",
  "ToColor",
  "ToContinuousTimeModel",
  "ToDate",
  "Today",
  "ToDiscreteTimeModel",
  "ToEntity",
  "ToeplitzMatrix",
  "ToExpression",
  "ToFileName",
  "Together",
  "Toggle",
  "ToggleFalse",
  "Toggler",
  "TogglerBar",
  "TogglerBox",
  "TogglerBoxOptions",
  "ToHeldExpression",
  "ToInvertibleTimeSeries",
  "TokenWords",
  "Tolerance",
  "ToLowerCase",
  "Tomorrow",
  "ToNumberField",
  "TooBig",
  "Tooltip",
  "TooltipBox",
  "TooltipBoxOptions",
  "TooltipDelay",
  "TooltipStyle",
  "ToonShading",
  "Top",
  "TopHatTransform",
  "ToPolarCoordinates",
  "TopologicalSort",
  "ToRadicals",
  "ToRawPointer",
  "ToRules",
  "Torus",
  "TorusGraph",
  "ToSphericalCoordinates",
  "ToString",
  "Total",
  "TotalHeight",
  "TotalLayer",
  "TotalVariationFilter",
  "TotalWidth",
  "TouchPosition",
  "TouchscreenAutoZoom",
  "TouchscreenControlPlacement",
  "ToUpperCase",
  "TourVideo",
  "Tr",
  "Trace",
  "TraceAbove",
  "TraceAction",
  "TraceBackward",
  "TraceDepth",
  "TraceDialog",
  "TraceForward",
  "TraceInternal",
  "TraceLevel",
  "TraceOff",
  "TraceOn",
  "TraceOriginal",
  "TracePrint",
  "TraceScan",
  "TrackCellChangeTimes",
  "TrackedSymbols",
  "TrackingFunction",
  "TracyWidomDistribution",
  "TradingChart",
  "TraditionalForm",
  "TraditionalFunctionNotation",
  "TraditionalNotation",
  "TraditionalOrder",
  "TrainImageContentDetector",
  "TrainingProgressCheckpointing",
  "TrainingProgressFunction",
  "TrainingProgressMeasurements",
  "TrainingProgressReporting",
  "TrainingStoppingCriterion",
  "TrainingUpdateSchedule",
  "TrainTextContentDetector",
  "TransferFunctionCancel",
  "TransferFunctionExpand",
  "TransferFunctionFactor",
  "TransferFunctionModel",
  "TransferFunctionPoles",
  "TransferFunctionTransform",
  "TransferFunctionZeros",
  "TransformationClass",
  "TransformationFunction",
  "TransformationFunctions",
  "TransformationMatrix",
  "TransformedDistribution",
  "TransformedField",
  "TransformedProcess",
  "TransformedRegion",
  "TransitionDirection",
  "TransitionDuration",
  "TransitionEffect",
  "TransitiveClosureGraph",
  "TransitiveReductionGraph",
  "Translate",
  "TranslationOptions",
  "TranslationTransform",
  "Transliterate",
  "Transparent",
  "TransparentColor",
  "Transpose",
  "TransposeLayer",
  "TrapEnterKey",
  "TrapSelection",
  "TravelDirections",
  "TravelDirectionsData",
  "TravelDistance",
  "TravelDistanceList",
  "TravelMethod",
  "TravelTime",
  "Tree",
  "TreeCases",
  "TreeChildren",
  "TreeCount",
  "TreeData",
  "TreeDelete",
  "TreeDepth",
  "TreeElementCoordinates",
  "TreeElementLabel",
  "TreeElementLabelFunction",
  "TreeElementLabelStyle",
  "TreeElementShape",
  "TreeElementShapeFunction",
  "TreeElementSize",
  "TreeElementSizeFunction",
  "TreeElementStyle",
  "TreeElementStyleFunction",
  "TreeExpression",
  "TreeExtract",
  "TreeFold",
  "TreeForm",
  "TreeGraph",
  "TreeGraphQ",
  "TreeInsert",
  "TreeLayout",
  "TreeLeafCount",
  "TreeLeafQ",
  "TreeLeaves",
  "TreeLevel",
  "TreeMap",
  "TreeMapAt",
  "TreeOutline",
  "TreePlot",
  "TreePosition",
  "TreeQ",
  "TreeReplacePart",
  "TreeRules",
  "TreeScan",
  "TreeSelect",
  "TreeSize",
  "TreeTraversalOrder",
  "TrendStyle",
  "Triangle",
  "TriangleCenter",
  "TriangleConstruct",
  "TriangleMeasurement",
  "TriangleWave",
  "TriangularDistribution",
  "TriangulateMesh",
  "Trig",
  "TrigExpand",
  "TrigFactor",
  "TrigFactorList",
  "Trigger",
  "TrigReduce",
  "TrigToExp",
  "TrimmedMean",
  "TrimmedVariance",
  "TropicalStormData",
  "True",
  "TrueQ",
  "TruncatedDistribution",
  "TruncatedPolyhedron",
  "TsallisQExponentialDistribution",
  "TsallisQGaussianDistribution",
  "TTest",
  "Tube",
  "TubeBezierCurveBox",
  "TubeBezierCurveBoxOptions",
  "TubeBox",
  "TubeBoxOptions",
  "TubeBSplineCurveBox",
  "TubeBSplineCurveBoxOptions",
  "Tuesday",
  "TukeyLambdaDistribution",
  "TukeyWindow",
  "TunnelData",
  "Tuples",
  "TuranGraph",
  "TuringMachine",
  "TuttePolynomial",
  "TwoWayRule",
  "Typed",
  "TypeDeclaration",
  "TypeEvaluate",
  "TypeHint",
  "TypeOf",
  "TypeSpecifier",
  "UnateQ",
  "Uncompress",
  "UnconstrainedParameters",
  "Undefined",
  "UnderBar",
  "Underflow",
  "Underlined",
  "Underoverscript",
  "UnderoverscriptBox",
  "UnderoverscriptBoxOptions",
  "Underscript",
  "UnderscriptBox",
  "UnderscriptBoxOptions",
  "UnderseaFeatureData",
  "UndirectedEdge",
  "UndirectedGraph",
  "UndirectedGraphQ",
  "UndoOptions",
  "UndoTrackedVariables",
  "Unequal",
  "UnequalTo",
  "Unevaluated",
  "UniformDistribution",
  "UniformGraphDistribution",
  "UniformPolyhedron",
  "UniformSumDistribution",
  "Uninstall",
  "Union",
  "UnionedEntityClass",
  "UnionPlus",
  "Unique",
  "UniqueElements",
  "UnitaryMatrixQ",
  "UnitBox",
  "UnitConvert",
  "UnitDimensions",
  "Unitize",
  "UnitRootTest",
  "UnitSimplify",
  "UnitStep",
  "UnitSystem",
  "UnitTriangle",
  "UnitVector",
  "UnitVectorLayer",
  "UnityDimensions",
  "UniverseModelData",
  "UniversityData",
  "UnixTime",
  "UnlabeledTree",
  "UnmanageObject",
  "Unprotect",
  "UnregisterExternalEvaluator",
  "UnsameQ",
  "UnsavedVariables",
  "Unset",
  "UnsetShared",
  "Until",
  "UntrackedVariables",
  "Up",
  "UpArrow",
  "UpArrowBar",
  "UpArrowDownArrow",
  "Update",
  "UpdateDynamicObjects",
  "UpdateDynamicObjectsSynchronous",
  "UpdateInterval",
  "UpdatePacletSites",
  "UpdateSearchIndex",
  "UpDownArrow",
  "UpEquilibrium",
  "UpperCaseQ",
  "UpperLeftArrow",
  "UpperRightArrow",
  "UpperTriangularize",
  "UpperTriangularMatrix",
  "UpperTriangularMatrixQ",
  "Upsample",
  "UpSet",
  "UpSetDelayed",
  "UpTee",
  "UpTeeArrow",
  "UpTo",
  "UpValues",
  "URL",
  "URLBuild",
  "URLDecode",
  "URLDispatcher",
  "URLDownload",
  "URLDownloadSubmit",
  "URLEncode",
  "URLExecute",
  "URLExpand",
  "URLFetch",
  "URLFetchAsynchronous",
  "URLParse",
  "URLQueryDecode",
  "URLQueryEncode",
  "URLRead",
  "URLResponseTime",
  "URLSave",
  "URLSaveAsynchronous",
  "URLShorten",
  "URLSubmit",
  "UseEmbeddedLibrary",
  "UseGraphicsRange",
  "UserDefinedWavelet",
  "Using",
  "UsingFrontEnd",
  "UtilityFunction",
  "V2Get",
  "ValenceErrorHandling",
  "ValenceFilling",
  "ValidationLength",
  "ValidationSet",
  "ValueBox",
  "ValueBoxOptions",
  "ValueDimensions",
  "ValueForm",
  "ValuePreprocessingFunction",
  "ValueQ",
  "Values",
  "ValuesData",
  "VandermondeMatrix",
  "Variables",
  "Variance",
  "VarianceEquivalenceTest",
  "VarianceEstimatorFunction",
  "VarianceGammaDistribution",
  "VarianceGammaPointProcess",
  "VarianceTest",
  "VariogramFunction",
  "VariogramModel",
  "VectorAngle",
  "VectorAround",
  "VectorAspectRatio",
  "VectorColorFunction",
  "VectorColorFunctionScaling",
  "VectorDensityPlot",
  "VectorDisplacementPlot",
  "VectorDisplacementPlot3D",
  "VectorGlyphData",
  "VectorGreater",
  "VectorGreaterEqual",
  "VectorLess",
  "VectorLessEqual",
  "VectorMarkers",
  "VectorPlot",
  "VectorPlot3D",
  "VectorPoints",
  "VectorQ",
  "VectorRange",
  "Vectors",
  "VectorScale",
  "VectorScaling",
  "VectorSizes",
  "VectorStyle",
  "Vee",
  "Verbatim",
  "Verbose",
  "VerificationTest",
  "VerifyConvergence",
  "VerifyDerivedKey",
  "VerifyDigitalSignature",
  "VerifyFileSignature",
  "VerifyInterpretation",
  "VerifySecurityCertificates",
  "VerifySolutions",
  "VerifyTestAssumptions",
  "VersionedPreferences",
  "VertexAdd",
  "VertexCapacity",
  "VertexChromaticNumber",
  "VertexColors",
  "VertexComponent",
  "VertexConnectivity",
  "VertexContract",
  "VertexCoordinateRules",
  "VertexCoordinates",
  "VertexCorrelationSimilarity",
  "VertexCosineSimilarity",
  "VertexCount",
  "VertexCoverQ",
  "VertexDataCoordinates",
  "VertexDegree",
  "VertexDelete",
  "VertexDiceSimilarity",
  "VertexEccentricity",
  "VertexInComponent",
  "VertexInComponentGraph",
  "VertexInDegree",
  "VertexIndex",
  "VertexJaccardSimilarity",
  "VertexLabeling",
  "VertexLabels",
  "VertexLabelStyle",
  "VertexList",
  "VertexNormals",
  "VertexOutComponent",
  "VertexOutComponentGraph",
  "VertexOutDegree",
  "VertexQ",
  "VertexRenderingFunction",
  "VertexReplace",
  "VertexShape",
  "VertexShapeFunction",
  "VertexSize",
  "VertexStyle",
  "VertexTextureCoordinates",
  "VertexTransitiveGraphQ",
  "VertexWeight",
  "VertexWeightedGraphQ",
  "Vertical",
  "VerticalBar",
  "VerticalForm",
  "VerticalGauge",
  "VerticalSeparator",
  "VerticalSlider",
  "VerticalTilde",
  "Video",
  "VideoCapture",
  "VideoCombine",
  "VideoDelete",
  "VideoEncoding",
  "VideoExtractFrames",
  "VideoFrameList",
  "VideoFrameMap",
  "VideoGenerator",
  "VideoInsert",
  "VideoIntervals",
  "VideoJoin",
  "VideoMap",
  "VideoMapList",
  "VideoMapTimeSeries",
  "VideoPadding",
  "VideoPause",
  "VideoPlay",
  "VideoQ",
  "VideoRecord",
  "VideoReplace",
  "VideoScreenCapture",
  "VideoSplit",
  "VideoStop",
  "VideoStream",
  "VideoStreams",
  "VideoTimeStretch",
  "VideoTrackSelection",
  "VideoTranscode",
  "VideoTransparency",
  "VideoTrim",
  "ViewAngle",
  "ViewCenter",
  "ViewMatrix",
  "ViewPoint",
  "ViewPointSelectorSettings",
  "ViewPort",
  "ViewProjection",
  "ViewRange",
  "ViewVector",
  "ViewVertical",
  "VirtualGroupData",
  "Visible",
  "VisibleCell",
  "VoiceStyleData",
  "VoigtDistribution",
  "VolcanoData",
  "Volume",
  "VonMisesDistribution",
  "VoronoiMesh",
  "WaitAll",
  "WaitAsynchronousTask",
  "WaitNext",
  "WaitUntil",
  "WakebyDistribution",
  "WalleniusHypergeometricDistribution",
  "WaringYuleDistribution",
  "WarpingCorrespondence",
  "WarpingDistance",
  "WatershedComponents",
  "WatsonUSquareTest",
  "WattsStrogatzGraphDistribution",
  "WaveletBestBasis",
  "WaveletFilterCoefficients",
  "WaveletImagePlot",
  "WaveletListPlot",
  "WaveletMapIndexed",
  "WaveletMatrixPlot",
  "WaveletPhi",
  "WaveletPsi",
  "WaveletScale",
  "WaveletScalogram",
  "WaveletThreshold",
  "WavePDEComponent",
  "WeaklyConnectedComponents",
  "WeaklyConnectedGraphComponents",
  "WeaklyConnectedGraphQ",
  "WeakStationarity",
  "WeatherData",
  "WeatherForecastData",
  "WebAudioSearch",
  "WebColumn",
  "WebElementObject",
  "WeberE",
  "WebExecute",
  "WebImage",
  "WebImageSearch",
  "WebItem",
  "WebPageMetaInformation",
  "WebRow",
  "WebSearch",
  "WebSessionObject",
  "WebSessions",
  "WebWindowObject",
  "Wedge",
  "Wednesday",
  "WeibullDistribution",
  "WeierstrassE1",
  "WeierstrassE2",
  "WeierstrassE3",
  "WeierstrassEta1",
  "WeierstrassEta2",
  "WeierstrassEta3",
  "WeierstrassHalfPeriods",
  "WeierstrassHalfPeriodW1",
  "WeierstrassHalfPeriodW2",
  "WeierstrassHalfPeriodW3",
  "WeierstrassInvariantG2",
  "WeierstrassInvariantG3",
  "WeierstrassInvariants",
  "WeierstrassP",
  "WeierstrassPPrime",
  "WeierstrassSigma",
  "WeierstrassZeta",
  "WeightedAdjacencyGraph",
  "WeightedAdjacencyMatrix",
  "WeightedData",
  "WeightedGraphQ",
  "Weights",
  "WelchWindow",
  "WheelGraph",
  "WhenEvent",
  "Which",
  "While",
  "White",
  "WhiteNoiseProcess",
  "WhitePoint",
  "Whitespace",
  "WhitespaceCharacter",
  "WhittakerM",
  "WhittakerW",
  "WholeCellGroupOpener",
  "WienerFilter",
  "WienerProcess",
  "WignerD",
  "WignerSemicircleDistribution",
  "WikidataData",
  "WikidataSearch",
  "WikipediaData",
  "WikipediaSearch",
  "WilksW",
  "WilksWTest",
  "WindDirectionData",
  "WindingCount",
  "WindingPolygon",
  "WindowClickSelect",
  "WindowElements",
  "WindowFloating",
  "WindowFrame",
  "WindowFrameElements",
  "WindowMargins",
  "WindowMovable",
  "WindowOpacity",
  "WindowPersistentStyles",
  "WindowSelected",
  "WindowSize",
  "WindowStatusArea",
  "WindowTitle",
  "WindowToolbars",
  "WindowWidth",
  "WindSpeedData",
  "WindVectorData",
  "WinsorizedMean",
  "WinsorizedVariance",
  "WishartMatrixDistribution",
  "With",
  "WithCleanup",
  "WithLock",
  "WolframAlpha",
  "WolframAlphaDate",
  "WolframAlphaQuantity",
  "WolframAlphaResult",
  "WolframCloudSettings",
  "WolframLanguageData",
  "Word",
  "WordBoundary",
  "WordCharacter",
  "WordCloud",
  "WordCount",
  "WordCounts",
  "WordData",
  "WordDefinition",
  "WordFrequency",
  "WordFrequencyData",
  "WordList",
  "WordOrientation",
  "WordSearch",
  "WordSelectionFunction",
  "WordSeparators",
  "WordSpacings",
  "WordStem",
  "WordTranslation",
  "WorkingPrecision",
  "WrapAround",
  "Write",
  "WriteLine",
  "WriteString",
  "Wronskian",
  "XMLElement",
  "XMLObject",
  "XMLTemplate",
  "Xnor",
  "Xor",
  "XYZColor",
  "Yellow",
  "Yesterday",
  "YuleDissimilarity",
  "ZernikeR",
  "ZeroSymmetric",
  "ZeroTest",
  "ZeroWidthTimes",
  "Zeta",
  "ZetaZero",
  "ZIPCodeData",
  "ZipfDistribution",
  "ZoomCenter",
  "ZoomFactor",
  "ZTest",
  "ZTransform",
  "$Aborted",
  "$ActivationGroupID",
  "$ActivationKey",
  "$ActivationUserRegistered",
  "$AddOnsDirectory",
  "$AllowDataUpdates",
  "$AllowExternalChannelFunctions",
  "$AllowInternet",
  "$AssertFunction",
  "$Assumptions",
  "$AsynchronousTask",
  "$AudioDecoders",
  "$AudioEncoders",
  "$AudioInputDevices",
  "$AudioOutputDevices",
  "$BaseDirectory",
  "$BasePacletsDirectory",
  "$BatchInput",
  "$BatchOutput",
  "$BlockchainBase",
  "$BoxForms",
  "$ByteOrdering",
  "$CacheBaseDirectory",
  "$Canceled",
  "$ChannelBase",
  "$CharacterEncoding",
  "$CharacterEncodings",
  "$CloudAccountName",
  "$CloudBase",
  "$CloudConnected",
  "$CloudConnection",
  "$CloudCreditsAvailable",
  "$CloudEvaluation",
  "$CloudExpressionBase",
  "$CloudObjectNameFormat",
  "$CloudObjectURLType",
  "$CloudRootDirectory",
  "$CloudSymbolBase",
  "$CloudUserID",
  "$CloudUserUUID",
  "$CloudVersion",
  "$CloudVersionNumber",
  "$CloudWolframEngineVersionNumber",
  "$CommandLine",
  "$CompilationTarget",
  "$CompilerEnvironment",
  "$ConditionHold",
  "$ConfiguredKernels",
  "$Context",
  "$ContextAliases",
  "$ContextPath",
  "$ControlActiveSetting",
  "$Cookies",
  "$CookieStore",
  "$CreationDate",
  "$CryptographicEllipticCurveNames",
  "$CurrentLink",
  "$CurrentTask",
  "$CurrentWebSession",
  "$DataStructures",
  "$DateStringFormat",
  "$DefaultAudioInputDevice",
  "$DefaultAudioOutputDevice",
  "$DefaultFont",
  "$DefaultFrontEnd",
  "$DefaultImagingDevice",
  "$DefaultKernels",
  "$DefaultLocalBase",
  "$DefaultLocalKernel",
  "$DefaultMailbox",
  "$DefaultNetworkInterface",
  "$DefaultPath",
  "$DefaultProxyRules",
  "$DefaultRemoteBatchSubmissionEnvironment",
  "$DefaultRemoteKernel",
  "$DefaultSystemCredentialStore",
  "$Display",
  "$DisplayFunction",
  "$DistributedContexts",
  "$DynamicEvaluation",
  "$Echo",
  "$EmbedCodeEnvironments",
  "$EmbeddableServices",
  "$EntityStores",
  "$Epilog",
  "$EvaluationCloudBase",
  "$EvaluationCloudObject",
  "$EvaluationEnvironment",
  "$ExportFormats",
  "$ExternalIdentifierTypes",
  "$ExternalStorageBase",
  "$Failed",
  "$FinancialDataSource",
  "$FontFamilies",
  "$FormatType",
  "$FrontEnd",
  "$FrontEndSession",
  "$GeneratedAssetLocation",
  "$GeoEntityTypes",
  "$GeoLocation",
  "$GeoLocationCity",
  "$GeoLocationCountry",
  "$GeoLocationPrecision",
  "$GeoLocationSource",
  "$HistoryLength",
  "$HomeDirectory",
  "$HTMLExportRules",
  "$HTTPCookies",
  "$HTTPRequest",
  "$IgnoreEOF",
  "$ImageFormattingWidth",
  "$ImageResolution",
  "$ImagingDevice",
  "$ImagingDevices",
  "$ImportFormats",
  "$IncomingMailSettings",
  "$InitialDirectory",
  "$Initialization",
  "$InitializationContexts",
  "$Input",
  "$InputFileName",
  "$InputStreamMethods",
  "$Inspector",
  "$InstallationDate",
  "$InstallationDirectory",
  "$InterfaceEnvironment",
  "$InterpreterTypes",
  "$IterationLimit",
  "$KernelCount",
  "$KernelID",
  "$Language",
  "$LaunchDirectory",
  "$LibraryPath",
  "$LicenseExpirationDate",
  "$LicenseID",
  "$LicenseProcesses",
  "$LicenseServer",
  "$LicenseSubprocesses",
  "$LicenseType",
  "$Line",
  "$Linked",
  "$LinkSupported",
  "$LoadedFiles",
  "$LocalBase",
  "$LocalSymbolBase",
  "$MachineAddresses",
  "$MachineDomain",
  "$MachineDomains",
  "$MachineEpsilon",
  "$MachineID",
  "$MachineName",
  "$MachinePrecision",
  "$MachineType",
  "$MaxDisplayedChildren",
  "$MaxExtraPrecision",
  "$MaxLicenseProcesses",
  "$MaxLicenseSubprocesses",
  "$MaxMachineNumber",
  "$MaxNumber",
  "$MaxPiecewiseCases",
  "$MaxPrecision",
  "$MaxRootDegree",
  "$MessageGroups",
  "$MessageList",
  "$MessagePrePrint",
  "$Messages",
  "$MinMachineNumber",
  "$MinNumber",
  "$MinorReleaseNumber",
  "$MinPrecision",
  "$MobilePhone",
  "$ModuleNumber",
  "$NetworkConnected",
  "$NetworkInterfaces",
  "$NetworkLicense",
  "$NewMessage",
  "$NewSymbol",
  "$NotebookInlineStorageLimit",
  "$Notebooks",
  "$NoValue",
  "$NumberMarks",
  "$Off",
  "$OperatingSystem",
  "$Output",
  "$OutputForms",
  "$OutputSizeLimit",
  "$OutputStreamMethods",
  "$Packages",
  "$ParentLink",
  "$ParentProcessID",
  "$PasswordFile",
  "$PatchLevelID",
  "$Path",
  "$PathnameSeparator",
  "$PerformanceGoal",
  "$Permissions",
  "$PermissionsGroupBase",
  "$PersistenceBase",
  "$PersistencePath",
  "$PipeSupported",
  "$PlotTheme",
  "$Post",
  "$Pre",
  "$PreferencesDirectory",
  "$PreInitialization",
  "$PrePrint",
  "$PreRead",
  "$PrintForms",
  "$PrintLiteral",
  "$Printout3DPreviewer",
  "$ProcessID",
  "$ProcessorCount",
  "$ProcessorType",
  "$ProductInformation",
  "$ProgramName",
  "$ProgressReporting",
  "$PublisherID",
  "$RandomGeneratorState",
  "$RandomState",
  "$RecursionLimit",
  "$RegisteredDeviceClasses",
  "$RegisteredUserName",
  "$ReleaseNumber",
  "$RequesterAddress",
  "$RequesterCloudUserID",
  "$RequesterCloudUserUUID",
  "$RequesterWolframID",
  "$RequesterWolframUUID",
  "$ResourceSystemBase",
  "$ResourceSystemPath",
  "$RootDirectory",
  "$ScheduledTask",
  "$ScriptCommandLine",
  "$ScriptInputString",
  "$SecuredAuthenticationKeyTokens",
  "$ServiceCreditsAvailable",
  "$Services",
  "$SessionID",
  "$SetParentLink",
  "$SharedFunctions",
  "$SharedVariables",
  "$SoundDisplay",
  "$SoundDisplayFunction",
  "$SourceLink",
  "$SSHAuthentication",
  "$SubtitleDecoders",
  "$SubtitleEncoders",
  "$SummaryBoxDataSizeLimit",
  "$SuppressInputFormHeads",
  "$SynchronousEvaluation",
  "$SyntaxHandler",
  "$System",
  "$SystemCharacterEncoding",
  "$SystemCredentialStore",
  "$SystemID",
  "$SystemMemory",
  "$SystemShell",
  "$SystemTimeZone",
  "$SystemWordLength",
  "$TargetSystems",
  "$TemplatePath",
  "$TemporaryDirectory",
  "$TemporaryPrefix",
  "$TestFileName",
  "$TextStyle",
  "$TimedOut",
  "$TimeUnit",
  "$TimeZone",
  "$TimeZoneEntity",
  "$TopDirectory",
  "$TraceOff",
  "$TraceOn",
  "$TracePattern",
  "$TracePostAction",
  "$TracePreAction",
  "$UnitSystem",
  "$Urgent",
  "$UserAddOnsDirectory",
  "$UserAgentLanguages",
  "$UserAgentMachine",
  "$UserAgentName",
  "$UserAgentOperatingSystem",
  "$UserAgentString",
  "$UserAgentVersion",
  "$UserBaseDirectory",
  "$UserBasePacletsDirectory",
  "$UserDocumentsDirectory",
  "$Username",
  "$UserName",
  "$UserURLBase",
  "$Version",
  "$VersionNumber",
  "$VideoDecoders",
  "$VideoEncoders",
  "$VoiceStyles",
  "$WolframDocumentsDirectory",
  "$WolframID",
  "$WolframUUID"
];
function mathematica(hljs) {
  const regex = hljs.regex;
  const BASE_RE = /([2-9]|[1-2]\d|[3][0-5])\^\^/;
  const BASE_DIGITS_RE = /(\w*\.\w+|\w+\.\w*|\w+)/;
  const NUMBER_RE = /(\d*\.\d+|\d+\.\d*|\d+)/;
  const BASE_NUMBER_RE = regex.either(regex.concat(BASE_RE, BASE_DIGITS_RE), NUMBER_RE);
  const ACCURACY_RE = /``[+-]?(\d*\.\d+|\d+\.\d*|\d+)/;
  const PRECISION_RE = /`([+-]?(\d*\.\d+|\d+\.\d*|\d+))?/;
  const APPROXIMATE_NUMBER_RE = regex.either(ACCURACY_RE, PRECISION_RE);
  const SCIENTIFIC_NOTATION_RE = /\*\^[+-]?\d+/;
  const MATHEMATICA_NUMBER_RE = regex.concat(
    BASE_NUMBER_RE,
    regex.optional(APPROXIMATE_NUMBER_RE),
    regex.optional(SCIENTIFIC_NOTATION_RE)
  );
  const NUMBERS = {
    className: "number",
    relevance: 0,
    begin: MATHEMATICA_NUMBER_RE
  };
  const SYMBOL_RE = /[a-zA-Z$][a-zA-Z0-9$]*/;
  const SYSTEM_SYMBOLS_SET = new Set(SYSTEM_SYMBOLS);
  const SYMBOLS = { variants: [
    {
      className: "builtin-symbol",
      begin: SYMBOL_RE,
      // for performance out of fear of regex.either(...Mathematica.SYSTEM_SYMBOLS)
      "on:begin": (match, response) => {
        if (!SYSTEM_SYMBOLS_SET.has(match[0])) response.ignoreMatch();
      }
    },
    {
      className: "symbol",
      relevance: 0,
      begin: SYMBOL_RE
    }
  ] };
  const NAMED_CHARACTER = {
    className: "named-character",
    begin: /\\\[[$a-zA-Z][$a-zA-Z0-9]+\]/
  };
  const OPERATORS = {
    className: "operator",
    relevance: 0,
    begin: /[+\-*/,;.:@~=><&|_`'^?!%]+/
  };
  const PATTERNS = {
    className: "pattern",
    relevance: 0,
    begin: /([a-zA-Z$][a-zA-Z0-9$]*)?_+([a-zA-Z$][a-zA-Z0-9$]*)?/
  };
  const SLOTS = {
    className: "slot",
    relevance: 0,
    begin: /#[a-zA-Z$][a-zA-Z0-9$]*|#+[0-9]?/
  };
  const BRACES = {
    className: "brace",
    relevance: 0,
    begin: /[[\](){}]/
  };
  const MESSAGES = {
    className: "message-name",
    relevance: 0,
    begin: regex.concat("::", SYMBOL_RE)
  };
  return {
    name: "Mathematica",
    aliases: [
      "mma",
      "wl"
    ],
    classNameAliases: {
      brace: "punctuation",
      pattern: "type",
      slot: "type",
      symbol: "variable",
      "named-character": "variable",
      "builtin-symbol": "built_in",
      "message-name": "string"
    },
    contains: [
      hljs.COMMENT(/\(\*/, /\*\)/, { contains: ["self"] }),
      PATTERNS,
      SLOTS,
      MESSAGES,
      SYMBOLS,
      NAMED_CHARACTER,
      hljs.QUOTE_STRING_MODE,
      NUMBERS,
      OPERATORS,
      BRACES
    ]
  };
}
function matlab(hljs) {
  const TRANSPOSE_RE = "('|\\.')+";
  const TRANSPOSE = {
    relevance: 0,
    contains: [{ begin: TRANSPOSE_RE }]
  };
  return {
    name: "Matlab",
    keywords: {
      keyword: "arguments break case catch classdef continue else elseif end enumeration events for function global if methods otherwise parfor persistent properties return spmd switch try while",
      built_in: "sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i|0 inf nan isnan isinf isfinite j|0 why compan gallery hadamard hankel hilb invhilb magic pascal rosser toeplitz vander wilkinson max min nanmax nanmin mean nanmean type table readtable writetable sortrows sort figure plot plot3 scatter scatter3 cellfun legend intersect ismember procrustes hold num2cell "
    },
    illegal: '(//|"|#|/\\*|\\s+/\\w+)',
    contains: [
      {
        className: "function",
        beginKeywords: "function",
        end: "$",
        contains: [
          hljs.UNDERSCORE_TITLE_MODE,
          {
            className: "params",
            variants: [
              {
                begin: "\\(",
                end: "\\)"
              },
              {
                begin: "\\[",
                end: "\\]"
              }
            ]
          }
        ]
      },
      {
        className: "built_in",
        begin: /true|false/,
        relevance: 0,
        starts: TRANSPOSE
      },
      {
        begin: "[a-zA-Z][a-zA-Z_0-9]*" + TRANSPOSE_RE,
        relevance: 0
      },
      {
        className: "number",
        begin: hljs.C_NUMBER_RE,
        relevance: 0,
        starts: TRANSPOSE
      },
      {
        className: "string",
        begin: "'",
        end: "'",
        contains: [{ begin: "''" }]
      },
      {
        begin: /\]|\}|\)/,
        relevance: 0,
        starts: TRANSPOSE
      },
      {
        className: "string",
        begin: '"',
        end: '"',
        contains: [{ begin: '""' }],
        starts: TRANSPOSE
      },
      hljs.COMMENT("^\\s*%\\{\\s*$", "^\\s*%\\}\\s*$"),
      hljs.COMMENT("%", "$")
    ]
  };
}
function maxima(hljs) {
  const KEYWORDS2 = "if then else elseif for thru do while unless step in and or not";
  const LITERALS2 = "true false unknown inf minf ind und %e %i %pi %phi %gamma";
  const BUILTIN_FUNCTIONS = " abasep abs absint absolute_real_time acos acosh acot acoth acsc acsch activate addcol add_edge add_edges addmatrices addrow add_vertex add_vertices adjacency_matrix adjoin adjoint af agd airy airy_ai airy_bi airy_dai airy_dbi algsys alg_type alias allroots alphacharp alphanumericp amortization %and annuity_fv annuity_pv antid antidiff AntiDifference append appendfile apply apply1 apply2 applyb1 apropos args arit_amortization arithmetic arithsum array arrayapply arrayinfo arraymake arraysetapply ascii asec asech asin asinh askinteger asksign assoc assoc_legendre_p assoc_legendre_q assume assume_external_byte_order asympa at atan atan2 atanh atensimp atom atvalue augcoefmatrix augmented_lagrangian_method av average_degree backtrace bars barsplot barsplot_description base64 base64_decode bashindices batch batchload bc2 bdvac belln benefit_cost bern bernpoly bernstein_approx bernstein_expand bernstein_poly bessel bessel_i bessel_j bessel_k bessel_simplify bessel_y beta beta_incomplete beta_incomplete_generalized beta_incomplete_regularized bezout bfallroots bffac bf_find_root bf_fmin_cobyla bfhzeta bfloat bfloatp bfpsi bfpsi0 bfzeta biconnected_components bimetric binomial bipartition block blockmatrixp bode_gain bode_phase bothcoef box boxplot boxplot_description break bug_report build_info|10 buildq build_sample burn cabs canform canten cardinality carg cartan cartesian_product catch cauchy_matrix cbffac cdf_bernoulli cdf_beta cdf_binomial cdf_cauchy cdf_chi2 cdf_continuous_uniform cdf_discrete_uniform cdf_exp cdf_f cdf_gamma cdf_general_finite_discrete cdf_geometric cdf_gumbel cdf_hypergeometric cdf_laplace cdf_logistic cdf_lognormal cdf_negative_binomial cdf_noncentral_chi2 cdf_noncentral_student_t cdf_normal cdf_pareto cdf_poisson cdf_rank_sum cdf_rayleigh cdf_signed_rank cdf_student_t cdf_weibull cdisplay ceiling central_moment cequal cequalignore cf cfdisrep cfexpand cgeodesic cgreaterp cgreaterpignore changename changevar chaosgame charat charfun charfun2 charlist charp charpoly chdir chebyshev_t chebyshev_u checkdiv check_overlaps chinese cholesky christof chromatic_index chromatic_number cint circulant_graph clear_edge_weight clear_rules clear_vertex_label clebsch_gordan clebsch_graph clessp clesspignore close closefile cmetric coeff coefmatrix cograd col collapse collectterms columnop columnspace columnswap columnvector combination combine comp2pui compare compfile compile compile_file complement_graph complete_bipartite_graph complete_graph complex_number_p components compose_functions concan concat conjugate conmetderiv connected_components connect_vertices cons constant constantp constituent constvalue cont2part content continuous_freq contortion contour_plot contract contract_edge contragrad contrib_ode convert coord copy copy_file copy_graph copylist copymatrix cor cos cosh cot coth cov cov1 covdiff covect covers crc24sum create_graph create_list csc csch csetup cspline ctaylor ct_coordsys ctransform ctranspose cube_graph cuboctahedron_graph cunlisp cv cycle_digraph cycle_graph cylindrical days360 dblint deactivate declare declare_constvalue declare_dimensions declare_fundamental_dimensions declare_fundamental_units declare_qty declare_translated declare_unit_conversion declare_units declare_weights decsym defcon define define_alt_display define_variable defint defmatch defrule defstruct deftaylor degree_sequence del delete deleten delta demo demoivre denom depends derivdegree derivlist describe desolve determinant dfloat dgauss_a dgauss_b dgeev dgemm dgeqrf dgesv dgesvd diag diagmatrix diag_matrix diagmatrixp diameter diff digitcharp dimacs_export dimacs_import dimension dimensionless dimensions dimensions_as_list direct directory discrete_freq disjoin disjointp disolate disp dispcon dispform dispfun dispJordan display disprule dispterms distrib divide divisors divsum dkummer_m dkummer_u dlange dodecahedron_graph dotproduct dotsimp dpart draw draw2d draw3d drawdf draw_file draw_graph dscalar echelon edge_coloring edge_connectivity edges eigens_by_jacobi eigenvalues eigenvectors eighth einstein eivals eivects elapsed_real_time elapsed_run_time ele2comp ele2polynome ele2pui elem elementp elevation_grid elim elim_allbut eliminate eliminate_using ellipse elliptic_e elliptic_ec elliptic_eu elliptic_f elliptic_kc elliptic_pi ematrix empty_graph emptyp endcons entermatrix entertensor entier equal equalp equiv_classes erf erfc erf_generalized erfi errcatch error errormsg errors euler ev eval_string evenp every evolution evolution2d evundiff example exp expand expandwrt expandwrt_factored expint expintegral_chi expintegral_ci expintegral_e expintegral_e1 expintegral_ei expintegral_e_simplify expintegral_li expintegral_shi expintegral_si explicit explose exponentialize express expt exsec extdiff extract_linear_equations extremal_subset ezgcd %f f90 facsum factcomb factor factorfacsum factorial factorout factorsum facts fast_central_elements fast_linsolve fasttimes featurep fernfale fft fib fibtophi fifth filename_merge file_search file_type fillarray findde find_root find_root_abs find_root_error find_root_rel first fix flatten flength float floatnump floor flower_snark flush flush1deriv flushd flushnd flush_output fmin_cobyla forget fortran fourcos fourexpand fourier fourier_elim fourint fourintcos fourintsin foursimp foursin fourth fposition frame_bracket freeof freshline fresnel_c fresnel_s from_adjacency_matrix frucht_graph full_listify fullmap fullmapl fullratsimp fullratsubst fullsetify funcsolve fundamental_dimensions fundamental_units fundef funmake funp fv g0 g1 gamma gamma_greek gamma_incomplete gamma_incomplete_generalized gamma_incomplete_regularized gauss gauss_a gauss_b gaussprob gcd gcdex gcdivide gcfac gcfactor gd generalized_lambert_w genfact gen_laguerre genmatrix gensym geo_amortization geo_annuity_fv geo_annuity_pv geomap geometric geometric_mean geosum get getcurrentdirectory get_edge_weight getenv get_lu_factors get_output_stream_string get_pixel get_plot_option get_tex_environment get_tex_environment_default get_vertex_label gfactor gfactorsum ggf girth global_variances gn gnuplot_close gnuplot_replot gnuplot_reset gnuplot_restart gnuplot_start go Gosper GosperSum gr2d gr3d gradef gramschmidt graph6_decode graph6_encode graph6_export graph6_import graph_center graph_charpoly graph_eigenvalues graph_flow graph_order graph_periphery graph_product graph_size graph_union great_rhombicosidodecahedron_graph great_rhombicuboctahedron_graph grid_graph grind grobner_basis grotzch_graph hamilton_cycle hamilton_path hankel hankel_1 hankel_2 harmonic harmonic_mean hav heawood_graph hermite hessian hgfred hilbertmap hilbert_matrix hipow histogram histogram_description hodge horner hypergeometric i0 i1 %ibes ic1 ic2 ic_convert ichr1 ichr2 icosahedron_graph icosidodecahedron_graph icurvature ident identfor identity idiff idim idummy ieqn %if ifactors iframes ifs igcdex igeodesic_coords ilt image imagpart imetric implicit implicit_derivative implicit_plot indexed_tensor indices induced_subgraph inferencep inference_result infix info_display init_atensor init_ctensor in_neighbors innerproduct inpart inprod inrt integerp integer_partitions integrate intersect intersection intervalp intopois intosum invariant1 invariant2 inverse_fft inverse_jacobi_cd inverse_jacobi_cn inverse_jacobi_cs inverse_jacobi_dc inverse_jacobi_dn inverse_jacobi_ds inverse_jacobi_nc inverse_jacobi_nd inverse_jacobi_ns inverse_jacobi_sc inverse_jacobi_sd inverse_jacobi_sn invert invert_by_adjoint invert_by_lu inv_mod irr is is_biconnected is_bipartite is_connected is_digraph is_edge_in_graph is_graph is_graph_or_digraph ishow is_isomorphic isolate isomorphism is_planar isqrt isreal_p is_sconnected is_tree is_vertex_in_graph items_inference %j j0 j1 jacobi jacobian jacobi_cd jacobi_cn jacobi_cs jacobi_dc jacobi_dn jacobi_ds jacobi_nc jacobi_nd jacobi_ns jacobi_p jacobi_sc jacobi_sd jacobi_sn JF jn join jordan julia julia_set julia_sin %k kdels kdelta kill killcontext kostka kron_delta kronecker_product kummer_m kummer_u kurtosis kurtosis_bernoulli kurtosis_beta kurtosis_binomial kurtosis_chi2 kurtosis_continuous_uniform kurtosis_discrete_uniform kurtosis_exp kurtosis_f kurtosis_gamma kurtosis_general_finite_discrete kurtosis_geometric kurtosis_gumbel kurtosis_hypergeometric kurtosis_laplace kurtosis_logistic kurtosis_lognormal kurtosis_negative_binomial kurtosis_noncentral_chi2 kurtosis_noncentral_student_t kurtosis_normal kurtosis_pareto kurtosis_poisson kurtosis_rayleigh kurtosis_student_t kurtosis_weibull label labels lagrange laguerre lambda lambert_w laplace laplacian_matrix last lbfgs lc2kdt lcharp lc_l lcm lc_u ldefint ldisp ldisplay legendre_p legendre_q leinstein length let letrules letsimp levi_civita lfreeof lgtreillis lhs li liediff limit Lindstedt linear linearinterpol linear_program linear_regression line_graph linsolve listarray list_correlations listify list_matrix_entries list_nc_monomials listoftens listofvars listp lmax lmin load loadfile local locate_matrix_entry log logcontract log_gamma lopow lorentz_gauge lowercasep lpart lratsubst lreduce lriemann lsquares_estimates lsquares_estimates_approximate lsquares_estimates_exact lsquares_mse lsquares_residual_mse lsquares_residuals lsum ltreillis lu_backsub lucas lu_factor %m macroexpand macroexpand1 make_array makebox makefact makegamma make_graph make_level_picture makelist makeOrders make_poly_continent make_poly_country make_polygon make_random_state make_rgb_picture makeset make_string_input_stream make_string_output_stream make_transform mandelbrot mandelbrot_set map mapatom maplist matchdeclare matchfix mat_cond mat_fullunblocker mat_function mathml_display mat_norm matrix matrixmap matrixp matrix_size mattrace mat_trace mat_unblocker max max_clique max_degree max_flow maximize_lp max_independent_set max_matching maybe md5sum mean mean_bernoulli mean_beta mean_binomial mean_chi2 mean_continuous_uniform mean_deviation mean_discrete_uniform mean_exp mean_f mean_gamma mean_general_finite_discrete mean_geometric mean_gumbel mean_hypergeometric mean_laplace mean_logistic mean_lognormal mean_negative_binomial mean_noncentral_chi2 mean_noncentral_student_t mean_normal mean_pareto mean_poisson mean_rayleigh mean_student_t mean_weibull median median_deviation member mesh metricexpandall mgf1_sha1 min min_degree min_edge_cut minfactorial minimalPoly minimize_lp minimum_spanning_tree minor minpack_lsquares minpack_solve min_vertex_cover min_vertex_cut mkdir mnewton mod mode_declare mode_identity ModeMatrix moebius mon2schur mono monomial_dimensions multibernstein_poly multi_display_for_texinfo multi_elem multinomial multinomial_coeff multi_orbit multiplot_mode multi_pui multsym multthru mycielski_graph nary natural_unit nc_degree ncexpt ncharpoly negative_picture neighbors new newcontext newdet new_graph newline newton new_variable next_prime nicedummies niceindices ninth nofix nonarray noncentral_moment nonmetricity nonnegintegerp nonscalarp nonzeroandfreeof notequal nounify nptetrad npv nroots nterms ntermst nthroot nullity nullspace num numbered_boundaries numberp number_to_octets num_distinct_partitions numerval numfactor num_partitions nusum nzeta nzetai nzetar octets_to_number octets_to_oid odd_girth oddp ode2 ode_check odelin oid_to_octets op opena opena_binary openr openr_binary openw openw_binary operatorp opsubst optimize %or orbit orbits ordergreat ordergreatp orderless orderlessp orthogonal_complement orthopoly_recur orthopoly_weight outermap out_neighbors outofpois pade parabolic_cylinder_d parametric parametric_surface parg parGosper parse_string parse_timedate part part2cont partfrac partition partition_set partpol path_digraph path_graph pathname_directory pathname_name pathname_type pdf_bernoulli pdf_beta pdf_binomial pdf_cauchy pdf_chi2 pdf_continuous_uniform pdf_discrete_uniform pdf_exp pdf_f pdf_gamma pdf_general_finite_discrete pdf_geometric pdf_gumbel pdf_hypergeometric pdf_laplace pdf_logistic pdf_lognormal pdf_negative_binomial pdf_noncentral_chi2 pdf_noncentral_student_t pdf_normal pdf_pareto pdf_poisson pdf_rank_sum pdf_rayleigh pdf_signed_rank pdf_student_t pdf_weibull pearson_skewness permanent permut permutation permutations petersen_graph petrov pickapart picture_equalp picturep piechart piechart_description planar_embedding playback plog plot2d plot3d plotdf ploteq plsquares pochhammer points poisdiff poisexpt poisint poismap poisplus poissimp poissubst poistimes poistrim polar polarform polartorect polar_to_xy poly_add poly_buchberger poly_buchberger_criterion poly_colon_ideal poly_content polydecomp poly_depends_p poly_elimination_ideal poly_exact_divide poly_expand poly_expt poly_gcd polygon poly_grobner poly_grobner_equal poly_grobner_member poly_grobner_subsetp poly_ideal_intersection poly_ideal_polysaturation poly_ideal_polysaturation1 poly_ideal_saturation poly_ideal_saturation1 poly_lcm poly_minimization polymod poly_multiply polynome2ele polynomialp poly_normal_form poly_normalize poly_normalize_list poly_polysaturation_extension poly_primitive_part poly_pseudo_divide poly_reduced_grobner poly_reduction poly_saturation_extension poly_s_polynomial poly_subtract polytocompanion pop postfix potential power_mod powerseries powerset prefix prev_prime primep primes principal_components print printf printfile print_graph printpois printprops prodrac product properties propvars psi psubst ptriangularize pui pui2comp pui2ele pui2polynome pui_direct puireduc push put pv qput qrange qty quad_control quad_qag quad_qagi quad_qagp quad_qags quad_qawc quad_qawf quad_qawo quad_qaws quadrilateral quantile quantile_bernoulli quantile_beta quantile_binomial quantile_cauchy quantile_chi2 quantile_continuous_uniform quantile_discrete_uniform quantile_exp quantile_f quantile_gamma quantile_general_finite_discrete quantile_geometric quantile_gumbel quantile_hypergeometric quantile_laplace quantile_logistic quantile_lognormal quantile_negative_binomial quantile_noncentral_chi2 quantile_noncentral_student_t quantile_normal quantile_pareto quantile_poisson quantile_rayleigh quantile_student_t quantile_weibull quartile_skewness quit qunit quotient racah_v racah_w radcan radius random random_bernoulli random_beta random_binomial random_bipartite_graph random_cauchy random_chi2 random_continuous_uniform random_digraph random_discrete_uniform random_exp random_f random_gamma random_general_finite_discrete random_geometric random_graph random_graph1 random_gumbel random_hypergeometric random_laplace random_logistic random_lognormal random_negative_binomial random_network random_noncentral_chi2 random_noncentral_student_t random_normal random_pareto random_permutation random_poisson random_rayleigh random_regular_graph random_student_t random_tournament random_tree random_weibull range rank rat ratcoef ratdenom ratdiff ratdisrep ratexpand ratinterpol rational rationalize ratnumer ratnump ratp ratsimp ratsubst ratvars ratweight read read_array read_binary_array read_binary_list read_binary_matrix readbyte readchar read_hashed_array readline read_list read_matrix read_nested_list readonly read_xpm real_imagpart_to_conjugate realpart realroots rearray rectangle rectform rectform_log_if_constant recttopolar rediff reduce_consts reduce_order region region_boundaries region_boundaries_plus rem remainder remarray rembox remcomps remcon remcoord remfun remfunction remlet remove remove_constvalue remove_dimensions remove_edge remove_fundamental_dimensions remove_fundamental_units remove_plot_option remove_vertex rempart remrule remsym remvalue rename rename_file reset reset_displays residue resolvante resolvante_alternee1 resolvante_bipartite resolvante_diedrale resolvante_klein resolvante_klein3 resolvante_produit_sym resolvante_unitaire resolvante_vierer rest resultant return reveal reverse revert revert2 rgb2level rhs ricci riemann rinvariant risch rk rmdir rncombine romberg room rootscontract round row rowop rowswap rreduce run_testsuite %s save saving scalarp scaled_bessel_i scaled_bessel_i0 scaled_bessel_i1 scalefactors scanmap scatterplot scatterplot_description scene schur2comp sconcat scopy scsimp scurvature sdowncase sec sech second sequal sequalignore set_alt_display setdifference set_draw_defaults set_edge_weight setelmx setequalp setify setp set_partitions set_plot_option set_prompt set_random_state set_tex_environment set_tex_environment_default setunits setup_autoload set_up_dot_simplifications set_vertex_label seventh sexplode sf sha1sum sha256sum shortest_path shortest_weighted_path show showcomps showratvars sierpinskiale sierpinskimap sign signum similaritytransform simp_inequality simplify_sum simplode simpmetderiv simtran sin sinh sinsert sinvertcase sixth skewness skewness_bernoulli skewness_beta skewness_binomial skewness_chi2 skewness_continuous_uniform skewness_discrete_uniform skewness_exp skewness_f skewness_gamma skewness_general_finite_discrete skewness_geometric skewness_gumbel skewness_hypergeometric skewness_laplace skewness_logistic skewness_lognormal skewness_negative_binomial skewness_noncentral_chi2 skewness_noncentral_student_t skewness_normal skewness_pareto skewness_poisson skewness_rayleigh skewness_student_t skewness_weibull slength smake small_rhombicosidodecahedron_graph small_rhombicuboctahedron_graph smax smin smismatch snowmap snub_cube_graph snub_dodecahedron_graph solve solve_rec solve_rec_rat some somrac sort sparse6_decode sparse6_encode sparse6_export sparse6_import specint spherical spherical_bessel_j spherical_bessel_y spherical_hankel1 spherical_hankel2 spherical_harmonic spherical_to_xyz splice split sposition sprint sqfr sqrt sqrtdenest sremove sremovefirst sreverse ssearch ssort sstatus ssubst ssubstfirst staircase standardize standardize_inverse_trig starplot starplot_description status std std1 std_bernoulli std_beta std_binomial std_chi2 std_continuous_uniform std_discrete_uniform std_exp std_f std_gamma std_general_finite_discrete std_geometric std_gumbel std_hypergeometric std_laplace std_logistic std_lognormal std_negative_binomial std_noncentral_chi2 std_noncentral_student_t std_normal std_pareto std_poisson std_rayleigh std_student_t std_weibull stemplot stirling stirling1 stirling2 strim striml strimr string stringout stringp strong_components struve_h struve_l sublis sublist sublist_indices submatrix subsample subset subsetp subst substinpart subst_parallel substpart substring subvar subvarp sum sumcontract summand_to_rec supcase supcontext symbolp symmdifference symmetricp system take_channel take_inference tan tanh taylor taylorinfo taylorp taylor_simplifier taytorat tcl_output tcontract tellrat tellsimp tellsimpafter tentex tenth test_mean test_means_difference test_normality test_proportion test_proportions_difference test_rank_sum test_sign test_signed_rank test_variance test_variance_ratio tex tex1 tex_display texput %th third throw time timedate timer timer_info tldefint tlimit todd_coxeter toeplitz tokens to_lisp topological_sort to_poly to_poly_solve totaldisrep totalfourier totient tpartpol trace tracematrix trace_options transform_sample translate translate_file transpose treefale tree_reduce treillis treinat triangle triangularize trigexpand trigrat trigreduce trigsimp trunc truncate truncated_cube_graph truncated_dodecahedron_graph truncated_icosahedron_graph truncated_tetrahedron_graph tr_warnings_get tube tutte_graph ueivects uforget ultraspherical underlying_graph undiff union unique uniteigenvectors unitp units unit_step unitvector unorder unsum untellrat untimer untrace uppercasep uricci uriemann uvect vandermonde_matrix var var1 var_bernoulli var_beta var_binomial var_chi2 var_continuous_uniform var_discrete_uniform var_exp var_f var_gamma var_general_finite_discrete var_geometric var_gumbel var_hypergeometric var_laplace var_logistic var_lognormal var_negative_binomial var_noncentral_chi2 var_noncentral_student_t var_normal var_pareto var_poisson var_rayleigh var_student_t var_weibull vector vectorpotential vectorsimp verbify vers vertex_coloring vertex_connectivity vertex_degree vertex_distance vertex_eccentricity vertex_in_degree vertex_out_degree vertices vertices_to_cycle vertices_to_path %w weyl wheel_graph wiener_index wigner_3j wigner_6j wigner_9j with_stdout write_binary_data writebyte write_data writefile wronskian xreduce xthru %y Zeilberger zeroequiv zerofor zeromatrix zeromatrixp zeta zgeev zheev zlange zn_add_table zn_carmichael_lambda zn_characteristic_factors zn_determinant zn_factor_generators zn_invert_by_lu zn_log zn_mult_table absboxchar activecontexts adapt_depth additive adim aform algebraic algepsilon algexact aliases allbut all_dotsimp_denoms allocation allsym alphabetic animation antisymmetric arrays askexp assume_pos assume_pos_pred assumescalar asymbol atomgrad atrig1 axes axis_3d axis_bottom axis_left axis_right axis_top azimuth background background_color backsubst berlefact bernstein_explicit besselexpand beta_args_sum_to_integer beta_expand bftorat bftrunc bindtest border boundaries_array box boxchar breakup %c capping cauchysum cbrange cbtics center cflength cframe_flag cnonmet_flag color color_bar color_bar_tics colorbox columns commutative complex cone context contexts contour contour_levels cosnpiflag ctaypov ctaypt ctayswitch ctayvar ct_coords ctorsion_flag ctrgsimp cube current_let_rule_package cylinder data_file_name debugmode decreasing default_let_rule_package delay dependencies derivabbrev derivsubst detout diagmetric diff dim dimensions dispflag display2d|10 display_format_internal distribute_over doallmxops domain domxexpt domxmxops domxnctimes dontfactor doscmxops doscmxplus dot0nscsimp dot0simp dot1simp dotassoc dotconstrules dotdistrib dotexptsimp dotident dotscrules draw_graph_program draw_realpart edge_color edge_coloring edge_partition edge_type edge_width %edispflag elevation %emode endphi endtheta engineering_format_floats enhanced3d %enumer epsilon_lp erfflag erf_representation errormsg error_size error_syms error_type %e_to_numlog eval even evenfun evflag evfun ev_point expandwrt_denom expintexpand expintrep expon expop exptdispflag exptisolate exptsubst facexpand facsum_combine factlim factorflag factorial_expand factors_only fb feature features file_name file_output_append file_search_demo file_search_lisp file_search_maxima|10 file_search_tests file_search_usage file_type_lisp file_type_maxima|10 fill_color fill_density filled_func fixed_vertices flipflag float2bf font font_size fortindent fortspaces fpprec fpprintprec functions gamma_expand gammalim gdet genindex gensumnum GGFCFMAX GGFINFINITY globalsolve gnuplot_command gnuplot_curve_styles gnuplot_curve_titles gnuplot_default_term_command gnuplot_dumb_term_command gnuplot_file_args gnuplot_file_name gnuplot_out_file gnuplot_pdf_term_command gnuplot_pm3d gnuplot_png_term_command gnuplot_postamble gnuplot_preamble gnuplot_ps_term_command gnuplot_svg_term_command gnuplot_term gnuplot_view_args Gosper_in_Zeilberger gradefs grid grid2d grind halfangles head_angle head_both head_length head_type height hypergeometric_representation %iargs ibase icc1 icc2 icounter idummyx ieqnprint ifb ifc1 ifc2 ifg ifgi ifr iframe_bracket_form ifri igeowedge_flag ikt1 ikt2 imaginary inchar increasing infeval infinity inflag infolists inm inmc1 inmc2 intanalysis integer integervalued integrate_use_rootsof integration_constant integration_constant_counter interpolate_color intfaclim ip_grid ip_grid_in irrational isolate_wrt_times iterations itr julia_parameter %k1 %k2 keepfloat key key_pos kinvariant kt label label_alignment label_orientation labels lassociative lbfgs_ncorrections lbfgs_nfeval_max leftjust legend letrat let_rule_packages lfg lg lhospitallim limsubst linear linear_solver linechar linel|10 linenum line_type linewidth line_width linsolve_params linsolvewarn lispdisp listarith listconstvars listdummyvars lmxchar load_pathname loadprint logabs logarc logcb logconcoeffp logexpand lognegint logsimp logx logx_secondary logy logy_secondary logz lriem m1pbranch macroexpansion macros mainvar manual_demo maperror mapprint matrix_element_add matrix_element_mult matrix_element_transpose maxapplydepth maxapplyheight maxima_tempdir|10 maxima_userdir|10 maxnegex MAX_ORD maxposex maxpsifracdenom maxpsifracnum maxpsinegint maxpsiposint maxtayorder mesh_lines_color method mod_big_prime mode_check_errorp mode_checkp mode_check_warnp mod_test mod_threshold modular_linear_solver modulus multiplicative multiplicities myoptions nary negdistrib negsumdispflag newline newtonepsilon newtonmaxiter nextlayerfactor niceindicespref nm nmc noeval nolabels nonegative_lp noninteger nonscalar noun noundisp nouns np npi nticks ntrig numer numer_pbranch obase odd oddfun opacity opproperties opsubst optimprefix optionset orientation origin orthopoly_returns_intervals outative outchar packagefile palette partswitch pdf_file pfeformat phiresolution %piargs piece pivot_count_sx pivot_max_sx plot_format plot_options plot_realpart png_file pochhammer_max_index points pointsize point_size points_joined point_type poislim poisson poly_coefficient_ring poly_elimination_order polyfactor poly_grobner_algorithm poly_grobner_debug poly_monomial_order poly_primary_elimination_order poly_return_term_list poly_secondary_elimination_order poly_top_reduction_only posfun position powerdisp pred prederror primep_number_of_tests product_use_gamma program programmode promote_float_to_bigfloat prompt proportional_axes props psexpand ps_file radexpand radius radsubstflag rassociative ratalgdenom ratchristof ratdenomdivide rateinstein ratepsilon ratfac rational ratmx ratprint ratriemann ratsimpexpons ratvarswitch ratweights ratweyl ratwtlvl real realonly redraw refcheck resolution restart resultant ric riem rmxchar %rnum_list rombergabs rombergit rombergmin rombergtol rootsconmode rootsepsilon run_viewer same_xy same_xyz savedef savefactors scalar scalarmatrixp scale scale_lp setcheck setcheckbreak setval show_edge_color show_edges show_edge_type show_edge_width show_id show_label showtime show_vertex_color show_vertex_size show_vertex_type show_vertices show_weight simp simplified_output simplify_products simpproduct simpsum sinnpiflag solvedecomposes solveexplicit solvefactors solvenullwarn solveradcan solvetrigwarn space sparse sphere spring_embedding_depth sqrtdispflag stardisp startphi starttheta stats_numer stringdisp structures style sublis_apply_lambda subnumsimp sumexpand sumsplitfact surface surface_hide svg_file symmetric tab taylordepth taylor_logexpand taylor_order_coefficients taylor_truncate_polynomials tensorkill terminal testsuite_files thetaresolution timer_devalue title tlimswitch tr track transcompile transform transform_xy translate_fast_arrays transparent transrun tr_array_as_ref tr_bound_function_applyp tr_file_tty_messagesp tr_float_can_branch_complex tr_function_call_default trigexpandplus trigexpandtimes triginverses trigsign trivial_solutions tr_numer tr_optimize_max_loop tr_semicompile tr_state_vars tr_warn_bad_function_calls tr_warn_fexpr tr_warn_meval tr_warn_mode tr_warn_undeclared tr_warn_undefined_variable tstep ttyoff tube_extremes ufg ug %unitexpand unit_vectors uric uriem use_fast_arrays user_preamble usersetunits values vect_cross verbose vertex_color vertex_coloring vertex_partition vertex_size vertex_type view warnings weyl width windowname windowtitle wired_surface wireframe xaxis xaxis_color xaxis_secondary xaxis_type xaxis_width xlabel xlabel_secondary xlength xrange xrange_secondary xtics xtics_axis xtics_rotate xtics_rotate_secondary xtics_secondary xtics_secondary_axis xu_grid x_voxel xy_file xyplane xy_scale yaxis yaxis_color yaxis_secondary yaxis_type yaxis_width ylabel ylabel_secondary ylength yrange yrange_secondary ytics ytics_axis ytics_rotate ytics_rotate_secondary ytics_secondary ytics_secondary_axis yv_grid y_voxel yx_ratio zaxis zaxis_color zaxis_type zaxis_width zeroa zerob zerobern zeta%pi zlabel zlabel_rotate zlength zmin zn_primroot_limit zn_primroot_pretest";
  const SYMBOLS = "_ __ %|0 %%|0";
  return {
    name: "Maxima",
    keywords: {
      $pattern: "[A-Za-z_%][0-9A-Za-z_%]*",
      keyword: KEYWORDS2,
      literal: LITERALS2,
      built_in: BUILTIN_FUNCTIONS,
      symbol: SYMBOLS
    },
    contains: [
      {
        className: "comment",
        begin: "/\\*",
        end: "\\*/",
        contains: ["self"]
      },
      hljs.QUOTE_STRING_MODE,
      {
        className: "number",
        relevance: 0,
        variants: [
          {
            // float number w/ exponent
            // hmm, I wonder if we ought to include other exponent markers?
            begin: "\\b(\\d+|\\d+\\.|\\.\\d+|\\d+\\.\\d+)[Ee][-+]?\\d+\\b"
          },
          {
            // bigfloat number
            begin: "\\b(\\d+|\\d+\\.|\\.\\d+|\\d+\\.\\d+)[Bb][-+]?\\d+\\b",
            relevance: 10
          },
          {
            // float number w/out exponent
            // Doesn't seem to recognize floats which start with '.'
            begin: "\\b(\\.\\d+|\\d+\\.\\d+)\\b"
          },
          {
            // integer in base up to 36
            // Doesn't seem to recognize integers which end with '.'
            begin: "\\b(\\d+|0[0-9A-Za-z]+)\\.?\\b"
          }
        ]
      }
    ],
    illegal: /@/
  };
}
function mel(hljs) {
  return {
    name: "MEL",
    keywords: "int float string vector matrix if else switch case default while do for in break continue global proc return about abs addAttr addAttributeEditorNodeHelp addDynamic addNewShelfTab addPP addPanelCategory addPrefixToName advanceToNextDrivenKey affectedNet affects aimConstraint air alias aliasAttr align alignCtx alignCurve alignSurface allViewFit ambientLight angle angleBetween animCone animCurveEditor animDisplay animView annotate appendStringArray applicationName applyAttrPreset applyTake arcLenDimContext arcLengthDimension arclen arrayMapper art3dPaintCtx artAttrCtx artAttrPaintVertexCtx artAttrSkinPaintCtx artAttrTool artBuildPaintMenu artFluidAttrCtx artPuttyCtx artSelectCtx artSetPaintCtx artUserPaintCtx assignCommand assignInputDevice assignViewportFactories attachCurve attachDeviceAttr attachSurface attrColorSliderGrp attrCompatibility attrControlGrp attrEnumOptionMenu attrEnumOptionMenuGrp attrFieldGrp attrFieldSliderGrp attrNavigationControlGrp attrPresetEditWin attributeExists attributeInfo attributeMenu attributeQuery autoKeyframe autoPlace bakeClip bakeFluidShading bakePartialHistory bakeResults bakeSimulation basename basenameEx batchRender bessel bevel bevelPlus binMembership bindSkin blend2 blendShape blendShapeEditor blendShapePanel blendTwoAttr blindDataType boneLattice boundary boxDollyCtx boxZoomCtx bufferCurve buildBookmarkMenu buildKeyframeMenu button buttonManip CBG cacheFile cacheFileCombine cacheFileMerge cacheFileTrack camera cameraView canCreateManip canvas capitalizeString catch catchQuiet ceil changeSubdivComponentDisplayLevel changeSubdivRegion channelBox character characterMap characterOutlineEditor characterize chdir checkBox checkBoxGrp checkDefaultRenderGlobals choice circle circularFillet clamp clear clearCache clip clipEditor clipEditorCurrentTimeCtx clipSchedule clipSchedulerOutliner clipTrimBefore closeCurve closeSurface cluster cmdFileOutput cmdScrollFieldExecuter cmdScrollFieldReporter cmdShell coarsenSubdivSelectionList collision color colorAtPoint colorEditor colorIndex colorIndexSliderGrp colorSliderButtonGrp colorSliderGrp columnLayout commandEcho commandLine commandPort compactHairSystem componentEditor compositingInterop computePolysetVolume condition cone confirmDialog connectAttr connectControl connectDynamic connectJoint connectionInfo constrain constrainValue constructionHistory container containsMultibyte contextInfo control convertFromOldLayers convertIffToPsd convertLightmap convertSolidTx convertTessellation convertUnit copyArray copyFlexor copyKey copySkinWeights cos cpButton cpCache cpClothSet cpCollision cpConstraint cpConvClothToMesh cpForces cpGetSolverAttr cpPanel cpProperty cpRigidCollisionFilter cpSeam cpSetEdit cpSetSolverAttr cpSolver cpSolverTypes cpTool cpUpdateClothUVs createDisplayLayer createDrawCtx createEditor createLayeredPsdFile createMotionField createNewShelf createNode createRenderLayer createSubdivRegion cross crossProduct ctxAbort ctxCompletion ctxEditMode ctxTraverse currentCtx currentTime currentTimeCtx currentUnit curve curveAddPtCtx curveCVCtx curveEPCtx curveEditorCtx curveIntersect curveMoveEPCtx curveOnSurface curveSketchCtx cutKey cycleCheck cylinder dagPose date defaultLightListCheckBox defaultNavigation defineDataServer defineVirtualDevice deformer deg_to_rad delete deleteAttr deleteShadingGroupsAndMaterials deleteShelfTab deleteUI deleteUnusedBrushes delrandstr detachCurve detachDeviceAttr detachSurface deviceEditor devicePanel dgInfo dgdirty dgeval dgtimer dimWhen directKeyCtx directionalLight dirmap dirname disable disconnectAttr disconnectJoint diskCache displacementToPoly displayAffected displayColor displayCull displayLevelOfDetail displayPref displayRGBColor displaySmoothness displayStats displayString displaySurface distanceDimContext distanceDimension doBlur dolly dollyCtx dopeSheetEditor dot dotProduct doubleProfileBirailSurface drag dragAttrContext draggerContext dropoffLocator duplicate duplicateCurve duplicateSurface dynCache dynControl dynExport dynExpression dynGlobals dynPaintEditor dynParticleCtx dynPref dynRelEdPanel dynRelEditor dynamicLoad editAttrLimits editDisplayLayerGlobals editDisplayLayerMembers editRenderLayerAdjustment editRenderLayerGlobals editRenderLayerMembers editor editorTemplate effector emit emitter enableDevice encodeString endString endsWith env equivalent equivalentTol erf error eval evalDeferred evalEcho event exactWorldBoundingBox exclusiveLightCheckBox exec executeForEachObject exists exp expression expressionEditorListen extendCurve extendSurface extrude fcheck fclose feof fflush fgetline fgetword file fileBrowserDialog fileDialog fileExtension fileInfo filetest filletCurve filter filterCurve filterExpand filterStudioImport findAllIntersections findAnimCurves findKeyframe findMenuItem findRelatedSkinCluster finder firstParentOf fitBspline flexor floatEq floatField floatFieldGrp floatScrollBar floatSlider floatSlider2 floatSliderButtonGrp floatSliderGrp floor flow fluidCacheInfo fluidEmitter fluidVoxelInfo flushUndo fmod fontDialog fopen formLayout format fprint frameLayout fread freeFormFillet frewind fromNativePath fwrite gamma gauss geometryConstraint getApplicationVersionAsFloat getAttr getClassification getDefaultBrush getFileList getFluidAttr getInputDeviceRange getMayaPanelTypes getModifiers getPanel getParticleAttr getPluginResource getenv getpid glRender glRenderEditor globalStitch gmatch goal gotoBindPose grabColor gradientControl gradientControlNoAttr graphDollyCtx graphSelectContext graphTrackCtx gravity grid gridLayout group groupObjectsByName HfAddAttractorToAS HfAssignAS HfBuildEqualMap HfBuildFurFiles HfBuildFurImages HfCancelAFR HfConnectASToHF HfCreateAttractor HfDeleteAS HfEditAS HfPerformCreateAS HfRemoveAttractorFromAS HfSelectAttached HfSelectAttractors HfUnAssignAS hardenPointCurve hardware hardwareRenderPanel headsUpDisplay headsUpMessage help helpLine hermite hide hilite hitTest hotBox hotkey hotkeyCheck hsv_to_rgb hudButton hudSlider hudSliderButton hwReflectionMap hwRender hwRenderLoad hyperGraph hyperPanel hyperShade hypot iconTextButton iconTextCheckBox iconTextRadioButton iconTextRadioCollection iconTextScrollList iconTextStaticLabel ikHandle ikHandleCtx ikHandleDisplayScale ikSolver ikSplineHandleCtx ikSystem ikSystemInfo ikfkDisplayMethod illustratorCurves image imfPlugins inheritTransform insertJoint insertJointCtx insertKeyCtx insertKnotCurve insertKnotSurface instance instanceable instancer intField intFieldGrp intScrollBar intSlider intSliderGrp interToUI internalVar intersect iprEngine isAnimCurve isConnected isDirty isParentOf isSameObject isTrue isValidObjectName isValidString isValidUiName isolateSelect itemFilter itemFilterAttr itemFilterRender itemFilterType joint jointCluster jointCtx jointDisplayScale jointLattice keyTangent keyframe keyframeOutliner keyframeRegionCurrentTimeCtx keyframeRegionDirectKeyCtx keyframeRegionDollyCtx keyframeRegionInsertKeyCtx keyframeRegionMoveKeyCtx keyframeRegionScaleKeyCtx keyframeRegionSelectKeyCtx keyframeRegionSetKeyCtx keyframeRegionTrackCtx keyframeStats lassoContext lattice latticeDeformKeyCtx launch launchImageEditor layerButton layeredShaderPort layeredTexturePort layout layoutDialog lightList lightListEditor lightListPanel lightlink lineIntersection linearPrecision linstep listAnimatable listAttr listCameras listConnections listDeviceAttachments listHistory listInputDeviceAxes listInputDeviceButtons listInputDevices listMenuAnnotation listNodeTypes listPanelCategories listRelatives listSets listTransforms listUnselected listerEditor loadFluid loadNewShelf loadPlugin loadPluginLanguageResources loadPrefObjects localizedPanelLabel lockNode loft log longNameOf lookThru ls lsThroughFilter lsType lsUI Mayatomr mag makeIdentity makeLive makePaintable makeRoll makeSingleSurface makeTubeOn makebot manipMoveContext manipMoveLimitsCtx manipOptions manipRotateContext manipRotateLimitsCtx manipScaleContext manipScaleLimitsCtx marker match max memory menu menuBarLayout menuEditor menuItem menuItemToShelf menuSet menuSetPref messageLine min minimizeApp mirrorJoint modelCurrentTimeCtx modelEditor modelPanel mouse movIn movOut move moveIKtoFK moveKeyCtx moveVertexAlongDirection multiProfileBirailSurface mute nParticle nameCommand nameField namespace namespaceInfo newPanelItems newton nodeCast nodeIconButton nodeOutliner nodePreset nodeType noise nonLinear normalConstraint normalize nurbsBoolean nurbsCopyUVSet nurbsCube nurbsEditUV nurbsPlane nurbsSelect nurbsSquare nurbsToPoly nurbsToPolygonsPref nurbsToSubdiv nurbsToSubdivPref nurbsUVSet nurbsViewDirectionVector objExists objectCenter objectLayer objectType objectTypeUI obsoleteProc oceanNurbsPreviewPlane offsetCurve offsetCurveOnSurface offsetSurface openGLExtension openMayaPref optionMenu optionMenuGrp optionVar orbit orbitCtx orientConstraint outlinerEditor outlinerPanel overrideModifier paintEffectsDisplay pairBlend palettePort paneLayout panel panelConfiguration panelHistory paramDimContext paramDimension paramLocator parent parentConstraint particle particleExists particleInstancer particleRenderInfo partition pasteKey pathAnimation pause pclose percent performanceOptions pfxstrokes pickWalk picture pixelMove planarSrf plane play playbackOptions playblast plugAttr plugNode pluginInfo pluginResourceUtil pointConstraint pointCurveConstraint pointLight pointMatrixMult pointOnCurve pointOnSurface pointPosition poleVectorConstraint polyAppend polyAppendFacetCtx polyAppendVertex polyAutoProjection polyAverageNormal polyAverageVertex polyBevel polyBlendColor polyBlindData polyBoolOp polyBridgeEdge polyCacheMonitor polyCheck polyChipOff polyClipboard polyCloseBorder polyCollapseEdge polyCollapseFacet polyColorBlindData polyColorDel polyColorPerVertex polyColorSet polyCompare polyCone polyCopyUV polyCrease polyCreaseCtx polyCreateFacet polyCreateFacetCtx polyCube polyCut polyCutCtx polyCylinder polyCylindricalProjection polyDelEdge polyDelFacet polyDelVertex polyDuplicateAndConnect polyDuplicateEdge polyEditUV polyEditUVShell polyEvaluate polyExtrudeEdge polyExtrudeFacet polyExtrudeVertex polyFlipEdge polyFlipUV polyForceUV polyGeoSampler polyHelix polyInfo polyInstallAction polyLayoutUV polyListComponentConversion polyMapCut polyMapDel polyMapSew polyMapSewMove polyMergeEdge polyMergeEdgeCtx polyMergeFacet polyMergeFacetCtx polyMergeUV polyMergeVertex polyMirrorFace polyMoveEdge polyMoveFacet polyMoveFacetUV polyMoveUV polyMoveVertex polyNormal polyNormalPerVertex polyNormalizeUV polyOptUvs polyOptions polyOutput polyPipe polyPlanarProjection polyPlane polyPlatonicSolid polyPoke polyPrimitive polyPrism polyProjection polyPyramid polyQuad polyQueryBlindData polyReduce polySelect polySelectConstraint polySelectConstraintMonitor polySelectCtx polySelectEditCtx polySeparate polySetToFaceNormal polySewEdge polyShortestPathCtx polySmooth polySoftEdge polySphere polySphericalProjection polySplit polySplitCtx polySplitEdge polySplitRing polySplitVertex polyStraightenUVBorder polySubdivideEdge polySubdivideFacet polyToSubdiv polyTorus polyTransfer polyTriangulate polyUVSet polyUnite polyWedgeFace popen popupMenu pose pow preloadRefEd print progressBar progressWindow projFileViewer projectCurve projectTangent projectionContext projectionManip promptDialog propModCtx propMove psdChannelOutliner psdEditTextureFile psdExport psdTextureFile putenv pwd python querySubdiv quit rad_to_deg radial radioButton radioButtonGrp radioCollection radioMenuItemCollection rampColorPort rand randomizeFollicles randstate rangeControl readTake rebuildCurve rebuildSurface recordAttr recordDevice redo reference referenceEdit referenceQuery refineSubdivSelectionList refresh refreshAE registerPluginResource rehash reloadImage removeJoint removeMultiInstance removePanelCategory rename renameAttr renameSelectionList renameUI render renderGlobalsNode renderInfo renderLayerButton renderLayerParent renderLayerPostProcess renderLayerUnparent renderManip renderPartition renderQualityNode renderSettings renderThumbnailUpdate renderWindowEditor renderWindowSelectContext renderer reorder reorderDeformers requires reroot resampleFluid resetAE resetPfxToPolyCamera resetTool resolutionNode retarget reverseCurve reverseSurface revolve rgb_to_hsv rigidBody rigidSolver roll rollCtx rootOf rot rotate rotationInterpolation roundConstantRadius rowColumnLayout rowLayout runTimeCommand runup sampleImage saveAllShelves saveAttrPreset saveFluid saveImage saveInitialState saveMenu savePrefObjects savePrefs saveShelf saveToolSettings scale scaleBrushBrightness scaleComponents scaleConstraint scaleKey scaleKeyCtx sceneEditor sceneUIReplacement scmh scriptCtx scriptEditorInfo scriptJob scriptNode scriptTable scriptToShelf scriptedPanel scriptedPanelType scrollField scrollLayout sculpt searchPathArray seed selLoadSettings select selectContext selectCurveCV selectKey selectKeyCtx selectKeyframeRegionCtx selectMode selectPref selectPriority selectType selectedNodes selectionConnection separator setAttr setAttrEnumResource setAttrMapping setAttrNiceNameResource setConstraintRestPosition setDefaultShadingGroup setDrivenKeyframe setDynamic setEditCtx setEditor setFluidAttr setFocus setInfinity setInputDeviceMapping setKeyCtx setKeyPath setKeyframe setKeyframeBlendshapeTargetWts setMenuMode setNodeNiceNameResource setNodeTypeFlag setParent setParticleAttr setPfxToPolyCamera setPluginResource setProject setStampDensity setStartupMessage setState setToolTo setUITemplate setXformManip sets shadingConnection shadingGeometryRelCtx shadingLightRelCtx shadingNetworkCompare shadingNode shapeCompare shelfButton shelfLayout shelfTabLayout shellField shortNameOf showHelp showHidden showManipCtx showSelectionInTitle showShadingGroupAttrEditor showWindow sign simplify sin singleProfileBirailSurface size sizeBytes skinCluster skinPercent smoothCurve smoothTangentSurface smoothstep snap2to2 snapKey snapMode snapTogetherCtx snapshot soft softMod softModCtx sort sound soundControl source spaceLocator sphere sphrand spotLight spotLightPreviewPort spreadSheetEditor spring sqrt squareSurface srtContext stackTrace startString startsWith stitchAndExplodeShell stitchSurface stitchSurfacePoints strcmp stringArrayCatenate stringArrayContains stringArrayCount stringArrayInsertAtIndex stringArrayIntersector stringArrayRemove stringArrayRemoveAtIndex stringArrayRemoveDuplicates stringArrayRemoveExact stringArrayToString stringToStringArray strip stripPrefixFromName stroke subdAutoProjection subdCleanTopology subdCollapse subdDuplicateAndConnect subdEditUV subdListComponentConversion subdMapCut subdMapSewMove subdMatchTopology subdMirror subdToBlind subdToPoly subdTransferUVsToCache subdiv subdivCrease subdivDisplaySmoothness substitute substituteAllString substituteGeometry substring surface surfaceSampler surfaceShaderList swatchDisplayPort switchTable symbolButton symbolCheckBox sysFile system tabLayout tan tangentConstraint texLatticeDeformContext texManipContext texMoveContext texMoveUVShellContext texRotateContext texScaleContext texSelectContext texSelectShortestPathCtx texSmudgeUVContext texWinToolCtx text textCurves textField textFieldButtonGrp textFieldGrp textManip textScrollList textToShelf textureDisplacePlane textureHairColor texturePlacementContext textureWindow threadCount threePointArcCtx timeControl timePort timerX toNativePath toggle toggleAxis toggleWindowVisibility tokenize tokenizeList tolerance tolower toolButton toolCollection toolDropped toolHasOptions toolPropertyWindow torus toupper trace track trackCtx transferAttributes transformCompare transformLimits translator trim trunc truncateFluidCache truncateHairCache tumble tumbleCtx turbulence twoPointArcCtx uiRes uiTemplate unassignInputDevice undo undoInfo ungroup uniform unit unloadPlugin untangleUV untitledFileName untrim upAxis updateAE userCtx uvLink uvSnapshot validateShelfName vectorize view2dToolCtx viewCamera viewClipPlane viewFit viewHeadOn viewLookAt viewManip viewPlace viewSet visor volumeAxis vortex waitCursor warning webBrowser webBrowserPrefs whatIs window windowPref wire wireContext workspace wrinkle wrinkleContext writeTake xbmLangPathList xform",
    illegal: "</",
    contains: [
      hljs.C_NUMBER_MODE,
      hljs.APOS_STRING_MODE,
      hljs.QUOTE_STRING_MODE,
      {
        className: "string",
        begin: "`",
        end: "`",
        contains: [hljs.BACKSLASH_ESCAPE]
      },
      {
        // eats variables
        begin: /[$%@](\^\w\b|#\w+|[^\s\w{]|\{\w+\}|\w+)/
      },
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE
    ]
  };
}
function mercury(hljs) {
  const KEYWORDS2 = {
    keyword: "module use_module import_module include_module end_module initialise mutable initialize finalize finalise interface implementation pred mode func type inst solver any_pred any_func is semidet det nondet multi erroneous failure cc_nondet cc_multi typeclass instance where pragma promise external trace atomic or_else require_complete_switch require_det require_semidet require_multi require_nondet require_cc_multi require_cc_nondet require_erroneous require_failure",
    meta: (
      // pragma
      "inline no_inline type_spec source_file fact_table obsolete memo loop_check minimal_model terminates does_not_terminate check_termination promise_equivalent_clauses foreign_proc foreign_decl foreign_code foreign_type foreign_import_module foreign_export_enum foreign_export foreign_enum may_call_mercury will_not_call_mercury thread_safe not_thread_safe maybe_thread_safe promise_pure promise_semipure tabled_for_io local untrailed trailed attach_to_io_state can_pass_as_mercury_type stable will_not_throw_exception may_modify_trail will_not_modify_trail may_duplicate may_not_duplicate affects_liveness does_not_affect_liveness doesnt_affect_liveness no_sharing unknown_sharing sharing"
    ),
    built_in: "some all not if then else true fail false try catch catch_any semidet_true semidet_false semidet_fail impure_true impure semipure"
  };
  const COMMENT = hljs.COMMENT("%", "$");
  const NUMCODE = {
    className: "number",
    begin: "0'.\\|0[box][0-9a-fA-F]*"
  };
  const ATOM = hljs.inherit(hljs.APOS_STRING_MODE, { relevance: 0 });
  const STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, { relevance: 0 });
  const STRING_FMT = {
    className: "subst",
    begin: "\\\\[abfnrtv]\\|\\\\x[0-9a-fA-F]*\\\\\\|%[-+# *.0-9]*[dioxXucsfeEgGp]",
    relevance: 0
  };
  STRING.contains = STRING.contains.slice();
  STRING.contains.push(STRING_FMT);
  const IMPLICATION = {
    className: "built_in",
    variants: [
      { begin: "<=>" },
      {
        begin: "<=",
        relevance: 0
      },
      {
        begin: "=>",
        relevance: 0
      },
      { begin: "/\\\\" },
      { begin: "\\\\/" }
    ]
  };
  const HEAD_BODY_CONJUNCTION = {
    className: "built_in",
    variants: [
      { begin: ":-\\|-->" },
      {
        begin: "=",
        relevance: 0
      }
    ]
  };
  return {
    name: "Mercury",
    aliases: [
      "m",
      "moo"
    ],
    keywords: KEYWORDS2,
    contains: [
      IMPLICATION,
      HEAD_BODY_CONJUNCTION,
      COMMENT,
      hljs.C_BLOCK_COMMENT_MODE,
      NUMCODE,
      hljs.NUMBER_MODE,
      ATOM,
      STRING,
      {
        // relevance booster
        begin: /:-/
      },
      {
        // relevance booster
        begin: /\.$/
      }
    ]
  };
}
function mipsasm(hljs) {
  return {
    name: "MIPS Assembly",
    case_insensitive: true,
    aliases: ["mips"],
    keywords: {
      $pattern: "\\.?" + hljs.IDENT_RE,
      meta: (
        // GNU preprocs
        ".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .ltorg "
      ),
      built_in: "$0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $20 $21 $22 $23 $24 $25 $26 $27 $28 $29 $30 $31 zero at v0 v1 a0 a1 a2 a3 a4 a5 a6 a7 t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 s0 s1 s2 s3 s4 s5 s6 s7 s8 k0 k1 gp sp fp ra $f0 $f1 $f2 $f2 $f4 $f5 $f6 $f7 $f8 $f9 $f10 $f11 $f12 $f13 $f14 $f15 $f16 $f17 $f18 $f19 $f20 $f21 $f22 $f23 $f24 $f25 $f26 $f27 $f28 $f29 $f30 $f31 Context Random EntryLo0 EntryLo1 Context PageMask Wired EntryHi HWREna BadVAddr Count Compare SR IntCtl SRSCtl SRSMap Cause EPC PRId EBase Config Config1 Config2 Config3 LLAddr Debug DEPC DESAVE CacheErr ECC ErrorEPC TagLo DataLo TagHi DataHi WatchLo WatchHi PerfCtl PerfCnt "
      // Coprocessor 0 registers
    },
    contains: [
      {
        className: "keyword",
        begin: "\\b(addi?u?|andi?|b(al)?|beql?|bgez(al)?l?|bgtzl?|blezl?|bltz(al)?l?|bnel?|cl[oz]|divu?|ext|ins|j(al)?|jalr(\\.hb)?|jr(\\.hb)?|lbu?|lhu?|ll|lui|lw[lr]?|maddu?|mfhi|mflo|movn|movz|move|msubu?|mthi|mtlo|mul|multu?|nop|nor|ori?|rotrv?|sb|sc|se[bh]|sh|sllv?|slti?u?|srav?|srlv?|subu?|sw[lr]?|xori?|wsbh|abs\\.[sd]|add\\.[sd]|alnv.ps|bc1[ft]l?|c\\.(s?f|un|u?eq|[ou]lt|[ou]le|ngle?|seq|l[et]|ng[et])\\.[sd]|(ceil|floor|round|trunc)\\.[lw]\\.[sd]|cfc1|cvt\\.d\\.[lsw]|cvt\\.l\\.[dsw]|cvt\\.ps\\.s|cvt\\.s\\.[dlw]|cvt\\.s\\.p[lu]|cvt\\.w\\.[dls]|div\\.[ds]|ldx?c1|luxc1|lwx?c1|madd\\.[sd]|mfc1|mov[fntz]?\\.[ds]|msub\\.[sd]|mth?c1|mul\\.[ds]|neg\\.[ds]|nmadd\\.[ds]|nmsub\\.[ds]|p[lu][lu]\\.ps|recip\\.fmt|r?sqrt\\.[ds]|sdx?c1|sub\\.[ds]|suxc1|swx?c1|break|cache|d?eret|[de]i|ehb|mfc0|mtc0|pause|prefx?|rdhwr|rdpgpr|sdbbp|ssnop|synci?|syscall|teqi?|tgei?u?|tlb(p|r|w[ir])|tlti?u?|tnei?|wait|wrpgpr)",
        end: "\\s"
      },
      // lines ending with ; or # aren't really comments, probably auto-detect fail
      hljs.COMMENT("[;#](?!\\s*$)", "$"),
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.QUOTE_STRING_MODE,
      {
        className: "string",
        begin: "'",
        end: "[^\\\\]'",
        relevance: 0
      },
      {
        className: "title",
        begin: "\\|",
        end: "\\|",
        illegal: "\\n",
        relevance: 0
      },
      {
        className: "number",
        variants: [
          {
            // hex
            begin: "0x[0-9a-f]+"
          },
          {
            // bare number
            begin: "\\b-?\\d+"
          }
        ],
        relevance: 0
      },
      {
        className: "symbol",
        variants: [
          {
            // GNU MIPS syntax
            begin: "^\\s*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"
          },
          {
            // numbered local labels
            begin: "^\\s*[0-9]+:"
          },
          {
            // number local label reference (backwards, forwards)
            begin: "[0-9]+[bf]"
          }
        ],
        relevance: 0
      }
    ],
    // forward slashes are not allowed
    illegal: /\//
  };
}
function mizar(hljs) {
  return {
    name: "Mizar",
    keywords: "environ vocabularies notations constructors definitions registrations theorems schemes requirements begin end definition registration cluster existence pred func defpred deffunc theorem proof let take assume then thus hence ex for st holds consider reconsider such that and in provided of as from be being by means equals implies iff redefine define now not or attr is mode suppose per cases set thesis contradiction scheme reserve struct correctness compatibility coherence symmetry assymetry reflexivity irreflexivity connectedness uniqueness commutativity idempotence involutiveness projectivity",
    contains: [hljs.COMMENT("::", "$")]
  };
}
function mojolicious(hljs) {
  return {
    name: "Mojolicious",
    subLanguage: "xml",
    contains: [
      {
        className: "meta",
        begin: "^__(END|DATA)__$"
      },
      // mojolicious line
      {
        begin: "^\\s*%{1,2}={0,2}",
        end: "$",
        subLanguage: "perl"
      },
      // mojolicious block
      {
        begin: "<%{1,2}={0,2}",
        end: "={0,1}%>",
        subLanguage: "perl",
        excludeBegin: true,
        excludeEnd: true
      }
    ]
  };
}
function monkey(hljs) {
  const NUMBER = {
    className: "number",
    relevance: 0,
    variants: [
      { begin: "[$][a-fA-F0-9]+" },
      hljs.NUMBER_MODE
    ]
  };
  const FUNC_DEFINITION = {
    variants: [
      { match: [
        /(function|method)/,
        /\s+/,
        hljs.UNDERSCORE_IDENT_RE
      ] }
    ],
    scope: {
      1: "keyword",
      3: "title.function"
    }
  };
  const CLASS_DEFINITION = {
    variants: [
      { match: [
        /(class|interface|extends|implements)/,
        /\s+/,
        hljs.UNDERSCORE_IDENT_RE
      ] }
    ],
    scope: {
      1: "keyword",
      3: "title.class"
    }
  };
  const BUILT_INS2 = [
    "DebugLog",
    "DebugStop",
    "Error",
    "Print",
    "ACos",
    "ACosr",
    "ASin",
    "ASinr",
    "ATan",
    "ATan2",
    "ATan2r",
    "ATanr",
    "Abs",
    "Abs",
    "Ceil",
    "Clamp",
    "Clamp",
    "Cos",
    "Cosr",
    "Exp",
    "Floor",
    "Log",
    "Max",
    "Max",
    "Min",
    "Min",
    "Pow",
    "Sgn",
    "Sgn",
    "Sin",
    "Sinr",
    "Sqrt",
    "Tan",
    "Tanr",
    "Seed",
    "PI",
    "HALFPI",
    "TWOPI"
  ];
  const LITERALS2 = [
    "true",
    "false",
    "null"
  ];
  const KEYWORDS2 = [
    "public",
    "private",
    "property",
    "continue",
    "exit",
    "extern",
    "new",
    "try",
    "catch",
    "eachin",
    "not",
    "abstract",
    "final",
    "select",
    "case",
    "default",
    "const",
    "local",
    "global",
    "field",
    "end",
    "if",
    "then",
    "else",
    "elseif",
    "endif",
    "while",
    "wend",
    "repeat",
    "until",
    "forever",
    "for",
    "to",
    "step",
    "next",
    "return",
    "module",
    "inline",
    "throw",
    "import",
    // not positive, but these are not literals
    "and",
    "or",
    "shl",
    "shr",
    "mod"
  ];
  return {
    name: "Monkey",
    case_insensitive: true,
    keywords: {
      keyword: KEYWORDS2,
      built_in: BUILT_INS2,
      literal: LITERALS2
    },
    illegal: /\/\*/,
    contains: [
      hljs.COMMENT("#rem", "#end"),
      hljs.COMMENT(
        "'",
        "$",
        { relevance: 0 }
      ),
      FUNC_DEFINITION,
      CLASS_DEFINITION,
      {
        className: "variable.language",
        begin: /\b(self|super)\b/
      },
      {
        className: "meta",
        begin: /\s*#/,
        end: "$",
        keywords: { keyword: "if else elseif endif end then" }
      },
      {
        match: [
          /^\s*/,
          /strict\b/
        ],
        scope: { 2: "meta" }
      },
      {
        beginKeywords: "alias",
        end: "=",
        contains: [hljs.UNDERSCORE_TITLE_MODE]
      },
      hljs.QUOTE_STRING_MODE,
      NUMBER
    ]
  };
}
function moonscript(hljs) {
  const KEYWORDS2 = {
    keyword: (
      // Moonscript keywords
      "if then not for in while do return else elseif break continue switch and or unless when class extends super local import export from using"
    ),
    literal: "true false nil",
    built_in: "_G _VERSION assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall coroutine debug io math os package string table"
  };
  const JS_IDENT_RE = "[A-Za-z$_][0-9A-Za-z$_]*";
  const SUBST = {
    className: "subst",
    begin: /#\{/,
    end: /\}/,
    keywords: KEYWORDS2
  };
  const EXPRESSIONS = [
    hljs.inherit(
      hljs.C_NUMBER_MODE,
      { starts: {
        end: "(\\s*/)?",
        relevance: 0
      } }
    ),
    // a number tries to eat the following slash to prevent treating it as a regexp
    {
      className: "string",
      variants: [
        {
          begin: /'/,
          end: /'/,
          contains: [hljs.BACKSLASH_ESCAPE]
        },
        {
          begin: /"/,
          end: /"/,
          contains: [
            hljs.BACKSLASH_ESCAPE,
            SUBST
          ]
        }
      ]
    },
    {
      className: "built_in",
      begin: "@__" + hljs.IDENT_RE
    },
    {
      begin: "@" + hljs.IDENT_RE
      // relevance booster on par with CoffeeScript
    },
    {
      begin: hljs.IDENT_RE + "\\\\" + hljs.IDENT_RE
      // inst\method
    }
  ];
  SUBST.contains = EXPRESSIONS;
  const TITLE = hljs.inherit(hljs.TITLE_MODE, { begin: JS_IDENT_RE });
  const POSSIBLE_PARAMS_RE = "(\\(.*\\)\\s*)?\\B[-=]>";
  const PARAMS = {
    className: "params",
    begin: "\\([^\\(]",
    returnBegin: true,
    /* We need another contained nameless mode to not have every nested
    pair of parens to be called "params" */
    contains: [
      {
        begin: /\(/,
        end: /\)/,
        keywords: KEYWORDS2,
        contains: ["self"].concat(EXPRESSIONS)
      }
    ]
  };
  return {
    name: "MoonScript",
    aliases: ["moon"],
    keywords: KEYWORDS2,
    illegal: /\/\*/,
    contains: EXPRESSIONS.concat([
      hljs.COMMENT("--", "$"),
      {
        className: "function",
        // function: -> =>
        begin: "^\\s*" + JS_IDENT_RE + "\\s*=\\s*" + POSSIBLE_PARAMS_RE,
        end: "[-=]>",
        returnBegin: true,
        contains: [
          TITLE,
          PARAMS
        ]
      },
      {
        begin: /[\(,:=]\s*/,
        // anonymous function start
        relevance: 0,
        contains: [
          {
            className: "function",
            begin: POSSIBLE_PARAMS_RE,
            end: "[-=]>",
            returnBegin: true,
            contains: [PARAMS]
          }
        ]
      },
      {
        className: "class",
        beginKeywords: "class",
        end: "$",
        illegal: /[:="\[\]]/,
        contains: [
          {
            beginKeywords: "extends",
            endsWithParent: true,
            illegal: /[:="\[\]]/,
            contains: [TITLE]
          },
          TITLE
        ]
      },
      {
        className: "name",
        // table
        begin: JS_IDENT_RE + ":",
        end: ":",
        returnBegin: true,
        returnEnd: true,
        relevance: 0
      }
    ])
  };
}
function n1ql(hljs) {
  const KEYWORDS2 = [
    "all",
    "alter",
    "analyze",
    "and",
    "any",
    "array",
    "as",
    "asc",
    "begin",
    "between",
    "binary",
    "boolean",
    "break",
    "bucket",
    "build",
    "by",
    "call",
    "case",
    "cast",
    "cluster",
    "collate",
    "collection",
    "commit",
    "connect",
    "continue",
    "correlate",
    "cover",
    "create",
    "database",
    "dataset",
    "datastore",
    "declare",
    "decrement",
    "delete",
    "derived",
    "desc",
    "describe",
    "distinct",
    "do",
    "drop",
    "each",
    "element",
    "else",
    "end",
    "every",
    "except",
    "exclude",
    "execute",
    "exists",
    "explain",
    "fetch",
    "first",
    "flatten",
    "for",
    "force",
    "from",
    "function",
    "grant",
    "group",
    "gsi",
    "having",
    "if",
    "ignore",
    "ilike",
    "in",
    "include",
    "increment",
    "index",
    "infer",
    "inline",
    "inner",
    "insert",
    "intersect",
    "into",
    "is",
    "join",
    "key",
    "keys",
    "keyspace",
    "known",
    "last",
    "left",
    "let",
    "letting",
    "like",
    "limit",
    "lsm",
    "map",
    "mapping",
    "matched",
    "materialized",
    "merge",
    "minus",
    "namespace",
    "nest",
    "not",
    "number",
    "object",
    "offset",
    "on",
    "option",
    "or",
    "order",
    "outer",
    "over",
    "parse",
    "partition",
    "password",
    "path",
    "pool",
    "prepare",
    "primary",
    "private",
    "privilege",
    "procedure",
    "public",
    "raw",
    "realm",
    "reduce",
    "rename",
    "return",
    "returning",
    "revoke",
    "right",
    "role",
    "rollback",
    "satisfies",
    "schema",
    "select",
    "self",
    "semi",
    "set",
    "show",
    "some",
    "start",
    "statistics",
    "string",
    "system",
    "then",
    "to",
    "transaction",
    "trigger",
    "truncate",
    "under",
    "union",
    "unique",
    "unknown",
    "unnest",
    "unset",
    "update",
    "upsert",
    "use",
    "user",
    "using",
    "validate",
    "value",
    "valued",
    "values",
    "via",
    "view",
    "when",
    "where",
    "while",
    "with",
    "within",
    "work",
    "xor"
  ];
  const LITERALS2 = [
    "true",
    "false",
    "null",
    "missing|5"
  ];
  const BUILT_INS2 = [
    "array_agg",
    "array_append",
    "array_concat",
    "array_contains",
    "array_count",
    "array_distinct",
    "array_ifnull",
    "array_length",
    "array_max",
    "array_min",
    "array_position",
    "array_prepend",
    "array_put",
    "array_range",
    "array_remove",
    "array_repeat",
    "array_replace",
    "array_reverse",
    "array_sort",
    "array_sum",
    "avg",
    "count",
    "max",
    "min",
    "sum",
    "greatest",
    "least",
    "ifmissing",
    "ifmissingornull",
    "ifnull",
    "missingif",
    "nullif",
    "ifinf",
    "ifnan",
    "ifnanorinf",
    "naninf",
    "neginfif",
    "posinfif",
    "clock_millis",
    "clock_str",
    "date_add_millis",
    "date_add_str",
    "date_diff_millis",
    "date_diff_str",
    "date_part_millis",
    "date_part_str",
    "date_trunc_millis",
    "date_trunc_str",
    "duration_to_str",
    "millis",
    "str_to_millis",
    "millis_to_str",
    "millis_to_utc",
    "millis_to_zone_name",
    "now_millis",
    "now_str",
    "str_to_duration",
    "str_to_utc",
    "str_to_zone_name",
    "decode_json",
    "encode_json",
    "encoded_size",
    "poly_length",
    "base64",
    "base64_encode",
    "base64_decode",
    "meta",
    "uuid",
    "abs",
    "acos",
    "asin",
    "atan",
    "atan2",
    "ceil",
    "cos",
    "degrees",
    "e",
    "exp",
    "ln",
    "log",
    "floor",
    "pi",
    "power",
    "radians",
    "random",
    "round",
    "sign",
    "sin",
    "sqrt",
    "tan",
    "trunc",
    "object_length",
    "object_names",
    "object_pairs",
    "object_inner_pairs",
    "object_values",
    "object_inner_values",
    "object_add",
    "object_put",
    "object_remove",
    "object_unwrap",
    "regexp_contains",
    "regexp_like",
    "regexp_position",
    "regexp_replace",
    "contains",
    "initcap",
    "length",
    "lower",
    "ltrim",
    "position",
    "repeat",
    "replace",
    "rtrim",
    "split",
    "substr",
    "title",
    "trim",
    "upper",
    "isarray",
    "isatom",
    "isboolean",
    "isnumber",
    "isobject",
    "isstring",
    "type",
    "toarray",
    "toatom",
    "toboolean",
    "tonumber",
    "toobject",
    "tostring"
  ];
  return {
    name: "N1QL",
    case_insensitive: true,
    contains: [
      {
        beginKeywords: "build create index delete drop explain infer|10 insert merge prepare select update upsert|10",
        end: /;/,
        keywords: {
          keyword: KEYWORDS2,
          literal: LITERALS2,
          built_in: BUILT_INS2
        },
        contains: [
          {
            className: "string",
            begin: "'",
            end: "'",
            contains: [hljs.BACKSLASH_ESCAPE]
          },
          {
            className: "string",
            begin: '"',
            end: '"',
            contains: [hljs.BACKSLASH_ESCAPE]
          },
          {
            className: "symbol",
            begin: "`",
            end: "`",
            contains: [hljs.BACKSLASH_ESCAPE]
          },
          hljs.C_NUMBER_MODE,
          hljs.C_BLOCK_COMMENT_MODE
        ]
      },
      hljs.C_BLOCK_COMMENT_MODE
    ]
  };
}
function nestedtext(hljs) {
  const NESTED = {
    match: [
      /^\s*(?=\S)/,
      // have to look forward here to avoid polynomial backtracking
      /[^:]+/,
      /:\s*/,
      /$/
    ],
    className: {
      2: "attribute",
      3: "punctuation"
    }
  };
  const DICTIONARY_ITEM = {
    match: [
      /^\s*(?=\S)/,
      // have to look forward here to avoid polynomial backtracking
      /[^:]*[^: ]/,
      /[ ]*:/,
      /[ ]/,
      /.*$/
    ],
    className: {
      2: "attribute",
      3: "punctuation",
      5: "string"
    }
  };
  const STRING = {
    match: [
      /^\s*/,
      />/,
      /[ ]/,
      /.*$/
    ],
    className: {
      2: "punctuation",
      4: "string"
    }
  };
  const LIST_ITEM = {
    variants: [
      { match: [
        /^\s*/,
        /-/,
        /[ ]/,
        /.*$/
      ] },
      { match: [
        /^\s*/,
        /-$/
      ] }
    ],
    className: {
      2: "bullet",
      4: "string"
    }
  };
  return {
    name: "Nested Text",
    aliases: ["nt"],
    contains: [
      hljs.inherit(hljs.HASH_COMMENT_MODE, {
        begin: /^\s*(?=#)/,
        excludeBegin: true
      }),
      LIST_ITEM,
      STRING,
      NESTED,
      DICTIONARY_ITEM
    ]
  };
}
function nginx(hljs) {
  const regex = hljs.regex;
  const VAR = {
    className: "variable",
    variants: [
      { begin: /\$\d+/ },
      { begin: /\$\{\w+\}/ },
      { begin: regex.concat(/[$@]/, hljs.UNDERSCORE_IDENT_RE) }
    ]
  };
  const LITERALS2 = [
    "on",
    "off",
    "yes",
    "no",
    "true",
    "false",
    "none",
    "blocked",
    "debug",
    "info",
    "notice",
    "warn",
    "error",
    "crit",
    "select",
    "break",
    "last",
    "permanent",
    "redirect",
    "kqueue",
    "rtsig",
    "epoll",
    "poll",
    "/dev/poll"
  ];
  const DEFAULT = {
    endsWithParent: true,
    keywords: {
      $pattern: /[a-z_]{2,}|\/dev\/poll/,
      literal: LITERALS2
    },
    relevance: 0,
    illegal: "=>",
    contains: [
      hljs.HASH_COMMENT_MODE,
      {
        className: "string",
        contains: [
          hljs.BACKSLASH_ESCAPE,
          VAR
        ],
        variants: [
          {
            begin: /"/,
            end: /"/
          },
          {
            begin: /'/,
            end: /'/
          }
        ]
      },
      // this swallows entire URLs to avoid detecting numbers within
      {
        begin: "([a-z]+):/",
        end: "\\s",
        endsWithParent: true,
        excludeEnd: true,
        contains: [VAR]
      },
      {
        className: "regexp",
        contains: [
          hljs.BACKSLASH_ESCAPE,
          VAR
        ],
        variants: [
          {
            begin: "\\s\\^",
            end: "\\s|\\{|;",
            returnEnd: true
          },
          // regexp locations (~, ~*)
          {
            begin: "~\\*?\\s+",
            end: "\\s|\\{|;",
            returnEnd: true
          },
          // *.example.com
          { begin: "\\*(\\.[a-z\\-]+)+" },
          // sub.example.*
          { begin: "([a-z\\-]+\\.)+\\*" }
        ]
      },
      // IP
      {
        className: "number",
        begin: "\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"
      },
      // units
      {
        className: "number",
        begin: "\\b\\d+[kKmMgGdshdwy]?\\b",
        relevance: 0
      },
      VAR
    ]
  };
  return {
    name: "Nginx config",
    aliases: ["nginxconf"],
    contains: [
      hljs.HASH_COMMENT_MODE,
      {
        beginKeywords: "upstream location",
        end: /;|\{/,
        contains: DEFAULT.contains,
        keywords: { section: "upstream location" }
      },
      {
        className: "section",
        begin: regex.concat(hljs.UNDERSCORE_IDENT_RE + regex.lookahead(/\s+\{/)),
        relevance: 0
      },
      {
        begin: regex.lookahead(hljs.UNDERSCORE_IDENT_RE + "\\s"),
        end: ";|\\{",
        contains: [
          {
            className: "attribute",
            begin: hljs.UNDERSCORE_IDENT_RE,
            starts: DEFAULT
          }
        ],
        relevance: 0
      }
    ],
    illegal: "[^\\s\\}\\{]"
  };
}
function nim(hljs) {
  const TYPES2 = [
    "int",
    "int8",
    "int16",
    "int32",
    "int64",
    "uint",
    "uint8",
    "uint16",
    "uint32",
    "uint64",
    "float",
    "float32",
    "float64",
    "bool",
    "char",
    "string",
    "cstring",
    "pointer",
    "expr",
    "stmt",
    "void",
    "auto",
    "any",
    "range",
    "array",
    "openarray",
    "varargs",
    "seq",
    "set",
    "clong",
    "culong",
    "cchar",
    "cschar",
    "cshort",
    "cint",
    "csize",
    "clonglong",
    "cfloat",
    "cdouble",
    "clongdouble",
    "cuchar",
    "cushort",
    "cuint",
    "culonglong",
    "cstringarray",
    "semistatic"
  ];
  const KEYWORDS2 = [
    "addr",
    "and",
    "as",
    "asm",
    "bind",
    "block",
    "break",
    "case",
    "cast",
    "concept",
    "const",
    "continue",
    "converter",
    "defer",
    "discard",
    "distinct",
    "div",
    "do",
    "elif",
    "else",
    "end",
    "enum",
    "except",
    "export",
    "finally",
    "for",
    "from",
    "func",
    "generic",
    "guarded",
    "if",
    "import",
    "in",
    "include",
    "interface",
    "is",
    "isnot",
    "iterator",
    "let",
    "macro",
    "method",
    "mixin",
    "mod",
    "nil",
    "not",
    "notin",
    "object",
    "of",
    "or",
    "out",
    "proc",
    "ptr",
    "raise",
    "ref",
    "return",
    "shared",
    "shl",
    "shr",
    "static",
    "template",
    "try",
    "tuple",
    "type",
    "using",
    "var",
    "when",
    "while",
    "with",
    "without",
    "xor",
    "yield"
  ];
  const BUILT_INS2 = [
    "stdin",
    "stdout",
    "stderr",
    "result"
  ];
  const LITERALS2 = [
    "true",
    "false"
  ];
  return {
    name: "Nim",
    keywords: {
      keyword: KEYWORDS2,
      literal: LITERALS2,
      type: TYPES2,
      built_in: BUILT_INS2
    },
    contains: [
      {
        className: "meta",
        // Actually pragma
        begin: /\{\./,
        end: /\.\}/,
        relevance: 10
      },
      {
        className: "string",
        begin: /[a-zA-Z]\w*"/,
        end: /"/,
        contains: [{ begin: /""/ }]
      },
      {
        className: "string",
        begin: /([a-zA-Z]\w*)?"""/,
        end: /"""/
      },
      hljs.QUOTE_STRING_MODE,
      {
        className: "type",
        begin: /\b[A-Z]\w+\b/,
        relevance: 0
      },
      {
        className: "number",
        relevance: 0,
        variants: [
          { begin: /\b(0[xX][0-9a-fA-F][_0-9a-fA-F]*)('?[iIuU](8|16|32|64))?/ },
          { begin: /\b(0o[0-7][_0-7]*)('?[iIuUfF](8|16|32|64))?/ },
          { begin: /\b(0(b|B)[01][_01]*)('?[iIuUfF](8|16|32|64))?/ },
          { begin: /\b(\d[_\d]*)('?[iIuUfF](8|16|32|64))?/ }
        ]
      },
      hljs.HASH_COMMENT_MODE
    ]
  };
}
function nix(hljs) {
  const regex = hljs.regex;
  const KEYWORDS2 = {
    keyword: [
      "assert",
      "else",
      "if",
      "in",
      "inherit",
      "let",
      "or",
      "rec",
      "then",
      "with"
    ],
    literal: [
      "true",
      "false",
      "null"
    ],
    built_in: [
      // toplevel builtins
      "abort",
      "baseNameOf",
      "builtins",
      "derivation",
      "derivationStrict",
      "dirOf",
      "fetchGit",
      "fetchMercurial",
      "fetchTarball",
      "fetchTree",
      "fromTOML",
      "import",
      "isNull",
      "map",
      "placeholder",
      "removeAttrs",
      "scopedImport",
      "throw",
      "toString"
    ]
  };
  const BUILTINS = {
    scope: "built_in",
    match: regex.either(...[
      "abort",
      "add",
      "addDrvOutputDependencies",
      "addErrorContext",
      "all",
      "any",
      "appendContext",
      "attrNames",
      "attrValues",
      "baseNameOf",
      "bitAnd",
      "bitOr",
      "bitXor",
      "break",
      "builtins",
      "catAttrs",
      "ceil",
      "compareVersions",
      "concatLists",
      "concatMap",
      "concatStringsSep",
      "convertHash",
      "currentSystem",
      "currentTime",
      "deepSeq",
      "derivation",
      "derivationStrict",
      "dirOf",
      "div",
      "elem",
      "elemAt",
      "false",
      "fetchGit",
      "fetchMercurial",
      "fetchTarball",
      "fetchTree",
      "fetchurl",
      "filter",
      "filterSource",
      "findFile",
      "flakeRefToString",
      "floor",
      "foldl'",
      "fromJSON",
      "fromTOML",
      "functionArgs",
      "genList",
      "genericClosure",
      "getAttr",
      "getContext",
      "getEnv",
      "getFlake",
      "groupBy",
      "hasAttr",
      "hasContext",
      "hashFile",
      "hashString",
      "head",
      "import",
      "intersectAttrs",
      "isAttrs",
      "isBool",
      "isFloat",
      "isFunction",
      "isInt",
      "isList",
      "isNull",
      "isPath",
      "isString",
      "langVersion",
      "length",
      "lessThan",
      "listToAttrs",
      "map",
      "mapAttrs",
      "match",
      "mul",
      "nixPath",
      "nixVersion",
      "null",
      "parseDrvName",
      "parseFlakeRef",
      "partition",
      "path",
      "pathExists",
      "placeholder",
      "readDir",
      "readFile",
      "readFileType",
      "removeAttrs",
      "replaceStrings",
      "scopedImport",
      "seq",
      "sort",
      "split",
      "splitVersion",
      "storeDir",
      "storePath",
      "stringLength",
      "sub",
      "substring",
      "tail",
      "throw",
      "toFile",
      "toJSON",
      "toPath",
      "toString",
      "toXML",
      "trace",
      "traceVerbose",
      "true",
      "tryEval",
      "typeOf",
      "unsafeDiscardOutputDependency",
      "unsafeDiscardStringContext",
      "unsafeGetAttrPos",
      "warn",
      "zipAttrsWith"
    ].map((b2) => `builtins\\.${b2}`)),
    relevance: 10
  };
  const IDENTIFIER_REGEX = "[A-Za-z_][A-Za-z0-9_'-]*";
  const LOOKUP_PATH = {
    scope: "symbol",
    match: new RegExp(`<${IDENTIFIER_REGEX}(/${IDENTIFIER_REGEX})*>`)
  };
  const PATH_PIECE = "[A-Za-z0-9_\\+\\.-]+";
  const PATH = {
    scope: "symbol",
    match: new RegExp(`(\\.\\.|\\.|~)?/(${PATH_PIECE})?(/${PATH_PIECE})*(?=[\\s;])`)
  };
  const OPERATOR_WITHOUT_MINUS_REGEX = regex.either(...[
    "==",
    "=",
    "\\+\\+",
    "\\+",
    "<=",
    "<\\|",
    "<",
    ">=",
    ">",
    "->",
    "//",
    "/",
    "!=",
    "!",
    "\\|\\|",
    "\\|>",
    "\\?",
    "\\*",
    "&&"
  ]);
  const OPERATOR = {
    scope: "operator",
    match: regex.concat(OPERATOR_WITHOUT_MINUS_REGEX, /(?!-)/),
    relevance: 0
  };
  const NUMBER = {
    scope: "number",
    match: new RegExp(`${hljs.NUMBER_RE}(?!-)`),
    relevance: 0
  };
  const MINUS_OPERATOR = {
    variants: [
      {
        scope: "operator",
        beforeMatch: /\s/,
        // The (?!>) is used to ensure this doesn't collide with the '->' operator
        begin: /-(?!>)/
      },
      {
        begin: [
          new RegExp(`${hljs.NUMBER_RE}`),
          /-/,
          /(?!>)/
        ],
        beginScope: {
          1: "number",
          2: "operator"
        }
      },
      {
        begin: [
          OPERATOR_WITHOUT_MINUS_REGEX,
          /-/,
          /(?!>)/
        ],
        beginScope: {
          1: "operator",
          2: "operator"
        }
      }
    ],
    relevance: 0
  };
  const ATTRS = {
    beforeMatch: /(^|\{|;)\s*/,
    begin: new RegExp(`${IDENTIFIER_REGEX}(\\.${IDENTIFIER_REGEX})*\\s*=(?!=)`),
    returnBegin: true,
    relevance: 0,
    contains: [
      {
        scope: "attr",
        match: new RegExp(`${IDENTIFIER_REGEX}(\\.${IDENTIFIER_REGEX})*(?=\\s*=)`),
        relevance: 0.2
      }
    ]
  };
  const NORMAL_ESCAPED_DOLLAR = {
    scope: "char.escape",
    match: /\\\$/
  };
  const INDENTED_ESCAPED_DOLLAR = {
    scope: "char.escape",
    match: /''\$/
  };
  const ANTIQUOTE = {
    scope: "subst",
    begin: /\$\{/,
    end: /\}/,
    keywords: KEYWORDS2
  };
  const ESCAPED_DOUBLEQUOTE = {
    scope: "char.escape",
    match: /'''/
  };
  const ESCAPED_LITERAL = {
    scope: "char.escape",
    match: /\\(?!\$)./
  };
  const STRING = {
    scope: "string",
    variants: [
      {
        begin: "''",
        end: "''",
        contains: [
          INDENTED_ESCAPED_DOLLAR,
          ANTIQUOTE,
          ESCAPED_DOUBLEQUOTE,
          ESCAPED_LITERAL
        ]
      },
      {
        begin: '"',
        end: '"',
        contains: [
          NORMAL_ESCAPED_DOLLAR,
          ANTIQUOTE,
          ESCAPED_LITERAL
        ]
      }
    ]
  };
  const FUNCTION_PARAMS = {
    scope: "params",
    match: new RegExp(`${IDENTIFIER_REGEX}\\s*:(?=\\s)`)
  };
  const EXPRESSIONS = [
    NUMBER,
    hljs.HASH_COMMENT_MODE,
    hljs.C_BLOCK_COMMENT_MODE,
    hljs.COMMENT(
      /\/\*\*(?!\/)/,
      /\*\//,
      {
        subLanguage: "markdown",
        relevance: 0
      }
    ),
    BUILTINS,
    STRING,
    LOOKUP_PATH,
    PATH,
    FUNCTION_PARAMS,
    ATTRS,
    MINUS_OPERATOR,
    OPERATOR
  ];
  ANTIQUOTE.contains = EXPRESSIONS;
  const REPL = [
    {
      scope: "meta.prompt",
      match: /^nix-repl>(?=\s)/,
      relevance: 10
    },
    {
      scope: "meta",
      beforeMatch: /\s+/,
      begin: /:([a-z]+|\?)/
    }
  ];
  return {
    name: "Nix",
    aliases: ["nixos"],
    keywords: KEYWORDS2,
    contains: EXPRESSIONS.concat(REPL)
  };
}
function nodeRepl(hljs) {
  return {
    name: "Node REPL",
    contains: [
      {
        className: "meta.prompt",
        starts: {
          // a space separates the REPL prefix from the actual code
          // this is purely for cleaner HTML output
          end: / |$/,
          starts: {
            end: "$",
            subLanguage: "javascript"
          }
        },
        variants: [
          { begin: /^>(?=[ ]|$)/ },
          { begin: /^\.\.\.(?=[ ]|$)/ }
        ]
      }
    ]
  };
}
function nsis(hljs) {
  const regex = hljs.regex;
  const LANGUAGE_CONSTANTS = [
    "ADMINTOOLS",
    "APPDATA",
    "CDBURN_AREA",
    "CMDLINE",
    "COMMONFILES32",
    "COMMONFILES64",
    "COMMONFILES",
    "COOKIES",
    "DESKTOP",
    "DOCUMENTS",
    "EXEDIR",
    "EXEFILE",
    "EXEPATH",
    "FAVORITES",
    "FONTS",
    "HISTORY",
    "HWNDPARENT",
    "INSTDIR",
    "INTERNET_CACHE",
    "LANGUAGE",
    "LOCALAPPDATA",
    "MUSIC",
    "NETHOOD",
    "OUTDIR",
    "PICTURES",
    "PLUGINSDIR",
    "PRINTHOOD",
    "PROFILE",
    "PROGRAMFILES32",
    "PROGRAMFILES64",
    "PROGRAMFILES",
    "QUICKLAUNCH",
    "RECENT",
    "RESOURCES_LOCALIZED",
    "RESOURCES",
    "SENDTO",
    "SMPROGRAMS",
    "SMSTARTUP",
    "STARTMENU",
    "SYSDIR",
    "TEMP",
    "TEMPLATES",
    "VIDEOS",
    "WINDIR"
  ];
  const PARAM_NAMES = [
    "ARCHIVE",
    "FILE_ATTRIBUTE_ARCHIVE",
    "FILE_ATTRIBUTE_NORMAL",
    "FILE_ATTRIBUTE_OFFLINE",
    "FILE_ATTRIBUTE_READONLY",
    "FILE_ATTRIBUTE_SYSTEM",
    "FILE_ATTRIBUTE_TEMPORARY",
    "HKCR",
    "HKCU",
    "HKDD",
    "HKEY_CLASSES_ROOT",
    "HKEY_CURRENT_CONFIG",
    "HKEY_CURRENT_USER",
    "HKEY_DYN_DATA",
    "HKEY_LOCAL_MACHINE",
    "HKEY_PERFORMANCE_DATA",
    "HKEY_USERS",
    "HKLM",
    "HKPD",
    "HKU",
    "IDABORT",
    "IDCANCEL",
    "IDIGNORE",
    "IDNO",
    "IDOK",
    "IDRETRY",
    "IDYES",
    "MB_ABORTRETRYIGNORE",
    "MB_DEFBUTTON1",
    "MB_DEFBUTTON2",
    "MB_DEFBUTTON3",
    "MB_DEFBUTTON4",
    "MB_ICONEXCLAMATION",
    "MB_ICONINFORMATION",
    "MB_ICONQUESTION",
    "MB_ICONSTOP",
    "MB_OK",
    "MB_OKCANCEL",
    "MB_RETRYCANCEL",
    "MB_RIGHT",
    "MB_RTLREADING",
    "MB_SETFOREGROUND",
    "MB_TOPMOST",
    "MB_USERICON",
    "MB_YESNO",
    "NORMAL",
    "OFFLINE",
    "READONLY",
    "SHCTX",
    "SHELL_CONTEXT",
    "SYSTEM|TEMPORARY"
  ];
  const COMPILER_FLAGS = [
    "addincludedir",
    "addplugindir",
    "appendfile",
    "assert",
    "cd",
    "define",
    "delfile",
    "echo",
    "else",
    "endif",
    "error",
    "execute",
    "finalize",
    "getdllversion",
    "gettlbversion",
    "if",
    "ifdef",
    "ifmacrodef",
    "ifmacrondef",
    "ifndef",
    "include",
    "insertmacro",
    "macro",
    "macroend",
    "makensis",
    "packhdr",
    "searchparse",
    "searchreplace",
    "system",
    "tempfile",
    "undef",
    "uninstfinalize",
    "verbose",
    "warning"
  ];
  const CONSTANTS = {
    className: "variable.constant",
    begin: regex.concat(/\$/, regex.either(...LANGUAGE_CONSTANTS))
  };
  const DEFINES = {
    // ${defines}
    className: "variable",
    begin: /\$+\{[\!\w.:-]+\}/
  };
  const VARIABLES = {
    // $variables
    className: "variable",
    begin: /\$+\w[\w\.]*/,
    illegal: /\(\)\{\}/
  };
  const LANGUAGES = {
    // $(language_strings)
    className: "variable",
    begin: /\$+\([\w^.:!-]+\)/
  };
  const PARAMETERS = {
    // command parameters
    className: "params",
    begin: regex.either(...PARAM_NAMES)
  };
  const COMPILER = {
    // !compiler_flags
    className: "keyword",
    begin: regex.concat(
      /!/,
      regex.either(...COMPILER_FLAGS)
    )
  };
  const ESCAPE_CHARS = {
    // $\n, $\r, $\t, $$
    className: "char.escape",
    begin: /\$(\\[nrt]|\$)/
  };
  const PLUGINS = {
    // plug::ins
    className: "title.function",
    begin: /\w+::\w+/
  };
  const STRING = {
    className: "string",
    variants: [
      {
        begin: '"',
        end: '"'
      },
      {
        begin: "'",
        end: "'"
      },
      {
        begin: "`",
        end: "`"
      }
    ],
    illegal: /\n/,
    contains: [
      ESCAPE_CHARS,
      CONSTANTS,
      DEFINES,
      VARIABLES,
      LANGUAGES
    ]
  };
  const KEYWORDS2 = [
    "Abort",
    "AddBrandingImage",
    "AddSize",
    "AllowRootDirInstall",
    "AllowSkipFiles",
    "AutoCloseWindow",
    "BGFont",
    "BGGradient",
    "BrandingText",
    "BringToFront",
    "Call",
    "CallInstDLL",
    "Caption",
    "ChangeUI",
    "CheckBitmap",
    "ClearErrors",
    "CompletedText",
    "ComponentText",
    "CopyFiles",
    "CRCCheck",
    "CreateDirectory",
    "CreateFont",
    "CreateShortCut",
    "Delete",
    "DeleteINISec",
    "DeleteINIStr",
    "DeleteRegKey",
    "DeleteRegValue",
    "DetailPrint",
    "DetailsButtonText",
    "DirText",
    "DirVar",
    "DirVerify",
    "EnableWindow",
    "EnumRegKey",
    "EnumRegValue",
    "Exch",
    "Exec",
    "ExecShell",
    "ExecShellWait",
    "ExecWait",
    "ExpandEnvStrings",
    "File",
    "FileBufSize",
    "FileClose",
    "FileErrorText",
    "FileOpen",
    "FileRead",
    "FileReadByte",
    "FileReadUTF16LE",
    "FileReadWord",
    "FileWriteUTF16LE",
    "FileSeek",
    "FileWrite",
    "FileWriteByte",
    "FileWriteWord",
    "FindClose",
    "FindFirst",
    "FindNext",
    "FindWindow",
    "FlushINI",
    "GetCurInstType",
    "GetCurrentAddress",
    "GetDlgItem",
    "GetDLLVersion",
    "GetDLLVersionLocal",
    "GetErrorLevel",
    "GetFileTime",
    "GetFileTimeLocal",
    "GetFullPathName",
    "GetFunctionAddress",
    "GetInstDirError",
    "GetKnownFolderPath",
    "GetLabelAddress",
    "GetTempFileName",
    "GetWinVer",
    "Goto",
    "HideWindow",
    "Icon",
    "IfAbort",
    "IfErrors",
    "IfFileExists",
    "IfRebootFlag",
    "IfRtlLanguage",
    "IfShellVarContextAll",
    "IfSilent",
    "InitPluginsDir",
    "InstallButtonText",
    "InstallColors",
    "InstallDir",
    "InstallDirRegKey",
    "InstProgressFlags",
    "InstType",
    "InstTypeGetText",
    "InstTypeSetText",
    "Int64Cmp",
    "Int64CmpU",
    "Int64Fmt",
    "IntCmp",
    "IntCmpU",
    "IntFmt",
    "IntOp",
    "IntPtrCmp",
    "IntPtrCmpU",
    "IntPtrOp",
    "IsWindow",
    "LangString",
    "LicenseBkColor",
    "LicenseData",
    "LicenseForceSelection",
    "LicenseLangString",
    "LicenseText",
    "LoadAndSetImage",
    "LoadLanguageFile",
    "LockWindow",
    "LogSet",
    "LogText",
    "ManifestDPIAware",
    "ManifestLongPathAware",
    "ManifestMaxVersionTested",
    "ManifestSupportedOS",
    "MessageBox",
    "MiscButtonText",
    "Name|0",
    "Nop",
    "OutFile",
    "Page",
    "PageCallbacks",
    "PEAddResource",
    "PEDllCharacteristics",
    "PERemoveResource",
    "PESubsysVer",
    "Pop",
    "Push",
    "Quit",
    "ReadEnvStr",
    "ReadINIStr",
    "ReadRegDWORD",
    "ReadRegStr",
    "Reboot",
    "RegDLL",
    "Rename",
    "RequestExecutionLevel",
    "ReserveFile",
    "Return",
    "RMDir",
    "SearchPath",
    "SectionGetFlags",
    "SectionGetInstTypes",
    "SectionGetSize",
    "SectionGetText",
    "SectionIn",
    "SectionSetFlags",
    "SectionSetInstTypes",
    "SectionSetSize",
    "SectionSetText",
    "SendMessage",
    "SetAutoClose",
    "SetBrandingImage",
    "SetCompress",
    "SetCompressor",
    "SetCompressorDictSize",
    "SetCtlColors",
    "SetCurInstType",
    "SetDatablockOptimize",
    "SetDateSave",
    "SetDetailsPrint",
    "SetDetailsView",
    "SetErrorLevel",
    "SetErrors",
    "SetFileAttributes",
    "SetFont",
    "SetOutPath",
    "SetOverwrite",
    "SetRebootFlag",
    "SetRegView",
    "SetShellVarContext",
    "SetSilent",
    "ShowInstDetails",
    "ShowUninstDetails",
    "ShowWindow",
    "SilentInstall",
    "SilentUnInstall",
    "Sleep",
    "SpaceTexts",
    "StrCmp",
    "StrCmpS",
    "StrCpy",
    "StrLen",
    "SubCaption",
    "Unicode",
    "UninstallButtonText",
    "UninstallCaption",
    "UninstallIcon",
    "UninstallSubCaption",
    "UninstallText",
    "UninstPage",
    "UnRegDLL",
    "Var",
    "VIAddVersionKey",
    "VIFileVersion",
    "VIProductVersion",
    "WindowIcon",
    "WriteINIStr",
    "WriteRegBin",
    "WriteRegDWORD",
    "WriteRegExpandStr",
    "WriteRegMultiStr",
    "WriteRegNone",
    "WriteRegStr",
    "WriteUninstaller",
    "XPStyle"
  ];
  const LITERALS2 = [
    "admin",
    "all",
    "auto",
    "both",
    "bottom",
    "bzip2",
    "colored",
    "components",
    "current",
    "custom",
    "directory",
    "false",
    "force",
    "hide",
    "highest",
    "ifdiff",
    "ifnewer",
    "instfiles",
    "lastused",
    "leave",
    "left",
    "license",
    "listonly",
    "lzma",
    "nevershow",
    "none",
    "normal",
    "notset",
    "off",
    "on",
    "open",
    "print",
    "right",
    "show",
    "silent",
    "silentlog",
    "smooth",
    "textonly",
    "top",
    "true",
    "try",
    "un.components",
    "un.custom",
    "un.directory",
    "un.instfiles",
    "un.license",
    "uninstConfirm",
    "user",
    "Win10",
    "Win7",
    "Win8",
    "WinVista",
    "zlib"
  ];
  const FUNCTION_DEFINITION = {
    match: [
      /Function/,
      /\s+/,
      regex.concat(/(\.)?/, hljs.IDENT_RE)
    ],
    scope: {
      1: "keyword",
      3: "title.function"
    }
  };
  const VARIABLE_NAME_RE = /[A-Za-z][\w.]*/;
  const VARIABLE_DEFINITION = {
    match: [
      /Var/,
      /\s+/,
      /(?:\/GLOBAL\s+)?/,
      VARIABLE_NAME_RE
    ],
    scope: {
      1: "keyword",
      3: "params",
      4: "variable"
    }
  };
  return {
    name: "NSIS",
    case_insensitive: true,
    keywords: {
      keyword: KEYWORDS2,
      literal: LITERALS2
    },
    contains: [
      hljs.HASH_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.COMMENT(
        ";",
        "$",
        { relevance: 0 }
      ),
      VARIABLE_DEFINITION,
      FUNCTION_DEFINITION,
      { beginKeywords: "Function PageEx Section SectionGroup FunctionEnd SectionEnd" },
      STRING,
      COMPILER,
      DEFINES,
      VARIABLES,
      LANGUAGES,
      PARAMETERS,
      PLUGINS,
      hljs.NUMBER_MODE
    ]
  };
}
function ocaml(hljs) {
  return {
    name: "OCaml",
    aliases: ["ml"],
    keywords: {
      $pattern: "[a-z_]\\w*!?",
      keyword: "and as assert asr begin class constraint do done downto else end exception external for fun function functor if in include inherit! inherit initializer land lazy let lor lsl lsr lxor match method!|10 method mod module mutable new object of open! open or private rec sig struct then to try type val! val virtual when while with parser value",
      built_in: (
        /* built-in types */
        "array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 string unit in_channel out_channel ref"
      ),
      literal: "true false"
    },
    illegal: /\/\/|>>/,
    contains: [
      {
        className: "literal",
        begin: "\\[(\\|\\|)?\\]|\\(\\)",
        relevance: 0
      },
      hljs.COMMENT(
        "\\(\\*",
        "\\*\\)",
        { contains: ["self"] }
      ),
      {
        /* type variable */
        className: "symbol",
        begin: "'[A-Za-z_](?!')[\\w']*"
        /* the grammar is ambiguous on how 'a'b should be interpreted but not the compiler */
      },
      {
        /* polymorphic variant */
        className: "type",
        begin: "`[A-Z][\\w']*"
      },
      {
        /* module or constructor */
        className: "type",
        begin: "\\b[A-Z][\\w']*",
        relevance: 0
      },
      {
        /* don't color identifiers, but safely catch all identifiers with ' */
        begin: "[a-z_]\\w*'[\\w']*",
        relevance: 0
      },
      hljs.inherit(hljs.APOS_STRING_MODE, {
        className: "string",
        relevance: 0
      }),
      hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }),
      {
        className: "number",
        begin: "\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",
        relevance: 0
      },
      {
        begin: /->/
        // relevance booster
      }
    ]
  };
}
function openscad(hljs) {
  const SPECIAL_VARS = {
    className: "keyword",
    begin: "\\$(f[asn]|t|vp[rtd]|children)"
  };
  const LITERALS2 = {
    className: "literal",
    begin: "false|true|PI|undef"
  };
  const NUMBERS = {
    className: "number",
    begin: "\\b\\d+(\\.\\d+)?(e-?\\d+)?",
    // adds 1e5, 1e-10
    relevance: 0
  };
  const STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null });
  const PREPRO = {
    className: "meta",
    keywords: { keyword: "include use" },
    begin: "include|use <",
    end: ">"
  };
  const PARAMS = {
    className: "params",
    begin: "\\(",
    end: "\\)",
    contains: [
      "self",
      NUMBERS,
      STRING,
      SPECIAL_VARS,
      LITERALS2
    ]
  };
  const MODIFIERS = {
    begin: "[*!#%]",
    relevance: 0
  };
  const FUNCTIONS = {
    className: "function",
    beginKeywords: "module function",
    end: /=|\{/,
    contains: [
      PARAMS,
      hljs.UNDERSCORE_TITLE_MODE
    ]
  };
  return {
    name: "OpenSCAD",
    aliases: ["scad"],
    keywords: {
      keyword: "function module include use for intersection_for if else \\%",
      literal: "false true PI undef",
      built_in: "circle square polygon text sphere cube cylinder polyhedron translate rotate scale resize mirror multmatrix color offset hull minkowski union difference intersection abs sign sin cos tan acos asin atan atan2 floor round ceil ln log pow sqrt exp rands min max concat lookup str chr search version version_num norm cross parent_module echo import import_dxf dxf_linear_extrude linear_extrude rotate_extrude surface projection render children dxf_cross dxf_dim let assign"
    },
    contains: [
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      NUMBERS,
      PREPRO,
      STRING,
      SPECIAL_VARS,
      MODIFIERS,
      FUNCTIONS
    ]
  };
}
function oxygene(hljs) {
  const OXYGENE_KEYWORDS = {
    $pattern: /\.?\w+/,
    keyword: "abstract add and array as asc aspect assembly async begin break block by case class concat const copy constructor continue create default delegate desc distinct div do downto dynamic each else empty end ensure enum equals event except exit extension external false final finalize finalizer finally flags for forward from function future global group has if implementation implements implies in index inherited inline interface into invariants is iterator join locked locking loop matching method mod module namespace nested new nil not notify nullable of old on operator or order out override parallel params partial pinned private procedure property protected public queryable raise read readonly record reintroduce remove repeat require result reverse sealed select self sequence set shl shr skip static step soft take then to true try tuple type union unit unsafe until uses using var virtual raises volatile where while with write xor yield await mapped deprecated stdcall cdecl pascal register safecall overload library platform reference packed strict published autoreleasepool selector strong weak unretained"
  };
  const CURLY_COMMENT = hljs.COMMENT(
    /\{/,
    /\}/,
    { relevance: 0 }
  );
  const PAREN_COMMENT = hljs.COMMENT(
    "\\(\\*",
    "\\*\\)",
    { relevance: 10 }
  );
  const STRING = {
    className: "string",
    begin: "'",
    end: "'",
    contains: [{ begin: "''" }]
  };
  const CHAR_STRING = {
    className: "string",
    begin: "(#\\d+)+"
  };
  const FUNCTION = {
    beginKeywords: "function constructor destructor procedure method",
    end: "[:;]",
    keywords: "function constructor|10 destructor|10 procedure|10 method|10",
    contains: [
      hljs.inherit(hljs.TITLE_MODE, { scope: "title.function" }),
      {
        className: "params",
        begin: "\\(",
        end: "\\)",
        keywords: OXYGENE_KEYWORDS,
        contains: [
          STRING,
          CHAR_STRING
        ]
      },
      CURLY_COMMENT,
      PAREN_COMMENT
    ]
  };
  const SEMICOLON = {
    scope: "punctuation",
    match: /;/,
    relevance: 0
  };
  return {
    name: "Oxygene",
    case_insensitive: true,
    keywords: OXYGENE_KEYWORDS,
    illegal: '("|\\$[G-Zg-z]|\\/\\*|</|=>|->)',
    contains: [
      CURLY_COMMENT,
      PAREN_COMMENT,
      hljs.C_LINE_COMMENT_MODE,
      STRING,
      CHAR_STRING,
      hljs.NUMBER_MODE,
      FUNCTION,
      SEMICOLON
    ]
  };
}
function parser3(hljs) {
  const CURLY_SUBCOMMENT = hljs.COMMENT(
    /\{/,
    /\}/,
    { contains: ["self"] }
  );
  return {
    name: "Parser3",
    subLanguage: "xml",
    relevance: 0,
    contains: [
      hljs.COMMENT("^#", "$"),
      hljs.COMMENT(
        /\^rem\{/,
        /\}/,
        {
          relevance: 10,
          contains: [CURLY_SUBCOMMENT]
        }
      ),
      {
        className: "meta",
        begin: "^@(?:BASE|USE|CLASS|OPTIONS)$",
        relevance: 10
      },
      {
        className: "title",
        begin: "@[\\w\\-]+\\[[\\w^;\\-]*\\](?:\\[[\\w^;\\-]*\\])?(?:.*)$"
      },
      {
        className: "variable",
        begin: /\$\{?[\w\-.:]+\}?/
      },
      {
        className: "keyword",
        begin: /\^[\w\-.:]+/
      },
      {
        className: "number",
        begin: "\\^#[0-9a-fA-F]+"
      },
      hljs.C_NUMBER_MODE
    ]
  };
}
function pf(hljs) {
  const MACRO = {
    className: "variable",
    begin: /\$[\w\d#@][\w\d_]*/,
    relevance: 0
  };
  const TABLE = {
    className: "variable",
    begin: /<(?!\/)/,
    end: />/
  };
  return {
    name: "Packet Filter config",
    aliases: ["pf.conf"],
    keywords: {
      $pattern: /[a-z0-9_<>-]+/,
      built_in: (
        /* block match pass are "actions" in pf.conf(5), the rest are
         * lexically similar top-level commands.
         */
        "block match pass load anchor|5 antispoof|10 set table"
      ),
      keyword: "in out log quick on rdomain inet inet6 proto from port os to route allow-opts divert-packet divert-reply divert-to flags group icmp-type icmp6-type label once probability recieved-on rtable prio queue tos tag tagged user keep fragment for os drop af-to|10 binat-to|10 nat-to|10 rdr-to|10 bitmask least-stats random round-robin source-hash static-port dup-to reply-to route-to parent bandwidth default min max qlimit block-policy debug fingerprints hostid limit loginterface optimization reassemble ruleset-optimization basic none profile skip state-defaults state-policy timeout const counters persist no modulate synproxy state|5 floating if-bound no-sync pflow|10 sloppy source-track global rule max-src-nodes max-src-states max-src-conn max-src-conn-rate overload flush scrub|5 max-mss min-ttl no-df|10 random-id",
      literal: "all any no-route self urpf-failed egress|5 unknown"
    },
    contains: [
      hljs.HASH_COMMENT_MODE,
      hljs.NUMBER_MODE,
      hljs.QUOTE_STRING_MODE,
      MACRO,
      TABLE
    ]
  };
}
function pgsql(hljs) {
  const COMMENT_MODE = hljs.COMMENT("--", "$");
  const UNQUOTED_IDENT = "[a-zA-Z_][a-zA-Z_0-9$]*";
  const DOLLAR_STRING = "\\$([a-zA-Z_]?|[a-zA-Z_][a-zA-Z_0-9]*)\\$";
  const LABEL = "<<\\s*" + UNQUOTED_IDENT + "\\s*>>";
  const SQL_KW = (
    // https://www.postgresql.org/docs/11/static/sql-keywords-appendix.html
    // https://www.postgresql.org/docs/11/static/sql-commands.html
    // SQL commands (starting words)
    "ABORT ALTER ANALYZE BEGIN CALL CHECKPOINT|10 CLOSE CLUSTER COMMENT COMMIT COPY CREATE DEALLOCATE DECLARE DELETE DISCARD DO DROP END EXECUTE EXPLAIN FETCH GRANT IMPORT INSERT LISTEN LOAD LOCK MOVE NOTIFY PREPARE REASSIGN|10 REFRESH REINDEX RELEASE RESET REVOKE ROLLBACK SAVEPOINT SECURITY SELECT SET SHOW START TRUNCATE UNLISTEN|10 UPDATE VACUUM|10 VALUES AGGREGATE COLLATION CONVERSION|10 DATABASE DEFAULT PRIVILEGES DOMAIN TRIGGER EXTENSION FOREIGN WRAPPER|10 TABLE FUNCTION GROUP LANGUAGE LARGE OBJECT MATERIALIZED VIEW OPERATOR CLASS FAMILY POLICY PUBLICATION|10 ROLE RULE SCHEMA SEQUENCE SERVER STATISTICS SUBSCRIPTION SYSTEM TABLESPACE CONFIGURATION DICTIONARY PARSER TEMPLATE TYPE USER MAPPING PREPARED ACCESS METHOD CAST AS TRANSFORM TRANSACTION OWNED TO INTO SESSION AUTHORIZATION INDEX PROCEDURE ASSERTION ALL ANALYSE AND ANY ARRAY ASC ASYMMETRIC|10 BOTH CASE CHECK COLLATE COLUMN CONCURRENTLY|10 CONSTRAINT CROSS DEFERRABLE RANGE DESC DISTINCT ELSE EXCEPT FOR FREEZE|10 FROM FULL HAVING ILIKE IN INITIALLY INNER INTERSECT IS ISNULL JOIN LATERAL LEADING LIKE LIMIT NATURAL NOT NOTNULL NULL OFFSET ON ONLY OR ORDER OUTER OVERLAPS PLACING PRIMARY REFERENCES RETURNING SIMILAR SOME SYMMETRIC TABLESAMPLE THEN TRAILING UNION UNIQUE USING VARIADIC|10 VERBOSE WHEN WHERE WINDOW WITH BY RETURNS INOUT OUT SETOF|10 IF STRICT CURRENT CONTINUE OWNER LOCATION OVER PARTITION WITHIN BETWEEN ESCAPE EXTERNAL INVOKER DEFINER WORK RENAME VERSION CONNECTION CONNECT TABLES TEMP TEMPORARY FUNCTIONS SEQUENCES TYPES SCHEMAS OPTION CASCADE RESTRICT ADD ADMIN EXISTS VALID VALIDATE ENABLE DISABLE REPLICA|10 ALWAYS PASSING COLUMNS PATH REF VALUE OVERRIDING IMMUTABLE STABLE VOLATILE BEFORE AFTER EACH ROW PROCEDURAL ROUTINE NO HANDLER VALIDATOR OPTIONS STORAGE OIDS|10 WITHOUT INHERIT DEPENDS CALLED INPUT LEAKPROOF|10 COST ROWS NOWAIT SEARCH UNTIL ENCRYPTED|10 PASSWORD CONFLICT|10 INSTEAD INHERITS CHARACTERISTICS WRITE CURSOR ALSO STATEMENT SHARE EXCLUSIVE INLINE ISOLATION REPEATABLE READ COMMITTED SERIALIZABLE UNCOMMITTED LOCAL GLOBAL SQL PROCEDURES RECURSIVE SNAPSHOT ROLLUP CUBE TRUSTED|10 INCLUDE FOLLOWING PRECEDING UNBOUNDED RANGE GROUPS UNENCRYPTED|10 SYSID FORMAT DELIMITER HEADER QUOTE ENCODING FILTER OFF FORCE_QUOTE FORCE_NOT_NULL FORCE_NULL COSTS BUFFERS TIMING SUMMARY DISABLE_PAGE_SKIPPING RESTART CYCLE GENERATED IDENTITY DEFERRED IMMEDIATE LEVEL LOGGED UNLOGGED OF NOTHING NONE EXCLUDE ATTRIBUTE USAGE ROUTINES TRUE FALSE NAN INFINITY "
  );
  const ROLE_ATTRS = (
    // only those not in keywrods already
    "SUPERUSER NOSUPERUSER CREATEDB NOCREATEDB CREATEROLE NOCREATEROLE INHERIT NOINHERIT LOGIN NOLOGIN REPLICATION NOREPLICATION BYPASSRLS NOBYPASSRLS "
  );
  const PLPGSQL_KW = "ALIAS BEGIN CONSTANT DECLARE END EXCEPTION RETURN PERFORM|10 RAISE GET DIAGNOSTICS STACKED|10 FOREACH LOOP ELSIF EXIT WHILE REVERSE SLICE DEBUG LOG INFO NOTICE WARNING ASSERT OPEN ";
  const TYPES2 = (
    // https://www.postgresql.org/docs/11/static/datatype.html
    "BIGINT INT8 BIGSERIAL SERIAL8 BIT VARYING VARBIT BOOLEAN BOOL BOX BYTEA CHARACTER CHAR VARCHAR CIDR CIRCLE DATE DOUBLE PRECISION FLOAT8 FLOAT INET INTEGER INT INT4 INTERVAL JSON JSONB LINE LSEG|10 MACADDR MACADDR8 MONEY NUMERIC DEC DECIMAL PATH POINT POLYGON REAL FLOAT4 SMALLINT INT2 SMALLSERIAL|10 SERIAL2|10 SERIAL|10 SERIAL4|10 TEXT TIME ZONE TIMETZ|10 TIMESTAMP TIMESTAMPTZ|10 TSQUERY|10 TSVECTOR|10 TXID_SNAPSHOT|10 UUID XML NATIONAL NCHAR INT4RANGE|10 INT8RANGE|10 NUMRANGE|10 TSRANGE|10 TSTZRANGE|10 DATERANGE|10 ANYELEMENT ANYARRAY ANYNONARRAY ANYENUM ANYRANGE CSTRING INTERNAL RECORD PG_DDL_COMMAND VOID UNKNOWN OPAQUE REFCURSOR NAME OID REGPROC|10 REGPROCEDURE|10 REGOPER|10 REGOPERATOR|10 REGCLASS|10 REGTYPE|10 REGROLE|10 REGNAMESPACE|10 REGCONFIG|10 REGDICTIONARY|10 "
  );
  const TYPES_RE = TYPES2.trim().split(" ").map(function(val) {
    return val.split("|")[0];
  }).join("|");
  const SQL_BI = "CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURRENT_CATALOG|10 CURRENT_DATE LOCALTIME LOCALTIMESTAMP CURRENT_ROLE|10 CURRENT_SCHEMA|10 SESSION_USER PUBLIC ";
  const PLPGSQL_BI = "FOUND NEW OLD TG_NAME|10 TG_WHEN|10 TG_LEVEL|10 TG_OP|10 TG_RELID|10 TG_RELNAME|10 TG_TABLE_NAME|10 TG_TABLE_SCHEMA|10 TG_NARGS|10 TG_ARGV|10 TG_EVENT|10 TG_TAG|10 ROW_COUNT RESULT_OID|10 PG_CONTEXT|10 RETURNED_SQLSTATE COLUMN_NAME CONSTRAINT_NAME PG_DATATYPE_NAME|10 MESSAGE_TEXT TABLE_NAME SCHEMA_NAME PG_EXCEPTION_DETAIL|10 PG_EXCEPTION_HINT|10 PG_EXCEPTION_CONTEXT|10 ";
  const PLPGSQL_EXCEPTIONS = (
    // exceptions https://www.postgresql.org/docs/current/static/errcodes-appendix.html
    "SQLSTATE SQLERRM|10 SUCCESSFUL_COMPLETION WARNING DYNAMIC_RESULT_SETS_RETURNED IMPLICIT_ZERO_BIT_PADDING NULL_VALUE_ELIMINATED_IN_SET_FUNCTION PRIVILEGE_NOT_GRANTED PRIVILEGE_NOT_REVOKED STRING_DATA_RIGHT_TRUNCATION DEPRECATED_FEATURE NO_DATA NO_ADDITIONAL_DYNAMIC_RESULT_SETS_RETURNED SQL_STATEMENT_NOT_YET_COMPLETE CONNECTION_EXCEPTION CONNECTION_DOES_NOT_EXIST CONNECTION_FAILURE SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION SQLSERVER_REJECTED_ESTABLISHMENT_OF_SQLCONNECTION TRANSACTION_RESOLUTION_UNKNOWN PROTOCOL_VIOLATION TRIGGERED_ACTION_EXCEPTION FEATURE_NOT_SUPPORTED INVALID_TRANSACTION_INITIATION LOCATOR_EXCEPTION INVALID_LOCATOR_SPECIFICATION INVALID_GRANTOR INVALID_GRANT_OPERATION INVALID_ROLE_SPECIFICATION DIAGNOSTICS_EXCEPTION STACKED_DIAGNOSTICS_ACCESSED_WITHOUT_ACTIVE_HANDLER CASE_NOT_FOUND CARDINALITY_VIOLATION DATA_EXCEPTION ARRAY_SUBSCRIPT_ERROR CHARACTER_NOT_IN_REPERTOIRE DATETIME_FIELD_OVERFLOW DIVISION_BY_ZERO ERROR_IN_ASSIGNMENT ESCAPE_CHARACTER_CONFLICT INDICATOR_OVERFLOW INTERVAL_FIELD_OVERFLOW INVALID_ARGUMENT_FOR_LOGARITHM INVALID_ARGUMENT_FOR_NTILE_FUNCTION INVALID_ARGUMENT_FOR_NTH_VALUE_FUNCTION INVALID_ARGUMENT_FOR_POWER_FUNCTION INVALID_ARGUMENT_FOR_WIDTH_BUCKET_FUNCTION INVALID_CHARACTER_VALUE_FOR_CAST INVALID_DATETIME_FORMAT INVALID_ESCAPE_CHARACTER INVALID_ESCAPE_OCTET INVALID_ESCAPE_SEQUENCE NONSTANDARD_USE_OF_ESCAPE_CHARACTER INVALID_INDICATOR_PARAMETER_VALUE INVALID_PARAMETER_VALUE INVALID_REGULAR_EXPRESSION INVALID_ROW_COUNT_IN_LIMIT_CLAUSE INVALID_ROW_COUNT_IN_RESULT_OFFSET_CLAUSE INVALID_TABLESAMPLE_ARGUMENT INVALID_TABLESAMPLE_REPEAT INVALID_TIME_ZONE_DISPLACEMENT_VALUE INVALID_USE_OF_ESCAPE_CHARACTER MOST_SPECIFIC_TYPE_MISMATCH NULL_VALUE_NOT_ALLOWED NULL_VALUE_NO_INDICATOR_PARAMETER NUMERIC_VALUE_OUT_OF_RANGE SEQUENCE_GENERATOR_LIMIT_EXCEEDED STRING_DATA_LENGTH_MISMATCH STRING_DATA_RIGHT_TRUNCATION SUBSTRING_ERROR TRIM_ERROR UNTERMINATED_C_STRING ZERO_LENGTH_CHARACTER_STRING FLOATING_POINT_EXCEPTION INVALID_TEXT_REPRESENTATION INVALID_BINARY_REPRESENTATION BAD_COPY_FILE_FORMAT UNTRANSLATABLE_CHARACTER NOT_AN_XML_DOCUMENT INVALID_XML_DOCUMENT INVALID_XML_CONTENT INVALID_XML_COMMENT INVALID_XML_PROCESSING_INSTRUCTION INTEGRITY_CONSTRAINT_VIOLATION RESTRICT_VIOLATION NOT_NULL_VIOLATION FOREIGN_KEY_VIOLATION UNIQUE_VIOLATION CHECK_VIOLATION EXCLUSION_VIOLATION INVALID_CURSOR_STATE INVALID_TRANSACTION_STATE ACTIVE_SQL_TRANSACTION BRANCH_TRANSACTION_ALREADY_ACTIVE HELD_CURSOR_REQUIRES_SAME_ISOLATION_LEVEL INAPPROPRIATE_ACCESS_MODE_FOR_BRANCH_TRANSACTION INAPPROPRIATE_ISOLATION_LEVEL_FOR_BRANCH_TRANSACTION NO_ACTIVE_SQL_TRANSACTION_FOR_BRANCH_TRANSACTION READ_ONLY_SQL_TRANSACTION SCHEMA_AND_DATA_STATEMENT_MIXING_NOT_SUPPORTED NO_ACTIVE_SQL_TRANSACTION IN_FAILED_SQL_TRANSACTION IDLE_IN_TRANSACTION_SESSION_TIMEOUT INVALID_SQL_STATEMENT_NAME TRIGGERED_DATA_CHANGE_VIOLATION INVALID_AUTHORIZATION_SPECIFICATION INVALID_PASSWORD DEPENDENT_PRIVILEGE_DESCRIPTORS_STILL_EXIST DEPENDENT_OBJECTS_STILL_EXIST INVALID_TRANSACTION_TERMINATION SQL_ROUTINE_EXCEPTION FUNCTION_EXECUTED_NO_RETURN_STATEMENT MODIFYING_SQL_DATA_NOT_PERMITTED PROHIBITED_SQL_STATEMENT_ATTEMPTED READING_SQL_DATA_NOT_PERMITTED INVALID_CURSOR_NAME EXTERNAL_ROUTINE_EXCEPTION CONTAINING_SQL_NOT_PERMITTED MODIFYING_SQL_DATA_NOT_PERMITTED PROHIBITED_SQL_STATEMENT_ATTEMPTED READING_SQL_DATA_NOT_PERMITTED EXTERNAL_ROUTINE_INVOCATION_EXCEPTION INVALID_SQLSTATE_RETURNED NULL_VALUE_NOT_ALLOWED TRIGGER_PROTOCOL_VIOLATED SRF_PROTOCOL_VIOLATED EVENT_TRIGGER_PROTOCOL_VIOLATED SAVEPOINT_EXCEPTION INVALID_SAVEPOINT_SPECIFICATION INVALID_CATALOG_NAME INVALID_SCHEMA_NAME TRANSACTION_ROLLBACK TRANSACTION_INTEGRITY_CONSTRAINT_VIOLATION SERIALIZATION_FAILURE STATEMENT_COMPLETION_UNKNOWN DEADLOCK_DETECTED SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION SYNTAX_ERROR INSUFFICIENT_PRIVILEGE CANNOT_COERCE GROUPING_ERROR WINDOWING_ERROR INVALID_RECURSION INVALID_FOREIGN_KEY INVALID_NAME NAME_TOO_LONG RESERVED_NAME DATATYPE_MISMATCH INDETERMINATE_DATATYPE COLLATION_MISMATCH INDETERMINATE_COLLATION WRONG_OBJECT_TYPE GENERATED_ALWAYS UNDEFINED_COLUMN UNDEFINED_FUNCTION UNDEFINED_TABLE UNDEFINED_PARAMETER UNDEFINED_OBJECT DUPLICATE_COLUMN DUPLICATE_CURSOR DUPLICATE_DATABASE DUPLICATE_FUNCTION DUPLICATE_PREPARED_STATEMENT DUPLICATE_SCHEMA DUPLICATE_TABLE DUPLICATE_ALIAS DUPLICATE_OBJECT AMBIGUOUS_COLUMN AMBIGUOUS_FUNCTION AMBIGUOUS_PARAMETER AMBIGUOUS_ALIAS INVALID_COLUMN_REFERENCE INVALID_COLUMN_DEFINITION INVALID_CURSOR_DEFINITION INVALID_DATABASE_DEFINITION INVALID_FUNCTION_DEFINITION INVALID_PREPARED_STATEMENT_DEFINITION INVALID_SCHEMA_DEFINITION INVALID_TABLE_DEFINITION INVALID_OBJECT_DEFINITION WITH_CHECK_OPTION_VIOLATION INSUFFICIENT_RESOURCES DISK_FULL OUT_OF_MEMORY TOO_MANY_CONNECTIONS CONFIGURATION_LIMIT_EXCEEDED PROGRAM_LIMIT_EXCEEDED STATEMENT_TOO_COMPLEX TOO_MANY_COLUMNS TOO_MANY_ARGUMENTS OBJECT_NOT_IN_PREREQUISITE_STATE OBJECT_IN_USE CANT_CHANGE_RUNTIME_PARAM LOCK_NOT_AVAILABLE OPERATOR_INTERVENTION QUERY_CANCELED ADMIN_SHUTDOWN CRASH_SHUTDOWN CANNOT_CONNECT_NOW DATABASE_DROPPED SYSTEM_ERROR IO_ERROR UNDEFINED_FILE DUPLICATE_FILE SNAPSHOT_TOO_OLD CONFIG_FILE_ERROR LOCK_FILE_EXISTS FDW_ERROR FDW_COLUMN_NAME_NOT_FOUND FDW_DYNAMIC_PARAMETER_VALUE_NEEDED FDW_FUNCTION_SEQUENCE_ERROR FDW_INCONSISTENT_DESCRIPTOR_INFORMATION FDW_INVALID_ATTRIBUTE_VALUE FDW_INVALID_COLUMN_NAME FDW_INVALID_COLUMN_NUMBER FDW_INVALID_DATA_TYPE FDW_INVALID_DATA_TYPE_DESCRIPTORS FDW_INVALID_DESCRIPTOR_FIELD_IDENTIFIER FDW_INVALID_HANDLE FDW_INVALID_OPTION_INDEX FDW_INVALID_OPTION_NAME FDW_INVALID_STRING_LENGTH_OR_BUFFER_LENGTH FDW_INVALID_STRING_FORMAT FDW_INVALID_USE_OF_NULL_POINTER FDW_TOO_MANY_HANDLES FDW_OUT_OF_MEMORY FDW_NO_SCHEMAS FDW_OPTION_NAME_NOT_FOUND FDW_REPLY_HANDLE FDW_SCHEMA_NOT_FOUND FDW_TABLE_NOT_FOUND FDW_UNABLE_TO_CREATE_EXECUTION FDW_UNABLE_TO_CREATE_REPLY FDW_UNABLE_TO_ESTABLISH_CONNECTION PLPGSQL_ERROR RAISE_EXCEPTION NO_DATA_FOUND TOO_MANY_ROWS ASSERT_FAILURE INTERNAL_ERROR DATA_CORRUPTED INDEX_CORRUPTED "
  );
  const FUNCTIONS = (
    // https://www.postgresql.org/docs/11/static/functions-aggregate.html
    "ARRAY_AGG AVG BIT_AND BIT_OR BOOL_AND BOOL_OR COUNT EVERY JSON_AGG JSONB_AGG JSON_OBJECT_AGG JSONB_OBJECT_AGG MAX MIN MODE STRING_AGG SUM XMLAGG CORR COVAR_POP COVAR_SAMP REGR_AVGX REGR_AVGY REGR_COUNT REGR_INTERCEPT REGR_R2 REGR_SLOPE REGR_SXX REGR_SXY REGR_SYY STDDEV STDDEV_POP STDDEV_SAMP VARIANCE VAR_POP VAR_SAMP PERCENTILE_CONT PERCENTILE_DISC ROW_NUMBER RANK DENSE_RANK PERCENT_RANK CUME_DIST NTILE LAG LEAD FIRST_VALUE LAST_VALUE NTH_VALUE NUM_NONNULLS NUM_NULLS ABS CBRT CEIL CEILING DEGREES DIV EXP FLOOR LN LOG MOD PI POWER RADIANS ROUND SCALE SIGN SQRT TRUNC WIDTH_BUCKET RANDOM SETSEED ACOS ACOSD ASIN ASIND ATAN ATAND ATAN2 ATAN2D COS COSD COT COTD SIN SIND TAN TAND BIT_LENGTH CHAR_LENGTH CHARACTER_LENGTH LOWER OCTET_LENGTH OVERLAY POSITION SUBSTRING TREAT TRIM UPPER ASCII BTRIM CHR CONCAT CONCAT_WS CONVERT CONVERT_FROM CONVERT_TO DECODE ENCODE INITCAP LEFT LENGTH LPAD LTRIM MD5 PARSE_IDENT PG_CLIENT_ENCODING QUOTE_IDENT|10 QUOTE_LITERAL|10 QUOTE_NULLABLE|10 REGEXP_MATCH REGEXP_MATCHES REGEXP_REPLACE REGEXP_SPLIT_TO_ARRAY REGEXP_SPLIT_TO_TABLE REPEAT REPLACE REVERSE RIGHT RPAD RTRIM SPLIT_PART STRPOS SUBSTR TO_ASCII TO_HEX TRANSLATE OCTET_LENGTH GET_BIT GET_BYTE SET_BIT SET_BYTE TO_CHAR TO_DATE TO_NUMBER TO_TIMESTAMP AGE CLOCK_TIMESTAMP|10 DATE_PART DATE_TRUNC ISFINITE JUSTIFY_DAYS JUSTIFY_HOURS JUSTIFY_INTERVAL MAKE_DATE MAKE_INTERVAL|10 MAKE_TIME MAKE_TIMESTAMP|10 MAKE_TIMESTAMPTZ|10 NOW STATEMENT_TIMESTAMP|10 TIMEOFDAY TRANSACTION_TIMESTAMP|10 ENUM_FIRST ENUM_LAST ENUM_RANGE AREA CENTER DIAMETER HEIGHT ISCLOSED ISOPEN NPOINTS PCLOSE POPEN RADIUS WIDTH BOX BOUND_BOX CIRCLE LINE LSEG PATH POLYGON ABBREV BROADCAST HOST HOSTMASK MASKLEN NETMASK NETWORK SET_MASKLEN TEXT INET_SAME_FAMILY INET_MERGE MACADDR8_SET7BIT ARRAY_TO_TSVECTOR GET_CURRENT_TS_CONFIG NUMNODE PLAINTO_TSQUERY PHRASETO_TSQUERY WEBSEARCH_TO_TSQUERY QUERYTREE SETWEIGHT STRIP TO_TSQUERY TO_TSVECTOR JSON_TO_TSVECTOR JSONB_TO_TSVECTOR TS_DELETE TS_FILTER TS_HEADLINE TS_RANK TS_RANK_CD TS_REWRITE TSQUERY_PHRASE TSVECTOR_TO_ARRAY TSVECTOR_UPDATE_TRIGGER TSVECTOR_UPDATE_TRIGGER_COLUMN XMLCOMMENT XMLCONCAT XMLELEMENT XMLFOREST XMLPI XMLROOT XMLEXISTS XML_IS_WELL_FORMED XML_IS_WELL_FORMED_DOCUMENT XML_IS_WELL_FORMED_CONTENT XPATH XPATH_EXISTS XMLTABLE XMLNAMESPACES TABLE_TO_XML TABLE_TO_XMLSCHEMA TABLE_TO_XML_AND_XMLSCHEMA QUERY_TO_XML QUERY_TO_XMLSCHEMA QUERY_TO_XML_AND_XMLSCHEMA CURSOR_TO_XML CURSOR_TO_XMLSCHEMA SCHEMA_TO_XML SCHEMA_TO_XMLSCHEMA SCHEMA_TO_XML_AND_XMLSCHEMA DATABASE_TO_XML DATABASE_TO_XMLSCHEMA DATABASE_TO_XML_AND_XMLSCHEMA XMLATTRIBUTES TO_JSON TO_JSONB ARRAY_TO_JSON ROW_TO_JSON JSON_BUILD_ARRAY JSONB_BUILD_ARRAY JSON_BUILD_OBJECT JSONB_BUILD_OBJECT JSON_OBJECT JSONB_OBJECT JSON_ARRAY_LENGTH JSONB_ARRAY_LENGTH JSON_EACH JSONB_EACH JSON_EACH_TEXT JSONB_EACH_TEXT JSON_EXTRACT_PATH JSONB_EXTRACT_PATH JSON_OBJECT_KEYS JSONB_OBJECT_KEYS JSON_POPULATE_RECORD JSONB_POPULATE_RECORD JSON_POPULATE_RECORDSET JSONB_POPULATE_RECORDSET JSON_ARRAY_ELEMENTS JSONB_ARRAY_ELEMENTS JSON_ARRAY_ELEMENTS_TEXT JSONB_ARRAY_ELEMENTS_TEXT JSON_TYPEOF JSONB_TYPEOF JSON_TO_RECORD JSONB_TO_RECORD JSON_TO_RECORDSET JSONB_TO_RECORDSET JSON_STRIP_NULLS JSONB_STRIP_NULLS JSONB_SET JSONB_INSERT JSONB_PRETTY CURRVAL LASTVAL NEXTVAL SETVAL COALESCE NULLIF GREATEST LEAST ARRAY_APPEND ARRAY_CAT ARRAY_NDIMS ARRAY_DIMS ARRAY_FILL ARRAY_LENGTH ARRAY_LOWER ARRAY_POSITION ARRAY_POSITIONS ARRAY_PREPEND ARRAY_REMOVE ARRAY_REPLACE ARRAY_TO_STRING ARRAY_UPPER CARDINALITY STRING_TO_ARRAY UNNEST ISEMPTY LOWER_INC UPPER_INC LOWER_INF UPPER_INF RANGE_MERGE GENERATE_SERIES GENERATE_SUBSCRIPTS CURRENT_DATABASE CURRENT_QUERY CURRENT_SCHEMA|10 CURRENT_SCHEMAS|10 INET_CLIENT_ADDR INET_CLIENT_PORT INET_SERVER_ADDR INET_SERVER_PORT ROW_SECURITY_ACTIVE FORMAT_TYPE TO_REGCLASS TO_REGPROC TO_REGPROCEDURE TO_REGOPER TO_REGOPERATOR TO_REGTYPE TO_REGNAMESPACE TO_REGROLE COL_DESCRIPTION OBJ_DESCRIPTION SHOBJ_DESCRIPTION TXID_CURRENT TXID_CURRENT_IF_ASSIGNED TXID_CURRENT_SNAPSHOT TXID_SNAPSHOT_XIP TXID_SNAPSHOT_XMAX TXID_SNAPSHOT_XMIN TXID_VISIBLE_IN_SNAPSHOT TXID_STATUS CURRENT_SETTING SET_CONFIG BRIN_SUMMARIZE_NEW_VALUES BRIN_SUMMARIZE_RANGE BRIN_DESUMMARIZE_RANGE GIN_CLEAN_PENDING_LIST SUPPRESS_REDUNDANT_UPDATES_TRIGGER LO_FROM_BYTEA LO_PUT LO_GET LO_CREAT LO_CREATE LO_UNLINK LO_IMPORT LO_EXPORT LOREAD LOWRITE GROUPING CAST "
  );
  const FUNCTIONS_RE = FUNCTIONS.trim().split(" ").map(function(val) {
    return val.split("|")[0];
  }).join("|");
  return {
    name: "PostgreSQL",
    aliases: [
      "postgres",
      "postgresql"
    ],
    supersetOf: "sql",
    case_insensitive: true,
    keywords: {
      keyword: SQL_KW + PLPGSQL_KW + ROLE_ATTRS,
      built_in: SQL_BI + PLPGSQL_BI + PLPGSQL_EXCEPTIONS
    },
    // Forbid some cunstructs from other languages to improve autodetect. In fact
    // "[a-z]:" is legal (as part of array slice), but improbabal.
    illegal: /:==|\W\s*\(\*|(^|\s)\$[a-z]|\{\{|[a-z]:\s*$|\.\.\.|TO:|DO:/,
    contains: [
      // special handling of some words, which are reserved only in some contexts
      {
        className: "keyword",
        variants: [
          { begin: /\bTEXT\s*SEARCH\b/ },
          { begin: /\b(PRIMARY|FOREIGN|FOR(\s+NO)?)\s+KEY\b/ },
          { begin: /\bPARALLEL\s+(UNSAFE|RESTRICTED|SAFE)\b/ },
          { begin: /\bSTORAGE\s+(PLAIN|EXTERNAL|EXTENDED|MAIN)\b/ },
          { begin: /\bMATCH\s+(FULL|PARTIAL|SIMPLE)\b/ },
          { begin: /\bNULLS\s+(FIRST|LAST)\b/ },
          { begin: /\bEVENT\s+TRIGGER\b/ },
          { begin: /\b(MAPPING|OR)\s+REPLACE\b/ },
          { begin: /\b(FROM|TO)\s+(PROGRAM|STDIN|STDOUT)\b/ },
          { begin: /\b(SHARE|EXCLUSIVE)\s+MODE\b/ },
          { begin: /\b(LEFT|RIGHT)\s+(OUTER\s+)?JOIN\b/ },
          { begin: /\b(FETCH|MOVE)\s+(NEXT|PRIOR|FIRST|LAST|ABSOLUTE|RELATIVE|FORWARD|BACKWARD)\b/ },
          { begin: /\bPRESERVE\s+ROWS\b/ },
          { begin: /\bDISCARD\s+PLANS\b/ },
          { begin: /\bREFERENCING\s+(OLD|NEW)\b/ },
          { begin: /\bSKIP\s+LOCKED\b/ },
          { begin: /\bGROUPING\s+SETS\b/ },
          { begin: /\b(BINARY|INSENSITIVE|SCROLL|NO\s+SCROLL)\s+(CURSOR|FOR)\b/ },
          { begin: /\b(WITH|WITHOUT)\s+HOLD\b/ },
          { begin: /\bWITH\s+(CASCADED|LOCAL)\s+CHECK\s+OPTION\b/ },
          { begin: /\bEXCLUDE\s+(TIES|NO\s+OTHERS)\b/ },
          { begin: /\bFORMAT\s+(TEXT|XML|JSON|YAML)\b/ },
          { begin: /\bSET\s+((SESSION|LOCAL)\s+)?NAMES\b/ },
          { begin: /\bIS\s+(NOT\s+)?UNKNOWN\b/ },
          { begin: /\bSECURITY\s+LABEL\b/ },
          { begin: /\bSTANDALONE\s+(YES|NO|NO\s+VALUE)\b/ },
          { begin: /\bWITH\s+(NO\s+)?DATA\b/ },
          { begin: /\b(FOREIGN|SET)\s+DATA\b/ },
          { begin: /\bSET\s+(CATALOG|CONSTRAINTS)\b/ },
          { begin: /\b(WITH|FOR)\s+ORDINALITY\b/ },
          { begin: /\bIS\s+(NOT\s+)?DOCUMENT\b/ },
          { begin: /\bXML\s+OPTION\s+(DOCUMENT|CONTENT)\b/ },
          { begin: /\b(STRIP|PRESERVE)\s+WHITESPACE\b/ },
          { begin: /\bNO\s+(ACTION|MAXVALUE|MINVALUE)\b/ },
          { begin: /\bPARTITION\s+BY\s+(RANGE|LIST|HASH)\b/ },
          { begin: /\bAT\s+TIME\s+ZONE\b/ },
          { begin: /\bGRANTED\s+BY\b/ },
          { begin: /\bRETURN\s+(QUERY|NEXT)\b/ },
          { begin: /\b(ATTACH|DETACH)\s+PARTITION\b/ },
          { begin: /\bFORCE\s+ROW\s+LEVEL\s+SECURITY\b/ },
          { begin: /\b(INCLUDING|EXCLUDING)\s+(COMMENTS|CONSTRAINTS|DEFAULTS|IDENTITY|INDEXES|STATISTICS|STORAGE|ALL)\b/ },
          { begin: /\bAS\s+(ASSIGNMENT|IMPLICIT|PERMISSIVE|RESTRICTIVE|ENUM|RANGE)\b/ }
        ]
      },
      // functions named as keywords, followed by '('
      {
        begin: /\b(FORMAT|FAMILY|VERSION)\s*\(/
        // keywords: { built_in: 'FORMAT FAMILY VERSION' }
      },
      // INCLUDE ( ... ) in index_parameters in CREATE TABLE
      {
        begin: /\bINCLUDE\s*\(/,
        keywords: "INCLUDE"
      },
      // not highlight RANGE if not in frame_clause (not 100% correct, but seems satisfactory)
      { begin: /\bRANGE(?!\s*(BETWEEN|UNBOUNDED|CURRENT|[-0-9]+))/ },
      // disable highlighting in commands CREATE AGGREGATE/COLLATION/DATABASE/OPERTOR/TEXT SEARCH .../TYPE
      // and in PL/pgSQL RAISE ... USING
      { begin: /\b(VERSION|OWNER|TEMPLATE|TABLESPACE|CONNECTION\s+LIMIT|PROCEDURE|RESTRICT|JOIN|PARSER|COPY|START|END|COLLATION|INPUT|ANALYZE|STORAGE|LIKE|DEFAULT|DELIMITER|ENCODING|COLUMN|CONSTRAINT|TABLE|SCHEMA)\s*=/ },
      // PG_smth; HAS_some_PRIVILEGE
      {
        // className: 'built_in',
        begin: /\b(PG_\w+?|HAS_[A-Z_]+_PRIVILEGE)\b/,
        relevance: 10
      },
      // extract
      {
        begin: /\bEXTRACT\s*\(/,
        end: /\bFROM\b/,
        returnEnd: true,
        keywords: {
          // built_in: 'EXTRACT',
          type: "CENTURY DAY DECADE DOW DOY EPOCH HOUR ISODOW ISOYEAR MICROSECONDS MILLENNIUM MILLISECONDS MINUTE MONTH QUARTER SECOND TIMEZONE TIMEZONE_HOUR TIMEZONE_MINUTE WEEK YEAR"
        }
      },
      // xmlelement, xmlpi - special NAME
      {
        begin: /\b(XMLELEMENT|XMLPI)\s*\(\s*NAME/,
        keywords: {
          // built_in: 'XMLELEMENT XMLPI',
          keyword: "NAME"
        }
      },
      // xmlparse, xmlserialize
      {
        begin: /\b(XMLPARSE|XMLSERIALIZE)\s*\(\s*(DOCUMENT|CONTENT)/,
        keywords: {
          // built_in: 'XMLPARSE XMLSERIALIZE',
          keyword: "DOCUMENT CONTENT"
        }
      },
      // Sequences. We actually skip everything between CACHE|INCREMENT|MAXVALUE|MINVALUE and
      // nearest following numeric constant. Without with trick we find a lot of "keywords"
      // in 'avrasm' autodetection test...
      {
        beginKeywords: "CACHE INCREMENT MAXVALUE MINVALUE",
        end: hljs.C_NUMBER_RE,
        returnEnd: true,
        keywords: "BY CACHE INCREMENT MAXVALUE MINVALUE"
      },
      // WITH|WITHOUT TIME ZONE as part of datatype
      {
        className: "type",
        begin: /\b(WITH|WITHOUT)\s+TIME\s+ZONE\b/
      },
      // INTERVAL optional fields
      {
        className: "type",
        begin: /\bINTERVAL\s+(YEAR|MONTH|DAY|HOUR|MINUTE|SECOND)(\s+TO\s+(MONTH|HOUR|MINUTE|SECOND))?\b/
      },
      // Pseudo-types which allowed only as return type
      {
        begin: /\bRETURNS\s+(LANGUAGE_HANDLER|TRIGGER|EVENT_TRIGGER|FDW_HANDLER|INDEX_AM_HANDLER|TSM_HANDLER)\b/,
        keywords: {
          keyword: "RETURNS",
          type: "LANGUAGE_HANDLER TRIGGER EVENT_TRIGGER FDW_HANDLER INDEX_AM_HANDLER TSM_HANDLER"
        }
      },
      // Known functions - only when followed by '('
      {
        begin: "\\b(" + FUNCTIONS_RE + ")\\s*\\("
        // keywords: { built_in: FUNCTIONS }
      },
      // Types
      {
        begin: "\\.(" + TYPES_RE + ")\\b"
        // prevent highlight as type, say, 'oid' in 'pgclass.oid'
      },
      {
        begin: "\\b(" + TYPES_RE + ")\\s+PATH\\b",
        // in XMLTABLE
        keywords: {
          keyword: "PATH",
          // hopefully no one would use PATH type in XMLTABLE...
          type: TYPES2.replace("PATH ", "")
        }
      },
      {
        className: "type",
        begin: "\\b(" + TYPES_RE + ")\\b"
      },
      // Strings, see https://www.postgresql.org/docs/11/static/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS
      {
        className: "string",
        begin: "'",
        end: "'",
        contains: [{ begin: "''" }]
      },
      {
        className: "string",
        begin: "(e|E|u&|U&)'",
        end: "'",
        contains: [{ begin: "\\\\." }],
        relevance: 10
      },
      hljs.END_SAME_AS_BEGIN({
        begin: DOLLAR_STRING,
        end: DOLLAR_STRING,
        contains: [
          {
            // actually we want them all except SQL; listed are those with known implementations
            // and XML + JSON just in case
            subLanguage: [
              "pgsql",
              "perl",
              "python",
              "tcl",
              "r",
              "lua",
              "java",
              "php",
              "ruby",
              "bash",
              "scheme",
              "xml",
              "json"
            ],
            endsWithParent: true
          }
        ]
      }),
      // identifiers in quotes
      {
        begin: '"',
        end: '"',
        contains: [{ begin: '""' }]
      },
      // numbers
      hljs.C_NUMBER_MODE,
      // comments
      hljs.C_BLOCK_COMMENT_MODE,
      COMMENT_MODE,
      // PL/pgSQL staff
      // %ROWTYPE, %TYPE, $n
      {
        className: "meta",
        variants: [
          {
            // %TYPE, %ROWTYPE
            begin: "%(ROW)?TYPE",
            relevance: 10
          },
          {
            // $n
            begin: "\\$\\d+"
          },
          {
            // #compiler option
            begin: "^#\\w",
            end: "$"
          }
        ]
      },
      // <<labeles>>
      {
        className: "symbol",
        begin: LABEL,
        relevance: 10
      }
    ]
  };
}
function pony(hljs) {
  const KEYWORDS2 = {
    keyword: "actor addressof and as be break class compile_error compile_intrinsic consume continue delegate digestof do else elseif embed end error for fun if ifdef in interface is isnt lambda let match new not object or primitive recover repeat return struct then trait try type until use var where while with xor",
    meta: "iso val tag trn box ref",
    literal: "this false true"
  };
  const TRIPLE_QUOTE_STRING_MODE = {
    className: "string",
    begin: '"""',
    end: '"""',
    relevance: 10
  };
  const QUOTE_STRING_MODE = {
    className: "string",
    begin: '"',
    end: '"',
    contains: [hljs.BACKSLASH_ESCAPE]
  };
  const SINGLE_QUOTE_CHAR_MODE = {
    className: "string",
    begin: "'",
    end: "'",
    contains: [hljs.BACKSLASH_ESCAPE],
    relevance: 0
  };
  const TYPE_NAME = {
    className: "type",
    begin: "\\b_?[A-Z][\\w]*",
    relevance: 0
  };
  const PRIMED_NAME = {
    begin: hljs.IDENT_RE + "'",
    relevance: 0
  };
  const NUMBER_MODE = {
    className: "number",
    begin: "(-?)(\\b0[xX][a-fA-F0-9]+|\\b0[bB][01]+|(\\b\\d+(_\\d+)?(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",
    relevance: 0
  };
  return {
    name: "Pony",
    keywords: KEYWORDS2,
    contains: [
      TYPE_NAME,
      TRIPLE_QUOTE_STRING_MODE,
      QUOTE_STRING_MODE,
      SINGLE_QUOTE_CHAR_MODE,
      PRIMED_NAME,
      NUMBER_MODE,
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE
    ]
  };
}
function powershell(hljs) {
  const TYPES2 = [
    "string",
    "char",
    "byte",
    "int",
    "long",
    "bool",
    "decimal",
    "single",
    "double",
    "DateTime",
    "xml",
    "array",
    "hashtable",
    "void"
  ];
  const VALID_VERBS = "Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|Limit|Merge|Mount|Out|Publish|Restore|Save|Sync|Unpublish|Update|Approve|Assert|Build|Complete|Confirm|Deny|Deploy|Disable|Enable|Install|Invoke|Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|Unprotect|Use|ForEach|Sort|Tee|Where";
  const COMPARISON_OPERATORS = "-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|-split|-wildcard|-xor";
  const KEYWORDS2 = {
    $pattern: /-?[A-z\.\-]+\b/,
    keyword: "if else foreach return do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch hidden static parameter",
    // "echo" relevance has been set to 0 to avoid auto-detect conflicts with shell transcripts
    built_in: "ac asnp cat cd CFS chdir clc clear clhy cli clp cls clv cnsn compare copy cp cpi cpp curl cvpa dbp del diff dir dnsn ebp echo|0 epal epcsv epsn erase etsn exsn fc fhx fl ft fw gal gbp gc gcb gci gcm gcs gdr gerr ghy gi gin gjb gl gm gmo gp gps gpv group gsn gsnp gsv gtz gu gv gwmi h history icm iex ihy ii ipal ipcsv ipmo ipsn irm ise iwmi iwr kill lp ls man md measure mi mount move mp mv nal ndr ni nmo npssc nsn nv ogv oh popd ps pushd pwd r rbp rcjb rcsn rd rdr ren ri rjb rm rmdir rmo rni rnp rp rsn rsnp rujb rv rvpa rwmi sajb sal saps sasv sbp sc scb select set shcm si sl sleep sls sort sp spjb spps spsv start stz sujb sv swmi tee trcm type wget where wjb write"
    // TODO: 'validate[A-Z]+' can't work in keywords
  };
  const TITLE_NAME_RE = /\w[\w\d]*((-)[\w\d]+)*/;
  const BACKTICK_ESCAPE = {
    begin: "`[\\s\\S]",
    relevance: 0
  };
  const VAR = {
    className: "variable",
    variants: [
      { begin: /\$\B/ },
      {
        className: "keyword",
        begin: /\$this/
      },
      { begin: /\$[\w\d][\w\d_:]*/ }
    ]
  };
  const LITERAL = {
    className: "literal",
    begin: /\$(null|true|false)\b/
  };
  const QUOTE_STRING = {
    className: "string",
    variants: [
      {
        begin: /"/,
        end: /"/
      },
      {
        begin: /@"/,
        end: /^"@/
      }
    ],
    contains: [
      BACKTICK_ESCAPE,
      VAR,
      {
        className: "variable",
        begin: /\$[A-z]/,
        end: /[^A-z]/
      }
    ]
  };
  const APOS_STRING = {
    className: "string",
    variants: [
      {
        begin: /'/,
        end: /'/
      },
      {
        begin: /@'/,
        end: /^'@/
      }
    ]
  };
  const PS_HELPTAGS = {
    className: "doctag",
    variants: [
      /* no paramater help tags */
      { begin: /\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/ },
      /* one parameter help tags */
      { begin: /\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/ }
    ]
  };
  const PS_COMMENT = hljs.inherit(
    hljs.COMMENT(null, null),
    {
      variants: [
        /* single-line comment */
        {
          begin: /#/,
          end: /$/
        },
        /* multi-line comment */
        {
          begin: /<#/,
          end: /#>/
        }
      ],
      contains: [PS_HELPTAGS]
    }
  );
  const CMDLETS = {
    className: "built_in",
    variants: [{ begin: "(".concat(VALID_VERBS, ")+(-)[\\w\\d]+") }]
  };
  const PS_CLASS = {
    className: "class",
    beginKeywords: "class enum",
    end: /\s*[{]/,
    excludeEnd: true,
    relevance: 0,
    contains: [hljs.TITLE_MODE]
  };
  const PS_FUNCTION = {
    className: "function",
    begin: /function\s+/,
    end: /\s*\{|$/,
    excludeEnd: true,
    returnBegin: true,
    relevance: 0,
    contains: [
      {
        begin: "function",
        relevance: 0,
        className: "keyword"
      },
      {
        className: "title",
        begin: TITLE_NAME_RE,
        relevance: 0
      },
      {
        begin: /\(/,
        end: /\)/,
        className: "params",
        relevance: 0,
        contains: [VAR]
      }
      // CMDLETS
    ]
  };
  const PS_USING = {
    begin: /using\s/,
    end: /$/,
    returnBegin: true,
    contains: [
      QUOTE_STRING,
      APOS_STRING,
      {
        className: "keyword",
        begin: /(using|assembly|command|module|namespace|type)/
      }
    ]
  };
  const PS_ARGUMENTS = { variants: [
    // PS literals are pretty verbose so it's a good idea to accent them a bit.
    {
      className: "operator",
      begin: "(".concat(COMPARISON_OPERATORS, ")\\b")
    },
    {
      className: "literal",
      begin: /(-){1,2}[\w\d-]+/,
      relevance: 0
    }
  ] };
  const HASH_SIGNS = {
    className: "selector-tag",
    begin: /@\B/,
    relevance: 0
  };
  const PS_METHODS = {
    className: "function",
    begin: /\[.*\]\s*[\w]+[ ]??\(/,
    end: /$/,
    returnBegin: true,
    relevance: 0,
    contains: [
      {
        className: "keyword",
        begin: "(".concat(
          KEYWORDS2.keyword.toString().replace(
            /\s/g,
            "|"
          ),
          ")\\b"
        ),
        endsParent: true,
        relevance: 0
      },
      hljs.inherit(hljs.TITLE_MODE, { endsParent: true })
    ]
  };
  const GENTLEMANS_SET = [
    // STATIC_MEMBER,
    PS_METHODS,
    PS_COMMENT,
    BACKTICK_ESCAPE,
    hljs.NUMBER_MODE,
    QUOTE_STRING,
    APOS_STRING,
    // PS_NEW_OBJECT_TYPE,
    CMDLETS,
    VAR,
    LITERAL,
    HASH_SIGNS
  ];
  const PS_TYPE = {
    begin: /\[/,
    end: /\]/,
    excludeBegin: true,
    excludeEnd: true,
    relevance: 0,
    contains: [].concat(
      "self",
      GENTLEMANS_SET,
      {
        begin: "(" + TYPES2.join("|") + ")",
        className: "built_in",
        relevance: 0
      },
      {
        className: "type",
        begin: /[\.\w\d]+/,
        relevance: 0
      }
    )
  };
  PS_METHODS.contains.unshift(PS_TYPE);
  return {
    name: "PowerShell",
    aliases: [
      "pwsh",
      "ps",
      "ps1"
    ],
    case_insensitive: true,
    keywords: KEYWORDS2,
    contains: GENTLEMANS_SET.concat(
      PS_CLASS,
      PS_FUNCTION,
      PS_USING,
      PS_ARGUMENTS,
      PS_TYPE
    )
  };
}
function processing(hljs) {
  const regex = hljs.regex;
  const BUILT_INS2 = [
    "displayHeight",
    "displayWidth",
    "mouseY",
    "mouseX",
    "mousePressed",
    "pmouseX",
    "pmouseY",
    "key",
    "keyCode",
    "pixels",
    "focused",
    "frameCount",
    "frameRate",
    "height",
    "width",
    "size",
    "createGraphics",
    "beginDraw",
    "createShape",
    "loadShape",
    "PShape",
    "arc",
    "ellipse",
    "line",
    "point",
    "quad",
    "rect",
    "triangle",
    "bezier",
    "bezierDetail",
    "bezierPoint",
    "bezierTangent",
    "curve",
    "curveDetail",
    "curvePoint",
    "curveTangent",
    "curveTightness",
    "shape",
    "shapeMode",
    "beginContour",
    "beginShape",
    "bezierVertex",
    "curveVertex",
    "endContour",
    "endShape",
    "quadraticVertex",
    "vertex",
    "ellipseMode",
    "noSmooth",
    "rectMode",
    "smooth",
    "strokeCap",
    "strokeJoin",
    "strokeWeight",
    "mouseClicked",
    "mouseDragged",
    "mouseMoved",
    "mousePressed",
    "mouseReleased",
    "mouseWheel",
    "keyPressed",
    "keyPressedkeyReleased",
    "keyTyped",
    "print",
    "println",
    "save",
    "saveFrame",
    "day",
    "hour",
    "millis",
    "minute",
    "month",
    "second",
    "year",
    "background",
    "clear",
    "colorMode",
    "fill",
    "noFill",
    "noStroke",
    "stroke",
    "alpha",
    "blue",
    "brightness",
    "color",
    "green",
    "hue",
    "lerpColor",
    "red",
    "saturation",
    "modelX",
    "modelY",
    "modelZ",
    "screenX",
    "screenY",
    "screenZ",
    "ambient",
    "emissive",
    "shininess",
    "specular",
    "add",
    "createImage",
    "beginCamera",
    "camera",
    "endCamera",
    "frustum",
    "ortho",
    "perspective",
    "printCamera",
    "printProjection",
    "cursor",
    "frameRate",
    "noCursor",
    "exit",
    "loop",
    "noLoop",
    "popStyle",
    "pushStyle",
    "redraw",
    "binary",
    "boolean",
    "byte",
    "char",
    "float",
    "hex",
    "int",
    "str",
    "unbinary",
    "unhex",
    "join",
    "match",
    "matchAll",
    "nf",
    "nfc",
    "nfp",
    "nfs",
    "split",
    "splitTokens",
    "trim",
    "append",
    "arrayCopy",
    "concat",
    "expand",
    "reverse",
    "shorten",
    "sort",
    "splice",
    "subset",
    "box",
    "sphere",
    "sphereDetail",
    "createInput",
    "createReader",
    "loadBytes",
    "loadJSONArray",
    "loadJSONObject",
    "loadStrings",
    "loadTable",
    "loadXML",
    "open",
    "parseXML",
    "saveTable",
    "selectFolder",
    "selectInput",
    "beginRaw",
    "beginRecord",
    "createOutput",
    "createWriter",
    "endRaw",
    "endRecord",
    "PrintWritersaveBytes",
    "saveJSONArray",
    "saveJSONObject",
    "saveStream",
    "saveStrings",
    "saveXML",
    "selectOutput",
    "popMatrix",
    "printMatrix",
    "pushMatrix",
    "resetMatrix",
    "rotate",
    "rotateX",
    "rotateY",
    "rotateZ",
    "scale",
    "shearX",
    "shearY",
    "translate",
    "ambientLight",
    "directionalLight",
    "lightFalloff",
    "lights",
    "lightSpecular",
    "noLights",
    "normal",
    "pointLight",
    "spotLight",
    "image",
    "imageMode",
    "loadImage",
    "noTint",
    "requestImage",
    "tint",
    "texture",
    "textureMode",
    "textureWrap",
    "blend",
    "copy",
    "filter",
    "get",
    "loadPixels",
    "set",
    "updatePixels",
    "blendMode",
    "loadShader",
    "PShaderresetShader",
    "shader",
    "createFont",
    "loadFont",
    "text",
    "textFont",
    "textAlign",
    "textLeading",
    "textMode",
    "textSize",
    "textWidth",
    "textAscent",
    "textDescent",
    "abs",
    "ceil",
    "constrain",
    "dist",
    "exp",
    "floor",
    "lerp",
    "log",
    "mag",
    "map",
    "max",
    "min",
    "norm",
    "pow",
    "round",
    "sq",
    "sqrt",
    "acos",
    "asin",
    "atan",
    "atan2",
    "cos",
    "degrees",
    "radians",
    "sin",
    "tan",
    "noise",
    "noiseDetail",
    "noiseSeed",
    "random",
    "randomGaussian",
    "randomSeed"
  ];
  const IDENT = hljs.IDENT_RE;
  const FUNC_NAME = { variants: [
    {
      match: regex.concat(regex.either(...BUILT_INS2), regex.lookahead(/\s*\(/)),
      className: "built_in"
    },
    {
      relevance: 0,
      match: regex.concat(
        /\b(?!for|if|while)/,
        IDENT,
        regex.lookahead(/\s*\(/)
      ),
      className: "title.function"
    }
  ] };
  const NEW_CLASS = {
    match: [
      /new\s+/,
      IDENT
    ],
    className: {
      1: "keyword",
      2: "class.title"
    }
  };
  const PROPERTY = {
    relevance: 0,
    match: [
      /\./,
      IDENT
    ],
    className: { 2: "property" }
  };
  const CLASS = {
    variants: [
      { match: [
        /class/,
        /\s+/,
        IDENT,
        /\s+/,
        /extends/,
        /\s+/,
        IDENT
      ] },
      { match: [
        /class/,
        /\s+/,
        IDENT
      ] }
    ],
    className: {
      1: "keyword",
      3: "title.class",
      5: "keyword",
      7: "title.class.inherited"
    }
  };
  const TYPES2 = [
    "boolean",
    "byte",
    "char",
    "color",
    "double",
    "float",
    "int",
    "long",
    "short"
  ];
  const CLASSES = [
    "BufferedReader",
    "PVector",
    "PFont",
    "PImage",
    "PGraphics",
    "HashMap",
    "String",
    "Array",
    "FloatDict",
    "ArrayList",
    "FloatList",
    "IntDict",
    "IntList",
    "JSONArray",
    "JSONObject",
    "Object",
    "StringDict",
    "StringList",
    "Table",
    "TableRow",
    "XML"
  ];
  const JAVA_KEYWORDS = [
    "abstract",
    "assert",
    "break",
    "case",
    "catch",
    "const",
    "continue",
    "default",
    "else",
    "enum",
    "final",
    "finally",
    "for",
    "if",
    "import",
    "instanceof",
    "long",
    "native",
    "new",
    "package",
    "private",
    "private",
    "protected",
    "protected",
    "public",
    "public",
    "return",
    "static",
    "strictfp",
    "switch",
    "synchronized",
    "throw",
    "throws",
    "transient",
    "try",
    "void",
    "volatile",
    "while"
  ];
  return {
    name: "Processing",
    aliases: ["pde"],
    keywords: {
      keyword: [...JAVA_KEYWORDS],
      literal: "P2D P3D HALF_PI PI QUARTER_PI TAU TWO_PI null true false",
      title: "setup draw",
      variable: "super this",
      built_in: [
        ...BUILT_INS2,
        ...CLASSES
      ],
      type: TYPES2
    },
    contains: [
      CLASS,
      NEW_CLASS,
      FUNC_NAME,
      PROPERTY,
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.APOS_STRING_MODE,
      hljs.QUOTE_STRING_MODE,
      hljs.C_NUMBER_MODE
    ]
  };
}
function profile(hljs) {
  return {
    name: "Python profiler",
    contains: [
      hljs.C_NUMBER_MODE,
      {
        begin: "[a-zA-Z_][\\da-zA-Z_]+\\.[\\da-zA-Z_]{1,3}",
        end: ":",
        excludeEnd: true
      },
      {
        begin: "(ncalls|tottime|cumtime)",
        end: "$",
        keywords: "ncalls tottime|10 cumtime|10 filename",
        relevance: 10
      },
      {
        begin: "function calls",
        end: "$",
        contains: [hljs.C_NUMBER_MODE],
        relevance: 10
      },
      hljs.APOS_STRING_MODE,
      hljs.QUOTE_STRING_MODE,
      {
        className: "string",
        begin: "\\(",
        end: "\\)$",
        excludeBegin: true,
        excludeEnd: true,
        relevance: 0
      }
    ]
  };
}
function prolog(hljs) {
  const ATOM = {
    begin: /[a-z][A-Za-z0-9_]*/,
    relevance: 0
  };
  const VAR = {
    className: "symbol",
    variants: [
      { begin: /[A-Z][a-zA-Z0-9_]*/ },
      { begin: /_[A-Za-z0-9_]*/ }
    ],
    relevance: 0
  };
  const PARENTED = {
    begin: /\(/,
    end: /\)/,
    relevance: 0
  };
  const LIST = {
    begin: /\[/,
    end: /\]/
  };
  const LINE_COMMENT = {
    className: "comment",
    begin: /%/,
    end: /$/,
    contains: [hljs.PHRASAL_WORDS_MODE]
  };
  const BACKTICK_STRING = {
    className: "string",
    begin: /`/,
    end: /`/,
    contains: [hljs.BACKSLASH_ESCAPE]
  };
  const CHAR_CODE = {
    className: "string",
    // 0'a etc.
    begin: /0'(\\'|.)/
  };
  const SPACE_CODE = {
    className: "string",
    begin: /0'\\s/
    // 0'\s
  };
  const PRED_OP = {
    // relevance booster
    begin: /:-/
  };
  const inner = [
    ATOM,
    VAR,
    PARENTED,
    PRED_OP,
    LIST,
    LINE_COMMENT,
    hljs.C_BLOCK_COMMENT_MODE,
    hljs.QUOTE_STRING_MODE,
    hljs.APOS_STRING_MODE,
    BACKTICK_STRING,
    CHAR_CODE,
    SPACE_CODE,
    hljs.C_NUMBER_MODE
  ];
  PARENTED.contains = inner;
  LIST.contains = inner;
  return {
    name: "Prolog",
    contains: inner.concat([
      {
        // relevance booster
        begin: /\.$/
      }
    ])
  };
}
function properties(hljs) {
  const WS0 = "[ \\t\\f]*";
  const WS1 = "[ \\t\\f]+";
  const EQUAL_DELIM = WS0 + "[:=]" + WS0;
  const WS_DELIM = WS1;
  const DELIM = "(" + EQUAL_DELIM + "|" + WS_DELIM + ")";
  const KEY = "([^\\\\:= \\t\\f\\n]|\\\\.)+";
  const DELIM_AND_VALUE = {
    // skip DELIM
    end: DELIM,
    relevance: 0,
    starts: {
      // value: everything until end of line (again, taking into account backslashes)
      className: "string",
      end: /$/,
      relevance: 0,
      contains: [
        { begin: "\\\\\\\\" },
        { begin: "\\\\\\n" }
      ]
    }
  };
  return {
    name: ".properties",
    disableAutodetect: true,
    case_insensitive: true,
    illegal: /\S/,
    contains: [
      hljs.COMMENT("^\\s*[!#]", "$"),
      // key: everything until whitespace or = or : (taking into account backslashes)
      // case of a key-value pair
      {
        returnBegin: true,
        variants: [
          { begin: KEY + EQUAL_DELIM },
          { begin: KEY + WS_DELIM }
        ],
        contains: [
          {
            className: "attr",
            begin: KEY,
            endsParent: true
          }
        ],
        starts: DELIM_AND_VALUE
      },
      // case of an empty key
      {
        className: "attr",
        begin: KEY + WS0 + "$"
      }
    ]
  };
}
function protobuf(hljs) {
  const KEYWORDS2 = [
    "package",
    "import",
    "option",
    "optional",
    "required",
    "repeated",
    "group",
    "oneof"
  ];
  const TYPES2 = [
    "double",
    "float",
    "int32",
    "int64",
    "uint32",
    "uint64",
    "sint32",
    "sint64",
    "fixed32",
    "fixed64",
    "sfixed32",
    "sfixed64",
    "bool",
    "string",
    "bytes"
  ];
  const CLASS_DEFINITION = {
    match: [
      /(message|enum|service)\s+/,
      hljs.IDENT_RE
    ],
    scope: {
      1: "keyword",
      2: "title.class"
    }
  };
  return {
    name: "Protocol Buffers",
    aliases: ["proto"],
    keywords: {
      keyword: KEYWORDS2,
      type: TYPES2,
      literal: [
        "true",
        "false"
      ]
    },
    contains: [
      hljs.QUOTE_STRING_MODE,
      hljs.NUMBER_MODE,
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      CLASS_DEFINITION,
      {
        className: "function",
        beginKeywords: "rpc",
        end: /[{;]/,
        excludeEnd: true,
        keywords: "rpc returns"
      },
      {
        // match enum items (relevance)
        // BLAH = ...;
        begin: /^\s*[A-Z_]+(?=\s*=[^\n]+;$)/
      }
    ]
  };
}
function puppet(hljs) {
  const PUPPET_KEYWORDS = {
    keyword: (
      /* language keywords */
      "and case default else elsif false if in import enherits node or true undef unless main settings $string "
    ),
    literal: (
      /* metaparameters */
      "alias audit before loglevel noop require subscribe tag owner ensure group mode name|0 changes context force incl lens load_path onlyif provider returns root show_diff type_check en_address ip_address realname command environment hour monute month monthday special target weekday creates cwd ogoutput refresh refreshonly tries try_sleep umask backup checksum content ctime force ignore links mtime purge recurse recurselimit replace selinux_ignore_defaults selrange selrole seltype seluser source souirce_permissions sourceselect validate_cmd validate_replacement allowdupe attribute_membership auth_membership forcelocal gid ia_load_module members system host_aliases ip allowed_trunk_vlans description device_url duplex encapsulation etherchannel native_vlan speed principals allow_root auth_class auth_type authenticate_user k_of_n mechanisms rule session_owner shared options device fstype enable hasrestart directory present absent link atboot blockdevice device dump pass remounts poller_tag use message withpath adminfile allow_virtual allowcdrom category configfiles flavor install_options instance package_settings platform responsefile status uninstall_options vendor unless_system_user unless_uid binary control flags hasstatus manifest pattern restart running start stop allowdupe auths expiry gid groups home iterations key_membership keys managehome membership password password_max_age password_min_age profile_membership profiles project purge_ssh_keys role_membership roles salt shell uid baseurl cost descr enabled enablegroups exclude failovermethod gpgcheck gpgkey http_caching include includepkgs keepalive metadata_expire metalink mirrorlist priority protect proxy proxy_password proxy_username repo_gpgcheck s3_enabled skip_if_unavailable sslcacert sslclientcert sslclientkey sslverify mounted"
    ),
    built_in: (
      /* core facts */
      "architecture augeasversion blockdevices boardmanufacturer boardproductname boardserialnumber cfkey dhcp_servers domain ec2_ ec2_userdata facterversion filesystems ldom fqdn gid hardwareisa hardwaremodel hostname id|0 interfaces ipaddress ipaddress_ ipaddress6 ipaddress6_ iphostnumber is_virtual kernel kernelmajversion kernelrelease kernelversion kernelrelease kernelversion lsbdistcodename lsbdistdescription lsbdistid lsbdistrelease lsbmajdistrelease lsbminordistrelease lsbrelease macaddress macaddress_ macosx_buildversion macosx_productname macosx_productversion macosx_productverson_major macosx_productversion_minor manufacturer memoryfree memorysize netmask metmask_ network_ operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily partitions path physicalprocessorcount processor processorcount productname ps puppetversion rubysitedir rubyversion selinux selinux_config_mode selinux_config_policy selinux_current_mode selinux_current_mode selinux_enforced selinux_policyversion serialnumber sp_ sshdsakey sshecdsakey sshrsakey swapencrypted swapfree swapsize timezone type uniqueid uptime uptime_days uptime_hours uptime_seconds uuid virtual vlans xendomains zfs_version zonenae zones zpool_version"
    )
  };
  const COMMENT = hljs.COMMENT("#", "$");
  const IDENT_RE2 = "([A-Za-z_]|::)(\\w|::)*";
  const TITLE = hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE2 });
  const VARIABLE = {
    className: "variable",
    begin: "\\$" + IDENT_RE2
  };
  const STRING = {
    className: "string",
    contains: [
      hljs.BACKSLASH_ESCAPE,
      VARIABLE
    ],
    variants: [
      {
        begin: /'/,
        end: /'/
      },
      {
        begin: /"/,
        end: /"/
      }
    ]
  };
  return {
    name: "Puppet",
    aliases: ["pp"],
    contains: [
      COMMENT,
      VARIABLE,
      STRING,
      {
        beginKeywords: "class",
        end: "\\{|;",
        illegal: /=/,
        contains: [
          TITLE,
          COMMENT
        ]
      },
      {
        beginKeywords: "define",
        end: /\{/,
        contains: [
          {
            className: "section",
            begin: hljs.IDENT_RE,
            endsParent: true
          }
        ]
      },
      {
        begin: hljs.IDENT_RE + "\\s+\\{",
        returnBegin: true,
        end: /\S/,
        contains: [
          {
            className: "keyword",
            begin: hljs.IDENT_RE,
            relevance: 0.2
          },
          {
            begin: /\{/,
            end: /\}/,
            keywords: PUPPET_KEYWORDS,
            relevance: 0,
            contains: [
              STRING,
              COMMENT,
              {
                begin: "[a-zA-Z_]+\\s*=>",
                returnBegin: true,
                end: "=>",
                contains: [
                  {
                    className: "attr",
                    begin: hljs.IDENT_RE
                  }
                ]
              },
              {
                className: "number",
                begin: "(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",
                relevance: 0
              },
              VARIABLE
            ]
          }
        ],
        relevance: 0
      }
    ]
  };
}
function purebasic(hljs) {
  const STRINGS = {
    // PB IDE color: #0080FF (Azure Radiance)
    className: "string",
    begin: '(~)?"',
    end: '"',
    illegal: "\\n"
  };
  const CONSTANTS = {
    // PB IDE color: #924B72 (Cannon Pink)
    //  "#" + a letter or underscore + letters, digits or underscores + (optional) "$"
    className: "symbol",
    begin: "#[a-zA-Z_]\\w*\\$?"
  };
  return {
    name: "PureBASIC",
    aliases: [
      "pb",
      "pbi"
    ],
    keywords: (
      // PB IDE color: #006666 (Blue Stone) + Bold
      // Keywords from all version of PureBASIC 5.00 upward ...
      "Align And Array As Break CallDebugger Case CompilerCase CompilerDefault CompilerElse CompilerElseIf CompilerEndIf CompilerEndSelect CompilerError CompilerIf CompilerSelect CompilerWarning Continue Data DataSection Debug DebugLevel Declare DeclareC DeclareCDLL DeclareDLL DeclareModule Default Define Dim DisableASM DisableDebugger DisableExplicit Else ElseIf EnableASM EnableDebugger EnableExplicit End EndDataSection EndDeclareModule EndEnumeration EndIf EndImport EndInterface EndMacro EndModule EndProcedure EndSelect EndStructure EndStructureUnion EndWith Enumeration EnumerationBinary Extends FakeReturn For ForEach ForEver Global Gosub Goto If Import ImportC IncludeBinary IncludeFile IncludePath Interface List Macro MacroExpandedCount Map Module NewList NewMap Next Not Or Procedure ProcedureC ProcedureCDLL ProcedureDLL ProcedureReturn Protected Prototype PrototypeC ReDim Read Repeat Restore Return Runtime Select Shared Static Step Structure StructureUnion Swap Threaded To UndefineMacro Until Until  UnuseModule UseModule Wend While With XIncludeFile XOr"
    ),
    contains: [
      // COMMENTS | PB IDE color: #00AAAA (Persian Green)
      hljs.COMMENT(";", "$", { relevance: 0 }),
      {
        // PROCEDURES DEFINITIONS
        className: "function",
        begin: "\\b(Procedure|Declare)(C|CDLL|DLL)?\\b",
        end: "\\(",
        excludeEnd: true,
        returnBegin: true,
        contains: [
          {
            // PROCEDURE KEYWORDS | PB IDE color: #006666 (Blue Stone) + Bold
            className: "keyword",
            begin: "(Procedure|Declare)(C|CDLL|DLL)?",
            excludeEnd: true
          },
          {
            // PROCEDURE RETURN TYPE SETTING | PB IDE color: #000000 (Black)
            className: "type",
            begin: "\\.\\w*"
            // end: ' ',
          },
          hljs.UNDERSCORE_TITLE_MODE
          // PROCEDURE NAME | PB IDE color: #006666 (Blue Stone)
        ]
      },
      STRINGS,
      CONSTANTS
    ]
  };
}
function q(hljs) {
  const KEYWORDS2 = {
    $pattern: /(`?)[A-Za-z0-9_]+\b/,
    keyword: "do while select delete by update from",
    literal: "0b 1b",
    built_in: "neg not null string reciprocal floor ceiling signum mod xbar xlog and or each scan over prior mmu lsq inv md5 ltime gtime count first var dev med cov cor all any rand sums prds mins maxs fills deltas ratios avgs differ prev next rank reverse iasc idesc asc desc msum mcount mavg mdev xrank mmin mmax xprev rotate distinct group where flip type key til get value attr cut set upsert raze union inter except cross sv vs sublist enlist read0 read1 hopen hclose hdel hsym hcount peach system ltrim rtrim trim lower upper ssr view tables views cols xcols keys xkey xcol xasc xdesc fkeys meta lj aj aj0 ij pj asof uj ww wj wj1 fby xgroup ungroup ej save load rsave rload show csv parse eval min max avg wavg wsum sin cos tan sum",
    type: "`float `double int `timestamp `timespan `datetime `time `boolean `symbol `char `byte `short `long `real `month `date `minute `second `guid"
  };
  return {
    name: "Q",
    aliases: [
      "k",
      "kdb"
    ],
    keywords: KEYWORDS2,
    contains: [
      hljs.C_LINE_COMMENT_MODE,
      hljs.QUOTE_STRING_MODE,
      hljs.C_NUMBER_MODE
    ]
  };
}
function qml(hljs) {
  const regex = hljs.regex;
  const KEYWORDS2 = {
    keyword: "in of on if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await import",
    literal: "true false null undefined NaN Infinity",
    built_in: "eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Behavior bool color coordinate date double enumeration font geocircle georectangle geoshape int list matrix4x4 parent point quaternion real rect size string url variant vector2d vector3d vector4d Promise"
  };
  const QML_IDENT_RE = "[a-zA-Z_][a-zA-Z0-9\\._]*";
  const PROPERTY = {
    className: "keyword",
    begin: "\\bproperty\\b",
    starts: {
      className: "string",
      end: "(:|=|;|,|//|/\\*|$)",
      returnEnd: true
    }
  };
  const SIGNAL = {
    className: "keyword",
    begin: "\\bsignal\\b",
    starts: {
      className: "string",
      end: "(\\(|:|=|;|,|//|/\\*|$)",
      returnEnd: true
    }
  };
  const ID_ID = {
    className: "attribute",
    begin: "\\bid\\s*:",
    starts: {
      className: "string",
      end: QML_IDENT_RE,
      returnEnd: false
    }
  };
  const QML_ATTRIBUTE = {
    begin: QML_IDENT_RE + "\\s*:",
    returnBegin: true,
    contains: [
      {
        className: "attribute",
        begin: QML_IDENT_RE,
        end: "\\s*:",
        excludeEnd: true,
        relevance: 0
      }
    ],
    relevance: 0
  };
  const QML_OBJECT = {
    begin: regex.concat(QML_IDENT_RE, /\s*\{/),
    end: /\{/,
    returnBegin: true,
    relevance: 0,
    contains: [hljs.inherit(hljs.TITLE_MODE, { begin: QML_IDENT_RE })]
  };
  return {
    name: "QML",
    aliases: ["qt"],
    case_insensitive: false,
    keywords: KEYWORDS2,
    contains: [
      {
        className: "meta",
        begin: /^\s*['"]use (strict|asm)['"]/
      },
      hljs.APOS_STRING_MODE,
      hljs.QUOTE_STRING_MODE,
      {
        // template string
        className: "string",
        begin: "`",
        end: "`",
        contains: [
          hljs.BACKSLASH_ESCAPE,
          {
            className: "subst",
            begin: "\\$\\{",
            end: "\\}"
          }
        ]
      },
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      {
        className: "number",
        variants: [
          { begin: "\\b(0[bB][01]+)" },
          { begin: "\\b(0[oO][0-7]+)" },
          { begin: hljs.C_NUMBER_RE }
        ],
        relevance: 0
      },
      {
        // "value" container
        begin: "(" + hljs.RE_STARTERS_RE + "|\\b(case|return|throw)\\b)\\s*",
        keywords: "return throw case",
        contains: [
          hljs.C_LINE_COMMENT_MODE,
          hljs.C_BLOCK_COMMENT_MODE,
          hljs.REGEXP_MODE,
          {
            // E4X / JSX
            begin: /</,
            end: />\s*[);\]]/,
            relevance: 0,
            subLanguage: "xml"
          }
        ],
        relevance: 0
      },
      SIGNAL,
      PROPERTY,
      {
        className: "function",
        beginKeywords: "function",
        end: /\{/,
        excludeEnd: true,
        contains: [
          hljs.inherit(hljs.TITLE_MODE, { begin: /[A-Za-z$_][0-9A-Za-z$_]*/ }),
          {
            className: "params",
            begin: /\(/,
            end: /\)/,
            excludeBegin: true,
            excludeEnd: true,
            contains: [
              hljs.C_LINE_COMMENT_MODE,
              hljs.C_BLOCK_COMMENT_MODE
            ]
          }
        ],
        illegal: /\[|%/
      },
      {
        // hack: prevents detection of keywords after dots
        begin: "\\." + hljs.IDENT_RE,
        relevance: 0
      },
      ID_ID,
      QML_ATTRIBUTE,
      QML_OBJECT
    ],
    illegal: /#/
  };
}
function reasonml(hljs) {
  const BUILT_IN_TYPES = [
    "array",
    "bool",
    "bytes",
    "char",
    "exn|5",
    "float",
    "int",
    "int32",
    "int64",
    "list",
    "lazy_t|5",
    "nativeint|5",
    "ref",
    "string",
    "unit"
  ];
  return {
    name: "ReasonML",
    aliases: ["re"],
    keywords: {
      $pattern: /[a-z_]\w*!?/,
      keyword: [
        "and",
        "as",
        "asr",
        "assert",
        "begin",
        "class",
        "constraint",
        "do",
        "done",
        "downto",
        "else",
        "end",
        "esfun",
        "exception",
        "external",
        "for",
        "fun",
        "function",
        "functor",
        "if",
        "in",
        "include",
        "inherit",
        "initializer",
        "land",
        "lazy",
        "let",
        "lor",
        "lsl",
        "lsr",
        "lxor",
        "mod",
        "module",
        "mutable",
        "new",
        "nonrec",
        "object",
        "of",
        "open",
        "or",
        "pri",
        "pub",
        "rec",
        "sig",
        "struct",
        "switch",
        "then",
        "to",
        "try",
        "type",
        "val",
        "virtual",
        "when",
        "while",
        "with"
      ],
      built_in: BUILT_IN_TYPES,
      literal: ["true", "false"]
    },
    illegal: /(:-|:=|\$\{|\+=)/,
    contains: [
      {
        scope: "literal",
        match: /\[(\|\|)?\]|\(\)/,
        relevance: 0
      },
      hljs.C_LINE_COMMENT_MODE,
      hljs.COMMENT(/\/\*/, /\*\//, { illegal: /^(#,\/\/)/ }),
      {
        /* type variable */
        scope: "symbol",
        match: /\'[A-Za-z_](?!\')[\w\']*/
        /* the grammar is ambiguous on how 'a'b should be interpreted but not the compiler */
      },
      {
        /* polymorphic variant */
        scope: "type",
        match: /`[A-Z][\w\']*/
      },
      {
        /* module or constructor */
        scope: "type",
        match: /\b[A-Z][\w\']*/,
        relevance: 0
      },
      {
        /* don't color identifiers, but safely catch all identifiers with ' */
        match: /[a-z_]\w*\'[\w\']*/,
        relevance: 0
      },
      {
        scope: "operator",
        match: /\s+(\|\||\+[\+\.]?|\*[\*\/\.]?|\/[\.]?|\.\.\.|\|>|&&|===?)\s+/,
        relevance: 0
      },
      hljs.inherit(hljs.APOS_STRING_MODE, {
        scope: "string",
        relevance: 0
      }),
      hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }),
      {
        scope: "number",
        variants: [
          { match: /\b0[xX][a-fA-F0-9_]+[Lln]?/ },
          { match: /\b0[oO][0-7_]+[Lln]?/ },
          { match: /\b0[bB][01_]+[Lln]?/ },
          { match: /\b[0-9][0-9_]*([Lln]|(\.[0-9_]*)?([eE][-+]?[0-9_]+)?)/ }
        ],
        relevance: 0
      }
    ]
  };
}
function rib(hljs) {
  return {
    name: "RenderMan RIB",
    keywords: "ArchiveRecord AreaLightSource Atmosphere Attribute AttributeBegin AttributeEnd Basis Begin Blobby Bound Clipping ClippingPlane Color ColorSamples ConcatTransform Cone CoordinateSystem CoordSysTransform CropWindow Curves Cylinder DepthOfField Detail DetailRange Disk Displacement Display End ErrorHandler Exposure Exterior Format FrameAspectRatio FrameBegin FrameEnd GeneralPolygon GeometricApproximation Geometry Hider Hyperboloid Identity Illuminate Imager Interior LightSource MakeCubeFaceEnvironment MakeLatLongEnvironment MakeShadow MakeTexture Matte MotionBegin MotionEnd NuPatch ObjectBegin ObjectEnd ObjectInstance Opacity Option Orientation Paraboloid Patch PatchMesh Perspective PixelFilter PixelSamples PixelVariance Points PointsGeneralPolygons PointsPolygons Polygon Procedural Projection Quantize ReadArchive RelativeDetail ReverseOrientation Rotate Scale ScreenWindow ShadingInterpolation ShadingRate Shutter Sides Skew SolidBegin SolidEnd Sphere SubdivisionMesh Surface TextureCoordinates Torus Transform TransformBegin TransformEnd TransformPoints Translate TrimCurve WorldBegin WorldEnd",
    illegal: "</",
    contains: [
      hljs.HASH_COMMENT_MODE,
      hljs.C_NUMBER_MODE,
      hljs.APOS_STRING_MODE,
      hljs.QUOTE_STRING_MODE
    ]
  };
}
function roboconf(hljs) {
  const IDENTIFIER = "[a-zA-Z-_][^\\n{]+\\{";
  const PROPERTY = {
    className: "attribute",
    begin: /[a-zA-Z-_]+/,
    end: /\s*:/,
    excludeEnd: true,
    starts: {
      end: ";",
      relevance: 0,
      contains: [
        {
          className: "variable",
          begin: /\.[a-zA-Z-_]+/
        },
        {
          className: "keyword",
          begin: /\(optional\)/
        }
      ]
    }
  };
  return {
    name: "Roboconf",
    aliases: [
      "graph",
      "instances"
    ],
    case_insensitive: true,
    keywords: "import",
    contains: [
      // Facet sections
      {
        begin: "^facet " + IDENTIFIER,
        end: /\}/,
        keywords: "facet",
        contains: [
          PROPERTY,
          hljs.HASH_COMMENT_MODE
        ]
      },
      // Instance sections
      {
        begin: "^\\s*instance of " + IDENTIFIER,
        end: /\}/,
        keywords: "name count channels instance-data instance-state instance of",
        illegal: /\S/,
        contains: [
          "self",
          PROPERTY,
          hljs.HASH_COMMENT_MODE
        ]
      },
      // Component sections
      {
        begin: "^" + IDENTIFIER,
        end: /\}/,
        contains: [
          PROPERTY,
          hljs.HASH_COMMENT_MODE
        ]
      },
      // Comments
      hljs.HASH_COMMENT_MODE
    ]
  };
}
function routeros(hljs) {
  const STATEMENTS = "foreach do while for if from to step else on-error and or not in";
  const GLOBAL_COMMANDS = "global local beep delay put len typeof pick log time set find environment terminal error execute parse resolve toarray tobool toid toip toip6 tonum tostr totime";
  const COMMON_COMMANDS = "add remove enable disable set get print export edit find run debug error info warning";
  const LITERALS2 = "true false yes no nothing nil null";
  const OBJECTS = "traffic-flow traffic-generator firewall scheduler aaa accounting address-list address align area bandwidth-server bfd bgp bridge client clock community config connection console customer default dhcp-client dhcp-server discovery dns e-mail ethernet filter firmware gps graphing group hardware health hotspot identity igmp-proxy incoming instance interface ip ipsec ipv6 irq l2tp-server lcd ldp logging mac-server mac-winbox mangle manual mirror mme mpls nat nd neighbor network note ntp ospf ospf-v3 ovpn-server page peer pim ping policy pool port ppp pppoe-client pptp-server prefix profile proposal proxy queue radius resource rip ripng route routing screen script security-profiles server service service-port settings shares smb sms sniffer snmp snooper socks sstp-server system tool tracking type upgrade upnp user-manager users user vlan secret vrrp watchdog web-access wireless pptp pppoe lan wan layer7-protocol lease simple raw";
  const VAR = {
    className: "variable",
    variants: [
      { begin: /\$[\w\d#@][\w\d_]*/ },
      { begin: /\$\{(.*?)\}/ }
    ]
  };
  const QUOTE_STRING = {
    className: "string",
    begin: /"/,
    end: /"/,
    contains: [
      hljs.BACKSLASH_ESCAPE,
      VAR,
      {
        className: "variable",
        begin: /\$\(/,
        end: /\)/,
        contains: [hljs.BACKSLASH_ESCAPE]
      }
    ]
  };
  const APOS_STRING = {
    className: "string",
    begin: /'/,
    end: /'/
  };
  return {
    name: "MikroTik RouterOS script",
    aliases: ["mikrotik"],
    case_insensitive: true,
    keywords: {
      $pattern: /:?[\w-]+/,
      literal: LITERALS2,
      keyword: STATEMENTS + " :" + STATEMENTS.split(" ").join(" :") + " :" + GLOBAL_COMMANDS.split(" ").join(" :")
    },
    contains: [
      {
        // illegal syntax
        variants: [
          {
            // -- comment
            begin: /\/\*/,
            end: /\*\//
          },
          {
            // Stan comment
            begin: /\/\//,
            end: /$/
          },
          {
            // HTML tags
            begin: /<\//,
            end: />/
          }
        ],
        illegal: /./
      },
      hljs.COMMENT("^#", "$"),
      QUOTE_STRING,
      APOS_STRING,
      VAR,
      // attribute=value
      {
        // > is to avoid matches with => in other grammars
        begin: /[\w-]+=([^\s{}[\]()>]+)/,
        relevance: 0,
        returnBegin: true,
        contains: [
          {
            className: "attribute",
            begin: /[^=]+/
          },
          {
            begin: /=/,
            endsWithParent: true,
            relevance: 0,
            contains: [
              QUOTE_STRING,
              APOS_STRING,
              VAR,
              {
                className: "literal",
                begin: "\\b(" + LITERALS2.split(" ").join("|") + ")\\b"
              },
              {
                // Do not format unclassified values. Needed to exclude highlighting of values as built_in.
                begin: /("[^"]*"|[^\s{}[\]]+)/
              }
              /*
              {
                // IPv4 addresses and subnets
                className: 'number',
                variants: [
                  {begin: IPADDR_wBITMASK+'(,'+IPADDR_wBITMASK+')*'}, //192.168.0.0/24,1.2.3.0/24
                  {begin: IPADDR+'-'+IPADDR},       // 192.168.0.1-192.168.0.3
                  {begin: IPADDR+'(,'+IPADDR+')*'}, // 192.168.0.1,192.168.0.34,192.168.24.1,192.168.0.1
                ]
              },
              {
                // MAC addresses and DHCP Client IDs
                className: 'number',
                begin: /\b(1:)?([0-9A-Fa-f]{1,2}[:-]){5}([0-9A-Fa-f]){1,2}\b/,
              },
              */
            ]
          }
        ]
      },
      {
        // HEX values
        className: "number",
        begin: /\*[0-9a-fA-F]+/
      },
      {
        begin: "\\b(" + COMMON_COMMANDS.split(" ").join("|") + ")([\\s[(\\]|])",
        returnBegin: true,
        contains: [
          {
            className: "built_in",
            // 'function',
            begin: /\w+/
          }
        ]
      },
      {
        className: "built_in",
        variants: [
          { begin: "(\\.\\./|/|\\s)((" + OBJECTS.split(" ").join("|") + ");?\\s)+" },
          {
            begin: /\.\./,
            relevance: 0
          }
        ]
      }
    ]
  };
}
function rsl(hljs) {
  const BUILT_INS2 = [
    "abs",
    "acos",
    "ambient",
    "area",
    "asin",
    "atan",
    "atmosphere",
    "attribute",
    "calculatenormal",
    "ceil",
    "cellnoise",
    "clamp",
    "comp",
    "concat",
    "cos",
    "degrees",
    "depth",
    "Deriv",
    "diffuse",
    "distance",
    "Du",
    "Dv",
    "environment",
    "exp",
    "faceforward",
    "filterstep",
    "floor",
    "format",
    "fresnel",
    "incident",
    "length",
    "lightsource",
    "log",
    "match",
    "max",
    "min",
    "mod",
    "noise",
    "normalize",
    "ntransform",
    "opposite",
    "option",
    "phong",
    "pnoise",
    "pow",
    "printf",
    "ptlined",
    "radians",
    "random",
    "reflect",
    "refract",
    "renderinfo",
    "round",
    "setcomp",
    "setxcomp",
    "setycomp",
    "setzcomp",
    "shadow",
    "sign",
    "sin",
    "smoothstep",
    "specular",
    "specularbrdf",
    "spline",
    "sqrt",
    "step",
    "tan",
    "texture",
    "textureinfo",
    "trace",
    "transform",
    "vtransform",
    "xcomp",
    "ycomp",
    "zcomp"
  ];
  const TYPES2 = [
    "matrix",
    "float",
    "color",
    "point",
    "normal",
    "vector"
  ];
  const KEYWORDS2 = [
    "while",
    "for",
    "if",
    "do",
    "return",
    "else",
    "break",
    "extern",
    "continue"
  ];
  const CLASS_DEFINITION = {
    match: [
      /(surface|displacement|light|volume|imager)/,
      /\s+/,
      hljs.IDENT_RE
    ],
    scope: {
      1: "keyword",
      3: "title.class"
    }
  };
  return {
    name: "RenderMan RSL",
    keywords: {
      keyword: KEYWORDS2,
      built_in: BUILT_INS2,
      type: TYPES2
    },
    illegal: "</",
    contains: [
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.QUOTE_STRING_MODE,
      hljs.APOS_STRING_MODE,
      hljs.C_NUMBER_MODE,
      {
        className: "meta",
        begin: "#",
        end: "$"
      },
      CLASS_DEFINITION,
      {
        beginKeywords: "illuminate illuminance gather",
        end: "\\("
      }
    ]
  };
}
function ruleslanguage(hljs) {
  return {
    name: "Oracle Rules Language",
    keywords: {
      keyword: "BILL_PERIOD BILL_START BILL_STOP RS_EFFECTIVE_START RS_EFFECTIVE_STOP RS_JURIS_CODE RS_OPCO_CODE INTDADDATTRIBUTE|5 INTDADDVMSG|5 INTDBLOCKOP|5 INTDBLOCKOPNA|5 INTDCLOSE|5 INTDCOUNT|5 INTDCOUNTSTATUSCODE|5 INTDCREATEMASK|5 INTDCREATEDAYMASK|5 INTDCREATEFACTORMASK|5 INTDCREATEHANDLE|5 INTDCREATEOVERRIDEDAYMASK|5 INTDCREATEOVERRIDEMASK|5 INTDCREATESTATUSCODEMASK|5 INTDCREATETOUPERIOD|5 INTDDELETE|5 INTDDIPTEST|5 INTDEXPORT|5 INTDGETERRORCODE|5 INTDGETERRORMESSAGE|5 INTDISEQUAL|5 INTDJOIN|5 INTDLOAD|5 INTDLOADACTUALCUT|5 INTDLOADDATES|5 INTDLOADHIST|5 INTDLOADLIST|5 INTDLOADLISTDATES|5 INTDLOADLISTENERGY|5 INTDLOADLISTHIST|5 INTDLOADRELATEDCHANNEL|5 INTDLOADSP|5 INTDLOADSTAGING|5 INTDLOADUOM|5 INTDLOADUOMDATES|5 INTDLOADUOMHIST|5 INTDLOADVERSION|5 INTDOPEN|5 INTDREADFIRST|5 INTDREADNEXT|5 INTDRECCOUNT|5 INTDRELEASE|5 INTDREPLACE|5 INTDROLLAVG|5 INTDROLLPEAK|5 INTDSCALAROP|5 INTDSCALE|5 INTDSETATTRIBUTE|5 INTDSETDSTPARTICIPANT|5 INTDSETSTRING|5 INTDSETVALUE|5 INTDSETVALUESTATUS|5 INTDSHIFTSTARTTIME|5 INTDSMOOTH|5 INTDSORT|5 INTDSPIKETEST|5 INTDSUBSET|5 INTDTOU|5 INTDTOURELEASE|5 INTDTOUVALUE|5 INTDUPDATESTATS|5 INTDVALUE|5 STDEV INTDDELETEEX|5 INTDLOADEXACTUAL|5 INTDLOADEXCUT|5 INTDLOADEXDATES|5 INTDLOADEX|5 INTDLOADEXRELATEDCHANNEL|5 INTDSAVEEX|5 MVLOAD|5 MVLOADACCT|5 MVLOADACCTDATES|5 MVLOADACCTHIST|5 MVLOADDATES|5 MVLOADHIST|5 MVLOADLIST|5 MVLOADLISTDATES|5 MVLOADLISTHIST|5 IF FOR NEXT DONE SELECT END CALL ABORT CLEAR CHANNEL FACTOR LIST NUMBER OVERRIDE SET WEEK DISTRIBUTIONNODE ELSE WHEN THEN OTHERWISE IENUM CSV INCLUDE LEAVE RIDER SAVE DELETE NOVALUE SECTION WARN SAVE_UPDATE DETERMINANT LABEL REPORT REVENUE EACH IN FROM TOTAL CHARGE BLOCK AND OR CSV_FILE RATE_CODE AUXILIARY_DEMAND UIDACCOUNT RS BILL_PERIOD_SELECT HOURS_PER_MONTH INTD_ERROR_STOP SEASON_SCHEDULE_NAME ACCOUNTFACTOR ARRAYUPPERBOUND CALLSTOREDPROC GETADOCONNECTION GETCONNECT GETDATASOURCE GETQUALIFIER GETUSERID HASVALUE LISTCOUNT LISTOP LISTUPDATE LISTVALUE PRORATEFACTOR RSPRORATE SETBINPATH SETDBMONITOR WQ_OPEN BILLINGHOURS DATE DATEFROMFLOAT DATETIMEFROMSTRING DATETIMETOSTRING DATETOFLOAT DAY DAYDIFF DAYNAME DBDATETIME HOUR MINUTE MONTH MONTHDIFF MONTHHOURS MONTHNAME ROUNDDATE SAMEWEEKDAYLASTYEAR SECOND WEEKDAY WEEKDIFF YEAR YEARDAY YEARSTR COMPSUM HISTCOUNT HISTMAX HISTMIN HISTMINNZ HISTVALUE MAXNRANGE MAXRANGE MINRANGE COMPIKVA COMPKVA COMPKVARFROMKQKW COMPLF IDATTR FLAG LF2KW LF2KWH MAXKW POWERFACTOR READING2USAGE AVGSEASON MAXSEASON MONTHLYMERGE SEASONVALUE SUMSEASON ACCTREADDATES ACCTTABLELOAD CONFIGADD CONFIGGET CREATEOBJECT CREATEREPORT EMAILCLIENT EXPBLKMDMUSAGE EXPMDMUSAGE EXPORT_USAGE FACTORINEFFECT GETUSERSPECIFIEDSTOP INEFFECT ISHOLIDAY RUNRATE SAVE_PROFILE SETREPORTTITLE USEREXIT WATFORRUNRATE TO TABLE ACOS ASIN ATAN ATAN2 BITAND CEIL COS COSECANT COSH COTANGENT DIVQUOT DIVREM EXP FABS FLOOR FMOD FREPM FREXPN LOG LOG10 MAX MAXN MIN MINNZ MODF POW ROUND ROUND2VALUE ROUNDINT SECANT SIN SINH SQROOT TAN TANH FLOAT2STRING FLOAT2STRINGNC INSTR LEFT LEN LTRIM MID RIGHT RTRIM STRING STRINGNC TOLOWER TOUPPER TRIM NUMDAYS READ_DATE STAGING",
      built_in: "IDENTIFIER OPTIONS XML_ELEMENT XML_OP XML_ELEMENT_OF DOMDOCCREATE DOMDOCLOADFILE DOMDOCLOADXML DOMDOCSAVEFILE DOMDOCGETROOT DOMDOCADDPI DOMNODEGETNAME DOMNODEGETTYPE DOMNODEGETVALUE DOMNODEGETCHILDCT DOMNODEGETFIRSTCHILD DOMNODEGETSIBLING DOMNODECREATECHILDELEMENT DOMNODESETATTRIBUTE DOMNODEGETCHILDELEMENTCT DOMNODEGETFIRSTCHILDELEMENT DOMNODEGETSIBLINGELEMENT DOMNODEGETATTRIBUTECT DOMNODEGETATTRIBUTEI DOMNODEGETATTRIBUTEBYNAME DOMNODEGETBYNAME"
    },
    contains: [
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.APOS_STRING_MODE,
      hljs.QUOTE_STRING_MODE,
      hljs.C_NUMBER_MODE,
      {
        className: "literal",
        variants: [
          {
            // looks like #-comment
            begin: "#\\s+",
            relevance: 0
          },
          { begin: "#[a-zA-Z .]+" }
        ]
      }
    ]
  };
}
function sas(hljs) {
  const regex = hljs.regex;
  const SAS_KEYWORDS = [
    "do",
    "if",
    "then",
    "else",
    "end",
    "until",
    "while",
    "abort",
    "array",
    "attrib",
    "by",
    "call",
    "cards",
    "cards4",
    "catname",
    "continue",
    "datalines",
    "datalines4",
    "delete",
    "delim",
    "delimiter",
    "display",
    "dm",
    "drop",
    "endsas",
    "error",
    "file",
    "filename",
    "footnote",
    "format",
    "goto",
    "in",
    "infile",
    "informat",
    "input",
    "keep",
    "label",
    "leave",
    "length",
    "libname",
    "link",
    "list",
    "lostcard",
    "merge",
    "missing",
    "modify",
    "options",
    "output",
    "out",
    "page",
    "put",
    "redirect",
    "remove",
    "rename",
    "replace",
    "retain",
    "return",
    "select",
    "set",
    "skip",
    "startsas",
    "stop",
    "title",
    "update",
    "waitsas",
    "where",
    "window",
    "x|0",
    "systask",
    "add",
    "and",
    "alter",
    "as",
    "cascade",
    "check",
    "create",
    "delete",
    "describe",
    "distinct",
    "drop",
    "foreign",
    "from",
    "group",
    "having",
    "index",
    "insert",
    "into",
    "in",
    "key",
    "like",
    "message",
    "modify",
    "msgtype",
    "not",
    "null",
    "on",
    "or",
    "order",
    "primary",
    "references",
    "reset",
    "restrict",
    "select",
    "set",
    "table",
    "unique",
    "update",
    "validate",
    "view",
    "where"
  ];
  const FUNCTIONS = [
    "abs",
    "addr",
    "airy",
    "arcos",
    "arsin",
    "atan",
    "attrc",
    "attrn",
    "band",
    "betainv",
    "blshift",
    "bnot",
    "bor",
    "brshift",
    "bxor",
    "byte",
    "cdf",
    "ceil",
    "cexist",
    "cinv",
    "close",
    "cnonct",
    "collate",
    "compbl",
    "compound",
    "compress",
    "cos",
    "cosh",
    "css",
    "curobs",
    "cv",
    "daccdb",
    "daccdbsl",
    "daccsl",
    "daccsyd",
    "dacctab",
    "dairy",
    "date",
    "datejul",
    "datepart",
    "datetime",
    "day",
    "dclose",
    "depdb",
    "depdbsl",
    "depdbsl",
    "depsl",
    "depsl",
    "depsyd",
    "depsyd",
    "deptab",
    "deptab",
    "dequote",
    "dhms",
    "dif",
    "digamma",
    "dim",
    "dinfo",
    "dnum",
    "dopen",
    "doptname",
    "doptnum",
    "dread",
    "dropnote",
    "dsname",
    "erf",
    "erfc",
    "exist",
    "exp",
    "fappend",
    "fclose",
    "fcol",
    "fdelete",
    "fetch",
    "fetchobs",
    "fexist",
    "fget",
    "fileexist",
    "filename",
    "fileref",
    "finfo",
    "finv",
    "fipname",
    "fipnamel",
    "fipstate",
    "floor",
    "fnonct",
    "fnote",
    "fopen",
    "foptname",
    "foptnum",
    "fpoint",
    "fpos",
    "fput",
    "fread",
    "frewind",
    "frlen",
    "fsep",
    "fuzz",
    "fwrite",
    "gaminv",
    "gamma",
    "getoption",
    "getvarc",
    "getvarn",
    "hbound",
    "hms",
    "hosthelp",
    "hour",
    "ibessel",
    "index",
    "indexc",
    "indexw",
    "input",
    "inputc",
    "inputn",
    "int",
    "intck",
    "intnx",
    "intrr",
    "irr",
    "jbessel",
    "juldate",
    "kurtosis",
    "lag",
    "lbound",
    "left",
    "length",
    "lgamma",
    "libname",
    "libref",
    "log",
    "log10",
    "log2",
    "logpdf",
    "logpmf",
    "logsdf",
    "lowcase",
    "max",
    "mdy",
    "mean",
    "min",
    "minute",
    "mod",
    "month",
    "mopen",
    "mort",
    "n",
    "netpv",
    "nmiss",
    "normal",
    "note",
    "npv",
    "open",
    "ordinal",
    "pathname",
    "pdf",
    "peek",
    "peekc",
    "pmf",
    "point",
    "poisson",
    "poke",
    "probbeta",
    "probbnml",
    "probchi",
    "probf",
    "probgam",
    "probhypr",
    "probit",
    "probnegb",
    "probnorm",
    "probt",
    "put",
    "putc",
    "putn",
    "qtr",
    "quote",
    "ranbin",
    "rancau",
    "ranexp",
    "rangam",
    "range",
    "rank",
    "rannor",
    "ranpoi",
    "rantbl",
    "rantri",
    "ranuni",
    "repeat",
    "resolve",
    "reverse",
    "rewind",
    "right",
    "round",
    "saving",
    "scan",
    "sdf",
    "second",
    "sign",
    "sin",
    "sinh",
    "skewness",
    "soundex",
    "spedis",
    "sqrt",
    "std",
    "stderr",
    "stfips",
    "stname",
    "stnamel",
    "substr",
    "sum",
    "symget",
    "sysget",
    "sysmsg",
    "sysprod",
    "sysrc",
    "system",
    "tan",
    "tanh",
    "time",
    "timepart",
    "tinv",
    "tnonct",
    "today",
    "translate",
    "tranwrd",
    "trigamma",
    "trim",
    "trimn",
    "trunc",
    "uniform",
    "upcase",
    "uss",
    "var",
    "varfmt",
    "varinfmt",
    "varlabel",
    "varlen",
    "varname",
    "varnum",
    "varray",
    "varrayx",
    "vartype",
    "verify",
    "vformat",
    "vformatd",
    "vformatdx",
    "vformatn",
    "vformatnx",
    "vformatw",
    "vformatwx",
    "vformatx",
    "vinarray",
    "vinarrayx",
    "vinformat",
    "vinformatd",
    "vinformatdx",
    "vinformatn",
    "vinformatnx",
    "vinformatw",
    "vinformatwx",
    "vinformatx",
    "vlabel",
    "vlabelx",
    "vlength",
    "vlengthx",
    "vname",
    "vnamex",
    "vtype",
    "vtypex",
    "weekday",
    "year",
    "yyq",
    "zipfips",
    "zipname",
    "zipnamel",
    "zipstate"
  ];
  const MACRO_FUNCTIONS = [
    "bquote",
    "nrbquote",
    "cmpres",
    "qcmpres",
    "compstor",
    "datatyp",
    "display",
    "do",
    "else",
    "end",
    "eval",
    "global",
    "goto",
    "if",
    "index",
    "input",
    "keydef",
    "label",
    "left",
    "length",
    "let",
    "local",
    "lowcase",
    "macro",
    "mend",
    "nrbquote",
    "nrquote",
    "nrstr",
    "put",
    "qcmpres",
    "qleft",
    "qlowcase",
    "qscan",
    "qsubstr",
    "qsysfunc",
    "qtrim",
    "quote",
    "qupcase",
    "scan",
    "str",
    "substr",
    "superq",
    "syscall",
    "sysevalf",
    "sysexec",
    "sysfunc",
    "sysget",
    "syslput",
    "sysprod",
    "sysrc",
    "sysrput",
    "then",
    "to",
    "trim",
    "unquote",
    "until",
    "upcase",
    "verify",
    "while",
    "window"
  ];
  const LITERALS2 = [
    "null",
    "missing",
    "_all_",
    "_automatic_",
    "_character_",
    "_infile_",
    "_n_",
    "_name_",
    "_null_",
    "_numeric_",
    "_user_",
    "_webout_"
  ];
  return {
    name: "SAS",
    case_insensitive: true,
    keywords: {
      literal: LITERALS2,
      keyword: SAS_KEYWORDS
    },
    contains: [
      {
        // Distinct highlight for proc <proc>, data, run, quit
        className: "keyword",
        begin: /^\s*(proc [\w\d_]+|data|run|quit)[\s;]/
      },
      {
        // Macro variables
        className: "variable",
        begin: /&[a-zA-Z_&][a-zA-Z0-9_]*\.?/
      },
      {
        begin: [
          /^\s*/,
          /datalines;|cards;/,
          /(?:.*\n)+/,
          /^\s*;\s*$/
        ],
        className: {
          2: "keyword",
          3: "string"
        }
      },
      {
        begin: [
          /%mend|%macro/,
          /\s+/,
          /[a-zA-Z_&][a-zA-Z0-9_]*/
        ],
        className: {
          1: "built_in",
          3: "title.function"
        }
      },
      {
        // Built-in macro variables
        className: "built_in",
        begin: "%" + regex.either(...MACRO_FUNCTIONS)
      },
      {
        // User-defined macro functions
        className: "title.function",
        begin: /%[a-zA-Z_][a-zA-Z_0-9]*/
      },
      {
        // TODO: this is most likely an incorrect classification
        // built_in may need more nuance
        // https://github.com/highlightjs/highlight.js/issues/2521
        className: "meta",
        begin: regex.either(...FUNCTIONS) + "(?=\\()"
      },
      {
        className: "string",
        variants: [
          hljs.APOS_STRING_MODE,
          hljs.QUOTE_STRING_MODE
        ]
      },
      hljs.COMMENT("\\*", ";"),
      hljs.C_BLOCK_COMMENT_MODE
    ]
  };
}
function scala(hljs) {
  const regex = hljs.regex;
  const ANNOTATION = {
    className: "meta",
    begin: "@[A-Za-z]+"
  };
  const SUBST = {
    className: "subst",
    variants: [
      { begin: "\\$[A-Za-z0-9_]+" },
      {
        begin: /\$\{/,
        end: /\}/
      }
    ]
  };
  const STRING = {
    className: "string",
    variants: [
      {
        begin: '"""',
        end: '"""'
      },
      {
        begin: '"',
        end: '"',
        illegal: "\\n",
        contains: [hljs.BACKSLASH_ESCAPE]
      },
      {
        begin: '[a-z]+"',
        end: '"',
        illegal: "\\n",
        contains: [
          hljs.BACKSLASH_ESCAPE,
          SUBST
        ]
      },
      {
        className: "string",
        begin: '[a-z]+"""',
        end: '"""',
        contains: [SUBST],
        relevance: 10
      }
    ]
  };
  const TYPE = {
    className: "type",
    begin: "\\b[A-Z][A-Za-z0-9_]*",
    relevance: 0
  };
  const NAME = {
    className: "title",
    begin: /[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,
    relevance: 0
  };
  const CLASS = {
    className: "class",
    beginKeywords: "class object trait type",
    end: /[:={\[\n;]/,
    excludeEnd: true,
    contains: [
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      {
        beginKeywords: "extends with",
        relevance: 10
      },
      {
        begin: /\[/,
        end: /\]/,
        excludeBegin: true,
        excludeEnd: true,
        relevance: 0,
        contains: [
          TYPE,
          hljs.C_LINE_COMMENT_MODE,
          hljs.C_BLOCK_COMMENT_MODE
        ]
      },
      {
        className: "params",
        begin: /\(/,
        end: /\)/,
        excludeBegin: true,
        excludeEnd: true,
        relevance: 0,
        contains: [
          TYPE,
          hljs.C_LINE_COMMENT_MODE,
          hljs.C_BLOCK_COMMENT_MODE
        ]
      },
      NAME
    ]
  };
  const METHOD = {
    className: "function",
    beginKeywords: "def",
    end: regex.lookahead(/[:={\[(\n;]/),
    contains: [NAME]
  };
  const EXTENSION = {
    begin: [
      /^\s*/,
      // Is first token on the line
      "extension",
      /\s+(?=[[(])/
      // followed by at least one space and `[` or `(`
    ],
    beginScope: { 2: "keyword" }
  };
  const END = {
    begin: [
      /^\s*/,
      // Is first token on the line
      /end/,
      /\s+/,
      /(extension\b)?/
      // `extension` is the only marker that follows an `end` that cannot be captured by another rule.
    ],
    beginScope: {
      2: "keyword",
      4: "keyword"
    }
  };
  const INLINE_MODES = [
    { match: /\.inline\b/ },
    {
      begin: /\binline(?=\s)/,
      keywords: "inline"
    }
  ];
  const USING_PARAM_CLAUSE = {
    begin: [
      /\(\s*/,
      // Opening `(` of a parameter or argument list
      /using/,
      /\s+(?!\))/
      // Spaces not followed by `)`
    ],
    beginScope: { 2: "keyword" }
  };
  const DIRECTIVE_VALUE = {
    className: "string",
    begin: /\S+/
  };
  const USING_DIRECTIVE = {
    begin: [
      "//>",
      /\s+/,
      /using/,
      /\s+/,
      /\S+/
    ],
    beginScope: {
      1: "comment",
      3: "keyword",
      5: "type"
    },
    end: /$/,
    contains: [
      DIRECTIVE_VALUE
    ]
  };
  return {
    name: "Scala",
    keywords: {
      literal: "true false null",
      keyword: "type yield lazy override def with val var sealed abstract private trait object if then forSome for while do throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit export enum given transparent"
    },
    contains: [
      USING_DIRECTIVE,
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      STRING,
      TYPE,
      METHOD,
      CLASS,
      hljs.C_NUMBER_MODE,
      EXTENSION,
      END,
      ...INLINE_MODES,
      USING_PARAM_CLAUSE,
      ANNOTATION
    ]
  };
}
function scheme$1(hljs) {
  const SCHEME_IDENT_RE = "[^\\(\\)\\[\\]\\{\\}\",'`;#|\\\\\\s]+";
  const SCHEME_SIMPLE_NUMBER_RE = "(-|\\+)?\\d+([./]\\d+)?";
  const SCHEME_COMPLEX_NUMBER_RE = SCHEME_SIMPLE_NUMBER_RE + "[+\\-]" + SCHEME_SIMPLE_NUMBER_RE + "i";
  const KEYWORDS2 = {
    $pattern: SCHEME_IDENT_RE,
    built_in: "case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules ' * + , ,@ - ... / ; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci<? char-ci=? char-ci>=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char<? char=? char>=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci<? string-ci=? string-ci>=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string<? string=? string>=? string>? string? substring symbol->string symbol? tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"
  };
  const LITERAL = {
    className: "literal",
    begin: "(#t|#f|#\\\\" + SCHEME_IDENT_RE + "|#\\\\.)"
  };
  const NUMBER = {
    className: "number",
    variants: [
      {
        begin: SCHEME_SIMPLE_NUMBER_RE,
        relevance: 0
      },
      {
        begin: SCHEME_COMPLEX_NUMBER_RE,
        relevance: 0
      },
      { begin: "#b[0-1]+(/[0-1]+)?" },
      { begin: "#o[0-7]+(/[0-7]+)?" },
      { begin: "#x[0-9a-f]+(/[0-9a-f]+)?" }
    ]
  };
  const STRING = hljs.QUOTE_STRING_MODE;
  const COMMENT_MODES = [
    hljs.COMMENT(
      ";",
      "$",
      { relevance: 0 }
    ),
    hljs.COMMENT("#\\|", "\\|#")
  ];
  const IDENT = {
    begin: SCHEME_IDENT_RE,
    relevance: 0
  };
  const QUOTED_IDENT = {
    className: "symbol",
    begin: "'" + SCHEME_IDENT_RE
  };
  const BODY = {
    endsWithParent: true,
    relevance: 0
  };
  const QUOTED_LIST = {
    variants: [
      { begin: /'/ },
      { begin: "`" }
    ],
    contains: [
      {
        begin: "\\(",
        end: "\\)",
        contains: [
          "self",
          LITERAL,
          STRING,
          NUMBER,
          IDENT,
          QUOTED_IDENT
        ]
      }
    ]
  };
  const NAME = {
    className: "name",
    relevance: 0,
    begin: SCHEME_IDENT_RE,
    keywords: KEYWORDS2
  };
  const LAMBDA = {
    begin: /lambda/,
    endsWithParent: true,
    returnBegin: true,
    contains: [
      NAME,
      {
        endsParent: true,
        variants: [
          {
            begin: /\(/,
            end: /\)/
          },
          {
            begin: /\[/,
            end: /\]/
          }
        ],
        contains: [IDENT]
      }
    ]
  };
  const LIST = {
    variants: [
      {
        begin: "\\(",
        end: "\\)"
      },
      {
        begin: "\\[",
        end: "\\]"
      }
    ],
    contains: [
      LAMBDA,
      NAME,
      BODY
    ]
  };
  BODY.contains = [
    LITERAL,
    NUMBER,
    STRING,
    IDENT,
    QUOTED_IDENT,
    QUOTED_LIST,
    LIST
  ].concat(COMMENT_MODES);
  return {
    name: "Scheme",
    aliases: ["scm"],
    illegal: /\S/,
    contains: [
      hljs.SHEBANG(),
      NUMBER,
      STRING,
      QUOTED_IDENT,
      QUOTED_LIST,
      LIST
    ].concat(COMMENT_MODES)
  };
}
function scilab(hljs) {
  const COMMON_CONTAINS = [
    hljs.C_NUMBER_MODE,
    {
      className: "string",
      begin: `'|"`,
      end: `'|"`,
      contains: [
        hljs.BACKSLASH_ESCAPE,
        { begin: "''" }
      ]
    }
  ];
  return {
    name: "Scilab",
    aliases: ["sci"],
    keywords: {
      $pattern: /%?\w+/,
      keyword: "abort break case clear catch continue do elseif else endfunction end for function global if pause return resume select try then while",
      literal: "%f %F %t %T %pi %eps %inf %nan %e %i %z %s",
      built_in: (
        // Scilab has more than 2000 functions. Just list the most commons
        "abs and acos asin atan ceil cd chdir clearglobal cosh cos cumprod deff disp error exec execstr exists exp eye gettext floor fprintf fread fsolve imag isdef isempty isinfisnan isvector lasterror length load linspace list listfiles log10 log2 log max min msprintf mclose mopen ones or pathconvert poly printf prod pwd rand real round sinh sin size gsort sprintf sqrt strcat strcmps tring sum system tanh tan type typename warning zeros matrix"
      )
    },
    illegal: '("|#|/\\*|\\s+/\\w+)',
    contains: [
      {
        className: "function",
        beginKeywords: "function",
        end: "$",
        contains: [
          hljs.UNDERSCORE_TITLE_MODE,
          {
            className: "params",
            begin: "\\(",
            end: "\\)"
          }
        ]
      },
      // seems to be a guard against [ident]' or [ident].
      // perhaps to prevent attributes from flagging as keywords?
      {
        begin: "[a-zA-Z_][a-zA-Z_0-9]*[\\.']+",
        relevance: 0
      },
      {
        begin: "\\[",
        end: "\\][\\.']*",
        relevance: 0,
        contains: COMMON_CONTAINS
      },
      hljs.COMMENT("//", "$")
    ].concat(COMMON_CONTAINS)
  };
}
function smali(hljs) {
  const smali_instr_low_prio = [
    "add",
    "and",
    "cmp",
    "cmpg",
    "cmpl",
    "const",
    "div",
    "double",
    "float",
    "goto",
    "if",
    "int",
    "long",
    "move",
    "mul",
    "neg",
    "new",
    "nop",
    "not",
    "or",
    "rem",
    "return",
    "shl",
    "shr",
    "sput",
    "sub",
    "throw",
    "ushr",
    "xor"
  ];
  const smali_instr_high_prio = [
    "aget",
    "aput",
    "array",
    "check",
    "execute",
    "fill",
    "filled",
    "goto/16",
    "goto/32",
    "iget",
    "instance",
    "invoke",
    "iput",
    "monitor",
    "packed",
    "sget",
    "sparse"
  ];
  const smali_keywords = [
    "transient",
    "constructor",
    "abstract",
    "final",
    "synthetic",
    "public",
    "private",
    "protected",
    "static",
    "bridge",
    "system"
  ];
  return {
    name: "Smali",
    contains: [
      {
        className: "string",
        begin: '"',
        end: '"',
        relevance: 0
      },
      hljs.COMMENT(
        "#",
        "$",
        { relevance: 0 }
      ),
      {
        className: "keyword",
        variants: [
          { begin: "\\s*\\.end\\s[a-zA-Z0-9]*" },
          {
            begin: "^[ ]*\\.[a-zA-Z]*",
            relevance: 0
          },
          {
            begin: "\\s:[a-zA-Z_0-9]*",
            relevance: 0
          },
          { begin: "\\s(" + smali_keywords.join("|") + ")" }
        ]
      },
      {
        className: "built_in",
        variants: [
          { begin: "\\s(" + smali_instr_low_prio.join("|") + ")\\s" },
          {
            begin: "\\s(" + smali_instr_low_prio.join("|") + ")((-|/)[a-zA-Z0-9]+)+\\s",
            relevance: 10
          },
          {
            begin: "\\s(" + smali_instr_high_prio.join("|") + ")((-|/)[a-zA-Z0-9]+)*\\s",
            relevance: 10
          }
        ]
      },
      {
        className: "class",
        begin: "L[^(;:\n]*;",
        relevance: 0
      },
      { begin: "[vp][0-9]+" }
    ]
  };
}
function smalltalk(hljs) {
  const VAR_IDENT_RE = "[a-z][a-zA-Z0-9_]*";
  const CHAR = {
    className: "string",
    begin: "\\$.{1}"
  };
  const SYMBOL = {
    className: "symbol",
    begin: "#" + hljs.UNDERSCORE_IDENT_RE
  };
  return {
    name: "Smalltalk",
    aliases: ["st"],
    keywords: [
      "self",
      "super",
      "nil",
      "true",
      "false",
      "thisContext"
    ],
    contains: [
      hljs.COMMENT('"', '"'),
      hljs.APOS_STRING_MODE,
      {
        className: "type",
        begin: "\\b[A-Z][A-Za-z0-9_]*",
        relevance: 0
      },
      {
        begin: VAR_IDENT_RE + ":",
        relevance: 0
      },
      hljs.C_NUMBER_MODE,
      SYMBOL,
      CHAR,
      {
        // This looks more complicated than needed to avoid combinatorial
        // explosion under V8. It effectively means `| var1 var2 ... |` with
        // whitespace adjacent to `|` being optional.
        begin: "\\|[ ]*" + VAR_IDENT_RE + "([ ]+" + VAR_IDENT_RE + ")*[ ]*\\|",
        returnBegin: true,
        end: /\|/,
        illegal: /\S/,
        contains: [{ begin: "(\\|[ ]*)?" + VAR_IDENT_RE }]
      },
      {
        begin: "#\\(",
        end: "\\)",
        contains: [
          hljs.APOS_STRING_MODE,
          CHAR,
          hljs.C_NUMBER_MODE,
          SYMBOL
        ]
      }
    ]
  };
}
function sml(hljs) {
  return {
    name: "SML (Standard ML)",
    aliases: ["ml"],
    keywords: {
      $pattern: "[a-z_]\\w*!?",
      keyword: (
        /* according to Definition of Standard ML 97  */
        "abstype and andalso as case datatype do else end eqtype exception fn fun functor handle if in include infix infixr let local nonfix of op open orelse raise rec sharing sig signature struct structure then type val with withtype where while"
      ),
      built_in: (
        /* built-in types according to basis library */
        "array bool char exn int list option order real ref string substring vector unit word"
      ),
      literal: "true false NONE SOME LESS EQUAL GREATER nil"
    },
    illegal: /\/\/|>>/,
    contains: [
      {
        className: "literal",
        begin: /\[(\|\|)?\]|\(\)/,
        relevance: 0
      },
      hljs.COMMENT(
        "\\(\\*",
        "\\*\\)",
        { contains: ["self"] }
      ),
      {
        /* type variable */
        className: "symbol",
        begin: "'[A-Za-z_](?!')[\\w']*"
        /* the grammar is ambiguous on how 'a'b should be interpreted but not the compiler */
      },
      {
        /* polymorphic variant */
        className: "type",
        begin: "`[A-Z][\\w']*"
      },
      {
        /* module or constructor */
        className: "type",
        begin: "\\b[A-Z][\\w']*",
        relevance: 0
      },
      {
        /* don't color identifiers, but safely catch all identifiers with ' */
        begin: "[a-z_]\\w*'[\\w']*"
      },
      hljs.inherit(hljs.APOS_STRING_MODE, {
        className: "string",
        relevance: 0
      }),
      hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }),
      {
        className: "number",
        begin: "\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",
        relevance: 0
      },
      {
        begin: /[-=]>/
        // relevance booster
      }
    ]
  };
}
function sqf(hljs) {
  const VARIABLE = {
    className: "variable",
    begin: /\b_+[a-zA-Z]\w*/
  };
  const FUNCTION = {
    className: "title",
    begin: /[a-zA-Z][a-zA-Z_0-9]*_fnc_[a-zA-Z_0-9]+/
  };
  const STRINGS = {
    className: "string",
    variants: [
      {
        begin: '"',
        end: '"',
        contains: [
          {
            begin: '""',
            relevance: 0
          }
        ]
      },
      {
        begin: "'",
        end: "'",
        contains: [
          {
            begin: "''",
            relevance: 0
          }
        ]
      }
    ]
  };
  const KEYWORDS2 = [
    "break",
    "breakWith",
    "breakOut",
    "breakTo",
    "case",
    "catch",
    "continue",
    "continueWith",
    "default",
    "do",
    "else",
    "exit",
    "exitWith",
    "for",
    "forEach",
    "from",
    "if",
    "local",
    "private",
    "switch",
    "step",
    "then",
    "throw",
    "to",
    "try",
    "waitUntil",
    "while",
    "with"
  ];
  const LITERAL = [
    "blufor",
    "civilian",
    "configNull",
    "controlNull",
    "displayNull",
    "diaryRecordNull",
    "east",
    "endl",
    "false",
    "grpNull",
    "independent",
    "lineBreak",
    "locationNull",
    "nil",
    "objNull",
    "opfor",
    "pi",
    "resistance",
    "scriptNull",
    "sideAmbientLife",
    "sideEmpty",
    "sideEnemy",
    "sideFriendly",
    "sideLogic",
    "sideUnknown",
    "taskNull",
    "teamMemberNull",
    "true",
    "west"
  ];
  const BUILT_IN = [
    "abs",
    "accTime",
    "acos",
    "action",
    "actionIDs",
    "actionKeys",
    "actionKeysEx",
    "actionKeysImages",
    "actionKeysNames",
    "actionKeysNamesArray",
    "actionName",
    "actionParams",
    "activateAddons",
    "activatedAddons",
    "activateKey",
    "activeTitleEffectParams",
    "add3DENConnection",
    "add3DENEventHandler",
    "add3DENLayer",
    "addAction",
    "addBackpack",
    "addBackpackCargo",
    "addBackpackCargoGlobal",
    "addBackpackGlobal",
    "addBinocularItem",
    "addCamShake",
    "addCuratorAddons",
    "addCuratorCameraArea",
    "addCuratorEditableObjects",
    "addCuratorEditingArea",
    "addCuratorPoints",
    "addEditorObject",
    "addEventHandler",
    "addForce",
    "addForceGeneratorRTD",
    "addGoggles",
    "addGroupIcon",
    "addHandgunItem",
    "addHeadgear",
    "addItem",
    "addItemCargo",
    "addItemCargoGlobal",
    "addItemPool",
    "addItemToBackpack",
    "addItemToUniform",
    "addItemToVest",
    "addLiveStats",
    "addMagazine",
    "addMagazineAmmoCargo",
    "addMagazineCargo",
    "addMagazineCargoGlobal",
    "addMagazineGlobal",
    "addMagazinePool",
    "addMagazines",
    "addMagazineTurret",
    "addMenu",
    "addMenuItem",
    "addMissionEventHandler",
    "addMPEventHandler",
    "addMusicEventHandler",
    "addonFiles",
    "addOwnedMine",
    "addPlayerScores",
    "addPrimaryWeaponItem",
    "addPublicVariableEventHandler",
    "addRating",
    "addResources",
    "addScore",
    "addScoreSide",
    "addSecondaryWeaponItem",
    "addSwitchableUnit",
    "addTeamMember",
    "addToRemainsCollector",
    "addTorque",
    "addUniform",
    "addUserActionEventHandler",
    "addVehicle",
    "addVest",
    "addWaypoint",
    "addWeapon",
    "addWeaponCargo",
    "addWeaponCargoGlobal",
    "addWeaponGlobal",
    "addWeaponItem",
    "addWeaponPool",
    "addWeaponTurret",
    "addWeaponWithAttachmentsCargo",
    "addWeaponWithAttachmentsCargoGlobal",
    "admin",
    "agent",
    "agents",
    "AGLToASL",
    "aimedAtTarget",
    "aimPos",
    "airDensityCurveRTD",
    "airDensityRTD",
    "airplaneThrottle",
    "airportSide",
    "AISFinishHeal",
    "alive",
    "all3DENEntities",
    "allActiveTitleEffects",
    "allAddonsInfo",
    "allAirports",
    "allControls",
    "allCurators",
    "allCutLayers",
    "allDead",
    "allDeadMen",
    "allDiaryRecords",
    "allDiarySubjects",
    "allDisplays",
    "allEnv3DSoundSources",
    "allGroups",
    "allLODs",
    "allMapMarkers",
    "allMines",
    "allMissionObjects",
    "allObjects",
    "allow3DMode",
    "allowCrewInImmobile",
    "allowCuratorLogicIgnoreAreas",
    "allowDamage",
    "allowDammage",
    "allowedService",
    "allowFileOperations",
    "allowFleeing",
    "allowGetIn",
    "allowService",
    "allowSprint",
    "allPlayers",
    "allSimpleObjects",
    "allSites",
    "allTurrets",
    "allUnits",
    "allUnitsUAV",
    "allUsers",
    "allVariables",
    "ambientTemperature",
    "ammo",
    "ammoOnPylon",
    "and",
    "animate",
    "animateBay",
    "animateDoor",
    "animatePylon",
    "animateSource",
    "animationNames",
    "animationPhase",
    "animationSourcePhase",
    "animationState",
    "apertureParams",
    "append",
    "apply",
    "armoryPoints",
    "arrayIntersect",
    "asin",
    "ASLToAGL",
    "ASLToATL",
    "assert",
    "assignAsCargo",
    "assignAsCargoIndex",
    "assignAsCommander",
    "assignAsDriver",
    "assignAsGunner",
    "assignAsTurret",
    "assignCurator",
    "assignedCargo",
    "assignedCommander",
    "assignedDriver",
    "assignedGroup",
    "assignedGunner",
    "assignedItems",
    "assignedTarget",
    "assignedTeam",
    "assignedVehicle",
    "assignedVehicleRole",
    "assignedVehicles",
    "assignItem",
    "assignTeam",
    "assignToAirport",
    "atan",
    "atan2",
    "atg",
    "ATLToASL",
    "attachedObject",
    "attachedObjects",
    "attachedTo",
    "attachObject",
    "attachTo",
    "attackEnabled",
    "awake",
    "backpack",
    "backpackCargo",
    "backpackContainer",
    "backpackItems",
    "backpackMagazines",
    "backpackSpaceFor",
    "behaviour",
    "benchmark",
    "bezierInterpolation",
    "binocular",
    "binocularItems",
    "binocularMagazine",
    "boundingBox",
    "boundingBoxReal",
    "boundingCenter",
    "brakesDisabled",
    "briefingName",
    "buildingExit",
    "buildingPos",
    "buldozer_EnableRoadDiag",
    "buldozer_IsEnabledRoadDiag",
    "buldozer_LoadNewRoads",
    "buldozer_reloadOperMap",
    "buttonAction",
    "buttonSetAction",
    "cadetMode",
    "calculatePath",
    "calculatePlayerVisibilityByFriendly",
    "call",
    "callExtension",
    "camCommand",
    "camCommit",
    "camCommitPrepared",
    "camCommitted",
    "camConstuctionSetParams",
    "camCreate",
    "camDestroy",
    "cameraEffect",
    "cameraEffectEnableHUD",
    "cameraInterest",
    "cameraOn",
    "cameraView",
    "campaignConfigFile",
    "camPreload",
    "camPreloaded",
    "camPrepareBank",
    "camPrepareDir",
    "camPrepareDive",
    "camPrepareFocus",
    "camPrepareFov",
    "camPrepareFovRange",
    "camPreparePos",
    "camPrepareRelPos",
    "camPrepareTarget",
    "camSetBank",
    "camSetDir",
    "camSetDive",
    "camSetFocus",
    "camSetFov",
    "camSetFovRange",
    "camSetPos",
    "camSetRelPos",
    "camSetTarget",
    "camTarget",
    "camUseNVG",
    "canAdd",
    "canAddItemToBackpack",
    "canAddItemToUniform",
    "canAddItemToVest",
    "cancelSimpleTaskDestination",
    "canDeployWeapon",
    "canFire",
    "canMove",
    "canSlingLoad",
    "canStand",
    "canSuspend",
    "canTriggerDynamicSimulation",
    "canUnloadInCombat",
    "canVehicleCargo",
    "captive",
    "captiveNum",
    "cbChecked",
    "cbSetChecked",
    "ceil",
    "channelEnabled",
    "cheatsEnabled",
    "checkAIFeature",
    "checkVisibility",
    "className",
    "clear3DENAttribute",
    "clear3DENInventory",
    "clearAllItemsFromBackpack",
    "clearBackpackCargo",
    "clearBackpackCargoGlobal",
    "clearForcesRTD",
    "clearGroupIcons",
    "clearItemCargo",
    "clearItemCargoGlobal",
    "clearItemPool",
    "clearMagazineCargo",
    "clearMagazineCargoGlobal",
    "clearMagazinePool",
    "clearOverlay",
    "clearRadio",
    "clearWeaponCargo",
    "clearWeaponCargoGlobal",
    "clearWeaponPool",
    "clientOwner",
    "closeDialog",
    "closeDisplay",
    "closeOverlay",
    "collapseObjectTree",
    "collect3DENHistory",
    "collectiveRTD",
    "collisionDisabledWith",
    "combatBehaviour",
    "combatMode",
    "commandArtilleryFire",
    "commandChat",
    "commander",
    "commandFire",
    "commandFollow",
    "commandFSM",
    "commandGetOut",
    "commandingMenu",
    "commandMove",
    "commandRadio",
    "commandStop",
    "commandSuppressiveFire",
    "commandTarget",
    "commandWatch",
    "comment",
    "commitOverlay",
    "compatibleItems",
    "compatibleMagazines",
    "compile",
    "compileFinal",
    "compileScript",
    "completedFSM",
    "composeText",
    "configClasses",
    "configFile",
    "configHierarchy",
    "configName",
    "configOf",
    "configProperties",
    "configSourceAddonList",
    "configSourceMod",
    "configSourceModList",
    "confirmSensorTarget",
    "connectTerminalToUAV",
    "connectToServer",
    "controlsGroupCtrl",
    "conversationDisabled",
    "copyFromClipboard",
    "copyToClipboard",
    "copyWaypoints",
    "cos",
    "count",
    "countEnemy",
    "countFriendly",
    "countSide",
    "countType",
    "countUnknown",
    "create3DENComposition",
    "create3DENEntity",
    "createAgent",
    "createCenter",
    "createDialog",
    "createDiaryLink",
    "createDiaryRecord",
    "createDiarySubject",
    "createDisplay",
    "createGearDialog",
    "createGroup",
    "createGuardedPoint",
    "createHashMap",
    "createHashMapFromArray",
    "createLocation",
    "createMarker",
    "createMarkerLocal",
    "createMenu",
    "createMine",
    "createMissionDisplay",
    "createMPCampaignDisplay",
    "createSimpleObject",
    "createSimpleTask",
    "createSite",
    "createSoundSource",
    "createTask",
    "createTeam",
    "createTrigger",
    "createUnit",
    "createVehicle",
    "createVehicleCrew",
    "createVehicleLocal",
    "crew",
    "ctAddHeader",
    "ctAddRow",
    "ctClear",
    "ctCurSel",
    "ctData",
    "ctFindHeaderRows",
    "ctFindRowHeader",
    "ctHeaderControls",
    "ctHeaderCount",
    "ctRemoveHeaders",
    "ctRemoveRows",
    "ctrlActivate",
    "ctrlAddEventHandler",
    "ctrlAngle",
    "ctrlAnimateModel",
    "ctrlAnimationPhaseModel",
    "ctrlAt",
    "ctrlAutoScrollDelay",
    "ctrlAutoScrollRewind",
    "ctrlAutoScrollSpeed",
    "ctrlBackgroundColor",
    "ctrlChecked",
    "ctrlClassName",
    "ctrlCommit",
    "ctrlCommitted",
    "ctrlCreate",
    "ctrlDelete",
    "ctrlEnable",
    "ctrlEnabled",
    "ctrlFade",
    "ctrlFontHeight",
    "ctrlForegroundColor",
    "ctrlHTMLLoaded",
    "ctrlIDC",
    "ctrlIDD",
    "ctrlMapAnimAdd",
    "ctrlMapAnimClear",
    "ctrlMapAnimCommit",
    "ctrlMapAnimDone",
    "ctrlMapCursor",
    "ctrlMapMouseOver",
    "ctrlMapPosition",
    "ctrlMapScale",
    "ctrlMapScreenToWorld",
    "ctrlMapSetPosition",
    "ctrlMapWorldToScreen",
    "ctrlModel",
    "ctrlModelDirAndUp",
    "ctrlModelScale",
    "ctrlMousePosition",
    "ctrlParent",
    "ctrlParentControlsGroup",
    "ctrlPosition",
    "ctrlRemoveAllEventHandlers",
    "ctrlRemoveEventHandler",
    "ctrlScale",
    "ctrlScrollValues",
    "ctrlSetActiveColor",
    "ctrlSetAngle",
    "ctrlSetAutoScrollDelay",
    "ctrlSetAutoScrollRewind",
    "ctrlSetAutoScrollSpeed",
    "ctrlSetBackgroundColor",
    "ctrlSetChecked",
    "ctrlSetDisabledColor",
    "ctrlSetEventHandler",
    "ctrlSetFade",
    "ctrlSetFocus",
    "ctrlSetFont",
    "ctrlSetFontH1",
    "ctrlSetFontH1B",
    "ctrlSetFontH2",
    "ctrlSetFontH2B",
    "ctrlSetFontH3",
    "ctrlSetFontH3B",
    "ctrlSetFontH4",
    "ctrlSetFontH4B",
    "ctrlSetFontH5",
    "ctrlSetFontH5B",
    "ctrlSetFontH6",
    "ctrlSetFontH6B",
    "ctrlSetFontHeight",
    "ctrlSetFontHeightH1",
    "ctrlSetFontHeightH2",
    "ctrlSetFontHeightH3",
    "ctrlSetFontHeightH4",
    "ctrlSetFontHeightH5",
    "ctrlSetFontHeightH6",
    "ctrlSetFontHeightSecondary",
    "ctrlSetFontP",
    "ctrlSetFontPB",
    "ctrlSetFontSecondary",
    "ctrlSetForegroundColor",
    "ctrlSetModel",
    "ctrlSetModelDirAndUp",
    "ctrlSetModelScale",
    "ctrlSetMousePosition",
    "ctrlSetPixelPrecision",
    "ctrlSetPosition",
    "ctrlSetPositionH",
    "ctrlSetPositionW",
    "ctrlSetPositionX",
    "ctrlSetPositionY",
    "ctrlSetScale",
    "ctrlSetScrollValues",
    "ctrlSetShadow",
    "ctrlSetStructuredText",
    "ctrlSetText",
    "ctrlSetTextColor",
    "ctrlSetTextColorSecondary",
    "ctrlSetTextSecondary",
    "ctrlSetTextSelection",
    "ctrlSetTooltip",
    "ctrlSetTooltipColorBox",
    "ctrlSetTooltipColorShade",
    "ctrlSetTooltipColorText",
    "ctrlSetTooltipMaxWidth",
    "ctrlSetURL",
    "ctrlSetURLOverlayMode",
    "ctrlShadow",
    "ctrlShow",
    "ctrlShown",
    "ctrlStyle",
    "ctrlText",
    "ctrlTextColor",
    "ctrlTextHeight",
    "ctrlTextSecondary",
    "ctrlTextSelection",
    "ctrlTextWidth",
    "ctrlTooltip",
    "ctrlType",
    "ctrlURL",
    "ctrlURLOverlayMode",
    "ctrlVisible",
    "ctRowControls",
    "ctRowCount",
    "ctSetCurSel",
    "ctSetData",
    "ctSetHeaderTemplate",
    "ctSetRowTemplate",
    "ctSetValue",
    "ctValue",
    "curatorAddons",
    "curatorCamera",
    "curatorCameraArea",
    "curatorCameraAreaCeiling",
    "curatorCoef",
    "curatorEditableObjects",
    "curatorEditingArea",
    "curatorEditingAreaType",
    "curatorMouseOver",
    "curatorPoints",
    "curatorRegisteredObjects",
    "curatorSelected",
    "curatorWaypointCost",
    "current3DENOperation",
    "currentChannel",
    "currentCommand",
    "currentMagazine",
    "currentMagazineDetail",
    "currentMagazineDetailTurret",
    "currentMagazineTurret",
    "currentMuzzle",
    "currentNamespace",
    "currentPilot",
    "currentTask",
    "currentTasks",
    "currentThrowable",
    "currentVisionMode",
    "currentWaypoint",
    "currentWeapon",
    "currentWeaponMode",
    "currentWeaponTurret",
    "currentZeroing",
    "cursorObject",
    "cursorTarget",
    "customChat",
    "customRadio",
    "customWaypointPosition",
    "cutFadeOut",
    "cutObj",
    "cutRsc",
    "cutText",
    "damage",
    "date",
    "dateToNumber",
    "dayTime",
    "deActivateKey",
    "debriefingText",
    "debugFSM",
    "debugLog",
    "decayGraphValues",
    "deg",
    "delete3DENEntities",
    "deleteAt",
    "deleteCenter",
    "deleteCollection",
    "deleteEditorObject",
    "deleteGroup",
    "deleteGroupWhenEmpty",
    "deleteIdentity",
    "deleteLocation",
    "deleteMarker",
    "deleteMarkerLocal",
    "deleteRange",
    "deleteResources",
    "deleteSite",
    "deleteStatus",
    "deleteTeam",
    "deleteVehicle",
    "deleteVehicleCrew",
    "deleteWaypoint",
    "detach",
    "detectedMines",
    "diag_activeMissionFSMs",
    "diag_activeScripts",
    "diag_activeSQFScripts",
    "diag_activeSQSScripts",
    "diag_allMissionEventHandlers",
    "diag_captureFrame",
    "diag_captureFrameToFile",
    "diag_captureSlowFrame",
    "diag_codePerformance",
    "diag_deltaTime",
    "diag_drawmode",
    "diag_dumpCalltraceToLog",
    "diag_dumpScriptAssembly",
    "diag_dumpTerrainSynth",
    "diag_dynamicSimulationEnd",
    "diag_enable",
    "diag_enabled",
    "diag_exportConfig",
    "diag_exportTerrainSVG",
    "diag_fps",
    "diag_fpsmin",
    "diag_frameno",
    "diag_getTerrainSegmentOffset",
    "diag_lightNewLoad",
    "diag_list",
    "diag_localized",
    "diag_log",
    "diag_logSlowFrame",
    "diag_mergeConfigFile",
    "diag_recordTurretLimits",
    "diag_resetFSM",
    "diag_resetshapes",
    "diag_scope",
    "diag_setLightNew",
    "diag_stacktrace",
    "diag_tickTime",
    "diag_toggle",
    "dialog",
    "diarySubjectExists",
    "didJIP",
    "didJIPOwner",
    "difficulty",
    "difficultyEnabled",
    "difficultyEnabledRTD",
    "difficultyOption",
    "direction",
    "directionStabilizationEnabled",
    "directSay",
    "disableAI",
    "disableBrakes",
    "disableCollisionWith",
    "disableConversation",
    "disableDebriefingStats",
    "disableMapIndicators",
    "disableNVGEquipment",
    "disableRemoteSensors",
    "disableSerialization",
    "disableTIEquipment",
    "disableUAVConnectability",
    "disableUserInput",
    "displayAddEventHandler",
    "displayChild",
    "displayCtrl",
    "displayParent",
    "displayRemoveAllEventHandlers",
    "displayRemoveEventHandler",
    "displaySetEventHandler",
    "displayUniqueName",
    "displayUpdate",
    "dissolveTeam",
    "distance",
    "distance2D",
    "distanceSqr",
    "distributionRegion",
    "do3DENAction",
    "doArtilleryFire",
    "doFire",
    "doFollow",
    "doFSM",
    "doGetOut",
    "doMove",
    "doorPhase",
    "doStop",
    "doSuppressiveFire",
    "doTarget",
    "doWatch",
    "drawArrow",
    "drawEllipse",
    "drawIcon",
    "drawIcon3D",
    "drawLaser",
    "drawLine",
    "drawLine3D",
    "drawLink",
    "drawLocation",
    "drawPolygon",
    "drawRectangle",
    "drawTriangle",
    "driver",
    "drop",
    "dynamicSimulationDistance",
    "dynamicSimulationDistanceCoef",
    "dynamicSimulationEnabled",
    "dynamicSimulationSystemEnabled",
    "echo",
    "edit3DENMissionAttributes",
    "editObject",
    "editorSetEventHandler",
    "effectiveCommander",
    "elevatePeriscope",
    "emptyPositions",
    "enableAI",
    "enableAIFeature",
    "enableAimPrecision",
    "enableAttack",
    "enableAudioFeature",
    "enableAutoStartUpRTD",
    "enableAutoTrimRTD",
    "enableCamShake",
    "enableCaustics",
    "enableChannel",
    "enableCollisionWith",
    "enableCopilot",
    "enableDebriefingStats",
    "enableDiagLegend",
    "enableDirectionStabilization",
    "enableDynamicSimulation",
    "enableDynamicSimulationSystem",
    "enableEndDialog",
    "enableEngineArtillery",
    "enableEnvironment",
    "enableFatigue",
    "enableGunLights",
    "enableInfoPanelComponent",
    "enableIRLasers",
    "enableMimics",
    "enablePersonTurret",
    "enableRadio",
    "enableReload",
    "enableRopeAttach",
    "enableSatNormalOnDetail",
    "enableSaving",
    "enableSentences",
    "enableSimulation",
    "enableSimulationGlobal",
    "enableStamina",
    "enableStressDamage",
    "enableTeamSwitch",
    "enableTraffic",
    "enableUAVConnectability",
    "enableUAVWaypoints",
    "enableVehicleCargo",
    "enableVehicleSensor",
    "enableWeaponDisassembly",
    "endLoadingScreen",
    "endMission",
    "engineOn",
    "enginesIsOnRTD",
    "enginesPowerRTD",
    "enginesRpmRTD",
    "enginesTorqueRTD",
    "entities",
    "environmentEnabled",
    "environmentVolume",
    "equipmentDisabled",
    "estimatedEndServerTime",
    "estimatedTimeLeft",
    "evalObjectArgument",
    "everyBackpack",
    "everyContainer",
    "exec",
    "execEditorScript",
    "execFSM",
    "execVM",
    "exp",
    "expectedDestination",
    "exportJIPMessages",
    "eyeDirection",
    "eyePos",
    "face",
    "faction",
    "fadeEnvironment",
    "fadeMusic",
    "fadeRadio",
    "fadeSound",
    "fadeSpeech",
    "failMission",
    "fileExists",
    "fillWeaponsFromPool",
    "find",
    "findAny",
    "findCover",
    "findDisplay",
    "findEditorObject",
    "findEmptyPosition",
    "findEmptyPositionReady",
    "findIf",
    "findNearestEnemy",
    "finishMissionInit",
    "finite",
    "fire",
    "fireAtTarget",
    "firstBackpack",
    "flag",
    "flagAnimationPhase",
    "flagOwner",
    "flagSide",
    "flagTexture",
    "flatten",
    "fleeing",
    "floor",
    "flyInHeight",
    "flyInHeightASL",
    "focusedCtrl",
    "fog",
    "fogForecast",
    "fogParams",
    "forceAddUniform",
    "forceAtPositionRTD",
    "forceCadetDifficulty",
    "forcedMap",
    "forceEnd",
    "forceFlagTexture",
    "forceFollowRoad",
    "forceGeneratorRTD",
    "forceMap",
    "forceRespawn",
    "forceSpeed",
    "forceUnicode",
    "forceWalk",
    "forceWeaponFire",
    "forceWeatherChange",
    "forEachMember",
    "forEachMemberAgent",
    "forEachMemberTeam",
    "forgetTarget",
    "format",
    "formation",
    "formationDirection",
    "formationLeader",
    "formationMembers",
    "formationPosition",
    "formationTask",
    "formatText",
    "formLeader",
    "freeExtension",
    "freeLook",
    "fromEditor",
    "fuel",
    "fullCrew",
    "gearIDCAmmoCount",
    "gearSlotAmmoCount",
    "gearSlotData",
    "gestureState",
    "get",
    "get3DENActionState",
    "get3DENAttribute",
    "get3DENCamera",
    "get3DENConnections",
    "get3DENEntity",
    "get3DENEntityID",
    "get3DENGrid",
    "get3DENIconsVisible",
    "get3DENLayerEntities",
    "get3DENLinesVisible",
    "get3DENMissionAttribute",
    "get3DENMouseOver",
    "get3DENSelected",
    "getAimingCoef",
    "getAllEnv3DSoundControllers",
    "getAllEnvSoundControllers",
    "getAllHitPointsDamage",
    "getAllOwnedMines",
    "getAllPylonsInfo",
    "getAllSoundControllers",
    "getAllUnitTraits",
    "getAmmoCargo",
    "getAnimAimPrecision",
    "getAnimSpeedCoef",
    "getArray",
    "getArtilleryAmmo",
    "getArtilleryComputerSettings",
    "getArtilleryETA",
    "getAssetDLCInfo",
    "getAssignedCuratorLogic",
    "getAssignedCuratorUnit",
    "getAttackTarget",
    "getAudioOptionVolumes",
    "getBackpackCargo",
    "getBleedingRemaining",
    "getBurningValue",
    "getCalculatePlayerVisibilityByFriendly",
    "getCameraViewDirection",
    "getCargoIndex",
    "getCenterOfMass",
    "getClientState",
    "getClientStateNumber",
    "getCompatiblePylonMagazines",
    "getConnectedUAV",
    "getConnectedUAVUnit",
    "getContainerMaxLoad",
    "getCorpse",
    "getCruiseControl",
    "getCursorObjectParams",
    "getCustomAimCoef",
    "getCustomSoundController",
    "getCustomSoundControllerCount",
    "getDammage",
    "getDebriefingText",
    "getDescription",
    "getDir",
    "getDirVisual",
    "getDiverState",
    "getDLCAssetsUsage",
    "getDLCAssetsUsageByName",
    "getDLCs",
    "getDLCUsageTime",
    "getEditorCamera",
    "getEditorMode",
    "getEditorObjectScope",
    "getElevationOffset",
    "getEngineTargetRPMRTD",
    "getEnv3DSoundController",
    "getEnvSoundController",
    "getEventHandlerInfo",
    "getFatigue",
    "getFieldManualStartPage",
    "getForcedFlagTexture",
    "getForcedSpeed",
    "getFriend",
    "getFSMVariable",
    "getFuelCargo",
    "getGraphValues",
    "getGroupIcon",
    "getGroupIconParams",
    "getGroupIcons",
    "getHideFrom",
    "getHit",
    "getHitIndex",
    "getHitPointDamage",
    "getItemCargo",
    "getLighting",
    "getLightingAt",
    "getLoadedModsInfo",
    "getMagazineCargo",
    "getMarkerColor",
    "getMarkerPos",
    "getMarkerSize",
    "getMarkerType",
    "getMass",
    "getMissionConfig",
    "getMissionConfigValue",
    "getMissionDLCs",
    "getMissionLayerEntities",
    "getMissionLayers",
    "getMissionPath",
    "getModelInfo",
    "getMousePosition",
    "getMusicPlayedTime",
    "getNumber",
    "getObjectArgument",
    "getObjectChildren",
    "getObjectDLC",
    "getObjectFOV",
    "getObjectID",
    "getObjectMaterials",
    "getObjectProxy",
    "getObjectScale",
    "getObjectTextures",
    "getObjectType",
    "getObjectViewDistance",
    "getOpticsMode",
    "getOrDefault",
    "getOrDefaultCall",
    "getOxygenRemaining",
    "getPersonUsedDLCs",
    "getPilotCameraDirection",
    "getPilotCameraPosition",
    "getPilotCameraRotation",
    "getPilotCameraTarget",
    "getPiPViewDistance",
    "getPlateNumber",
    "getPlayerChannel",
    "getPlayerID",
    "getPlayerScores",
    "getPlayerUID",
    "getPlayerVoNVolume",
    "getPos",
    "getPosASL",
    "getPosASLVisual",
    "getPosASLW",
    "getPosATL",
    "getPosATLVisual",
    "getPosVisual",
    "getPosWorld",
    "getPosWorldVisual",
    "getPylonMagazines",
    "getRelDir",
    "getRelPos",
    "getRemoteSensorsDisabled",
    "getRepairCargo",
    "getResolution",
    "getRoadInfo",
    "getRotorBrakeRTD",
    "getSensorTargets",
    "getSensorThreats",
    "getShadowDistance",
    "getShotParents",
    "getSlingLoad",
    "getSoundController",
    "getSoundControllerResult",
    "getSpeed",
    "getStamina",
    "getStatValue",
    "getSteamFriendsServers",
    "getSubtitleOptions",
    "getSuppression",
    "getTerrainGrid",
    "getTerrainHeight",
    "getTerrainHeightASL",
    "getTerrainInfo",
    "getText",
    "getTextRaw",
    "getTextureInfo",
    "getTextWidth",
    "getTiParameters",
    "getTotalDLCUsageTime",
    "getTrimOffsetRTD",
    "getTurretLimits",
    "getTurretOpticsMode",
    "getUnitFreefallInfo",
    "getUnitLoadout",
    "getUnitTrait",
    "getUnloadInCombat",
    "getUserInfo",
    "getUserMFDText",
    "getUserMFDValue",
    "getVariable",
    "getVehicleCargo",
    "getVehicleTiPars",
    "getWeaponCargo",
    "getWeaponSway",
    "getWingsOrientationRTD",
    "getWingsPositionRTD",
    "getWPPos",
    "glanceAt",
    "globalChat",
    "globalRadio",
    "goggles",
    "goto",
    "group",
    "groupChat",
    "groupFromNetId",
    "groupIconSelectable",
    "groupIconsVisible",
    "groupID",
    "groupOwner",
    "groupRadio",
    "groups",
    "groupSelectedUnits",
    "groupSelectUnit",
    "gunner",
    "gusts",
    "halt",
    "handgunItems",
    "handgunMagazine",
    "handgunWeapon",
    "handsHit",
    "hashValue",
    "hasInterface",
    "hasPilotCamera",
    "hasWeapon",
    "hcAllGroups",
    "hcGroupParams",
    "hcLeader",
    "hcRemoveAllGroups",
    "hcRemoveGroup",
    "hcSelected",
    "hcSelectGroup",
    "hcSetGroup",
    "hcShowBar",
    "hcShownBar",
    "headgear",
    "hideBody",
    "hideObject",
    "hideObjectGlobal",
    "hideSelection",
    "hint",
    "hintC",
    "hintCadet",
    "hintSilent",
    "hmd",
    "hostMission",
    "htmlLoad",
    "HUDMovementLevels",
    "humidity",
    "image",
    "importAllGroups",
    "importance",
    "in",
    "inArea",
    "inAreaArray",
    "incapacitatedState",
    "inflame",
    "inflamed",
    "infoPanel",
    "infoPanelComponentEnabled",
    "infoPanelComponents",
    "infoPanels",
    "inGameUISetEventHandler",
    "inheritsFrom",
    "initAmbientLife",
    "inPolygon",
    "inputAction",
    "inputController",
    "inputMouse",
    "inRangeOfArtillery",
    "insert",
    "insertEditorObject",
    "intersect",
    "is3DEN",
    "is3DENMultiplayer",
    "is3DENPreview",
    "isAbleToBreathe",
    "isActionMenuVisible",
    "isAgent",
    "isAimPrecisionEnabled",
    "isAllowedCrewInImmobile",
    "isArray",
    "isAutoHoverOn",
    "isAutonomous",
    "isAutoStartUpEnabledRTD",
    "isAutotest",
    "isAutoTrimOnRTD",
    "isAwake",
    "isBleeding",
    "isBurning",
    "isClass",
    "isCollisionLightOn",
    "isCopilotEnabled",
    "isDamageAllowed",
    "isDedicated",
    "isDLCAvailable",
    "isEngineOn",
    "isEqualRef",
    "isEqualTo",
    "isEqualType",
    "isEqualTypeAll",
    "isEqualTypeAny",
    "isEqualTypeArray",
    "isEqualTypeParams",
    "isFilePatchingEnabled",
    "isFinal",
    "isFlashlightOn",
    "isFlatEmpty",
    "isForcedWalk",
    "isFormationLeader",
    "isGameFocused",
    "isGamePaused",
    "isGroupDeletedWhenEmpty",
    "isHidden",
    "isInRemainsCollector",
    "isInstructorFigureEnabled",
    "isIRLaserOn",
    "isKeyActive",
    "isKindOf",
    "isLaserOn",
    "isLightOn",
    "isLocalized",
    "isManualFire",
    "isMarkedForCollection",
    "isMissionProfileNamespaceLoaded",
    "isMultiplayer",
    "isMultiplayerSolo",
    "isNil",
    "isNotEqualRef",
    "isNotEqualTo",
    "isNull",
    "isNumber",
    "isObjectHidden",
    "isObjectRTD",
    "isOnRoad",
    "isPiPEnabled",
    "isPlayer",
    "isRealTime",
    "isRemoteExecuted",
    "isRemoteExecutedJIP",
    "isSaving",
    "isSensorTargetConfirmed",
    "isServer",
    "isShowing3DIcons",
    "isSimpleObject",
    "isSprintAllowed",
    "isStaminaEnabled",
    "isSteamMission",
    "isSteamOverlayEnabled",
    "isStreamFriendlyUIEnabled",
    "isStressDamageEnabled",
    "isText",
    "isTouchingGround",
    "isTurnedOut",
    "isTutHintsEnabled",
    "isUAVConnectable",
    "isUAVConnected",
    "isUIContext",
    "isUniformAllowed",
    "isVehicleCargo",
    "isVehicleRadarOn",
    "isVehicleSensorEnabled",
    "isWalking",
    "isWeaponDeployed",
    "isWeaponRested",
    "itemCargo",
    "items",
    "itemsWithMagazines",
    "join",
    "joinAs",
    "joinAsSilent",
    "joinSilent",
    "joinString",
    "kbAddDatabase",
    "kbAddDatabaseTargets",
    "kbAddTopic",
    "kbHasTopic",
    "kbReact",
    "kbRemoveTopic",
    "kbTell",
    "kbWasSaid",
    "keyImage",
    "keyName",
    "keys",
    "knowsAbout",
    "land",
    "landAt",
    "landResult",
    "language",
    "laserTarget",
    "lbAdd",
    "lbClear",
    "lbColor",
    "lbColorRight",
    "lbCurSel",
    "lbData",
    "lbDelete",
    "lbIsSelected",
    "lbPicture",
    "lbPictureRight",
    "lbSelection",
    "lbSetColor",
    "lbSetColorRight",
    "lbSetCurSel",
    "lbSetData",
    "lbSetPicture",
    "lbSetPictureColor",
    "lbSetPictureColorDisabled",
    "lbSetPictureColorSelected",
    "lbSetPictureRight",
    "lbSetPictureRightColor",
    "lbSetPictureRightColorDisabled",
    "lbSetPictureRightColorSelected",
    "lbSetSelectColor",
    "lbSetSelectColorRight",
    "lbSetSelected",
    "lbSetText",
    "lbSetTextRight",
    "lbSetTooltip",
    "lbSetValue",
    "lbSize",
    "lbSort",
    "lbSortBy",
    "lbSortByValue",
    "lbText",
    "lbTextRight",
    "lbTooltip",
    "lbValue",
    "leader",
    "leaderboardDeInit",
    "leaderboardGetRows",
    "leaderboardInit",
    "leaderboardRequestRowsFriends",
    "leaderboardRequestRowsGlobal",
    "leaderboardRequestRowsGlobalAroundUser",
    "leaderboardsRequestUploadScore",
    "leaderboardsRequestUploadScoreKeepBest",
    "leaderboardState",
    "leaveVehicle",
    "libraryCredits",
    "libraryDisclaimers",
    "lifeState",
    "lightAttachObject",
    "lightDetachObject",
    "lightIsOn",
    "lightnings",
    "limitSpeed",
    "linearConversion",
    "lineIntersects",
    "lineIntersectsObjs",
    "lineIntersectsSurfaces",
    "lineIntersectsWith",
    "linkItem",
    "list",
    "listObjects",
    "listRemoteTargets",
    "listVehicleSensors",
    "ln",
    "lnbAddArray",
    "lnbAddColumn",
    "lnbAddRow",
    "lnbClear",
    "lnbColor",
    "lnbColorRight",
    "lnbCurSelRow",
    "lnbData",
    "lnbDeleteColumn",
    "lnbDeleteRow",
    "lnbGetColumnsPosition",
    "lnbPicture",
    "lnbPictureRight",
    "lnbSetColor",
    "lnbSetColorRight",
    "lnbSetColumnsPos",
    "lnbSetCurSelRow",
    "lnbSetData",
    "lnbSetPicture",
    "lnbSetPictureColor",
    "lnbSetPictureColorRight",
    "lnbSetPictureColorSelected",
    "lnbSetPictureColorSelectedRight",
    "lnbSetPictureRight",
    "lnbSetText",
    "lnbSetTextRight",
    "lnbSetTooltip",
    "lnbSetValue",
    "lnbSize",
    "lnbSort",
    "lnbSortBy",
    "lnbSortByValue",
    "lnbText",
    "lnbTextRight",
    "lnbValue",
    "load",
    "loadAbs",
    "loadBackpack",
    "loadConfig",
    "loadFile",
    "loadGame",
    "loadIdentity",
    "loadMagazine",
    "loadOverlay",
    "loadStatus",
    "loadUniform",
    "loadVest",
    "localize",
    "localNamespace",
    "locationPosition",
    "lock",
    "lockCameraTo",
    "lockCargo",
    "lockDriver",
    "locked",
    "lockedCameraTo",
    "lockedCargo",
    "lockedDriver",
    "lockedInventory",
    "lockedTurret",
    "lockIdentity",
    "lockInventory",
    "lockTurret",
    "lockWp",
    "log",
    "logEntities",
    "logNetwork",
    "logNetworkTerminate",
    "lookAt",
    "lookAtPos",
    "magazineCargo",
    "magazines",
    "magazinesAllTurrets",
    "magazinesAmmo",
    "magazinesAmmoCargo",
    "magazinesAmmoFull",
    "magazinesDetail",
    "magazinesDetailBackpack",
    "magazinesDetailUniform",
    "magazinesDetailVest",
    "magazinesTurret",
    "magazineTurretAmmo",
    "mapAnimAdd",
    "mapAnimClear",
    "mapAnimCommit",
    "mapAnimDone",
    "mapCenterOnCamera",
    "mapGridPosition",
    "markAsFinishedOnSteam",
    "markerAlpha",
    "markerBrush",
    "markerChannel",
    "markerColor",
    "markerDir",
    "markerPolyline",
    "markerPos",
    "markerShadow",
    "markerShape",
    "markerSize",
    "markerText",
    "markerType",
    "matrixMultiply",
    "matrixTranspose",
    "max",
    "maxLoad",
    "members",
    "menuAction",
    "menuAdd",
    "menuChecked",
    "menuClear",
    "menuCollapse",
    "menuData",
    "menuDelete",
    "menuEnable",
    "menuEnabled",
    "menuExpand",
    "menuHover",
    "menuPicture",
    "menuSetAction",
    "menuSetCheck",
    "menuSetData",
    "menuSetPicture",
    "menuSetShortcut",
    "menuSetText",
    "menuSetURL",
    "menuSetValue",
    "menuShortcut",
    "menuShortcutText",
    "menuSize",
    "menuSort",
    "menuText",
    "menuURL",
    "menuValue",
    "merge",
    "min",
    "mineActive",
    "mineDetectedBy",
    "missileTarget",
    "missileTargetPos",
    "missionConfigFile",
    "missionDifficulty",
    "missionEnd",
    "missionName",
    "missionNameSource",
    "missionNamespace",
    "missionProfileNamespace",
    "missionStart",
    "missionVersion",
    "mod",
    "modelToWorld",
    "modelToWorldVisual",
    "modelToWorldVisualWorld",
    "modelToWorldWorld",
    "modParams",
    "moonIntensity",
    "moonPhase",
    "morale",
    "move",
    "move3DENCamera",
    "moveInAny",
    "moveInCargo",
    "moveInCommander",
    "moveInDriver",
    "moveInGunner",
    "moveInTurret",
    "moveObjectToEnd",
    "moveOut",
    "moveTime",
    "moveTo",
    "moveToCompleted",
    "moveToFailed",
    "musicVolume",
    "name",
    "namedProperties",
    "nameSound",
    "nearEntities",
    "nearestBuilding",
    "nearestLocation",
    "nearestLocations",
    "nearestLocationWithDubbing",
    "nearestMines",
    "nearestObject",
    "nearestObjects",
    "nearestTerrainObjects",
    "nearObjects",
    "nearObjectsReady",
    "nearRoads",
    "nearSupplies",
    "nearTargets",
    "needReload",
    "needService",
    "netId",
    "netObjNull",
    "newOverlay",
    "nextMenuItemIndex",
    "nextWeatherChange",
    "nMenuItems",
    "not",
    "numberOfEnginesRTD",
    "numberToDate",
    "objectCurators",
    "objectFromNetId",
    "objectParent",
    "objStatus",
    "onBriefingGroup",
    "onBriefingNotes",
    "onBriefingPlan",
    "onBriefingTeamSwitch",
    "onCommandModeChanged",
    "onDoubleClick",
    "onEachFrame",
    "onGroupIconClick",
    "onGroupIconOverEnter",
    "onGroupIconOverLeave",
    "onHCGroupSelectionChanged",
    "onMapSingleClick",
    "onPlayerConnected",
    "onPlayerDisconnected",
    "onPreloadFinished",
    "onPreloadStarted",
    "onShowNewObject",
    "onTeamSwitch",
    "openCuratorInterface",
    "openDLCPage",
    "openGPS",
    "openMap",
    "openSteamApp",
    "openYoutubeVideo",
    "or",
    "orderGetIn",
    "overcast",
    "overcastForecast",
    "owner",
    "param",
    "params",
    "parseNumber",
    "parseSimpleArray",
    "parseText",
    "parsingNamespace",
    "particlesQuality",
    "periscopeElevation",
    "pickWeaponPool",
    "pitch",
    "pixelGrid",
    "pixelGridBase",
    "pixelGridNoUIScale",
    "pixelH",
    "pixelW",
    "playableSlotsNumber",
    "playableUnits",
    "playAction",
    "playActionNow",
    "player",
    "playerRespawnTime",
    "playerSide",
    "playersNumber",
    "playGesture",
    "playMission",
    "playMove",
    "playMoveNow",
    "playMusic",
    "playScriptedMission",
    "playSound",
    "playSound3D",
    "playSoundUI",
    "pose",
    "position",
    "positionCameraToWorld",
    "posScreenToWorld",
    "posWorldToScreen",
    "ppEffectAdjust",
    "ppEffectCommit",
    "ppEffectCommitted",
    "ppEffectCreate",
    "ppEffectDestroy",
    "ppEffectEnable",
    "ppEffectEnabled",
    "ppEffectForceInNVG",
    "precision",
    "preloadCamera",
    "preloadObject",
    "preloadSound",
    "preloadTitleObj",
    "preloadTitleRsc",
    "preprocessFile",
    "preprocessFileLineNumbers",
    "primaryWeapon",
    "primaryWeaponItems",
    "primaryWeaponMagazine",
    "priority",
    "processDiaryLink",
    "productVersion",
    "profileName",
    "profileNamespace",
    "profileNameSteam",
    "progressLoadingScreen",
    "progressPosition",
    "progressSetPosition",
    "publicVariable",
    "publicVariableClient",
    "publicVariableServer",
    "pushBack",
    "pushBackUnique",
    "putWeaponPool",
    "queryItemsPool",
    "queryMagazinePool",
    "queryWeaponPool",
    "rad",
    "radioChannelAdd",
    "radioChannelCreate",
    "radioChannelInfo",
    "radioChannelRemove",
    "radioChannelSetCallSign",
    "radioChannelSetLabel",
    "radioEnabled",
    "radioVolume",
    "rain",
    "rainbow",
    "rainParams",
    "random",
    "rank",
    "rankId",
    "rating",
    "rectangular",
    "regexFind",
    "regexMatch",
    "regexReplace",
    "registeredTasks",
    "registerTask",
    "reload",
    "reloadEnabled",
    "remoteControl",
    "remoteExec",
    "remoteExecCall",
    "remoteExecutedOwner",
    "remove3DENConnection",
    "remove3DENEventHandler",
    "remove3DENLayer",
    "removeAction",
    "removeAll3DENEventHandlers",
    "removeAllActions",
    "removeAllAssignedItems",
    "removeAllBinocularItems",
    "removeAllContainers",
    "removeAllCuratorAddons",
    "removeAllCuratorCameraAreas",
    "removeAllCuratorEditingAreas",
    "removeAllEventHandlers",
    "removeAllHandgunItems",
    "removeAllItems",
    "removeAllItemsWithMagazines",
    "removeAllMissionEventHandlers",
    "removeAllMPEventHandlers",
    "removeAllMusicEventHandlers",
    "removeAllOwnedMines",
    "removeAllPrimaryWeaponItems",
    "removeAllSecondaryWeaponItems",
    "removeAllUserActionEventHandlers",
    "removeAllWeapons",
    "removeBackpack",
    "removeBackpackGlobal",
    "removeBinocularItem",
    "removeCuratorAddons",
    "removeCuratorCameraArea",
    "removeCuratorEditableObjects",
    "removeCuratorEditingArea",
    "removeDiaryRecord",
    "removeDiarySubject",
    "removeDrawIcon",
    "removeDrawLinks",
    "removeEventHandler",
    "removeFromRemainsCollector",
    "removeGoggles",
    "removeGroupIcon",
    "removeHandgunItem",
    "removeHeadgear",
    "removeItem",
    "removeItemFromBackpack",
    "removeItemFromUniform",
    "removeItemFromVest",
    "removeItems",
    "removeMagazine",
    "removeMagazineGlobal",
    "removeMagazines",
    "removeMagazinesTurret",
    "removeMagazineTurret",
    "removeMenuItem",
    "removeMissionEventHandler",
    "removeMPEventHandler",
    "removeMusicEventHandler",
    "removeOwnedMine",
    "removePrimaryWeaponItem",
    "removeSecondaryWeaponItem",
    "removeSimpleTask",
    "removeSwitchableUnit",
    "removeTeamMember",
    "removeUniform",
    "removeUserActionEventHandler",
    "removeVest",
    "removeWeapon",
    "removeWeaponAttachmentCargo",
    "removeWeaponCargo",
    "removeWeaponGlobal",
    "removeWeaponTurret",
    "reportRemoteTarget",
    "requiredVersion",
    "resetCamShake",
    "resetSubgroupDirection",
    "resize",
    "resources",
    "respawnVehicle",
    "restartEditorCamera",
    "reveal",
    "revealMine",
    "reverse",
    "reversedMouseY",
    "roadAt",
    "roadsConnectedTo",
    "roleDescription",
    "ropeAttachedObjects",
    "ropeAttachedTo",
    "ropeAttachEnabled",
    "ropeAttachTo",
    "ropeCreate",
    "ropeCut",
    "ropeDestroy",
    "ropeDetach",
    "ropeEndPosition",
    "ropeLength",
    "ropes",
    "ropesAttachedTo",
    "ropeSegments",
    "ropeUnwind",
    "ropeUnwound",
    "rotorsForcesRTD",
    "rotorsRpmRTD",
    "round",
    "runInitScript",
    "safeZoneH",
    "safeZoneW",
    "safeZoneWAbs",
    "safeZoneX",
    "safeZoneXAbs",
    "safeZoneY",
    "save3DENInventory",
    "saveGame",
    "saveIdentity",
    "saveJoysticks",
    "saveMissionProfileNamespace",
    "saveOverlay",
    "saveProfileNamespace",
    "saveStatus",
    "saveVar",
    "savingEnabled",
    "say",
    "say2D",
    "say3D",
    "scopeName",
    "score",
    "scoreSide",
    "screenshot",
    "screenToWorld",
    "scriptDone",
    "scriptName",
    "scudState",
    "secondaryWeapon",
    "secondaryWeaponItems",
    "secondaryWeaponMagazine",
    "select",
    "selectBestPlaces",
    "selectDiarySubject",
    "selectedEditorObjects",
    "selectEditorObject",
    "selectionNames",
    "selectionPosition",
    "selectionVectorDirAndUp",
    "selectLeader",
    "selectMax",
    "selectMin",
    "selectNoPlayer",
    "selectPlayer",
    "selectRandom",
    "selectRandomWeighted",
    "selectWeapon",
    "selectWeaponTurret",
    "sendAUMessage",
    "sendSimpleCommand",
    "sendTask",
    "sendTaskResult",
    "sendUDPMessage",
    "sentencesEnabled",
    "serverCommand",
    "serverCommandAvailable",
    "serverCommandExecutable",
    "serverName",
    "serverNamespace",
    "serverTime",
    "set",
    "set3DENAttribute",
    "set3DENAttributes",
    "set3DENGrid",
    "set3DENIconsVisible",
    "set3DENLayer",
    "set3DENLinesVisible",
    "set3DENLogicType",
    "set3DENMissionAttribute",
    "set3DENMissionAttributes",
    "set3DENModelsVisible",
    "set3DENObjectType",
    "set3DENSelected",
    "setAccTime",
    "setActualCollectiveRTD",
    "setAirplaneThrottle",
    "setAirportSide",
    "setAmmo",
    "setAmmoCargo",
    "setAmmoOnPylon",
    "setAnimSpeedCoef",
    "setAperture",
    "setApertureNew",
    "setArmoryPoints",
    "setAttributes",
    "setAutonomous",
    "setBehaviour",
    "setBehaviourStrong",
    "setBleedingRemaining",
    "setBrakesRTD",
    "setCameraInterest",
    "setCamShakeDefParams",
    "setCamShakeParams",
    "setCamUseTi",
    "setCaptive",
    "setCenterOfMass",
    "setCollisionLight",
    "setCombatBehaviour",
    "setCombatMode",
    "setCompassOscillation",
    "setConvoySeparation",
    "setCruiseControl",
    "setCuratorCameraAreaCeiling",
    "setCuratorCoef",
    "setCuratorEditingAreaType",
    "setCuratorWaypointCost",
    "setCurrentChannel",
    "setCurrentTask",
    "setCurrentWaypoint",
    "setCustomAimCoef",
    "SetCustomMissionData",
    "setCustomSoundController",
    "setCustomWeightRTD",
    "setDamage",
    "setDammage",
    "setDate",
    "setDebriefingText",
    "setDefaultCamera",
    "setDestination",
    "setDetailMapBlendPars",
    "setDiaryRecordText",
    "setDiarySubjectPicture",
    "setDir",
    "setDirection",
    "setDrawIcon",
    "setDriveOnPath",
    "setDropInterval",
    "setDynamicSimulationDistance",
    "setDynamicSimulationDistanceCoef",
    "setEditorMode",
    "setEditorObjectScope",
    "setEffectCondition",
    "setEffectiveCommander",
    "setEngineRpmRTD",
    "setFace",
    "setFaceanimation",
    "setFatigue",
    "setFeatureType",
    "setFlagAnimationPhase",
    "setFlagOwner",
    "setFlagSide",
    "setFlagTexture",
    "setFog",
    "setForceGeneratorRTD",
    "setFormation",
    "setFormationTask",
    "setFormDir",
    "setFriend",
    "setFromEditor",
    "setFSMVariable",
    "setFuel",
    "setFuelCargo",
    "setGroupIcon",
    "setGroupIconParams",
    "setGroupIconsSelectable",
    "setGroupIconsVisible",
    "setGroupid",
    "setGroupIdGlobal",
    "setGroupOwner",
    "setGusts",
    "setHideBehind",
    "setHit",
    "setHitIndex",
    "setHitPointDamage",
    "setHorizonParallaxCoef",
    "setHUDMovementLevels",
    "setHumidity",
    "setIdentity",
    "setImportance",
    "setInfoPanel",
    "setLeader",
    "setLightAmbient",
    "setLightAttenuation",
    "setLightBrightness",
    "setLightColor",
    "setLightConePars",
    "setLightDayLight",
    "setLightFlareMaxDistance",
    "setLightFlareSize",
    "setLightIntensity",
    "setLightIR",
    "setLightnings",
    "setLightUseFlare",
    "setLightVolumeShape",
    "setLocalWindParams",
    "setMagazineTurretAmmo",
    "setMarkerAlpha",
    "setMarkerAlphaLocal",
    "setMarkerBrush",
    "setMarkerBrushLocal",
    "setMarkerColor",
    "setMarkerColorLocal",
    "setMarkerDir",
    "setMarkerDirLocal",
    "setMarkerPolyline",
    "setMarkerPolylineLocal",
    "setMarkerPos",
    "setMarkerPosLocal",
    "setMarkerShadow",
    "setMarkerShadowLocal",
    "setMarkerShape",
    "setMarkerShapeLocal",
    "setMarkerSize",
    "setMarkerSizeLocal",
    "setMarkerText",
    "setMarkerTextLocal",
    "setMarkerType",
    "setMarkerTypeLocal",
    "setMass",
    "setMaxLoad",
    "setMimic",
    "setMissileTarget",
    "setMissileTargetPos",
    "setMousePosition",
    "setMusicEffect",
    "setMusicEventHandler",
    "setName",
    "setNameSound",
    "setObjectArguments",
    "setObjectMaterial",
    "setObjectMaterialGlobal",
    "setObjectProxy",
    "setObjectScale",
    "setObjectTexture",
    "setObjectTextureGlobal",
    "setObjectViewDistance",
    "setOpticsMode",
    "setOvercast",
    "setOwner",
    "setOxygenRemaining",
    "setParticleCircle",
    "setParticleClass",
    "setParticleFire",
    "setParticleParams",
    "setParticleRandom",
    "setPilotCameraDirection",
    "setPilotCameraRotation",
    "setPilotCameraTarget",
    "setPilotLight",
    "setPiPEffect",
    "setPiPViewDistance",
    "setPitch",
    "setPlateNumber",
    "setPlayable",
    "setPlayerRespawnTime",
    "setPlayerVoNVolume",
    "setPos",
    "setPosASL",
    "setPosASL2",
    "setPosASLW",
    "setPosATL",
    "setPosition",
    "setPosWorld",
    "setPylonLoadout",
    "setPylonsPriority",
    "setRadioMsg",
    "setRain",
    "setRainbow",
    "setRandomLip",
    "setRank",
    "setRectangular",
    "setRepairCargo",
    "setRotorBrakeRTD",
    "setShadowDistance",
    "setShotParents",
    "setSide",
    "setSimpleTaskAlwaysVisible",
    "setSimpleTaskCustomData",
    "setSimpleTaskDescription",
    "setSimpleTaskDestination",
    "setSimpleTaskTarget",
    "setSimpleTaskType",
    "setSimulWeatherLayers",
    "setSize",
    "setSkill",
    "setSlingLoad",
    "setSoundEffect",
    "setSpeaker",
    "setSpeech",
    "setSpeedMode",
    "setStamina",
    "setStaminaScheme",
    "setStatValue",
    "setSuppression",
    "setSystemOfUnits",
    "setTargetAge",
    "setTaskMarkerOffset",
    "setTaskResult",
    "setTaskState",
    "setTerrainGrid",
    "setTerrainHeight",
    "setText",
    "setTimeMultiplier",
    "setTiParameter",
    "setTitleEffect",
    "setTowParent",
    "setTrafficDensity",
    "setTrafficDistance",
    "setTrafficGap",
    "setTrafficSpeed",
    "setTriggerActivation",
    "setTriggerArea",
    "setTriggerInterval",
    "setTriggerStatements",
    "setTriggerText",
    "setTriggerTimeout",
    "setTriggerType",
    "setTurretLimits",
    "setTurretOpticsMode",
    "setType",
    "setUnconscious",
    "setUnitAbility",
    "setUnitCombatMode",
    "setUnitFreefallHeight",
    "setUnitLoadout",
    "setUnitPos",
    "setUnitPosWeak",
    "setUnitRank",
    "setUnitRecoilCoefficient",
    "setUnitTrait",
    "setUnloadInCombat",
    "setUserActionText",
    "setUserMFDText",
    "setUserMFDValue",
    "setVariable",
    "setVectorDir",
    "setVectorDirAndUp",
    "setVectorUp",
    "setVehicleAmmo",
    "setVehicleAmmoDef",
    "setVehicleArmor",
    "setVehicleCargo",
    "setVehicleId",
    "setVehicleLock",
    "setVehiclePosition",
    "setVehicleRadar",
    "setVehicleReceiveRemoteTargets",
    "setVehicleReportOwnPosition",
    "setVehicleReportRemoteTargets",
    "setVehicleTiPars",
    "setVehicleVarName",
    "setVelocity",
    "setVelocityModelSpace",
    "setVelocityTransformation",
    "setViewDistance",
    "setVisibleIfTreeCollapsed",
    "setWantedRPMRTD",
    "setWaves",
    "setWaypointBehaviour",
    "setWaypointCombatMode",
    "setWaypointCompletionRadius",
    "setWaypointDescription",
    "setWaypointForceBehaviour",
    "setWaypointFormation",
    "setWaypointHousePosition",
    "setWaypointLoiterAltitude",
    "setWaypointLoiterRadius",
    "setWaypointLoiterType",
    "setWaypointName",
    "setWaypointPosition",
    "setWaypointScript",
    "setWaypointSpeed",
    "setWaypointStatements",
    "setWaypointTimeout",
    "setWaypointType",
    "setWaypointVisible",
    "setWeaponReloadingTime",
    "setWeaponZeroing",
    "setWind",
    "setWindDir",
    "setWindForce",
    "setWindStr",
    "setWingForceScaleRTD",
    "setWPPos",
    "show3DIcons",
    "showChat",
    "showCinemaBorder",
    "showCommandingMenu",
    "showCompass",
    "showCuratorCompass",
    "showGps",
    "showHUD",
    "showLegend",
    "showMap",
    "shownArtilleryComputer",
    "shownChat",
    "shownCompass",
    "shownCuratorCompass",
    "showNewEditorObject",
    "shownGps",
    "shownHUD",
    "shownMap",
    "shownPad",
    "shownRadio",
    "shownScoretable",
    "shownSubtitles",
    "shownUAVFeed",
    "shownWarrant",
    "shownWatch",
    "showPad",
    "showRadio",
    "showScoretable",
    "showSubtitles",
    "showUAVFeed",
    "showWarrant",
    "showWatch",
    "showWaypoint",
    "showWaypoints",
    "side",
    "sideChat",
    "sideRadio",
    "simpleTasks",
    "simulationEnabled",
    "simulCloudDensity",
    "simulCloudOcclusion",
    "simulInClouds",
    "simulWeatherSync",
    "sin",
    "size",
    "sizeOf",
    "skill",
    "skillFinal",
    "skipTime",
    "sleep",
    "sliderPosition",
    "sliderRange",
    "sliderSetPosition",
    "sliderSetRange",
    "sliderSetSpeed",
    "sliderSpeed",
    "slingLoadAssistantShown",
    "soldierMagazines",
    "someAmmo",
    "sort",
    "soundVolume",
    "spawn",
    "speaker",
    "speechVolume",
    "speed",
    "speedMode",
    "splitString",
    "sqrt",
    "squadParams",
    "stance",
    "startLoadingScreen",
    "stop",
    "stopEngineRTD",
    "stopped",
    "str",
    "sunOrMoon",
    "supportInfo",
    "suppressFor",
    "surfaceIsWater",
    "surfaceNormal",
    "surfaceTexture",
    "surfaceType",
    "swimInDepth",
    "switchableUnits",
    "switchAction",
    "switchCamera",
    "switchGesture",
    "switchLight",
    "switchMove",
    "synchronizedObjects",
    "synchronizedTriggers",
    "synchronizedWaypoints",
    "synchronizeObjectsAdd",
    "synchronizeObjectsRemove",
    "synchronizeTrigger",
    "synchronizeWaypoint",
    "systemChat",
    "systemOfUnits",
    "systemTime",
    "systemTimeUTC",
    "tan",
    "targetKnowledge",
    "targets",
    "targetsAggregate",
    "targetsQuery",
    "taskAlwaysVisible",
    "taskChildren",
    "taskCompleted",
    "taskCustomData",
    "taskDescription",
    "taskDestination",
    "taskHint",
    "taskMarkerOffset",
    "taskName",
    "taskParent",
    "taskResult",
    "taskState",
    "taskType",
    "teamMember",
    "teamName",
    "teams",
    "teamSwitch",
    "teamSwitchEnabled",
    "teamType",
    "terminate",
    "terrainIntersect",
    "terrainIntersectASL",
    "terrainIntersectAtASL",
    "text",
    "textLog",
    "textLogFormat",
    "tg",
    "time",
    "timeMultiplier",
    "titleCut",
    "titleFadeOut",
    "titleObj",
    "titleRsc",
    "titleText",
    "toArray",
    "toFixed",
    "toLower",
    "toLowerANSI",
    "toString",
    "toUpper",
    "toUpperANSI",
    "triggerActivated",
    "triggerActivation",
    "triggerAmmo",
    "triggerArea",
    "triggerAttachedVehicle",
    "triggerAttachObject",
    "triggerAttachVehicle",
    "triggerDynamicSimulation",
    "triggerInterval",
    "triggerStatements",
    "triggerText",
    "triggerTimeout",
    "triggerTimeoutCurrent",
    "triggerType",
    "trim",
    "turretLocal",
    "turretOwner",
    "turretUnit",
    "tvAdd",
    "tvClear",
    "tvCollapse",
    "tvCollapseAll",
    "tvCount",
    "tvCurSel",
    "tvData",
    "tvDelete",
    "tvExpand",
    "tvExpandAll",
    "tvIsSelected",
    "tvPicture",
    "tvPictureRight",
    "tvSelection",
    "tvSetColor",
    "tvSetCurSel",
    "tvSetData",
    "tvSetPicture",
    "tvSetPictureColor",
    "tvSetPictureColorDisabled",
    "tvSetPictureColorSelected",
    "tvSetPictureRight",
    "tvSetPictureRightColor",
    "tvSetPictureRightColorDisabled",
    "tvSetPictureRightColorSelected",
    "tvSetSelectColor",
    "tvSetSelected",
    "tvSetText",
    "tvSetTooltip",
    "tvSetValue",
    "tvSort",
    "tvSortAll",
    "tvSortByValue",
    "tvSortByValueAll",
    "tvText",
    "tvTooltip",
    "tvValue",
    "type",
    "typeName",
    "typeOf",
    "UAVControl",
    "uiNamespace",
    "uiSleep",
    "unassignCurator",
    "unassignItem",
    "unassignTeam",
    "unassignVehicle",
    "underwater",
    "uniform",
    "uniformContainer",
    "uniformItems",
    "uniformMagazines",
    "uniqueUnitItems",
    "unitAddons",
    "unitAimPosition",
    "unitAimPositionVisual",
    "unitBackpack",
    "unitCombatMode",
    "unitIsUAV",
    "unitPos",
    "unitReady",
    "unitRecoilCoefficient",
    "units",
    "unitsBelowHeight",
    "unitTurret",
    "unlinkItem",
    "unlockAchievement",
    "unregisterTask",
    "updateDrawIcon",
    "updateMenuItem",
    "updateObjectTree",
    "useAIOperMapObstructionTest",
    "useAISteeringComponent",
    "useAudioTimeForMoves",
    "userInputDisabled",
    "values",
    "vectorAdd",
    "vectorCos",
    "vectorCrossProduct",
    "vectorDiff",
    "vectorDir",
    "vectorDirVisual",
    "vectorDistance",
    "vectorDistanceSqr",
    "vectorDotProduct",
    "vectorFromTo",
    "vectorLinearConversion",
    "vectorMagnitude",
    "vectorMagnitudeSqr",
    "vectorModelToWorld",
    "vectorModelToWorldVisual",
    "vectorMultiply",
    "vectorNormalized",
    "vectorUp",
    "vectorUpVisual",
    "vectorWorldToModel",
    "vectorWorldToModelVisual",
    "vehicle",
    "vehicleCargoEnabled",
    "vehicleChat",
    "vehicleMoveInfo",
    "vehicleRadio",
    "vehicleReceiveRemoteTargets",
    "vehicleReportOwnPosition",
    "vehicleReportRemoteTargets",
    "vehicles",
    "vehicleVarName",
    "velocity",
    "velocityModelSpace",
    "verifySignature",
    "vest",
    "vestContainer",
    "vestItems",
    "vestMagazines",
    "viewDistance",
    "visibleCompass",
    "visibleGps",
    "visibleMap",
    "visiblePosition",
    "visiblePositionASL",
    "visibleScoretable",
    "visibleWatch",
    "waves",
    "waypointAttachedObject",
    "waypointAttachedVehicle",
    "waypointAttachObject",
    "waypointAttachVehicle",
    "waypointBehaviour",
    "waypointCombatMode",
    "waypointCompletionRadius",
    "waypointDescription",
    "waypointForceBehaviour",
    "waypointFormation",
    "waypointHousePosition",
    "waypointLoiterAltitude",
    "waypointLoiterRadius",
    "waypointLoiterType",
    "waypointName",
    "waypointPosition",
    "waypoints",
    "waypointScript",
    "waypointsEnabledUAV",
    "waypointShow",
    "waypointSpeed",
    "waypointStatements",
    "waypointTimeout",
    "waypointTimeoutCurrent",
    "waypointType",
    "waypointVisible",
    "weaponAccessories",
    "weaponAccessoriesCargo",
    "weaponCargo",
    "weaponDirection",
    "weaponInertia",
    "weaponLowered",
    "weaponReloadingTime",
    "weapons",
    "weaponsInfo",
    "weaponsItems",
    "weaponsItemsCargo",
    "weaponState",
    "weaponsTurret",
    "weightRTD",
    "WFSideText",
    "wind",
    "windDir",
    "windRTD",
    "windStr",
    "wingsForcesRTD",
    "worldName",
    "worldSize",
    "worldToModel",
    "worldToModelVisual",
    "worldToScreen"
  ];
  const PREPROCESSOR = {
    className: "meta",
    begin: /#\s*[a-z]+\b/,
    end: /$/,
    keywords: "define undef ifdef ifndef else endif include if",
    contains: [
      {
        begin: /\\\n/,
        relevance: 0
      },
      hljs.inherit(STRINGS, { className: "string" }),
      {
        begin: /<[^\n>]*>/,
        end: /$/,
        illegal: "\\n"
      },
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE
    ]
  };
  return {
    name: "SQF",
    case_insensitive: true,
    keywords: {
      keyword: KEYWORDS2,
      built_in: BUILT_IN,
      literal: LITERAL
    },
    contains: [
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.NUMBER_MODE,
      VARIABLE,
      FUNCTION,
      STRINGS,
      PREPROCESSOR
    ],
    illegal: [
      //$ is only valid when used with Hex numbers (e.g. $FF)
      /\$[^a-fA-F0-9]/,
      /\w\$/,
      /\?/,
      //There's no ? in SQF
      /@/,
      //There's no @ in SQF
      // Brute-force-fixing the build error. See https://github.com/highlightjs/highlight.js/pull/3193#issuecomment-843088729
      / \| /,
      // . is only used in numbers
      /[a-zA-Z_]\./,
      /\:\=/,
      /\[\:/
    ]
  };
}
function stan(hljs) {
  const regex = hljs.regex;
  const BLOCKS = [
    "functions",
    "model",
    "data",
    "parameters",
    "quantities",
    "transformed",
    "generated"
  ];
  const STATEMENTS = [
    "for",
    "in",
    "if",
    "else",
    "while",
    "break",
    "continue",
    "return"
  ];
  const TYPES2 = [
    "array",
    "tuple",
    "complex",
    "int",
    "real",
    "vector",
    "complex_vector",
    "ordered",
    "positive_ordered",
    "simplex",
    "unit_vector",
    "row_vector",
    "complex_row_vector",
    "matrix",
    "complex_matrix",
    "cholesky_factor_corr|10",
    "cholesky_factor_cov|10",
    "corr_matrix|10",
    "cov_matrix|10",
    "void"
  ];
  const FUNCTIONS = [
    "abs",
    "acos",
    "acosh",
    "add_diag",
    "algebra_solver",
    "algebra_solver_newton",
    "append_array",
    "append_col",
    "append_row",
    "asin",
    "asinh",
    "atan",
    "atan2",
    "atanh",
    "bessel_first_kind",
    "bessel_second_kind",
    "binary_log_loss",
    "block",
    "cbrt",
    "ceil",
    "chol2inv",
    "cholesky_decompose",
    "choose",
    "col",
    "cols",
    "columns_dot_product",
    "columns_dot_self",
    "complex_schur_decompose",
    "complex_schur_decompose_t",
    "complex_schur_decompose_u",
    "conj",
    "cos",
    "cosh",
    "cov_exp_quad",
    "crossprod",
    "csr_extract",
    "csr_extract_u",
    "csr_extract_v",
    "csr_extract_w",
    "csr_matrix_times_vector",
    "csr_to_dense_matrix",
    "cumulative_sum",
    "dae",
    "dae_tol",
    "determinant",
    "diag_matrix",
    "diagonal",
    "diag_post_multiply",
    "diag_pre_multiply",
    "digamma",
    "dims",
    "distance",
    "dot_product",
    "dot_self",
    "eigendecompose",
    "eigendecompose_sym",
    "eigenvalues",
    "eigenvalues_sym",
    "eigenvectors",
    "eigenvectors_sym",
    "erf",
    "erfc",
    "exp",
    "exp2",
    "expm1",
    "falling_factorial",
    "fdim",
    "fft",
    "fft2",
    "floor",
    "fma",
    "fmax",
    "fmin",
    "fmod",
    "gamma_p",
    "gamma_q",
    "generalized_inverse",
    "get_imag",
    "get_real",
    "head",
    "hmm_hidden_state_prob",
    "hmm_marginal",
    "hypot",
    "identity_matrix",
    "inc_beta",
    "integrate_1d",
    "integrate_ode",
    "integrate_ode_adams",
    "integrate_ode_bdf",
    "integrate_ode_rk45",
    "int_step",
    "inv",
    "inv_cloglog",
    "inv_erfc",
    "inverse",
    "inverse_spd",
    "inv_fft",
    "inv_fft2",
    "inv_inc_beta",
    "inv_logit",
    "inv_Phi",
    "inv_sqrt",
    "inv_square",
    "is_inf",
    "is_nan",
    "lambert_w0",
    "lambert_wm1",
    "lbeta",
    "lchoose",
    "ldexp",
    "lgamma",
    "linspaced_array",
    "linspaced_int_array",
    "linspaced_row_vector",
    "linspaced_vector",
    "lmgamma",
    "lmultiply",
    "log",
    "log1m",
    "log1m_exp",
    "log1m_inv_logit",
    "log1p",
    "log1p_exp",
    "log_determinant",
    "log_diff_exp",
    "log_falling_factorial",
    "log_inv_logit",
    "log_inv_logit_diff",
    "logit",
    "log_mix",
    "log_modified_bessel_first_kind",
    "log_rising_factorial",
    "log_softmax",
    "log_sum_exp",
    "machine_precision",
    "map_rect",
    "matrix_exp",
    "matrix_exp_multiply",
    "matrix_power",
    "max",
    "mdivide_left_spd",
    "mdivide_left_tri_low",
    "mdivide_right_spd",
    "mdivide_right_tri_low",
    "mean",
    "min",
    "modified_bessel_first_kind",
    "modified_bessel_second_kind",
    "multiply_lower_tri_self_transpose",
    "negative_infinity",
    "norm",
    "norm1",
    "norm2",
    "not_a_number",
    "num_elements",
    "ode_adams",
    "ode_adams_tol",
    "ode_adjoint_tol_ctl",
    "ode_bdf",
    "ode_bdf_tol",
    "ode_ckrk",
    "ode_ckrk_tol",
    "ode_rk45",
    "ode_rk45_tol",
    "one_hot_array",
    "one_hot_int_array",
    "one_hot_row_vector",
    "one_hot_vector",
    "ones_array",
    "ones_int_array",
    "ones_row_vector",
    "ones_vector",
    "owens_t",
    "Phi",
    "Phi_approx",
    "polar",
    "positive_infinity",
    "pow",
    "print",
    "prod",
    "proj",
    "qr",
    "qr_Q",
    "qr_R",
    "qr_thin",
    "qr_thin_Q",
    "qr_thin_R",
    "quad_form",
    "quad_form_diag",
    "quad_form_sym",
    "quantile",
    "rank",
    "reduce_sum",
    "reject",
    "rep_array",
    "rep_matrix",
    "rep_row_vector",
    "rep_vector",
    "reverse",
    "rising_factorial",
    "round",
    "row",
    "rows",
    "rows_dot_product",
    "rows_dot_self",
    "scale_matrix_exp_multiply",
    "sd",
    "segment",
    "sin",
    "singular_values",
    "sinh",
    "size",
    "softmax",
    "sort_asc",
    "sort_desc",
    "sort_indices_asc",
    "sort_indices_desc",
    "sqrt",
    "square",
    "squared_distance",
    "step",
    "sub_col",
    "sub_row",
    "sum",
    "svd",
    "svd_U",
    "svd_V",
    "symmetrize_from_lower_tri",
    "tail",
    "tan",
    "tanh",
    "target",
    "tcrossprod",
    "tgamma",
    "to_array_1d",
    "to_array_2d",
    "to_complex",
    "to_int",
    "to_matrix",
    "to_row_vector",
    "to_vector",
    "trace",
    "trace_gen_quad_form",
    "trace_quad_form",
    "trigamma",
    "trunc",
    "uniform_simplex",
    "variance",
    "zeros_array",
    "zeros_int_array",
    "zeros_row_vector"
  ];
  const DISTRIBUTIONS = [
    "bernoulli",
    "bernoulli_logit",
    "bernoulli_logit_glm",
    "beta",
    "beta_binomial",
    "beta_proportion",
    "binomial",
    "binomial_logit",
    "categorical",
    "categorical_logit",
    "categorical_logit_glm",
    "cauchy",
    "chi_square",
    "dirichlet",
    "discrete_range",
    "double_exponential",
    "exp_mod_normal",
    "exponential",
    "frechet",
    "gamma",
    "gaussian_dlm_obs",
    "gumbel",
    "hmm_latent",
    "hypergeometric",
    "inv_chi_square",
    "inv_gamma",
    "inv_wishart",
    "inv_wishart_cholesky",
    "lkj_corr",
    "lkj_corr_cholesky",
    "logistic",
    "loglogistic",
    "lognormal",
    "multi_gp",
    "multi_gp_cholesky",
    "multinomial",
    "multinomial_logit",
    "multi_normal",
    "multi_normal_cholesky",
    "multi_normal_prec",
    "multi_student_cholesky_t",
    "multi_student_t",
    "multi_student_t_cholesky",
    "neg_binomial",
    "neg_binomial_2",
    "neg_binomial_2_log",
    "neg_binomial_2_log_glm",
    "normal",
    "normal_id_glm",
    "ordered_logistic",
    "ordered_logistic_glm",
    "ordered_probit",
    "pareto",
    "pareto_type_2",
    "poisson",
    "poisson_log",
    "poisson_log_glm",
    "rayleigh",
    "scaled_inv_chi_square",
    "skew_double_exponential",
    "skew_normal",
    "std_normal",
    "std_normal_log",
    "student_t",
    "uniform",
    "von_mises",
    "weibull",
    "wiener",
    "wishart",
    "wishart_cholesky"
  ];
  const BLOCK_COMMENT = hljs.COMMENT(
    /\/\*/,
    /\*\//,
    {
      relevance: 0,
      contains: [
        {
          scope: "doctag",
          match: /@(return|param)/
        }
      ]
    }
  );
  const INCLUDE = {
    scope: "meta",
    begin: /#include\b/,
    end: /$/,
    contains: [
      {
        match: /[a-z][a-z-._]+/,
        scope: "string"
      },
      hljs.C_LINE_COMMENT_MODE
    ]
  };
  const RANGE_CONSTRAINTS = [
    "lower",
    "upper",
    "offset",
    "multiplier"
  ];
  return {
    name: "Stan",
    aliases: ["stanfuncs"],
    keywords: {
      $pattern: hljs.IDENT_RE,
      title: BLOCKS,
      type: TYPES2,
      keyword: STATEMENTS,
      built_in: FUNCTIONS
    },
    contains: [
      hljs.C_LINE_COMMENT_MODE,
      INCLUDE,
      hljs.HASH_COMMENT_MODE,
      BLOCK_COMMENT,
      {
        scope: "built_in",
        match: /\s(pi|e|sqrt2|log2|log10)(?=\()/,
        relevance: 0
      },
      {
        match: regex.concat(/[<,]\s*/, regex.either(...RANGE_CONSTRAINTS), /\s*=/),
        keywords: RANGE_CONSTRAINTS
      },
      {
        scope: "keyword",
        match: /\btarget(?=\s*\+=)/
      },
      {
        // highlights the 'T' in T[,] for only Stan language distributrions
        match: [
          /~\s*/,
          regex.either(...DISTRIBUTIONS),
          /(?:\(\))/,
          /\s*T(?=\s*\[)/
        ],
        scope: {
          2: "built_in",
          4: "keyword"
        }
      },
      {
        // highlights distributions that end with special endings
        scope: "built_in",
        keywords: DISTRIBUTIONS,
        begin: regex.concat(/\w*/, regex.either(...DISTRIBUTIONS), /(_lpdf|_lupdf|_lpmf|_cdf|_lcdf|_lccdf|_qf)(?=\s*[\(.*\)])/)
      },
      {
        // highlights distributions after ~
        begin: [
          /~/,
          /\s*/,
          regex.concat(regex.either(...DISTRIBUTIONS), /(?=\s*[\(.*\)])/)
        ],
        scope: { 3: "built_in" }
      },
      {
        // highlights user defined distributions after ~
        begin: [
          /~/,
          /\s*\w+(?=\s*[\(.*\)])/,
          "(?!.*/\b(" + regex.either(...DISTRIBUTIONS) + ")\b)"
        ],
        scope: { 2: "title.function" }
      },
      {
        // highlights user defined distributions with special endings
        scope: "title.function",
        begin: /\w*(_lpdf|_lupdf|_lpmf|_cdf|_lcdf|_lccdf|_qf)(?=\s*[\(.*\)])/
      },
      {
        scope: "number",
        match: regex.concat(
          // Comes from @RunDevelopment accessed 11/29/2021 at
          // https://github.com/PrismJS/prism/blob/c53ad2e65b7193ab4f03a1797506a54bbb33d5a2/components/prism-stan.js#L56
          // start of big noncapture group which
          // 1. gets numbers that are by themselves
          // 2. numbers that are separated by _
          // 3. numbers that are separted by .
          /(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)/,
          // grabs scientific notation
          // grabs complex numbers with i
          /(?:[eE][+-]?\d+(?:_\d+)*)?i?(?!\w)/
        ),
        relevance: 0
      },
      {
        scope: "string",
        begin: /"/,
        end: /"/
      }
    ]
  };
}
function stata(hljs) {
  return {
    name: "Stata",
    aliases: [
      "do",
      "ado"
    ],
    case_insensitive: true,
    keywords: "if else in foreach for forv forva forval forvalu forvalue forvalues by bys bysort xi quietly qui capture about ac ac_7 acprplot acprplot_7 adjust ado adopath adoupdate alpha ameans an ano anov anova anova_estat anova_terms anovadef aorder ap app appe appen append arch arch_dr arch_estat arch_p archlm areg areg_p args arima arima_dr arima_estat arima_p as asmprobit asmprobit_estat asmprobit_lf asmprobit_mfx__dlg asmprobit_p ass asse asser assert avplot avplot_7 avplots avplots_7 bcskew0 bgodfrey bias binreg bip0_lf biplot bipp_lf bipr_lf bipr_p biprobit bitest bitesti bitowt blogit bmemsize boot bootsamp bootstrap bootstrap_8 boxco_l boxco_p boxcox boxcox_6 boxcox_p bprobit br break brier bro brow brows browse brr brrstat bs bs_7 bsampl_w bsample bsample_7 bsqreg bstat bstat_7 bstat_8 bstrap bstrap_7 bubble bubbleplot ca ca_estat ca_p cabiplot camat canon canon_8 canon_8_p canon_estat canon_p cap caprojection capt captu captur capture cat cc cchart cchart_7 cci cd censobs_table centile cf char chdir checkdlgfiles checkestimationsample checkhlpfiles checksum chelp ci cii cl class classutil clear cli clis clist clo clog clog_lf clog_p clogi clogi_sw clogit clogit_lf clogit_p clogitp clogl_sw cloglog clonevar clslistarray cluster cluster_measures cluster_stop cluster_tree cluster_tree_8 clustermat cmdlog cnr cnre cnreg cnreg_p cnreg_sw cnsreg codebook collaps4 collapse colormult_nb colormult_nw compare compress conf confi confir confirm conren cons const constr constra constrai constrain constraint continue contract copy copyright copysource cor corc corr corr2data corr_anti corr_kmo corr_smc corre correl correla correlat correlate corrgram cou coun count cox cox_p cox_sw coxbase coxhaz coxvar cprplot cprplot_7 crc cret cretu cretur creturn cross cs cscript cscript_log csi ct ct_is ctset ctst_5 ctst_st cttost cumsp cumsp_7 cumul cusum cusum_7 cutil d|0 datasig datasign datasigna datasignat datasignatu datasignatur datasignature datetof db dbeta de dec deco decod decode deff des desc descr descri describ describe destring dfbeta dfgls dfuller di di_g dir dirstats dis discard disp disp_res disp_s displ displa display distinct do doe doed doedi doedit dotplot dotplot_7 dprobit drawnorm drop ds ds_util dstdize duplicates durbina dwstat dydx e|0 ed edi edit egen eivreg emdef en enc enco encod encode eq erase ereg ereg_lf ereg_p ereg_sw ereghet ereghet_glf ereghet_glf_sh ereghet_gp ereghet_ilf ereghet_ilf_sh ereghet_ip eret eretu eretur ereturn err erro error esize est est_cfexist est_cfname est_clickable est_expand est_hold est_table est_unhold est_unholdok estat estat_default estat_summ estat_vce_only esti estimates etodow etof etomdy ex exi exit expand expandcl fac fact facto factor factor_estat factor_p factor_pca_rotated factor_rotate factormat fcast fcast_compute fcast_graph fdades fdadesc fdadescr fdadescri fdadescrib fdadescribe fdasav fdasave fdause fh_st file open file read file close file filefilter fillin find_hlp_file findfile findit findit_7 fit fl fli flis flist for5_0 forest forestplot form forma format fpredict frac_154 frac_adj frac_chk frac_cox frac_ddp frac_dis frac_dv frac_in frac_mun frac_pp frac_pq frac_pv frac_wgt frac_xo fracgen fracplot fracplot_7 fracpoly fracpred fron_ex fron_hn fron_p fron_tn fron_tn2 frontier ftodate ftoe ftomdy ftowdate funnel funnelplot g|0 gamhet_glf gamhet_gp gamhet_ilf gamhet_ip gamma gamma_d2 gamma_p gamma_sw gammahet gdi_hexagon gdi_spokes ge gen gene gener genera generat generate genrank genstd genvmean gettoken gl gladder gladder_7 glim_l01 glim_l02 glim_l03 glim_l04 glim_l05 glim_l06 glim_l07 glim_l08 glim_l09 glim_l10 glim_l11 glim_l12 glim_lf glim_mu glim_nw1 glim_nw2 glim_nw3 glim_p glim_v1 glim_v2 glim_v3 glim_v4 glim_v5 glim_v6 glim_v7 glm glm_6 glm_p glm_sw glmpred glo glob globa global glogit glogit_8 glogit_p gmeans gnbre_lf gnbreg gnbreg_5 gnbreg_p gomp_lf gompe_sw gomper_p gompertz gompertzhet gomphet_glf gomphet_glf_sh gomphet_gp gomphet_ilf gomphet_ilf_sh gomphet_ip gphdot gphpen gphprint gprefs gprobi_p gprobit gprobit_8 gr gr7 gr_copy gr_current gr_db gr_describe gr_dir gr_draw gr_draw_replay gr_drop gr_edit gr_editviewopts gr_example gr_example2 gr_export gr_print gr_qscheme gr_query gr_read gr_rename gr_replay gr_save gr_set gr_setscheme gr_table gr_undo gr_use graph graph7 grebar greigen greigen_7 greigen_8 grmeanby grmeanby_7 gs_fileinfo gs_filetype gs_graphinfo gs_stat gsort gwood h|0 hadimvo hareg hausman haver he heck_d2 heckma_p heckman heckp_lf heckpr_p heckprob hel help hereg hetpr_lf hetpr_p hetprob hettest hexdump hilite hist hist_7 histogram hlogit hlu hmeans hotel hotelling hprobit hreg hsearch icd9 icd9_ff icd9p iis impute imtest inbase include inf infi infil infile infix inp inpu input ins insheet insp inspe inspec inspect integ inten intreg intreg_7 intreg_p intrg2_ll intrg_ll intrg_ll2 ipolate iqreg ir irf irf_create irfm iri is_svy is_svysum isid istdize ivprob_1_lf ivprob_lf ivprobit ivprobit_p ivreg ivreg_footnote ivtob_1_lf ivtob_lf ivtobit ivtobit_p jackknife jacknife jknife jknife_6 jknife_8 jkstat joinby kalarma1 kap kap_3 kapmeier kappa kapwgt kdensity kdensity_7 keep ksm ksmirnov ktau kwallis l|0 la lab labbe labbeplot labe label labelbook ladder levels levelsof leverage lfit lfit_p li lincom line linktest lis list lloghet_glf lloghet_glf_sh lloghet_gp lloghet_ilf lloghet_ilf_sh lloghet_ip llogi_sw llogis_p llogist llogistic llogistichet lnorm_lf lnorm_sw lnorma_p lnormal lnormalhet lnormhet_glf lnormhet_glf_sh lnormhet_gp lnormhet_ilf lnormhet_ilf_sh lnormhet_ip lnskew0 loadingplot loc loca local log logi logis_lf logistic logistic_p logit logit_estat logit_p loglogs logrank loneway lookfor lookup lowess lowess_7 lpredict lrecomp lroc lroc_7 lrtest ls lsens lsens_7 lsens_x lstat ltable ltable_7 ltriang lv lvr2plot lvr2plot_7 m|0 ma mac macr macro makecns man manova manova_estat manova_p manovatest mantel mark markin markout marksample mat mat_capp mat_order mat_put_rr mat_rapp mata mata_clear mata_describe mata_drop mata_matdescribe mata_matsave mata_matuse mata_memory mata_mlib mata_mosave mata_rename mata_which matalabel matcproc matlist matname matr matri matrix matrix_input__dlg matstrik mcc mcci md0_ md1_ md1debug_ md2_ md2debug_ mds mds_estat mds_p mdsconfig mdslong mdsmat mdsshepard mdytoe mdytof me_derd mean means median memory memsize menl meqparse mer merg merge meta mfp mfx mhelp mhodds minbound mixed_ll mixed_ll_reparm mkassert mkdir mkmat mkspline ml ml_5 ml_adjs ml_bhhhs ml_c_d ml_check ml_clear ml_cnt ml_debug ml_defd ml_e0 ml_e0_bfgs ml_e0_cycle ml_e0_dfp ml_e0i ml_e1 ml_e1_bfgs ml_e1_bhhh ml_e1_cycle ml_e1_dfp ml_e2 ml_e2_cycle ml_ebfg0 ml_ebfr0 ml_ebfr1 ml_ebh0q ml_ebhh0 ml_ebhr0 ml_ebr0i ml_ecr0i ml_edfp0 ml_edfr0 ml_edfr1 ml_edr0i ml_eds ml_eer0i ml_egr0i ml_elf ml_elf_bfgs ml_elf_bhhh ml_elf_cycle ml_elf_dfp ml_elfi ml_elfs ml_enr0i ml_enrr0 ml_erdu0 ml_erdu0_bfgs ml_erdu0_bhhh ml_erdu0_bhhhq ml_erdu0_cycle ml_erdu0_dfp ml_erdu0_nrbfgs ml_exde ml_footnote ml_geqnr ml_grad0 ml_graph ml_hbhhh ml_hd0 ml_hold ml_init ml_inv ml_log ml_max ml_mlout ml_mlout_8 ml_model ml_nb0 ml_opt ml_p ml_plot ml_query ml_rdgrd ml_repor ml_s_e ml_score ml_searc ml_technique ml_unhold mleval mlf_ mlmatbysum mlmatsum mlog mlogi mlogit mlogit_footnote mlogit_p mlopts mlsum mlvecsum mnl0_ mor more mov move mprobit mprobit_lf mprobit_p mrdu0_ mrdu1_ mvdecode mvencode mvreg mvreg_estat n|0 nbreg nbreg_al nbreg_lf nbreg_p nbreg_sw nestreg net newey newey_7 newey_p news nl nl_7 nl_9 nl_9_p nl_p nl_p_7 nlcom nlcom_p nlexp2 nlexp2_7 nlexp2a nlexp2a_7 nlexp3 nlexp3_7 nlgom3 nlgom3_7 nlgom4 nlgom4_7 nlinit nllog3 nllog3_7 nllog4 nllog4_7 nlog_rd nlogit nlogit_p nlogitgen nlogittree nlpred no nobreak noi nois noisi noisil noisily note notes notes_dlg nptrend numlabel numlist odbc old_ver olo olog ologi ologi_sw ologit ologit_p ologitp on one onew onewa oneway op_colnm op_comp op_diff op_inv op_str opr opro oprob oprob_sw oprobi oprobi_p oprobit oprobitp opts_exclusive order orthog orthpoly ou out outf outfi outfil outfile outs outsh outshe outshee outsheet ovtest pac pac_7 palette parse parse_dissim pause pca pca_8 pca_display pca_estat pca_p pca_rotate pcamat pchart pchart_7 pchi pchi_7 pcorr pctile pentium pergram pergram_7 permute permute_8 personal peto_st pkcollapse pkcross pkequiv pkexamine pkexamine_7 pkshape pksumm pksumm_7 pl plo plot plugin pnorm pnorm_7 poisgof poiss_lf poiss_sw poisso_p poisson poisson_estat post postclose postfile postutil pperron pr prais prais_e prais_e2 prais_p predict predictnl preserve print pro prob probi probit probit_estat probit_p proc_time procoverlay procrustes procrustes_estat procrustes_p profiler prog progr progra program prop proportion prtest prtesti pwcorr pwd q\\s qby qbys qchi qchi_7 qladder qladder_7 qnorm qnorm_7 qqplot qqplot_7 qreg qreg_c qreg_p qreg_sw qu quadchk quantile quantile_7 que quer query range ranksum ratio rchart rchart_7 rcof recast reclink recode reg reg3 reg3_p regdw regr regre regre_p2 regres regres_p regress regress_estat regriv_p remap ren rena renam rename renpfix repeat replace report reshape restore ret retu retur return rm rmdir robvar roccomp roccomp_7 roccomp_8 rocf_lf rocfit rocfit_8 rocgold rocplot rocplot_7 roctab roctab_7 rolling rologit rologit_p rot rota rotat rotate rotatemat rreg rreg_p ru run runtest rvfplot rvfplot_7 rvpplot rvpplot_7 sa safesum sample sampsi sav save savedresults saveold sc sca scal scala scalar scatter scm_mine sco scob_lf scob_p scobi_sw scobit scor score scoreplot scoreplot_help scree screeplot screeplot_help sdtest sdtesti se search separate seperate serrbar serrbar_7 serset set set_defaults sfrancia sh she shel shell shewhart shewhart_7 signestimationsample signrank signtest simul simul_7 simulate simulate_8 sktest sleep slogit slogit_d2 slogit_p smooth snapspan so sor sort spearman spikeplot spikeplot_7 spikeplt spline_x split sqreg sqreg_p sret sretu sretur sreturn ssc st st_ct st_hc st_hcd st_hcd_sh st_is st_issys st_note st_promo st_set st_show st_smpl st_subid stack statsby statsby_8 stbase stci stci_7 stcox stcox_estat stcox_fr stcox_fr_ll stcox_p stcox_sw stcoxkm stcoxkm_7 stcstat stcurv stcurve stcurve_7 stdes stem stepwise stereg stfill stgen stir stjoin stmc stmh stphplot stphplot_7 stphtest stphtest_7 stptime strate strate_7 streg streg_sw streset sts sts_7 stset stsplit stsum sttocc sttoct stvary stweib su suest suest_8 sum summ summa summar summari summariz summarize sunflower sureg survcurv survsum svar svar_p svmat svy svy_disp svy_dreg svy_est svy_est_7 svy_estat svy_get svy_gnbreg_p svy_head svy_header svy_heckman_p svy_heckprob_p svy_intreg_p svy_ivreg_p svy_logistic_p svy_logit_p svy_mlogit_p svy_nbreg_p svy_ologit_p svy_oprobit_p svy_poisson_p svy_probit_p svy_regress_p svy_sub svy_sub_7 svy_x svy_x_7 svy_x_p svydes svydes_8 svygen svygnbreg svyheckman svyheckprob svyintreg svyintreg_7 svyintrg svyivreg svylc svylog_p svylogit svymarkout svymarkout_8 svymean svymlog svymlogit svynbreg svyolog svyologit svyoprob svyoprobit svyopts svypois svypois_7 svypoisson svyprobit svyprobt svyprop svyprop_7 svyratio svyreg svyreg_p svyregress svyset svyset_7 svyset_8 svytab svytab_7 svytest svytotal sw sw_8 swcnreg swcox swereg swilk swlogis swlogit swologit swoprbt swpois swprobit swqreg swtobit swweib symmetry symmi symplot symplot_7 syntax sysdescribe sysdir sysuse szroeter ta tab tab1 tab2 tab_or tabd tabdi tabdis tabdisp tabi table tabodds tabodds_7 tabstat tabu tabul tabula tabulat tabulate te tempfile tempname tempvar tes test testnl testparm teststd tetrachoric time_it timer tis tob tobi tobit tobit_p tobit_sw token tokeni tokeniz tokenize tostring total translate translator transmap treat_ll treatr_p treatreg trim trimfill trnb_cons trnb_mean trpoiss_d2 trunc_ll truncr_p truncreg tsappend tset tsfill tsline tsline_ex tsreport tsrevar tsrline tsset tssmooth tsunab ttest ttesti tut_chk tut_wait tutorial tw tware_st two twoway twoway__fpfit_serset twoway__function_gen twoway__histogram_gen twoway__ipoint_serset twoway__ipoints_serset twoway__kdensity_gen twoway__lfit_serset twoway__normgen_gen twoway__pci_serset twoway__qfit_serset twoway__scatteri_serset twoway__sunflower_gen twoway_ksm_serset ty typ type typeof u|0 unab unabbrev unabcmd update us use uselabel var var_mkcompanion var_p varbasic varfcast vargranger varirf varirf_add varirf_cgraph varirf_create varirf_ctable varirf_describe varirf_dir varirf_drop varirf_erase varirf_graph varirf_ograph varirf_rename varirf_set varirf_table varlist varlmar varnorm varsoc varstable varstable_w varstable_w2 varwle vce vec vec_fevd vec_mkphi vec_p vec_p_w vecirf_create veclmar veclmar_w vecnorm vecnorm_w vecrank vecstable verinst vers versi versio version view viewsource vif vwls wdatetof webdescribe webseek webuse weib1_lf weib2_lf weib_lf weib_lf0 weibhet_glf weibhet_glf_sh weibhet_glfa weibhet_glfa_sh weibhet_gp weibhet_ilf weibhet_ilf_sh weibhet_ilfa weibhet_ilfa_sh weibhet_ip weibu_sw weibul_p weibull weibull_c weibull_s weibullhet wh whelp whi which whil while wilc_st wilcoxon win wind windo window winexec wntestb wntestb_7 wntestq xchart xchart_7 xcorr xcorr_7 xi xi_6 xmlsav xmlsave xmluse xpose xsh xshe xshel xshell xt_iis xt_tis xtab_p xtabond xtbin_p xtclog xtcloglog xtcloglog_8 xtcloglog_d2 xtcloglog_pa_p xtcloglog_re_p xtcnt_p xtcorr xtdata xtdes xtfront_p xtfrontier xtgee xtgee_elink xtgee_estat xtgee_makeivar xtgee_p xtgee_plink xtgls xtgls_p xthaus xthausman xtht_p xthtaylor xtile xtint_p xtintreg xtintreg_8 xtintreg_d2 xtintreg_p xtivp_1 xtivp_2 xtivreg xtline xtline_ex xtlogit xtlogit_8 xtlogit_d2 xtlogit_fe_p xtlogit_pa_p xtlogit_re_p xtmixed xtmixed_estat xtmixed_p xtnb_fe xtnb_lf xtnbreg xtnbreg_pa_p xtnbreg_refe_p xtpcse xtpcse_p xtpois xtpoisson xtpoisson_d2 xtpoisson_pa_p xtpoisson_refe_p xtpred xtprobit xtprobit_8 xtprobit_d2 xtprobit_re_p xtps_fe xtps_lf xtps_ren xtps_ren_8 xtrar_p xtrc xtrc_p xtrchh xtrefe_p xtreg xtreg_be xtreg_fe xtreg_ml xtreg_pa_p xtreg_re xtregar xtrere_p xtset xtsf_ll xtsf_llti xtsum xttab xttest0 xttobit xttobit_8 xttobit_p xttrans yx yxview__barlike_draw yxview_area_draw yxview_bar_draw yxview_dot_draw yxview_dropline_draw yxview_function_draw yxview_iarrow_draw yxview_ilabels_draw yxview_normal_draw yxview_pcarrow_draw yxview_pcbarrow_draw yxview_pccapsym_draw yxview_pcscatter_draw yxview_pcspike_draw yxview_rarea_draw yxview_rbar_draw yxview_rbarm_draw yxview_rcap_draw yxview_rcapsym_draw yxview_rconnected_draw yxview_rline_draw yxview_rscatter_draw yxview_rspike_draw yxview_spike_draw yxview_sunflower_draw zap_s zinb zinb_llf zinb_plf zip zip_llf zip_p zip_plf zt_ct_5 zt_hc_5 zt_hcd_5 zt_is_5 zt_iss_5 zt_sho_5 zt_smp_5 ztbase_5 ztcox_5 ztdes_5 ztereg_5 ztfill_5 ztgen_5 ztir_5 ztjoin_5 ztnb ztnb_p ztp ztp_p zts_5 ztset_5 ztspli_5 ztsum_5 zttoct_5 ztvary_5 ztweib_5",
    contains: [
      {
        className: "symbol",
        begin: /`[a-zA-Z0-9_]+'/
      },
      {
        className: "variable",
        begin: /\$\{?[a-zA-Z0-9_]+\}?/,
        relevance: 0
      },
      {
        className: "string",
        variants: [
          { begin: '`"[^\r\n]*?"\'' },
          { begin: '"[^\r\n"]*"' }
        ]
      },
      {
        className: "built_in",
        variants: [{ begin: "\\b(abs|acos|asin|atan|atan2|atanh|ceil|cloglog|comb|cos|digamma|exp|floor|invcloglog|invlogit|ln|lnfact|lnfactorial|lngamma|log|log10|max|min|mod|reldif|round|sign|sin|sqrt|sum|tan|tanh|trigamma|trunc|betaden|Binomial|binorm|binormal|chi2|chi2tail|dgammapda|dgammapdada|dgammapdadx|dgammapdx|dgammapdxdx|F|Fden|Ftail|gammaden|gammap|ibeta|invbinomial|invchi2|invchi2tail|invF|invFtail|invgammap|invibeta|invnchi2|invnFtail|invnibeta|invnorm|invnormal|invttail|nbetaden|nchi2|nFden|nFtail|nibeta|norm|normal|normalden|normd|npnchi2|tden|ttail|uniform|abbrev|char|index|indexnot|length|lower|ltrim|match|plural|proper|real|regexm|regexr|regexs|reverse|rtrim|string|strlen|strlower|strltrim|strmatch|strofreal|strpos|strproper|strreverse|strrtrim|strtrim|strupper|subinstr|subinword|substr|trim|upper|word|wordcount|_caller|autocode|byteorder|chop|clip|cond|e|epsdouble|epsfloat|group|inlist|inrange|irecode|matrix|maxbyte|maxdouble|maxfloat|maxint|maxlong|mi|minbyte|mindouble|minfloat|minint|minlong|missing|r|recode|replay|return|s|scalar|d|date|day|dow|doy|halfyear|mdy|month|quarter|week|year|d|daily|dofd|dofh|dofm|dofq|dofw|dofy|h|halfyearly|hofd|m|mofd|monthly|q|qofd|quarterly|tin|twithin|w|weekly|wofd|y|yearly|yh|ym|yofd|yq|yw|cholesky|colnumb|colsof|corr|det|diag|diag0cnt|el|get|hadamard|I|inv|invsym|issym|issymmetric|J|matmissing|matuniform|mreldif|nullmat|rownumb|rowsof|sweep|syminv|trace|vec|vecdiag)(?=\\()" }]
      },
      hljs.COMMENT("^[ 	]*\\*.*$", false),
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE
    ]
  };
}
function step21(hljs) {
  const STEP21_IDENT_RE = "[A-Z_][A-Z0-9_.]*";
  const STEP21_KEYWORDS = {
    $pattern: STEP21_IDENT_RE,
    keyword: [
      "HEADER",
      "ENDSEC",
      "DATA"
    ]
  };
  const STEP21_START = {
    className: "meta",
    begin: "ISO-10303-21;",
    relevance: 10
  };
  const STEP21_CLOSE = {
    className: "meta",
    begin: "END-ISO-10303-21;",
    relevance: 10
  };
  return {
    name: "STEP Part 21",
    aliases: [
      "p21",
      "step",
      "stp"
    ],
    case_insensitive: true,
    // STEP 21 is case insensitive in theory, in practice all non-comments are capitalized.
    keywords: STEP21_KEYWORDS,
    contains: [
      STEP21_START,
      STEP21_CLOSE,
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.COMMENT("/\\*\\*!", "\\*/"),
      hljs.C_NUMBER_MODE,
      hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null }),
      hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }),
      {
        className: "string",
        begin: "'",
        end: "'"
      },
      {
        className: "symbol",
        variants: [
          {
            begin: "#",
            end: "\\d+",
            illegal: "\\W"
          }
        ]
      }
    ]
  };
}
const MODES$3 = (hljs) => {
  return {
    IMPORTANT: {
      scope: "meta",
      begin: "!important"
    },
    BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,
    HEXCOLOR: {
      scope: "number",
      begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/
    },
    FUNCTION_DISPATCH: {
      className: "built_in",
      begin: /[\w-]+(?=\()/
    },
    ATTRIBUTE_SELECTOR_MODE: {
      scope: "selector-attr",
      begin: /\[/,
      end: /\]/,
      illegal: "$",
      contains: [
        hljs.APOS_STRING_MODE,
        hljs.QUOTE_STRING_MODE
      ]
    },
    CSS_NUMBER_MODE: {
      scope: "number",
      begin: hljs.NUMBER_RE + "(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",
      relevance: 0
    },
    CSS_VARIABLE: {
      className: "attr",
      begin: /--[A-Za-z_][A-Za-z0-9_-]*/
    }
  };
};
const HTML_TAGS$3 = [
  "a",
  "abbr",
  "address",
  "article",
  "aside",
  "audio",
  "b",
  "blockquote",
  "body",
  "button",
  "canvas",
  "caption",
  "cite",
  "code",
  "dd",
  "del",
  "details",
  "dfn",
  "div",
  "dl",
  "dt",
  "em",
  "fieldset",
  "figcaption",
  "figure",
  "footer",
  "form",
  "h1",
  "h2",
  "h3",
  "h4",
  "h5",
  "h6",
  "header",
  "hgroup",
  "html",
  "i",
  "iframe",
  "img",
  "input",
  "ins",
  "kbd",
  "label",
  "legend",
  "li",
  "main",
  "mark",
  "menu",
  "nav",
  "object",
  "ol",
  "optgroup",
  "option",
  "p",
  "picture",
  "q",
  "quote",
  "samp",
  "section",
  "select",
  "source",
  "span",
  "strong",
  "summary",
  "sup",
  "table",
  "tbody",
  "td",
  "textarea",
  "tfoot",
  "th",
  "thead",
  "time",
  "tr",
  "ul",
  "var",
  "video"
];
const SVG_TAGS$3 = [
  "defs",
  "g",
  "marker",
  "mask",
  "pattern",
  "svg",
  "switch",
  "symbol",
  "feBlend",
  "feColorMatrix",
  "feComponentTransfer",
  "feComposite",
  "feConvolveMatrix",
  "feDiffuseLighting",
  "feDisplacementMap",
  "feFlood",
  "feGaussianBlur",
  "feImage",
  "feMerge",
  "feMorphology",
  "feOffset",
  "feSpecularLighting",
  "feTile",
  "feTurbulence",
  "linearGradient",
  "radialGradient",
  "stop",
  "circle",
  "ellipse",
  "image",
  "line",
  "path",
  "polygon",
  "polyline",
  "rect",
  "text",
  "use",
  "textPath",
  "tspan",
  "foreignObject",
  "clipPath"
];
const TAGS$3 = [
  ...HTML_TAGS$3,
  ...SVG_TAGS$3
];
const MEDIA_FEATURES$3 = [
  "any-hover",
  "any-pointer",
  "aspect-ratio",
  "color",
  "color-gamut",
  "color-index",
  "device-aspect-ratio",
  "device-height",
  "device-width",
  "display-mode",
  "forced-colors",
  "grid",
  "height",
  "hover",
  "inverted-colors",
  "monochrome",
  "orientation",
  "overflow-block",
  "overflow-inline",
  "pointer",
  "prefers-color-scheme",
  "prefers-contrast",
  "prefers-reduced-motion",
  "prefers-reduced-transparency",
  "resolution",
  "scan",
  "scripting",
  "update",
  "width",
  // TODO: find a better solution?
  "min-width",
  "max-width",
  "min-height",
  "max-height"
].sort().reverse();
const PSEUDO_CLASSES$3 = [
  "active",
  "any-link",
  "blank",
  "checked",
  "current",
  "default",
  "defined",
  "dir",
  // dir()
  "disabled",
  "drop",
  "empty",
  "enabled",
  "first",
  "first-child",
  "first-of-type",
  "fullscreen",
  "future",
  "focus",
  "focus-visible",
  "focus-within",
  "has",
  // has()
  "host",
  // host or host()
  "host-context",
  // host-context()
  "hover",
  "indeterminate",
  "in-range",
  "invalid",
  "is",
  // is()
  "lang",
  // lang()
  "last-child",
  "last-of-type",
  "left",
  "link",
  "local-link",
  "not",
  // not()
  "nth-child",
  // nth-child()
  "nth-col",
  // nth-col()
  "nth-last-child",
  // nth-last-child()
  "nth-last-col",
  // nth-last-col()
  "nth-last-of-type",
  //nth-last-of-type()
  "nth-of-type",
  //nth-of-type()
  "only-child",
  "only-of-type",
  "optional",
  "out-of-range",
  "past",
  "placeholder-shown",
  "read-only",
  "read-write",
  "required",
  "right",
  "root",
  "scope",
  "target",
  "target-within",
  "user-invalid",
  "valid",
  "visited",
  "where"
  // where()
].sort().reverse();
const PSEUDO_ELEMENTS$3 = [
  "after",
  "backdrop",
  "before",
  "cue",
  "cue-region",
  "first-letter",
  "first-line",
  "grammar-error",
  "marker",
  "part",
  "placeholder",
  "selection",
  "slotted",
  "spelling-error"
].sort().reverse();
const ATTRIBUTES$3 = [
  "accent-color",
  "align-content",
  "align-items",
  "align-self",
  "alignment-baseline",
  "all",
  "anchor-name",
  "animation",
  "animation-composition",
  "animation-delay",
  "animation-direction",
  "animation-duration",
  "animation-fill-mode",
  "animation-iteration-count",
  "animation-name",
  "animation-play-state",
  "animation-range",
  "animation-range-end",
  "animation-range-start",
  "animation-timeline",
  "animation-timing-function",
  "appearance",
  "aspect-ratio",
  "backdrop-filter",
  "backface-visibility",
  "background",
  "background-attachment",
  "background-blend-mode",
  "background-clip",
  "background-color",
  "background-image",
  "background-origin",
  "background-position",
  "background-position-x",
  "background-position-y",
  "background-repeat",
  "background-size",
  "baseline-shift",
  "block-size",
  "border",
  "border-block",
  "border-block-color",
  "border-block-end",
  "border-block-end-color",
  "border-block-end-style",
  "border-block-end-width",
  "border-block-start",
  "border-block-start-color",
  "border-block-start-style",
  "border-block-start-width",
  "border-block-style",
  "border-block-width",
  "border-bottom",
  "border-bottom-color",
  "border-bottom-left-radius",
  "border-bottom-right-radius",
  "border-bottom-style",
  "border-bottom-width",
  "border-collapse",
  "border-color",
  "border-end-end-radius",
  "border-end-start-radius",
  "border-image",
  "border-image-outset",
  "border-image-repeat",
  "border-image-slice",
  "border-image-source",
  "border-image-width",
  "border-inline",
  "border-inline-color",
  "border-inline-end",
  "border-inline-end-color",
  "border-inline-end-style",
  "border-inline-end-width",
  "border-inline-start",
  "border-inline-start-color",
  "border-inline-start-style",
  "border-inline-start-width",
  "border-inline-style",
  "border-inline-width",
  "border-left",
  "border-left-color",
  "border-left-style",
  "border-left-width",
  "border-radius",
  "border-right",
  "border-right-color",
  "border-right-style",
  "border-right-width",
  "border-spacing",
  "border-start-end-radius",
  "border-start-start-radius",
  "border-style",
  "border-top",
  "border-top-color",
  "border-top-left-radius",
  "border-top-right-radius",
  "border-top-style",
  "border-top-width",
  "border-width",
  "bottom",
  "box-align",
  "box-decoration-break",
  "box-direction",
  "box-flex",
  "box-flex-group",
  "box-lines",
  "box-ordinal-group",
  "box-orient",
  "box-pack",
  "box-shadow",
  "box-sizing",
  "break-after",
  "break-before",
  "break-inside",
  "caption-side",
  "caret-color",
  "clear",
  "clip",
  "clip-path",
  "clip-rule",
  "color",
  "color-interpolation",
  "color-interpolation-filters",
  "color-profile",
  "color-rendering",
  "color-scheme",
  "column-count",
  "column-fill",
  "column-gap",
  "column-rule",
  "column-rule-color",
  "column-rule-style",
  "column-rule-width",
  "column-span",
  "column-width",
  "columns",
  "contain",
  "contain-intrinsic-block-size",
  "contain-intrinsic-height",
  "contain-intrinsic-inline-size",
  "contain-intrinsic-size",
  "contain-intrinsic-width",
  "container",
  "container-name",
  "container-type",
  "content",
  "content-visibility",
  "counter-increment",
  "counter-reset",
  "counter-set",
  "cue",
  "cue-after",
  "cue-before",
  "cursor",
  "cx",
  "cy",
  "direction",
  "display",
  "dominant-baseline",
  "empty-cells",
  "enable-background",
  "field-sizing",
  "fill",
  "fill-opacity",
  "fill-rule",
  "filter",
  "flex",
  "flex-basis",
  "flex-direction",
  "flex-flow",
  "flex-grow",
  "flex-shrink",
  "flex-wrap",
  "float",
  "flood-color",
  "flood-opacity",
  "flow",
  "font",
  "font-display",
  "font-family",
  "font-feature-settings",
  "font-kerning",
  "font-language-override",
  "font-optical-sizing",
  "font-palette",
  "font-size",
  "font-size-adjust",
  "font-smooth",
  "font-smoothing",
  "font-stretch",
  "font-style",
  "font-synthesis",
  "font-synthesis-position",
  "font-synthesis-small-caps",
  "font-synthesis-style",
  "font-synthesis-weight",
  "font-variant",
  "font-variant-alternates",
  "font-variant-caps",
  "font-variant-east-asian",
  "font-variant-emoji",
  "font-variant-ligatures",
  "font-variant-numeric",
  "font-variant-position",
  "font-variation-settings",
  "font-weight",
  "forced-color-adjust",
  "gap",
  "glyph-orientation-horizontal",
  "glyph-orientation-vertical",
  "grid",
  "grid-area",
  "grid-auto-columns",
  "grid-auto-flow",
  "grid-auto-rows",
  "grid-column",
  "grid-column-end",
  "grid-column-start",
  "grid-gap",
  "grid-row",
  "grid-row-end",
  "grid-row-start",
  "grid-template",
  "grid-template-areas",
  "grid-template-columns",
  "grid-template-rows",
  "hanging-punctuation",
  "height",
  "hyphenate-character",
  "hyphenate-limit-chars",
  "hyphens",
  "icon",
  "image-orientation",
  "image-rendering",
  "image-resolution",
  "ime-mode",
  "initial-letter",
  "initial-letter-align",
  "inline-size",
  "inset",
  "inset-area",
  "inset-block",
  "inset-block-end",
  "inset-block-start",
  "inset-inline",
  "inset-inline-end",
  "inset-inline-start",
  "isolation",
  "justify-content",
  "justify-items",
  "justify-self",
  "kerning",
  "left",
  "letter-spacing",
  "lighting-color",
  "line-break",
  "line-height",
  "line-height-step",
  "list-style",
  "list-style-image",
  "list-style-position",
  "list-style-type",
  "margin",
  "margin-block",
  "margin-block-end",
  "margin-block-start",
  "margin-bottom",
  "margin-inline",
  "margin-inline-end",
  "margin-inline-start",
  "margin-left",
  "margin-right",
  "margin-top",
  "margin-trim",
  "marker",
  "marker-end",
  "marker-mid",
  "marker-start",
  "marks",
  "mask",
  "mask-border",
  "mask-border-mode",
  "mask-border-outset",
  "mask-border-repeat",
  "mask-border-slice",
  "mask-border-source",
  "mask-border-width",
  "mask-clip",
  "mask-composite",
  "mask-image",
  "mask-mode",
  "mask-origin",
  "mask-position",
  "mask-repeat",
  "mask-size",
  "mask-type",
  "masonry-auto-flow",
  "math-depth",
  "math-shift",
  "math-style",
  "max-block-size",
  "max-height",
  "max-inline-size",
  "max-width",
  "min-block-size",
  "min-height",
  "min-inline-size",
  "min-width",
  "mix-blend-mode",
  "nav-down",
  "nav-index",
  "nav-left",
  "nav-right",
  "nav-up",
  "none",
  "normal",
  "object-fit",
  "object-position",
  "offset",
  "offset-anchor",
  "offset-distance",
  "offset-path",
  "offset-position",
  "offset-rotate",
  "opacity",
  "order",
  "orphans",
  "outline",
  "outline-color",
  "outline-offset",
  "outline-style",
  "outline-width",
  "overflow",
  "overflow-anchor",
  "overflow-block",
  "overflow-clip-margin",
  "overflow-inline",
  "overflow-wrap",
  "overflow-x",
  "overflow-y",
  "overlay",
  "overscroll-behavior",
  "overscroll-behavior-block",
  "overscroll-behavior-inline",
  "overscroll-behavior-x",
  "overscroll-behavior-y",
  "padding",
  "padding-block",
  "padding-block-end",
  "padding-block-start",
  "padding-bottom",
  "padding-inline",
  "padding-inline-end",
  "padding-inline-start",
  "padding-left",
  "padding-right",
  "padding-top",
  "page",
  "page-break-after",
  "page-break-before",
  "page-break-inside",
  "paint-order",
  "pause",
  "pause-after",
  "pause-before",
  "perspective",
  "perspective-origin",
  "place-content",
  "place-items",
  "place-self",
  "pointer-events",
  "position",
  "position-anchor",
  "position-visibility",
  "print-color-adjust",
  "quotes",
  "r",
  "resize",
  "rest",
  "rest-after",
  "rest-before",
  "right",
  "rotate",
  "row-gap",
  "ruby-align",
  "ruby-position",
  "scale",
  "scroll-behavior",
  "scroll-margin",
  "scroll-margin-block",
  "scroll-margin-block-end",
  "scroll-margin-block-start",
  "scroll-margin-bottom",
  "scroll-margin-inline",
  "scroll-margin-inline-end",
  "scroll-margin-inline-start",
  "scroll-margin-left",
  "scroll-margin-right",
  "scroll-margin-top",
  "scroll-padding",
  "scroll-padding-block",
  "scroll-padding-block-end",
  "scroll-padding-block-start",
  "scroll-padding-bottom",
  "scroll-padding-inline",
  "scroll-padding-inline-end",
  "scroll-padding-inline-start",
  "scroll-padding-left",
  "scroll-padding-right",
  "scroll-padding-top",
  "scroll-snap-align",
  "scroll-snap-stop",
  "scroll-snap-type",
  "scroll-timeline",
  "scroll-timeline-axis",
  "scroll-timeline-name",
  "scrollbar-color",
  "scrollbar-gutter",
  "scrollbar-width",
  "shape-image-threshold",
  "shape-margin",
  "shape-outside",
  "shape-rendering",
  "speak",
  "speak-as",
  "src",
  // @font-face
  "stop-color",
  "stop-opacity",
  "stroke",
  "stroke-dasharray",
  "stroke-dashoffset",
  "stroke-linecap",
  "stroke-linejoin",
  "stroke-miterlimit",
  "stroke-opacity",
  "stroke-width",
  "tab-size",
  "table-layout",
  "text-align",
  "text-align-all",
  "text-align-last",
  "text-anchor",
  "text-combine-upright",
  "text-decoration",
  "text-decoration-color",
  "text-decoration-line",
  "text-decoration-skip",
  "text-decoration-skip-ink",
  "text-decoration-style",
  "text-decoration-thickness",
  "text-emphasis",
  "text-emphasis-color",
  "text-emphasis-position",
  "text-emphasis-style",
  "text-indent",
  "text-justify",
  "text-orientation",
  "text-overflow",
  "text-rendering",
  "text-shadow",
  "text-size-adjust",
  "text-transform",
  "text-underline-offset",
  "text-underline-position",
  "text-wrap",
  "text-wrap-mode",
  "text-wrap-style",
  "timeline-scope",
  "top",
  "touch-action",
  "transform",
  "transform-box",
  "transform-origin",
  "transform-style",
  "transition",
  "transition-behavior",
  "transition-delay",
  "transition-duration",
  "transition-property",
  "transition-timing-function",
  "translate",
  "unicode-bidi",
  "user-modify",
  "user-select",
  "vector-effect",
  "vertical-align",
  "view-timeline",
  "view-timeline-axis",
  "view-timeline-inset",
  "view-timeline-name",
  "view-transition-name",
  "visibility",
  "voice-balance",
  "voice-duration",
  "voice-family",
  "voice-pitch",
  "voice-range",
  "voice-rate",
  "voice-stress",
  "voice-volume",
  "white-space",
  "white-space-collapse",
  "widows",
  "width",
  "will-change",
  "word-break",
  "word-spacing",
  "word-wrap",
  "writing-mode",
  "x",
  "y",
  "z-index",
  "zoom"
].sort().reverse();
function stylus(hljs) {
  const modes = MODES$3(hljs);
  const AT_MODIFIERS = "and or not only";
  const VARIABLE = {
    className: "variable",
    begin: "\\$" + hljs.IDENT_RE
  };
  const AT_KEYWORDS = [
    "charset",
    "css",
    "debug",
    "extend",
    "font-face",
    "for",
    "import",
    "include",
    "keyframes",
    "media",
    "mixin",
    "page",
    "warn",
    "while"
  ];
  const LOOKAHEAD_TAG_END = "(?=[.\\s\\n[:,(])";
  const ILLEGAL = [
    "\\?",
    "(\\bReturn\\b)",
    // monkey
    "(\\bEnd\\b)",
    // monkey
    "(\\bend\\b)",
    // vbscript
    "(\\bdef\\b)",
    // gradle
    ";",
    // a whole lot of languages
    "#\\s",
    // markdown
    "\\*\\s",
    // markdown
    "===\\s",
    // markdown
    "\\|",
    "%"
    // prolog
  ];
  return {
    name: "Stylus",
    aliases: ["styl"],
    case_insensitive: false,
    keywords: "if else for in",
    illegal: "(" + ILLEGAL.join("|") + ")",
    contains: [
      // strings
      hljs.QUOTE_STRING_MODE,
      hljs.APOS_STRING_MODE,
      // comments
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      // hex colors
      modes.HEXCOLOR,
      // class tag
      {
        begin: "\\.[a-zA-Z][a-zA-Z0-9_-]*" + LOOKAHEAD_TAG_END,
        className: "selector-class"
      },
      // id tag
      {
        begin: "#[a-zA-Z][a-zA-Z0-9_-]*" + LOOKAHEAD_TAG_END,
        className: "selector-id"
      },
      // tags
      {
        begin: "\\b(" + TAGS$3.join("|") + ")" + LOOKAHEAD_TAG_END,
        className: "selector-tag"
      },
      // psuedo selectors
      {
        className: "selector-pseudo",
        begin: "&?:(" + PSEUDO_CLASSES$3.join("|") + ")" + LOOKAHEAD_TAG_END
      },
      {
        className: "selector-pseudo",
        begin: "&?:(:)?(" + PSEUDO_ELEMENTS$3.join("|") + ")" + LOOKAHEAD_TAG_END
      },
      modes.ATTRIBUTE_SELECTOR_MODE,
      {
        className: "keyword",
        begin: /@media/,
        starts: {
          end: /[{;}]/,
          keywords: {
            $pattern: /[a-z-]+/,
            keyword: AT_MODIFIERS,
            attribute: MEDIA_FEATURES$3.join(" ")
          },
          contains: [modes.CSS_NUMBER_MODE]
        }
      },
      // @ keywords
      {
        className: "keyword",
        begin: "@((-(o|moz|ms|webkit)-)?(" + AT_KEYWORDS.join("|") + "))\\b"
      },
      // variables
      VARIABLE,
      // dimension
      modes.CSS_NUMBER_MODE,
      // functions
      //  - only from beginning of line + whitespace
      {
        className: "function",
        begin: "^[a-zA-Z][a-zA-Z0-9_-]*\\(.*\\)",
        illegal: "[\\n]",
        returnBegin: true,
        contains: [
          {
            className: "title",
            begin: "\\b[a-zA-Z][a-zA-Z0-9_-]*"
          },
          {
            className: "params",
            begin: /\(/,
            end: /\)/,
            contains: [
              modes.HEXCOLOR,
              VARIABLE,
              hljs.APOS_STRING_MODE,
              modes.CSS_NUMBER_MODE,
              hljs.QUOTE_STRING_MODE
            ]
          }
        ]
      },
      // css variables
      modes.CSS_VARIABLE,
      // attributes
      //  - only from beginning of line + whitespace
      //  - must have whitespace after it
      {
        className: "attribute",
        begin: "\\b(" + ATTRIBUTES$3.join("|") + ")\\b",
        starts: {
          // value container
          end: /;|$/,
          contains: [
            modes.HEXCOLOR,
            VARIABLE,
            hljs.APOS_STRING_MODE,
            hljs.QUOTE_STRING_MODE,
            modes.CSS_NUMBER_MODE,
            hljs.C_BLOCK_COMMENT_MODE,
            modes.IMPORTANT,
            modes.FUNCTION_DISPATCH
          ],
          illegal: /\./,
          relevance: 0
        }
      },
      modes.FUNCTION_DISPATCH
    ]
  };
}
function subunit(hljs) {
  const DETAILS = {
    className: "string",
    begin: "\\[\n(multipart)?",
    end: "\\]\n"
  };
  const TIME = {
    className: "string",
    begin: "\\d{4}-\\d{2}-\\d{2}(\\s+)\\d{2}:\\d{2}:\\d{2}.\\d+Z"
  };
  const PROGRESSVALUE = {
    className: "string",
    begin: "(\\+|-)\\d+"
  };
  const KEYWORDS2 = {
    className: "keyword",
    relevance: 10,
    variants: [
      { begin: "^(test|testing|success|successful|failure|error|skip|xfail|uxsuccess)(:?)\\s+(test)?" },
      { begin: "^progress(:?)(\\s+)?(pop|push)?" },
      { begin: "^tags:" },
      { begin: "^time:" }
    ]
  };
  return {
    name: "SubUnit",
    case_insensitive: true,
    contains: [
      DETAILS,
      TIME,
      PROGRESSVALUE,
      KEYWORDS2
    ]
  };
}
function taggerscript(hljs) {
  const NOOP2 = {
    className: "comment",
    begin: /\$noop\(/,
    end: /\)/,
    contains: [
      { begin: /\\[()]/ },
      {
        begin: /\(/,
        end: /\)/,
        contains: [
          { begin: /\\[()]/ },
          "self"
        ]
      }
    ],
    relevance: 10
  };
  const FUNCTION = {
    className: "keyword",
    begin: /\$[_a-zA-Z0-9]+(?=\()/
  };
  const VARIABLE = {
    className: "variable",
    begin: /%[_a-zA-Z0-9:]+%/
  };
  const ESCAPE_SEQUENCE_UNICODE = {
    className: "symbol",
    begin: /\\u[a-fA-F0-9]{4}/
  };
  const ESCAPE_SEQUENCE = {
    className: "symbol",
    begin: /\\[\\nt$%,()]/
  };
  return {
    name: "Tagger Script",
    contains: [
      NOOP2,
      FUNCTION,
      VARIABLE,
      ESCAPE_SEQUENCE,
      ESCAPE_SEQUENCE_UNICODE
    ]
  };
}
function tap(hljs) {
  return {
    name: "Test Anything Protocol",
    case_insensitive: true,
    contains: [
      hljs.HASH_COMMENT_MODE,
      // version of format and total amount of testcases
      {
        className: "meta",
        variants: [
          { begin: "^TAP version (\\d+)$" },
          { begin: "^1\\.\\.(\\d+)$" }
        ]
      },
      // YAML block
      {
        begin: /---$/,
        end: "\\.\\.\\.$",
        subLanguage: "yaml",
        relevance: 0
      },
      // testcase number
      {
        className: "number",
        begin: " (\\d+) "
      },
      // testcase status and description
      {
        className: "symbol",
        variants: [
          { begin: "^ok" },
          { begin: "^not ok" }
        ]
      }
    ]
  };
}
function tcl(hljs) {
  const regex = hljs.regex;
  const TCL_IDENT = /[a-zA-Z_][a-zA-Z0-9_]*/;
  const NUMBER = {
    className: "number",
    variants: [
      hljs.BINARY_NUMBER_MODE,
      hljs.C_NUMBER_MODE
    ]
  };
  const KEYWORDS2 = [
    "after",
    "append",
    "apply",
    "array",
    "auto_execok",
    "auto_import",
    "auto_load",
    "auto_mkindex",
    "auto_mkindex_old",
    "auto_qualify",
    "auto_reset",
    "bgerror",
    "binary",
    "break",
    "catch",
    "cd",
    "chan",
    "clock",
    "close",
    "concat",
    "continue",
    "dde",
    "dict",
    "encoding",
    "eof",
    "error",
    "eval",
    "exec",
    "exit",
    "expr",
    "fblocked",
    "fconfigure",
    "fcopy",
    "file",
    "fileevent",
    "filename",
    "flush",
    "for",
    "foreach",
    "format",
    "gets",
    "glob",
    "global",
    "history",
    "http",
    "if",
    "incr",
    "info",
    "interp",
    "join",
    "lappend|10",
    "lassign|10",
    "lindex|10",
    "linsert|10",
    "list",
    "llength|10",
    "load",
    "lrange|10",
    "lrepeat|10",
    "lreplace|10",
    "lreverse|10",
    "lsearch|10",
    "lset|10",
    "lsort|10",
    "mathfunc",
    "mathop",
    "memory",
    "msgcat",
    "namespace",
    "open",
    "package",
    "parray",
    "pid",
    "pkg::create",
    "pkg_mkIndex",
    "platform",
    "platform::shell",
    "proc",
    "puts",
    "pwd",
    "read",
    "refchan",
    "regexp",
    "registry",
    "regsub|10",
    "rename",
    "return",
    "safe",
    "scan",
    "seek",
    "set",
    "socket",
    "source",
    "split",
    "string",
    "subst",
    "switch",
    "tcl_endOfWord",
    "tcl_findLibrary",
    "tcl_startOfNextWord",
    "tcl_startOfPreviousWord",
    "tcl_wordBreakAfter",
    "tcl_wordBreakBefore",
    "tcltest",
    "tclvars",
    "tell",
    "time",
    "tm",
    "trace",
    "unknown",
    "unload",
    "unset",
    "update",
    "uplevel",
    "upvar",
    "variable",
    "vwait",
    "while"
  ];
  return {
    name: "Tcl",
    aliases: ["tk"],
    keywords: KEYWORDS2,
    contains: [
      hljs.COMMENT(";[ \\t]*#", "$"),
      hljs.COMMENT("^[ \\t]*#", "$"),
      {
        beginKeywords: "proc",
        end: "[\\{]",
        excludeEnd: true,
        contains: [
          {
            className: "title",
            begin: "[ \\t\\n\\r]+(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",
            end: "[ \\t\\n\\r]",
            endsWithParent: true,
            excludeEnd: true
          }
        ]
      },
      {
        className: "variable",
        variants: [
          { begin: regex.concat(
            /\$/,
            regex.optional(/::/),
            TCL_IDENT,
            "(::",
            TCL_IDENT,
            ")*"
          ) },
          {
            begin: "\\$\\{(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",
            end: "\\}",
            contains: [NUMBER]
          }
        ]
      },
      {
        className: "string",
        contains: [hljs.BACKSLASH_ESCAPE],
        variants: [hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null })]
      },
      NUMBER
    ]
  };
}
function thrift(hljs) {
  const TYPES2 = [
    "bool",
    "byte",
    "i16",
    "i32",
    "i64",
    "double",
    "string",
    "binary"
  ];
  const KEYWORDS2 = [
    "namespace",
    "const",
    "typedef",
    "struct",
    "enum",
    "service",
    "exception",
    "void",
    "oneway",
    "set",
    "list",
    "map",
    "required",
    "optional"
  ];
  return {
    name: "Thrift",
    keywords: {
      keyword: KEYWORDS2,
      type: TYPES2,
      literal: "true false"
    },
    contains: [
      hljs.QUOTE_STRING_MODE,
      hljs.NUMBER_MODE,
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      {
        className: "class",
        beginKeywords: "struct enum service exception",
        end: /\{/,
        illegal: /\n/,
        contains: [
          hljs.inherit(hljs.TITLE_MODE, {
            // hack: eating everything after the first title
            starts: {
              endsWithParent: true,
              excludeEnd: true
            }
          })
        ]
      },
      {
        begin: "\\b(set|list|map)\\s*<",
        keywords: { type: [
          ...TYPES2,
          "set",
          "list",
          "map"
        ] },
        end: ">",
        contains: ["self"]
      }
    ]
  };
}
function tp(hljs) {
  const TPID = {
    className: "number",
    begin: "[1-9][0-9]*",
    /* no leading zeros */
    relevance: 0
  };
  const TPLABEL = {
    className: "symbol",
    begin: ":[^\\]]+"
  };
  const TPDATA = {
    className: "built_in",
    begin: "(AR|P|PAYLOAD|PR|R|SR|RSR|LBL|VR|UALM|MESSAGE|UTOOL|UFRAME|TIMER|TIMER_OVERFLOW|JOINT_MAX_SPEED|RESUME_PROG|DIAG_REC)\\[",
    end: "\\]",
    contains: [
      "self",
      TPID,
      TPLABEL
    ]
  };
  const TPIO = {
    className: "built_in",
    begin: "(AI|AO|DI|DO|F|RI|RO|UI|UO|GI|GO|SI|SO)\\[",
    end: "\\]",
    contains: [
      "self",
      TPID,
      hljs.QUOTE_STRING_MODE,
      /* for pos section at bottom */
      TPLABEL
    ]
  };
  const KEYWORDS2 = [
    "ABORT",
    "ACC",
    "ADJUST",
    "AND",
    "AP_LD",
    "BREAK",
    "CALL",
    "CNT",
    "COL",
    "CONDITION",
    "CONFIG",
    "DA",
    "DB",
    "DIV",
    "DETECT",
    "ELSE",
    "END",
    "ENDFOR",
    "ERR_NUM",
    "ERROR_PROG",
    "FINE",
    "FOR",
    "GP",
    "GUARD",
    "INC",
    "IF",
    "JMP",
    "LINEAR_MAX_SPEED",
    "LOCK",
    "MOD",
    "MONITOR",
    "OFFSET",
    "Offset",
    "OR",
    "OVERRIDE",
    "PAUSE",
    "PREG",
    "PTH",
    "RT_LD",
    "RUN",
    "SELECT",
    "SKIP",
    "Skip",
    "TA",
    "TB",
    "TO",
    "TOOL_OFFSET",
    "Tool_Offset",
    "UF",
    "UT",
    "UFRAME_NUM",
    "UTOOL_NUM",
    "UNLOCK",
    "WAIT",
    "X",
    "Y",
    "Z",
    "W",
    "P",
    "R",
    "STRLEN",
    "SUBSTR",
    "FINDSTR",
    "VOFFSET",
    "PROG",
    "ATTR",
    "MN",
    "POS"
  ];
  const LITERALS2 = [
    "ON",
    "OFF",
    "max_speed",
    "LPOS",
    "JPOS",
    "ENABLE",
    "DISABLE",
    "START",
    "STOP",
    "RESET"
  ];
  return {
    name: "TP",
    keywords: {
      keyword: KEYWORDS2,
      literal: LITERALS2
    },
    contains: [
      TPDATA,
      TPIO,
      {
        className: "keyword",
        begin: "/(PROG|ATTR|MN|POS|END)\\b"
      },
      {
        /* this is for cases like ,CALL */
        className: "keyword",
        begin: "(CALL|RUN|POINT_LOGIC|LBL)\\b"
      },
      {
        /* this is for cases like CNT100 where the default lexemes do not
         * separate the keyword and the number */
        className: "keyword",
        begin: "\\b(ACC|CNT|Skip|Offset|PSPD|RT_LD|AP_LD|Tool_Offset)"
      },
      {
        /* to catch numbers that do not have a word boundary on the left */
        className: "number",
        begin: "\\d+(sec|msec|mm/sec|cm/min|inch/min|deg/sec|mm|in|cm)?\\b",
        relevance: 0
      },
      hljs.COMMENT("//", "[;$]"),
      hljs.COMMENT("!", "[;$]"),
      hljs.COMMENT("--eg:", "$"),
      hljs.QUOTE_STRING_MODE,
      {
        className: "string",
        begin: "'",
        end: "'"
      },
      hljs.C_NUMBER_MODE,
      {
        className: "variable",
        begin: "\\$[A-Za-z0-9_]+"
      }
    ]
  };
}
function twig(hljs) {
  const regex = hljs.regex;
  const FUNCTION_NAMES = [
    "absolute_url",
    "asset|0",
    "asset_version",
    "attribute",
    "block",
    "constant",
    "controller|0",
    "country_timezones",
    "csrf_token",
    "cycle",
    "date",
    "dump",
    "expression",
    "form|0",
    "form_end",
    "form_errors",
    "form_help",
    "form_label",
    "form_rest",
    "form_row",
    "form_start",
    "form_widget",
    "html_classes",
    "include",
    "is_granted",
    "logout_path",
    "logout_url",
    "max",
    "min",
    "parent",
    "path|0",
    "random",
    "range",
    "relative_path",
    "render",
    "render_esi",
    "source",
    "template_from_string",
    "url|0"
  ];
  const FILTERS = [
    "abs",
    "abbr_class",
    "abbr_method",
    "batch",
    "capitalize",
    "column",
    "convert_encoding",
    "country_name",
    "currency_name",
    "currency_symbol",
    "data_uri",
    "date",
    "date_modify",
    "default",
    "escape",
    "file_excerpt",
    "file_link",
    "file_relative",
    "filter",
    "first",
    "format",
    "format_args",
    "format_args_as_text",
    "format_currency",
    "format_date",
    "format_datetime",
    "format_file",
    "format_file_from_text",
    "format_number",
    "format_time",
    "html_to_markdown",
    "humanize",
    "inky_to_html",
    "inline_css",
    "join",
    "json_encode",
    "keys",
    "language_name",
    "last",
    "length",
    "locale_name",
    "lower",
    "map",
    "markdown",
    "markdown_to_html",
    "merge",
    "nl2br",
    "number_format",
    "raw",
    "reduce",
    "replace",
    "reverse",
    "round",
    "slice",
    "slug",
    "sort",
    "spaceless",
    "split",
    "striptags",
    "timezone_name",
    "title",
    "trans",
    "transchoice",
    "trim",
    "u|0",
    "upper",
    "url_encode",
    "yaml_dump",
    "yaml_encode"
  ];
  let TAG_NAMES = [
    "apply",
    "autoescape",
    "block",
    "cache",
    "deprecated",
    "do",
    "embed",
    "extends",
    "filter",
    "flush",
    "for",
    "form_theme",
    "from",
    "if",
    "import",
    "include",
    "macro",
    "sandbox",
    "set",
    "stopwatch",
    "trans",
    "trans_default_domain",
    "transchoice",
    "use",
    "verbatim",
    "with"
  ];
  TAG_NAMES = TAG_NAMES.concat(TAG_NAMES.map((t2) => `end${t2}`));
  const STRING = {
    scope: "string",
    variants: [
      {
        begin: /'/,
        end: /'/
      },
      {
        begin: /"/,
        end: /"/
      }
    ]
  };
  const NUMBER = {
    scope: "number",
    match: /\d+/
  };
  const PARAMS = {
    begin: /\(/,
    end: /\)/,
    excludeBegin: true,
    excludeEnd: true,
    contains: [
      STRING,
      NUMBER
    ]
  };
  const FUNCTIONS = {
    beginKeywords: FUNCTION_NAMES.join(" "),
    keywords: { name: FUNCTION_NAMES },
    relevance: 0,
    contains: [PARAMS]
  };
  const FILTER = {
    match: /\|(?=[A-Za-z_]+:?)/,
    beginScope: "punctuation",
    relevance: 0,
    contains: [
      {
        match: /[A-Za-z_]+:?/,
        keywords: FILTERS
      }
    ]
  };
  const tagNamed = (tagnames, { relevance }) => {
    return {
      beginScope: {
        1: "template-tag",
        3: "name"
      },
      relevance: relevance || 2,
      endScope: "template-tag",
      begin: [
        /\{%/,
        /\s*/,
        regex.either(...tagnames)
      ],
      end: /%\}/,
      keywords: "in",
      contains: [
        FILTER,
        FUNCTIONS,
        STRING,
        NUMBER
      ]
    };
  };
  const CUSTOM_TAG_RE = /[a-z_]+/;
  const TAG = tagNamed(TAG_NAMES, { relevance: 2 });
  const CUSTOM_TAG = tagNamed([CUSTOM_TAG_RE], { relevance: 1 });
  return {
    name: "Twig",
    aliases: ["craftcms"],
    case_insensitive: true,
    subLanguage: "xml",
    contains: [
      hljs.COMMENT(/\{#/, /#\}/),
      TAG,
      CUSTOM_TAG,
      {
        className: "template-variable",
        begin: /\{\{/,
        end: /\}\}/,
        contains: [
          "self",
          FILTER,
          FUNCTIONS,
          STRING,
          NUMBER
        ]
      }
    ]
  };
}
function vala(hljs) {
  return {
    name: "Vala",
    keywords: {
      keyword: (
        // Value types
        "char uchar unichar int uint long ulong short ushort int8 int16 int32 int64 uint8 uint16 uint32 uint64 float double bool struct enum string void weak unowned owned async signal static abstract interface override virtual delegate if while do for foreach else switch case break default return try catch public private protected internal using new this get set const stdout stdin stderr var"
      ),
      built_in: "DBus GLib CCode Gee Object Gtk Posix",
      literal: "false true null"
    },
    contains: [
      {
        className: "class",
        beginKeywords: "class interface namespace",
        end: /\{/,
        excludeEnd: true,
        illegal: "[^,:\\n\\s\\.]",
        contains: [hljs.UNDERSCORE_TITLE_MODE]
      },
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      {
        className: "string",
        begin: '"""',
        end: '"""',
        relevance: 5
      },
      hljs.APOS_STRING_MODE,
      hljs.QUOTE_STRING_MODE,
      hljs.C_NUMBER_MODE,
      {
        className: "meta",
        begin: "^#",
        end: "$"
      }
    ]
  };
}
function vbscript(hljs) {
  const regex = hljs.regex;
  const BUILT_IN_FUNCTIONS = [
    "lcase",
    "month",
    "vartype",
    "instrrev",
    "ubound",
    "setlocale",
    "getobject",
    "rgb",
    "getref",
    "string",
    "weekdayname",
    "rnd",
    "dateadd",
    "monthname",
    "now",
    "day",
    "minute",
    "isarray",
    "cbool",
    "round",
    "formatcurrency",
    "conversions",
    "csng",
    "timevalue",
    "second",
    "year",
    "space",
    "abs",
    "clng",
    "timeserial",
    "fixs",
    "len",
    "asc",
    "isempty",
    "maths",
    "dateserial",
    "atn",
    "timer",
    "isobject",
    "filter",
    "weekday",
    "datevalue",
    "ccur",
    "isdate",
    "instr",
    "datediff",
    "formatdatetime",
    "replace",
    "isnull",
    "right",
    "sgn",
    "array",
    "snumeric",
    "log",
    "cdbl",
    "hex",
    "chr",
    "lbound",
    "msgbox",
    "ucase",
    "getlocale",
    "cos",
    "cdate",
    "cbyte",
    "rtrim",
    "join",
    "hour",
    "oct",
    "typename",
    "trim",
    "strcomp",
    "int",
    "createobject",
    "loadpicture",
    "tan",
    "formatnumber",
    "mid",
    "split",
    "cint",
    "sin",
    "datepart",
    "ltrim",
    "sqr",
    "time",
    "derived",
    "eval",
    "date",
    "formatpercent",
    "exp",
    "inputbox",
    "left",
    "ascw",
    "chrw",
    "regexp",
    "cstr",
    "err"
  ];
  const BUILT_IN_OBJECTS = [
    "server",
    "response",
    "request",
    // take no arguments so can be called without ()
    "scriptengine",
    "scriptenginebuildversion",
    "scriptengineminorversion",
    "scriptenginemajorversion"
  ];
  const BUILT_IN_CALL = {
    begin: regex.concat(regex.either(...BUILT_IN_FUNCTIONS), "\\s*\\("),
    // relevance 0 because this is acting as a beginKeywords really
    relevance: 0,
    keywords: { built_in: BUILT_IN_FUNCTIONS }
  };
  const LITERALS2 = [
    "true",
    "false",
    "null",
    "nothing",
    "empty"
  ];
  const KEYWORDS2 = [
    "call",
    "class",
    "const",
    "dim",
    "do",
    "loop",
    "erase",
    "execute",
    "executeglobal",
    "exit",
    "for",
    "each",
    "next",
    "function",
    "if",
    "then",
    "else",
    "on",
    "error",
    "option",
    "explicit",
    "new",
    "private",
    "property",
    "let",
    "get",
    "public",
    "randomize",
    "redim",
    "rem",
    "select",
    "case",
    "set",
    "stop",
    "sub",
    "while",
    "wend",
    "with",
    "end",
    "to",
    "elseif",
    "is",
    "or",
    "xor",
    "and",
    "not",
    "class_initialize",
    "class_terminate",
    "default",
    "preserve",
    "in",
    "me",
    "byval",
    "byref",
    "step",
    "resume",
    "goto"
  ];
  return {
    name: "VBScript",
    aliases: ["vbs"],
    case_insensitive: true,
    keywords: {
      keyword: KEYWORDS2,
      built_in: BUILT_IN_OBJECTS,
      literal: LITERALS2
    },
    illegal: "//",
    contains: [
      BUILT_IN_CALL,
      hljs.inherit(hljs.QUOTE_STRING_MODE, { contains: [{ begin: '""' }] }),
      hljs.COMMENT(
        /'/,
        /$/,
        { relevance: 0 }
      ),
      hljs.C_NUMBER_MODE
    ]
  };
}
function vbscriptHtml(hljs) {
  return {
    name: "VBScript in HTML",
    subLanguage: "xml",
    contains: [
      {
        begin: "<%",
        end: "%>",
        subLanguage: "vbscript"
      }
    ]
  };
}
function verilog(hljs) {
  const regex = hljs.regex;
  const KEYWORDS2 = {
    $pattern: /\$?[\w]+(\$[\w]+)*/,
    keyword: [
      "accept_on",
      "alias",
      "always",
      "always_comb",
      "always_ff",
      "always_latch",
      "and",
      "assert",
      "assign",
      "assume",
      "automatic",
      "before",
      "begin",
      "bind",
      "bins",
      "binsof",
      "bit",
      "break",
      "buf|0",
      "bufif0",
      "bufif1",
      "byte",
      "case",
      "casex",
      "casez",
      "cell",
      "chandle",
      "checker",
      "class",
      "clocking",
      "cmos",
      "config",
      "const",
      "constraint",
      "context",
      "continue",
      "cover",
      "covergroup",
      "coverpoint",
      "cross",
      "deassign",
      "default",
      "defparam",
      "design",
      "disable",
      "dist",
      "do",
      "edge",
      "else",
      "end",
      "endcase",
      "endchecker",
      "endclass",
      "endclocking",
      "endconfig",
      "endfunction",
      "endgenerate",
      "endgroup",
      "endinterface",
      "endmodule",
      "endpackage",
      "endprimitive",
      "endprogram",
      "endproperty",
      "endspecify",
      "endsequence",
      "endtable",
      "endtask",
      "enum",
      "event",
      "eventually",
      "expect",
      "export",
      "extends",
      "extern",
      "final",
      "first_match",
      "for",
      "force",
      "foreach",
      "forever",
      "fork",
      "forkjoin",
      "function",
      "generate|5",
      "genvar",
      "global",
      "highz0",
      "highz1",
      "if",
      "iff",
      "ifnone",
      "ignore_bins",
      "illegal_bins",
      "implements",
      "implies",
      "import",
      "incdir",
      "include",
      "initial",
      "inout",
      "input",
      "inside",
      "instance",
      "int",
      "integer",
      "interconnect",
      "interface",
      "intersect",
      "join",
      "join_any",
      "join_none",
      "large",
      "let",
      "liblist",
      "library",
      "local",
      "localparam",
      "logic",
      "longint",
      "macromodule",
      "matches",
      "medium",
      "modport",
      "module",
      "nand",
      "negedge",
      "nettype",
      "new",
      "nexttime",
      "nmos",
      "nor",
      "noshowcancelled",
      "not",
      "notif0",
      "notif1",
      "or",
      "output",
      "package",
      "packed",
      "parameter",
      "pmos",
      "posedge",
      "primitive",
      "priority",
      "program",
      "property",
      "protected",
      "pull0",
      "pull1",
      "pulldown",
      "pullup",
      "pulsestyle_ondetect",
      "pulsestyle_onevent",
      "pure",
      "rand",
      "randc",
      "randcase",
      "randsequence",
      "rcmos",
      "real",
      "realtime",
      "ref",
      "reg",
      "reject_on",
      "release",
      "repeat",
      "restrict",
      "return",
      "rnmos",
      "rpmos",
      "rtran",
      "rtranif0",
      "rtranif1",
      "s_always",
      "s_eventually",
      "s_nexttime",
      "s_until",
      "s_until_with",
      "scalared",
      "sequence",
      "shortint",
      "shortreal",
      "showcancelled",
      "signed",
      "small",
      "soft",
      "solve",
      "specify",
      "specparam",
      "static",
      "string",
      "strong",
      "strong0",
      "strong1",
      "struct",
      "super",
      "supply0",
      "supply1",
      "sync_accept_on",
      "sync_reject_on",
      "table",
      "tagged",
      "task",
      "this",
      "throughout",
      "time",
      "timeprecision",
      "timeunit",
      "tran",
      "tranif0",
      "tranif1",
      "tri",
      "tri0",
      "tri1",
      "triand",
      "trior",
      "trireg",
      "type",
      "typedef",
      "union",
      "unique",
      "unique0",
      "unsigned",
      "until",
      "until_with",
      "untyped",
      "use",
      "uwire",
      "var",
      "vectored",
      "virtual",
      "void",
      "wait",
      "wait_order",
      "wand",
      "weak",
      "weak0",
      "weak1",
      "while",
      "wildcard",
      "wire",
      "with",
      "within",
      "wor",
      "xnor",
      "xor"
    ],
    literal: ["null"],
    built_in: [
      "$finish",
      "$stop",
      "$exit",
      "$fatal",
      "$error",
      "$warning",
      "$info",
      "$realtime",
      "$time",
      "$printtimescale",
      "$bitstoreal",
      "$bitstoshortreal",
      "$itor",
      "$signed",
      "$cast",
      "$bits",
      "$stime",
      "$timeformat",
      "$realtobits",
      "$shortrealtobits",
      "$rtoi",
      "$unsigned",
      "$asserton",
      "$assertkill",
      "$assertpasson",
      "$assertfailon",
      "$assertnonvacuouson",
      "$assertoff",
      "$assertcontrol",
      "$assertpassoff",
      "$assertfailoff",
      "$assertvacuousoff",
      "$isunbounded",
      "$sampled",
      "$fell",
      "$changed",
      "$past_gclk",
      "$fell_gclk",
      "$changed_gclk",
      "$rising_gclk",
      "$steady_gclk",
      "$coverage_control",
      "$coverage_get",
      "$coverage_save",
      "$set_coverage_db_name",
      "$rose",
      "$stable",
      "$past",
      "$rose_gclk",
      "$stable_gclk",
      "$future_gclk",
      "$falling_gclk",
      "$changing_gclk",
      "$display",
      "$coverage_get_max",
      "$coverage_merge",
      "$get_coverage",
      "$load_coverage_db",
      "$typename",
      "$unpacked_dimensions",
      "$left",
      "$low",
      "$increment",
      "$clog2",
      "$ln",
      "$log10",
      "$exp",
      "$sqrt",
      "$pow",
      "$floor",
      "$ceil",
      "$sin",
      "$cos",
      "$tan",
      "$countbits",
      "$onehot",
      "$isunknown",
      "$fatal",
      "$warning",
      "$dimensions",
      "$right",
      "$high",
      "$size",
      "$asin",
      "$acos",
      "$atan",
      "$atan2",
      "$hypot",
      "$sinh",
      "$cosh",
      "$tanh",
      "$asinh",
      "$acosh",
      "$atanh",
      "$countones",
      "$onehot0",
      "$error",
      "$info",
      "$random",
      "$dist_chi_square",
      "$dist_erlang",
      "$dist_exponential",
      "$dist_normal",
      "$dist_poisson",
      "$dist_t",
      "$dist_uniform",
      "$q_initialize",
      "$q_remove",
      "$q_exam",
      "$async$and$array",
      "$async$nand$array",
      "$async$or$array",
      "$async$nor$array",
      "$sync$and$array",
      "$sync$nand$array",
      "$sync$or$array",
      "$sync$nor$array",
      "$q_add",
      "$q_full",
      "$psprintf",
      "$async$and$plane",
      "$async$nand$plane",
      "$async$or$plane",
      "$async$nor$plane",
      "$sync$and$plane",
      "$sync$nand$plane",
      "$sync$or$plane",
      "$sync$nor$plane",
      "$system",
      "$display",
      "$displayb",
      "$displayh",
      "$displayo",
      "$strobe",
      "$strobeb",
      "$strobeh",
      "$strobeo",
      "$write",
      "$readmemb",
      "$readmemh",
      "$writememh",
      "$value$plusargs",
      "$dumpvars",
      "$dumpon",
      "$dumplimit",
      "$dumpports",
      "$dumpportson",
      "$dumpportslimit",
      "$writeb",
      "$writeh",
      "$writeo",
      "$monitor",
      "$monitorb",
      "$monitorh",
      "$monitoro",
      "$writememb",
      "$dumpfile",
      "$dumpoff",
      "$dumpall",
      "$dumpflush",
      "$dumpportsoff",
      "$dumpportsall",
      "$dumpportsflush",
      "$fclose",
      "$fdisplay",
      "$fdisplayb",
      "$fdisplayh",
      "$fdisplayo",
      "$fstrobe",
      "$fstrobeb",
      "$fstrobeh",
      "$fstrobeo",
      "$swrite",
      "$swriteb",
      "$swriteh",
      "$swriteo",
      "$fscanf",
      "$fread",
      "$fseek",
      "$fflush",
      "$feof",
      "$fopen",
      "$fwrite",
      "$fwriteb",
      "$fwriteh",
      "$fwriteo",
      "$fmonitor",
      "$fmonitorb",
      "$fmonitorh",
      "$fmonitoro",
      "$sformat",
      "$sformatf",
      "$fgetc",
      "$ungetc",
      "$fgets",
      "$sscanf",
      "$rewind",
      "$ftell",
      "$ferror"
    ]
  };
  const BUILT_IN_CONSTANTS = [
    "__FILE__",
    "__LINE__"
  ];
  const DIRECTIVES = [
    "begin_keywords",
    "celldefine",
    "default_nettype",
    "default_decay_time",
    "default_trireg_strength",
    "define",
    "delay_mode_distributed",
    "delay_mode_path",
    "delay_mode_unit",
    "delay_mode_zero",
    "else",
    "elsif",
    "end_keywords",
    "endcelldefine",
    "endif",
    "ifdef",
    "ifndef",
    "include",
    "line",
    "nounconnected_drive",
    "pragma",
    "resetall",
    "timescale",
    "unconnected_drive",
    "undef",
    "undefineall"
  ];
  return {
    name: "Verilog",
    aliases: [
      "v",
      "sv",
      "svh"
    ],
    case_insensitive: false,
    keywords: KEYWORDS2,
    contains: [
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.C_LINE_COMMENT_MODE,
      hljs.QUOTE_STRING_MODE,
      {
        scope: "number",
        contains: [hljs.BACKSLASH_ESCAPE],
        variants: [
          { begin: /\b((\d+'([bhodBHOD]))[0-9xzXZa-fA-F_]+)/ },
          { begin: /\B(('([bhodBHOD]))[0-9xzXZa-fA-F_]+)/ },
          {
            // decimal
            begin: /\b[0-9][0-9_]*/,
            relevance: 0
          }
        ]
      },
      /* parameters to instances */
      {
        scope: "variable",
        variants: [
          { begin: "#\\((?!parameter).+\\)" },
          {
            begin: "\\.\\w+",
            relevance: 0
          }
        ]
      },
      {
        scope: "variable.constant",
        match: regex.concat(/`/, regex.either(...BUILT_IN_CONSTANTS))
      },
      {
        scope: "meta",
        begin: regex.concat(/`/, regex.either(...DIRECTIVES)),
        end: /$|\/\/|\/\*/,
        returnEnd: true,
        keywords: DIRECTIVES
      }
    ]
  };
}
function vhdl(hljs) {
  const INTEGER_RE = "\\d(_|\\d)*";
  const EXPONENT_RE = "[eE][-+]?" + INTEGER_RE;
  const DECIMAL_LITERAL_RE = INTEGER_RE + "(\\." + INTEGER_RE + ")?(" + EXPONENT_RE + ")?";
  const BASED_INTEGER_RE = "\\w+";
  const BASED_LITERAL_RE = INTEGER_RE + "#" + BASED_INTEGER_RE + "(\\." + BASED_INTEGER_RE + ")?#(" + EXPONENT_RE + ")?";
  const NUMBER_RE = "\\b(" + BASED_LITERAL_RE + "|" + DECIMAL_LITERAL_RE + ")";
  const KEYWORDS2 = [
    "abs",
    "access",
    "after",
    "alias",
    "all",
    "and",
    "architecture",
    "array",
    "assert",
    "assume",
    "assume_guarantee",
    "attribute",
    "begin",
    "block",
    "body",
    "buffer",
    "bus",
    "case",
    "component",
    "configuration",
    "constant",
    "context",
    "cover",
    "disconnect",
    "downto",
    "default",
    "else",
    "elsif",
    "end",
    "entity",
    "exit",
    "fairness",
    "file",
    "for",
    "force",
    "function",
    "generate",
    "generic",
    "group",
    "guarded",
    "if",
    "impure",
    "in",
    "inertial",
    "inout",
    "is",
    "label",
    "library",
    "linkage",
    "literal",
    "loop",
    "map",
    "mod",
    "nand",
    "new",
    "next",
    "nor",
    "not",
    "null",
    "of",
    "on",
    "open",
    "or",
    "others",
    "out",
    "package",
    "parameter",
    "port",
    "postponed",
    "procedure",
    "process",
    "property",
    "protected",
    "pure",
    "range",
    "record",
    "register",
    "reject",
    "release",
    "rem",
    "report",
    "restrict",
    "restrict_guarantee",
    "return",
    "rol",
    "ror",
    "select",
    "sequence",
    "severity",
    "shared",
    "signal",
    "sla",
    "sll",
    "sra",
    "srl",
    "strong",
    "subtype",
    "then",
    "to",
    "transport",
    "type",
    "unaffected",
    "units",
    "until",
    "use",
    "variable",
    "view",
    "vmode",
    "vprop",
    "vunit",
    "wait",
    "when",
    "while",
    "with",
    "xnor",
    "xor"
  ];
  const BUILT_INS2 = [
    "boolean",
    "bit",
    "character",
    "integer",
    "time",
    "delay_length",
    "natural",
    "positive",
    "string",
    "bit_vector",
    "file_open_kind",
    "file_open_status",
    "std_logic",
    "std_logic_vector",
    "unsigned",
    "signed",
    "boolean_vector",
    "integer_vector",
    "std_ulogic",
    "std_ulogic_vector",
    "unresolved_unsigned",
    "u_unsigned",
    "unresolved_signed",
    "u_signed",
    "real_vector",
    "time_vector"
  ];
  const LITERALS2 = [
    // severity_level
    "false",
    "true",
    "note",
    "warning",
    "error",
    "failure",
    // textio
    "line",
    "text",
    "side",
    "width"
  ];
  return {
    name: "VHDL",
    case_insensitive: true,
    keywords: {
      keyword: KEYWORDS2,
      built_in: BUILT_INS2,
      literal: LITERALS2
    },
    illegal: /\{/,
    contains: [
      hljs.C_BLOCK_COMMENT_MODE,
      // VHDL-2008 block commenting.
      hljs.COMMENT("--", "$"),
      hljs.QUOTE_STRING_MODE,
      {
        className: "number",
        begin: NUMBER_RE,
        relevance: 0
      },
      {
        className: "string",
        begin: "'(U|X|0|1|Z|W|L|H|-)'",
        contains: [hljs.BACKSLASH_ESCAPE]
      },
      {
        className: "symbol",
        begin: "'[A-Za-z](_?[A-Za-z0-9])*",
        contains: [hljs.BACKSLASH_ESCAPE]
      }
    ]
  };
}
function vim(hljs) {
  return {
    name: "Vim Script",
    keywords: {
      $pattern: /[!#@\w]+/,
      keyword: (
        // express version except: ! & * < = > !! # @ @@
        "N|0 P|0 X|0 a|0 ab abc abo al am an|0 ar arga argd arge argdo argg argl argu as au aug aun b|0 bN ba bad bd be bel bf bl bm bn bo bp br brea breaka breakd breakl bro bufdo buffers bun bw c|0 cN cNf ca cabc caddb cad caddf cal cat cb cc ccl cd ce cex cf cfir cgetb cgete cg changes chd che checkt cl cla clo cm cmapc cme cn cnew cnf cno cnorea cnoreme co col colo com comc comp con conf cope cp cpf cq cr cs cst cu cuna cunme cw delm deb debugg delc delf dif diffg diffo diffp diffpu diffs diffthis dig di dl dell dj dli do doautoa dp dr ds dsp e|0 ea ec echoe echoh echom echon el elsei em en endfo endf endt endw ene ex exe exi exu f|0 files filet fin fina fini fir fix fo foldc foldd folddoc foldo for fu go gr grepa gu gv ha helpf helpg helpt hi hid his ia iabc if ij il im imapc ime ino inorea inoreme int is isp iu iuna iunme j|0 ju k|0 keepa kee keepj lN lNf l|0 lad laddb laddf la lan lat lb lc lch lcl lcs le lefta let lex lf lfir lgetb lgete lg lgr lgrepa lh ll lla lli lmak lm lmapc lne lnew lnf ln loadk lo loc lockv lol lope lp lpf lr ls lt lu lua luad luaf lv lvimgrepa lw m|0 ma mak map mapc marks mat me menut mes mk mks mksp mkv mkvie mod mz mzf nbc nb nbs new nm nmapc nme nn nnoreme noa no noh norea noreme norm nu nun nunme ol o|0 om omapc ome on ono onoreme opt ou ounme ow p|0 profd prof pro promptr pc ped pe perld po popu pp pre prev ps pt ptN ptf ptj ptl ptn ptp ptr pts pu pw py3 python3 py3d py3f py pyd pyf quita qa rec red redi redr redraws reg res ret retu rew ri rightb rub rubyd rubyf rund ru rv sN san sa sal sav sb sbN sba sbf sbl sbm sbn sbp sbr scrip scripte scs se setf setg setl sf sfir sh sim sig sil sl sla sm smap smapc sme sn sni sno snor snoreme sor so spelld spe spelli spellr spellu spellw sp spr sre st sta startg startr star stopi stj sts sun sunm sunme sus sv sw sy synti sync tN tabN tabc tabdo tabe tabf tabfir tabl tabm tabnew tabn tabo tabp tabr tabs tab ta tags tc tcld tclf te tf th tj tl tm tn to tp tr try ts tu u|0 undoj undol una unh unl unlo unm unme uns up ve verb vert vim vimgrepa vi viu vie vm vmapc vme vne vn vnoreme vs vu vunme windo w|0 wN wa wh wi winc winp wn wp wq wqa ws wu wv x|0 xa xmapc xm xme xn xnoreme xu xunme y|0 z|0 ~ Next Print append abbreviate abclear aboveleft all amenu anoremenu args argadd argdelete argedit argglobal arglocal argument ascii autocmd augroup aunmenu buffer bNext ball badd bdelete behave belowright bfirst blast bmodified bnext botright bprevious brewind break breakadd breakdel breaklist browse bunload bwipeout change cNext cNfile cabbrev cabclear caddbuffer caddexpr caddfile call catch cbuffer cclose center cexpr cfile cfirst cgetbuffer cgetexpr cgetfile chdir checkpath checktime clist clast close cmap cmapclear cmenu cnext cnewer cnfile cnoremap cnoreabbrev cnoremenu copy colder colorscheme command comclear compiler continue confirm copen cprevious cpfile cquit crewind cscope cstag cunmap cunabbrev cunmenu cwindow delete delmarks debug debuggreedy delcommand delfunction diffupdate diffget diffoff diffpatch diffput diffsplit digraphs display deletel djump dlist doautocmd doautoall deletep drop dsearch dsplit edit earlier echo echoerr echohl echomsg else elseif emenu endif endfor endfunction endtry endwhile enew execute exit exusage file filetype find finally finish first fixdel fold foldclose folddoopen folddoclosed foldopen function global goto grep grepadd gui gvim hardcopy help helpfind helpgrep helptags highlight hide history insert iabbrev iabclear ijump ilist imap imapclear imenu inoremap inoreabbrev inoremenu intro isearch isplit iunmap iunabbrev iunmenu join jumps keepalt keepmarks keepjumps lNext lNfile list laddexpr laddbuffer laddfile last language later lbuffer lcd lchdir lclose lcscope left leftabove lexpr lfile lfirst lgetbuffer lgetexpr lgetfile lgrep lgrepadd lhelpgrep llast llist lmake lmap lmapclear lnext lnewer lnfile lnoremap loadkeymap loadview lockmarks lockvar lolder lopen lprevious lpfile lrewind ltag lunmap luado luafile lvimgrep lvimgrepadd lwindow move mark make mapclear match menu menutranslate messages mkexrc mksession mkspell mkvimrc mkview mode mzscheme mzfile nbclose nbkey nbsart next nmap nmapclear nmenu nnoremap nnoremenu noautocmd noremap nohlsearch noreabbrev noremenu normal number nunmap nunmenu oldfiles open omap omapclear omenu only onoremap onoremenu options ounmap ounmenu ownsyntax print profdel profile promptfind promptrepl pclose pedit perl perldo pop popup ppop preserve previous psearch ptag ptNext ptfirst ptjump ptlast ptnext ptprevious ptrewind ptselect put pwd py3do py3file python pydo pyfile quit quitall qall read recover redo redir redraw redrawstatus registers resize retab return rewind right rightbelow ruby rubydo rubyfile rundo runtime rviminfo substitute sNext sandbox sargument sall saveas sbuffer sbNext sball sbfirst sblast sbmodified sbnext sbprevious sbrewind scriptnames scriptencoding scscope set setfiletype setglobal setlocal sfind sfirst shell simalt sign silent sleep slast smagic smapclear smenu snext sniff snomagic snoremap snoremenu sort source spelldump spellgood spellinfo spellrepall spellundo spellwrong split sprevious srewind stop stag startgreplace startreplace startinsert stopinsert stjump stselect sunhide sunmap sunmenu suspend sview swapname syntax syntime syncbind tNext tabNext tabclose tabedit tabfind tabfirst tablast tabmove tabnext tabonly tabprevious tabrewind tag tcl tcldo tclfile tearoff tfirst throw tjump tlast tmenu tnext topleft tprevious trewind tselect tunmenu undo undojoin undolist unabbreviate unhide unlet unlockvar unmap unmenu unsilent update vglobal version verbose vertical vimgrep vimgrepadd visual viusage view vmap vmapclear vmenu vnew vnoremap vnoremenu vsplit vunmap vunmenu write wNext wall while winsize wincmd winpos wnext wprevious wqall wsverb wundo wviminfo xit xall xmapclear xmap xmenu xnoremap xnoremenu xunmap xunmenu yank"
      ),
      built_in: (
        // built in func
        "synIDtrans atan2 range matcharg did_filetype asin feedkeys xor argv complete_check add getwinposx getqflist getwinposy screencol clearmatches empty extend getcmdpos mzeval garbagecollect setreg ceil sqrt diff_hlID inputsecret get getfperm getpid filewritable shiftwidth max sinh isdirectory synID system inputrestore winline atan visualmode inputlist tabpagewinnr round getregtype mapcheck hasmapto histdel argidx findfile sha256 exists toupper getcmdline taglist string getmatches bufnr strftime winwidth bufexists strtrans tabpagebuflist setcmdpos remote_read printf setloclist getpos getline bufwinnr float2nr len getcmdtype diff_filler luaeval resolve libcallnr foldclosedend reverse filter has_key bufname str2float strlen setline getcharmod setbufvar index searchpos shellescape undofile foldclosed setqflist buflisted strchars str2nr virtcol floor remove undotree remote_expr winheight gettabwinvar reltime cursor tabpagenr finddir localtime acos getloclist search tanh matchend rename gettabvar strdisplaywidth type abs py3eval setwinvar tolower wildmenumode log10 spellsuggest bufloaded synconcealed nextnonblank server2client complete settabwinvar executable input wincol setmatches getftype hlID inputsave searchpair or screenrow line settabvar histadd deepcopy strpart remote_peek and eval getftime submatch screenchar winsaveview matchadd mkdir screenattr getfontname libcall reltimestr getfsize winnr invert pow getbufline byte2line soundfold repeat fnameescape tagfiles sin strwidth spellbadword trunc maparg log lispindent hostname setpos globpath remote_foreground getchar synIDattr fnamemodify cscope_connection stridx winbufnr indent min complete_add nr2char searchpairpos inputdialog values matchlist items hlexists strridx browsedir expand fmod pathshorten line2byte argc count getwinvar glob foldtextresult getreg foreground cosh matchdelete has char2nr simplify histget searchdecl iconv winrestcmd pumvisible writefile foldlevel haslocaldir keys cos matchstr foldtext histnr tan tempname getcwd byteidx getbufvar islocked escape eventhandler remote_send serverlist winrestview synstack pyeval prevnonblank readfile cindent filereadable changenr exp"
      )
    },
    illegal: /;/,
    contains: [
      hljs.NUMBER_MODE,
      {
        className: "string",
        begin: "'",
        end: "'",
        illegal: "\\n"
      },
      /*
            A double quote can start either a string or a line comment. Strings are
            ended before the end of a line by another double quote and can contain
            escaped double-quotes and post-escaped line breaks.
      
            Also, any double quote at the beginning of a line is a comment but we
            don't handle that properly at the moment: any double quote inside will
            turn them into a string. Handling it properly will require a smarter
            parser.
            */
      {
        className: "string",
        begin: /"(\\"|\n\\|[^"\n])*"/
      },
      hljs.COMMENT('"', "$"),
      {
        className: "variable",
        begin: /[bwtglsav]:[\w\d_]+/
      },
      {
        begin: [
          /\b(?:function|function!)/,
          /\s+/,
          hljs.IDENT_RE
        ],
        className: {
          1: "keyword",
          3: "title"
        },
        end: "$",
        relevance: 0,
        contains: [
          {
            className: "params",
            begin: "\\(",
            end: "\\)"
          }
        ]
      },
      {
        className: "symbol",
        begin: /<[\w-]+>/
      }
    ]
  };
}
function wren(hljs) {
  const regex = hljs.regex;
  const IDENT_RE2 = /[a-zA-Z]\w*/;
  const KEYWORDS2 = [
    "as",
    "break",
    "class",
    "construct",
    "continue",
    "else",
    "for",
    "foreign",
    "if",
    "import",
    "in",
    "is",
    "return",
    "static",
    "var",
    "while"
  ];
  const LITERALS2 = [
    "true",
    "false",
    "null"
  ];
  const LANGUAGE_VARS = [
    "this",
    "super"
  ];
  const CORE_CLASSES = [
    "Bool",
    "Class",
    "Fiber",
    "Fn",
    "List",
    "Map",
    "Null",
    "Num",
    "Object",
    "Range",
    "Sequence",
    "String",
    "System"
  ];
  const OPERATORS = [
    "-",
    "~",
    /\*/,
    "%",
    /\.\.\./,
    /\.\./,
    /\+/,
    "<<",
    ">>",
    ">=",
    "<=",
    "<",
    ">",
    /\^/,
    /!=/,
    /!/,
    /\bis\b/,
    "==",
    "&&",
    "&",
    /\|\|/,
    /\|/,
    /\?:/,
    "="
  ];
  const FUNCTION = {
    relevance: 0,
    match: regex.concat(/\b(?!(if|while|for|else|super)\b)/, IDENT_RE2, /(?=\s*[({])/),
    className: "title.function"
  };
  const FUNCTION_DEFINITION = {
    match: regex.concat(
      regex.either(
        regex.concat(/\b(?!(if|while|for|else|super)\b)/, IDENT_RE2),
        regex.either(...OPERATORS)
      ),
      /(?=\s*\([^)]+\)\s*\{)/
    ),
    className: "title.function",
    starts: { contains: [
      {
        begin: /\(/,
        end: /\)/,
        contains: [
          {
            relevance: 0,
            scope: "params",
            match: IDENT_RE2
          }
        ]
      }
    ] }
  };
  const CLASS_DEFINITION = {
    variants: [
      { match: [
        /class\s+/,
        IDENT_RE2,
        /\s+is\s+/,
        IDENT_RE2
      ] },
      { match: [
        /class\s+/,
        IDENT_RE2
      ] }
    ],
    scope: {
      2: "title.class",
      4: "title.class.inherited"
    },
    keywords: KEYWORDS2
  };
  const OPERATOR = {
    relevance: 0,
    match: regex.either(...OPERATORS),
    className: "operator"
  };
  const TRIPLE_STRING = {
    className: "string",
    begin: /"""/,
    end: /"""/
  };
  const PROPERTY = {
    className: "property",
    begin: regex.concat(/\./, regex.lookahead(IDENT_RE2)),
    end: IDENT_RE2,
    excludeBegin: true,
    relevance: 0
  };
  const FIELD = {
    relevance: 0,
    match: regex.concat(/\b_/, IDENT_RE2),
    scope: "variable"
  };
  const CLASS_REFERENCE = {
    relevance: 0,
    match: /\b[A-Z]+[a-z]+([A-Z]+[a-z]+)*/,
    scope: "title.class",
    keywords: { _: CORE_CLASSES }
  };
  const NUMBER = hljs.C_NUMBER_MODE;
  const SETTER = {
    match: [
      IDENT_RE2,
      /\s*/,
      /=/,
      /\s*/,
      /\(/,
      IDENT_RE2,
      /\)\s*\{/
    ],
    scope: {
      1: "title.function",
      3: "operator",
      6: "params"
    }
  };
  const COMMENT_DOCS = hljs.COMMENT(
    /\/\*\*/,
    /\*\//,
    { contains: [
      {
        match: /@[a-z]+/,
        scope: "doctag"
      },
      "self"
    ] }
  );
  const SUBST = {
    scope: "subst",
    begin: /%\(/,
    end: /\)/,
    contains: [
      NUMBER,
      CLASS_REFERENCE,
      FUNCTION,
      FIELD,
      OPERATOR
    ]
  };
  const STRING = {
    scope: "string",
    begin: /"/,
    end: /"/,
    contains: [
      SUBST,
      {
        scope: "char.escape",
        variants: [
          { match: /\\\\|\\["0%abefnrtv]/ },
          { match: /\\x[0-9A-F]{2}/ },
          { match: /\\u[0-9A-F]{4}/ },
          { match: /\\U[0-9A-F]{8}/ }
        ]
      }
    ]
  };
  SUBST.contains.push(STRING);
  const ALL_KWS = [
    ...KEYWORDS2,
    ...LANGUAGE_VARS,
    ...LITERALS2
  ];
  const VARIABLE = {
    relevance: 0,
    match: regex.concat(
      "\\b(?!",
      ALL_KWS.join("|"),
      "\\b)",
      /[a-zA-Z_]\w*(?:[?!]|\b)/
    ),
    className: "variable"
  };
  const ATTRIBUTE = {
    // scope: "meta",
    scope: "comment",
    variants: [
      {
        begin: [
          /#!?/,
          /[A-Za-z_]+(?=\()/
        ],
        beginScope: {
          // 2: "attr"
        },
        keywords: { literal: LITERALS2 },
        contains: [
          // NUMBER,
          // VARIABLE
        ],
        end: /\)/
      },
      {
        begin: [
          /#!?/,
          /[A-Za-z_]+/
        ],
        beginScope: {
          // 2: "attr"
        },
        end: /$/
      }
    ]
  };
  return {
    name: "Wren",
    keywords: {
      keyword: KEYWORDS2,
      "variable.language": LANGUAGE_VARS,
      literal: LITERALS2
    },
    contains: [
      ATTRIBUTE,
      NUMBER,
      STRING,
      TRIPLE_STRING,
      COMMENT_DOCS,
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      CLASS_REFERENCE,
      CLASS_DEFINITION,
      SETTER,
      FUNCTION_DEFINITION,
      FUNCTION,
      OPERATOR,
      FIELD,
      PROPERTY,
      VARIABLE
    ]
  };
}
function x86asm(hljs) {
  return {
    name: "Intel x86 Assembly",
    case_insensitive: true,
    keywords: {
      $pattern: "[.%]?" + hljs.IDENT_RE,
      keyword: "lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63",
      built_in: (
        // Instruction pointer
        "ip eip rip al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss st st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0  xmm1  xmm2  xmm3  xmm4  xmm5  xmm6  xmm7  xmm8  xmm9 xmm10  xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0  ymm1  ymm2  ymm3  ymm4  ymm5  ymm6  ymm7  ymm8  ymm9 ymm10  ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0  zmm1  zmm2  zmm3  zmm4  zmm5  zmm6  zmm7  zmm8  zmm9 zmm10  zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 k0 k1 k2 k3 k4 k5 k6 k7 bnd0 bnd1 bnd2 bnd3 cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d r0h r1h r2h r3h r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l db dw dd dq dt ddq do dy dz resb resw resd resq rest resdq reso resy resz incbin equ times byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr"
      ),
      meta: "%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif %if %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep %endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment .nolist __FILE__ __LINE__ __SECT__  __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ __UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__  __PASS__ struc endstruc istruc at iend align alignb sectalign daz nodaz up down zero default option assume public bits use16 use32 use64 default section segment absolute extern global common cpu float __utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ __float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ __Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__"
    },
    contains: [
      hljs.COMMENT(
        ";",
        "$",
        { relevance: 0 }
      ),
      {
        className: "number",
        variants: [
          // Float number and x87 BCD
          {
            begin: "\\b(?:([0-9][0-9_]*)?\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|(0[Xx])?[0-9][0-9_]*(\\.[0-9_]*)?(?:[pP](?:[+-]?[0-9_]+)?)?)\\b",
            relevance: 0
          },
          // Hex number in $
          {
            begin: "\\$[0-9][0-9A-Fa-f]*",
            relevance: 0
          },
          // Number in H,D,T,Q,O,B,Y suffix
          { begin: "\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\b" },
          // Number in X,D,T,Q,O,B,Y prefix
          { begin: "\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\b" }
        ]
      },
      // Double quote string
      hljs.QUOTE_STRING_MODE,
      {
        className: "string",
        variants: [
          // Single-quoted string
          {
            begin: "'",
            end: "[^\\\\]'"
          },
          // Backquoted string
          {
            begin: "`",
            end: "[^\\\\]`"
          }
        ],
        relevance: 0
      },
      {
        className: "symbol",
        variants: [
          // Global label and local label
          { begin: "^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)" },
          // Macro-local label
          { begin: "^\\s*%%[A-Za-z0-9_$#@~.?]*:" }
        ],
        relevance: 0
      },
      // Macro parameter
      {
        className: "subst",
        begin: "%[0-9]+",
        relevance: 0
      },
      // Macro parameter
      {
        className: "subst",
        begin: "%!S+",
        relevance: 0
      },
      {
        className: "meta",
        begin: /^\s*\.[\w_-]+/
      }
    ]
  };
}
function xl(hljs) {
  const KWS = [
    "if",
    "then",
    "else",
    "do",
    "while",
    "until",
    "for",
    "loop",
    "import",
    "with",
    "is",
    "as",
    "where",
    "when",
    "by",
    "data",
    "constant",
    "integer",
    "real",
    "text",
    "name",
    "boolean",
    "symbol",
    "infix",
    "prefix",
    "postfix",
    "block",
    "tree"
  ];
  const BUILT_INS2 = [
    "in",
    "mod",
    "rem",
    "and",
    "or",
    "xor",
    "not",
    "abs",
    "sign",
    "floor",
    "ceil",
    "sqrt",
    "sin",
    "cos",
    "tan",
    "asin",
    "acos",
    "atan",
    "exp",
    "expm1",
    "log",
    "log2",
    "log10",
    "log1p",
    "pi",
    "at",
    "text_length",
    "text_range",
    "text_find",
    "text_replace",
    "contains",
    "page",
    "slide",
    "basic_slide",
    "title_slide",
    "title",
    "subtitle",
    "fade_in",
    "fade_out",
    "fade_at",
    "clear_color",
    "color",
    "line_color",
    "line_width",
    "texture_wrap",
    "texture_transform",
    "texture",
    "scale_?x",
    "scale_?y",
    "scale_?z?",
    "translate_?x",
    "translate_?y",
    "translate_?z?",
    "rotate_?x",
    "rotate_?y",
    "rotate_?z?",
    "rectangle",
    "circle",
    "ellipse",
    "sphere",
    "path",
    "line_to",
    "move_to",
    "quad_to",
    "curve_to",
    "theme",
    "background",
    "contents",
    "locally",
    "time",
    "mouse_?x",
    "mouse_?y",
    "mouse_buttons"
  ];
  const BUILTIN_MODULES = [
    "ObjectLoader",
    "Animate",
    "MovieCredits",
    "Slides",
    "Filters",
    "Shading",
    "Materials",
    "LensFlare",
    "Mapping",
    "VLCAudioVideo",
    "StereoDecoder",
    "PointCloud",
    "NetworkAccess",
    "RemoteControl",
    "RegExp",
    "ChromaKey",
    "Snowfall",
    "NodeJS",
    "Speech",
    "Charts"
  ];
  const LITERALS2 = [
    "true",
    "false",
    "nil"
  ];
  const KEYWORDS2 = {
    $pattern: /[a-zA-Z][a-zA-Z0-9_?]*/,
    keyword: KWS,
    literal: LITERALS2,
    built_in: BUILT_INS2.concat(BUILTIN_MODULES)
  };
  const DOUBLE_QUOTE_TEXT = {
    className: "string",
    begin: '"',
    end: '"',
    illegal: "\\n"
  };
  const SINGLE_QUOTE_TEXT = {
    className: "string",
    begin: "'",
    end: "'",
    illegal: "\\n"
  };
  const LONG_TEXT = {
    className: "string",
    begin: "<<",
    end: ">>"
  };
  const BASED_NUMBER = {
    className: "number",
    begin: "[0-9]+#[0-9A-Z_]+(\\.[0-9-A-Z_]+)?#?([Ee][+-]?[0-9]+)?"
  };
  const IMPORT = {
    beginKeywords: "import",
    end: "$",
    keywords: KEYWORDS2,
    contains: [DOUBLE_QUOTE_TEXT]
  };
  const FUNCTION_DEFINITION = {
    className: "function",
    begin: /[a-z][^\n]*->/,
    returnBegin: true,
    end: /->/,
    contains: [
      hljs.inherit(hljs.TITLE_MODE, { starts: {
        endsWithParent: true,
        keywords: KEYWORDS2
      } })
    ]
  };
  return {
    name: "XL",
    aliases: ["tao"],
    keywords: KEYWORDS2,
    contains: [
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      DOUBLE_QUOTE_TEXT,
      SINGLE_QUOTE_TEXT,
      LONG_TEXT,
      FUNCTION_DEFINITION,
      IMPORT,
      BASED_NUMBER,
      hljs.NUMBER_MODE
    ]
  };
}
function xquery(_hljs) {
  const KEYWORDS2 = [
    "module",
    "schema",
    "namespace",
    "boundary-space",
    "preserve",
    "no-preserve",
    "strip",
    "default",
    "collation",
    "base-uri",
    "ordering",
    "context",
    "decimal-format",
    "decimal-separator",
    "copy-namespaces",
    "empty-sequence",
    "except",
    "exponent-separator",
    "external",
    "grouping-separator",
    "inherit",
    "no-inherit",
    "lax",
    "minus-sign",
    "per-mille",
    "percent",
    "schema-attribute",
    "schema-element",
    "strict",
    "unordered",
    "zero-digit",
    "declare",
    "import",
    "option",
    "function",
    "validate",
    "variable",
    "for",
    "at",
    "in",
    "let",
    "where",
    "order",
    "group",
    "by",
    "return",
    "if",
    "then",
    "else",
    "tumbling",
    "sliding",
    "window",
    "start",
    "when",
    "only",
    "end",
    "previous",
    "next",
    "stable",
    "ascending",
    "descending",
    "allowing",
    "empty",
    "greatest",
    "least",
    "some",
    "every",
    "satisfies",
    "switch",
    "case",
    "typeswitch",
    "try",
    "catch",
    "and",
    "or",
    "to",
    "union",
    "intersect",
    "instance",
    "of",
    "treat",
    "as",
    "castable",
    "cast",
    "map",
    "array",
    "delete",
    "insert",
    "into",
    "replace",
    "value",
    "rename",
    "copy",
    "modify",
    "update"
  ];
  const TYPES2 = [
    "item",
    "document-node",
    "node",
    "attribute",
    "document",
    "element",
    "comment",
    "namespace",
    "namespace-node",
    "processing-instruction",
    "text",
    "construction",
    "xs:anyAtomicType",
    "xs:untypedAtomic",
    "xs:duration",
    "xs:time",
    "xs:decimal",
    "xs:float",
    "xs:double",
    "xs:gYearMonth",
    "xs:gYear",
    "xs:gMonthDay",
    "xs:gMonth",
    "xs:gDay",
    "xs:boolean",
    "xs:base64Binary",
    "xs:hexBinary",
    "xs:anyURI",
    "xs:QName",
    "xs:NOTATION",
    "xs:dateTime",
    "xs:dateTimeStamp",
    "xs:date",
    "xs:string",
    "xs:normalizedString",
    "xs:token",
    "xs:language",
    "xs:NMTOKEN",
    "xs:Name",
    "xs:NCName",
    "xs:ID",
    "xs:IDREF",
    "xs:ENTITY",
    "xs:integer",
    "xs:nonPositiveInteger",
    "xs:negativeInteger",
    "xs:long",
    "xs:int",
    "xs:short",
    "xs:byte",
    "xs:nonNegativeInteger",
    "xs:unisignedLong",
    "xs:unsignedInt",
    "xs:unsignedShort",
    "xs:unsignedByte",
    "xs:positiveInteger",
    "xs:yearMonthDuration",
    "xs:dayTimeDuration"
  ];
  const LITERALS2 = [
    "eq",
    "ne",
    "lt",
    "le",
    "gt",
    "ge",
    "is",
    "self::",
    "child::",
    "descendant::",
    "descendant-or-self::",
    "attribute::",
    "following::",
    "following-sibling::",
    "parent::",
    "ancestor::",
    "ancestor-or-self::",
    "preceding::",
    "preceding-sibling::",
    "NaN"
  ];
  const BUILT_IN = {
    className: "built_in",
    variants: [
      {
        begin: /\barray:/,
        end: /(?:append|filter|flatten|fold-(?:left|right)|for-each(?:-pair)?|get|head|insert-before|join|put|remove|reverse|size|sort|subarray|tail)\b/
      },
      {
        begin: /\bmap:/,
        end: /(?:contains|entry|find|for-each|get|keys|merge|put|remove|size)\b/
      },
      {
        begin: /\bmath:/,
        end: /(?:a(?:cos|sin|tan[2]?)|cos|exp(?:10)?|log(?:10)?|pi|pow|sin|sqrt|tan)\b/
      },
      {
        begin: /\bop:/,
        end: /\(/,
        excludeEnd: true
      },
      {
        begin: /\bfn:/,
        end: /\(/,
        excludeEnd: true
      },
      // do not highlight inbuilt strings as variable or xml element names
      { begin: /[^</$:'"-]\b(?:abs|accumulator-(?:after|before)|adjust-(?:date(?:Time)?|time)-to-timezone|analyze-string|apply|available-(?:environment-variables|system-properties)|avg|base-uri|boolean|ceiling|codepoints?-(?:equal|to-string)|collation-key|collection|compare|concat|contains(?:-token)?|copy-of|count|current(?:-)?(?:date(?:Time)?|time|group(?:ing-key)?|output-uri|merge-(?:group|key))?data|dateTime|days?-from-(?:date(?:Time)?|duration)|deep-equal|default-(?:collation|language)|distinct-values|document(?:-uri)?|doc(?:-available)?|element-(?:available|with-id)|empty|encode-for-uri|ends-with|environment-variable|error|escape-html-uri|exactly-one|exists|false|filter|floor|fold-(?:left|right)|for-each(?:-pair)?|format-(?:date(?:Time)?|time|integer|number)|function-(?:arity|available|lookup|name)|generate-id|has-children|head|hours-from-(?:dateTime|duration|time)|id(?:ref)?|implicit-timezone|in-scope-prefixes|index-of|innermost|insert-before|iri-to-uri|json-(?:doc|to-xml)|key|lang|last|load-xquery-module|local-name(?:-from-QName)?|(?:lower|upper)-case|matches|max|minutes-from-(?:dateTime|duration|time)|min|months?-from-(?:date(?:Time)?|duration)|name(?:space-uri-?(?:for-prefix|from-QName)?)?|nilled|node-name|normalize-(?:space|unicode)|not|number|one-or-more|outermost|parse-(?:ietf-date|json)|path|position|(?:prefix-from-)?QName|random-number-generator|regex-group|remove|replace|resolve-(?:QName|uri)|reverse|root|round(?:-half-to-even)?|seconds-from-(?:dateTime|duration|time)|snapshot|sort|starts-with|static-base-uri|stream-available|string-?(?:join|length|to-codepoints)?|subsequence|substring-?(?:after|before)?|sum|system-property|tail|timezone-from-(?:date(?:Time)?|time)|tokenize|trace|trans(?:form|late)|true|type-available|unordered|unparsed-(?:entity|text)?-?(?:public-id|uri|available|lines)?|uri-collection|xml-to-json|years?-from-(?:date(?:Time)?|duration)|zero-or-one)\b/ },
      {
        begin: /\blocal:/,
        end: /\(/,
        excludeEnd: true
      },
      {
        begin: /\bzip:/,
        end: /(?:zip-file|(?:xml|html|text|binary)-entry| (?:update-)?entries)\b/
      },
      {
        begin: /\b(?:util|db|functx|app|xdmp|xmldb):/,
        end: /\(/,
        excludeEnd: true
      }
    ]
  };
  const TITLE = {
    className: "title",
    begin: /\bxquery version "[13]\.[01]"\s?(?:encoding ".+")?/,
    end: /;/
  };
  const VAR = {
    className: "variable",
    begin: /[$][\w\-:]+/
  };
  const NUMBER = {
    className: "number",
    begin: /(\b0[0-7_]+)|(\b0x[0-9a-fA-F_]+)|(\b[1-9][0-9_]*(\.[0-9_]+)?)|[0_]\b/,
    relevance: 0
  };
  const STRING = {
    className: "string",
    variants: [
      {
        begin: /"/,
        end: /"/,
        contains: [
          {
            begin: /""/,
            relevance: 0
          }
        ]
      },
      {
        begin: /'/,
        end: /'/,
        contains: [
          {
            begin: /''/,
            relevance: 0
          }
        ]
      }
    ]
  };
  const ANNOTATION = {
    className: "meta",
    begin: /%[\w\-:]+/
  };
  const COMMENT = {
    className: "comment",
    begin: /\(:/,
    end: /:\)/,
    relevance: 10,
    contains: [
      {
        className: "doctag",
        begin: /@\w+/
      }
    ]
  };
  const COMPUTED = {
    beginKeywords: "element attribute comment document processing-instruction",
    end: /\{/,
    excludeEnd: true
  };
  const DIRECT = {
    begin: /<([\w._:-]+)(\s+\S*=('|").*('|"))?>/,
    end: /(\/[\w._:-]+>)/,
    subLanguage: "xml",
    contains: [
      {
        begin: /\{/,
        end: /\}/,
        subLanguage: "xquery"
      },
      "self"
    ]
  };
  const CONTAINS = [
    VAR,
    BUILT_IN,
    STRING,
    NUMBER,
    COMMENT,
    ANNOTATION,
    TITLE,
    COMPUTED,
    DIRECT
  ];
  return {
    name: "XQuery",
    aliases: [
      "xpath",
      "xq",
      "xqm"
    ],
    case_insensitive: false,
    illegal: /(proc)|(abstract)|(extends)|(until)|(#)/,
    keywords: {
      $pattern: /[a-zA-Z$][a-zA-Z0-9_:-]*/,
      keyword: KEYWORDS2,
      type: TYPES2,
      literal: LITERALS2
    },
    contains: CONTAINS
  };
}
function zephir(hljs) {
  const STRING = {
    className: "string",
    contains: [hljs.BACKSLASH_ESCAPE],
    variants: [
      hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null }),
      hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null })
    ]
  };
  const TITLE_MODE = hljs.UNDERSCORE_TITLE_MODE;
  const NUMBER = { variants: [
    hljs.BINARY_NUMBER_MODE,
    hljs.C_NUMBER_MODE
  ] };
  const KEYWORDS2 = (
    // classes and objects
    "namespace class interface use extends function return abstract final public protected private static deprecated throw try catch Exception echo empty isset instanceof unset let var new const self require if else elseif switch case default do while loop for continue break likely unlikely __LINE__ __FILE__ __DIR__ __FUNCTION__ __CLASS__ __TRAIT__ __METHOD__ __NAMESPACE__ array boolean float double integer object resource string char long unsigned bool int uint ulong uchar true false null undefined"
  );
  return {
    name: "Zephir",
    aliases: ["zep"],
    keywords: KEYWORDS2,
    contains: [
      hljs.C_LINE_COMMENT_MODE,
      hljs.COMMENT(
        /\/\*/,
        /\*\//,
        { contains: [
          {
            className: "doctag",
            begin: /@[A-Za-z]+/
          }
        ] }
      ),
      {
        className: "string",
        begin: /<<<['"]?\w+['"]?$/,
        end: /^\w+;/,
        contains: [hljs.BACKSLASH_ESCAPE]
      },
      {
        // swallow composed identifiers to avoid parsing them as keywords
        begin: /(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/
      },
      {
        className: "function",
        beginKeywords: "function fn",
        end: /[;{]/,
        excludeEnd: true,
        illegal: /\$|\[|%/,
        contains: [
          TITLE_MODE,
          {
            className: "params",
            begin: /\(/,
            end: /\)/,
            keywords: KEYWORDS2,
            contains: [
              "self",
              hljs.C_BLOCK_COMMENT_MODE,
              STRING,
              NUMBER
            ]
          }
        ]
      },
      {
        className: "class",
        beginKeywords: "class interface",
        end: /\{/,
        excludeEnd: true,
        illegal: /[:($"]/,
        contains: [
          { beginKeywords: "extends implements" },
          TITLE_MODE
        ]
      },
      {
        beginKeywords: "namespace",
        end: /;/,
        illegal: /[.']/,
        contains: [TITLE_MODE]
      },
      {
        beginKeywords: "use",
        end: /;/,
        contains: [TITLE_MODE]
      },
      {
        begin: /=>/
        // No markup, just a relevance booster
      },
      STRING,
      NUMBER
    ]
  };
}
function cPlusPlus(hljs) {
  const regex = hljs.regex;
  const C_LINE_COMMENT_MODE = hljs.COMMENT("//", "$", { contains: [{ begin: /\\\n/ }] });
  const DECLTYPE_AUTO_RE = "decltype\\(auto\\)";
  const NAMESPACE_RE = "[a-zA-Z_]\\w*::";
  const TEMPLATE_ARGUMENT_RE = "<[^<>]+>";
  const FUNCTION_TYPE_RE = "(?!struct)(" + DECLTYPE_AUTO_RE + "|" + regex.optional(NAMESPACE_RE) + "[a-zA-Z_]\\w*" + regex.optional(TEMPLATE_ARGUMENT_RE) + ")";
  const CPP_PRIMITIVE_TYPES = {
    className: "type",
    begin: "\\b[a-z\\d_]*_t\\b"
  };
  const CHARACTER_ESCAPES = "\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)";
  const STRINGS = {
    className: "string",
    variants: [
      {
        begin: '(u8?|U|L)?"',
        end: '"',
        illegal: "\\n",
        contains: [hljs.BACKSLASH_ESCAPE]
      },
      {
        begin: "(u8?|U|L)?'(" + CHARACTER_ESCAPES + "|.)",
        end: "'",
        illegal: "."
      },
      hljs.END_SAME_AS_BEGIN({
        begin: /(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,
        end: /\)([^()\\ ]{0,16})"/
      })
    ]
  };
  const NUMBERS = {
    className: "number",
    variants: [
      // Floating-point literal.
      {
        begin: "[+-]?(?:(?:[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)"
      },
      // Integer literal.
      {
        begin: "[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)"
        // Note: there are user-defined literal suffixes too, but perhaps having the custom suffix not part of the
        // literal highlight actually makes it stand out more.
      }
    ],
    relevance: 0
  };
  const PREPROCESSOR = {
    className: "meta",
    begin: /#\s*[a-z]+\b/,
    end: /$/,
    keywords: { keyword: "if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" },
    contains: [
      {
        begin: /\\\n/,
        relevance: 0
      },
      hljs.inherit(STRINGS, { className: "string" }),
      {
        className: "string",
        begin: /<.*?>/
      },
      C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE
    ]
  };
  const TITLE_MODE = {
    className: "title",
    begin: regex.optional(NAMESPACE_RE) + hljs.IDENT_RE,
    relevance: 0
  };
  const FUNCTION_TITLE = regex.optional(NAMESPACE_RE) + hljs.IDENT_RE + "\\s*\\(";
  const RESERVED_KEYWORDS = [
    "alignas",
    "alignof",
    "and",
    "and_eq",
    "asm",
    "atomic_cancel",
    "atomic_commit",
    "atomic_noexcept",
    "auto",
    "bitand",
    "bitor",
    "break",
    "case",
    "catch",
    "class",
    "co_await",
    "co_return",
    "co_yield",
    "compl",
    "concept",
    "const_cast|10",
    "consteval",
    "constexpr",
    "constinit",
    "continue",
    "decltype",
    "default",
    "delete",
    "do",
    "dynamic_cast|10",
    "else",
    "enum",
    "explicit",
    "export",
    "extern",
    "false",
    "final",
    "for",
    "friend",
    "goto",
    "if",
    "import",
    "inline",
    "module",
    "mutable",
    "namespace",
    "new",
    "noexcept",
    "not",
    "not_eq",
    "nullptr",
    "operator",
    "or",
    "or_eq",
    "override",
    "private",
    "protected",
    "public",
    "reflexpr",
    "register",
    "reinterpret_cast|10",
    "requires",
    "return",
    "sizeof",
    "static_assert",
    "static_cast|10",
    "struct",
    "switch",
    "synchronized",
    "template",
    "this",
    "thread_local",
    "throw",
    "transaction_safe",
    "transaction_safe_dynamic",
    "true",
    "try",
    "typedef",
    "typeid",
    "typename",
    "union",
    "using",
    "virtual",
    "volatile",
    "while",
    "xor",
    "xor_eq"
  ];
  const RESERVED_TYPES = [
    "bool",
    "char",
    "char16_t",
    "char32_t",
    "char8_t",
    "double",
    "float",
    "int",
    "long",
    "short",
    "void",
    "wchar_t",
    "unsigned",
    "signed",
    "const",
    "static"
  ];
  const TYPE_HINTS = [
    "any",
    "auto_ptr",
    "barrier",
    "binary_semaphore",
    "bitset",
    "complex",
    "condition_variable",
    "condition_variable_any",
    "counting_semaphore",
    "deque",
    "false_type",
    "flat_map",
    "flat_set",
    "future",
    "imaginary",
    "initializer_list",
    "istringstream",
    "jthread",
    "latch",
    "lock_guard",
    "multimap",
    "multiset",
    "mutex",
    "optional",
    "ostringstream",
    "packaged_task",
    "pair",
    "promise",
    "priority_queue",
    "queue",
    "recursive_mutex",
    "recursive_timed_mutex",
    "scoped_lock",
    "set",
    "shared_future",
    "shared_lock",
    "shared_mutex",
    "shared_timed_mutex",
    "shared_ptr",
    "stack",
    "string_view",
    "stringstream",
    "timed_mutex",
    "thread",
    "true_type",
    "tuple",
    "unique_lock",
    "unique_ptr",
    "unordered_map",
    "unordered_multimap",
    "unordered_multiset",
    "unordered_set",
    "variant",
    "vector",
    "weak_ptr",
    "wstring",
    "wstring_view"
  ];
  const FUNCTION_HINTS = [
    "abort",
    "abs",
    "acos",
    "apply",
    "as_const",
    "asin",
    "atan",
    "atan2",
    "calloc",
    "ceil",
    "cerr",
    "cin",
    "clog",
    "cos",
    "cosh",
    "cout",
    "declval",
    "endl",
    "exchange",
    "exit",
    "exp",
    "fabs",
    "floor",
    "fmod",
    "forward",
    "fprintf",
    "fputs",
    "free",
    "frexp",
    "fscanf",
    "future",
    "invoke",
    "isalnum",
    "isalpha",
    "iscntrl",
    "isdigit",
    "isgraph",
    "islower",
    "isprint",
    "ispunct",
    "isspace",
    "isupper",
    "isxdigit",
    "labs",
    "launder",
    "ldexp",
    "log",
    "log10",
    "make_pair",
    "make_shared",
    "make_shared_for_overwrite",
    "make_tuple",
    "make_unique",
    "malloc",
    "memchr",
    "memcmp",
    "memcpy",
    "memset",
    "modf",
    "move",
    "pow",
    "printf",
    "putchar",
    "puts",
    "realloc",
    "scanf",
    "sin",
    "sinh",
    "snprintf",
    "sprintf",
    "sqrt",
    "sscanf",
    "std",
    "stderr",
    "stdin",
    "stdout",
    "strcat",
    "strchr",
    "strcmp",
    "strcpy",
    "strcspn",
    "strlen",
    "strncat",
    "strncmp",
    "strncpy",
    "strpbrk",
    "strrchr",
    "strspn",
    "strstr",
    "swap",
    "tan",
    "tanh",
    "terminate",
    "to_underlying",
    "tolower",
    "toupper",
    "vfprintf",
    "visit",
    "vprintf",
    "vsprintf"
  ];
  const LITERALS2 = [
    "NULL",
    "false",
    "nullopt",
    "nullptr",
    "true"
  ];
  const BUILT_IN = ["_Pragma"];
  const CPP_KEYWORDS = {
    type: RESERVED_TYPES,
    keyword: RESERVED_KEYWORDS,
    literal: LITERALS2,
    built_in: BUILT_IN,
    _type_hints: TYPE_HINTS
  };
  const FUNCTION_DISPATCH = {
    className: "function.dispatch",
    relevance: 0,
    keywords: {
      // Only for relevance, not highlighting.
      _hint: FUNCTION_HINTS
    },
    begin: regex.concat(
      /\b/,
      /(?!decltype)/,
      /(?!if)/,
      /(?!for)/,
      /(?!switch)/,
      /(?!while)/,
      hljs.IDENT_RE,
      regex.lookahead(/(<[^<>]+>|)\s*\(/)
    )
  };
  const EXPRESSION_CONTAINS = [
    FUNCTION_DISPATCH,
    PREPROCESSOR,
    CPP_PRIMITIVE_TYPES,
    C_LINE_COMMENT_MODE,
    hljs.C_BLOCK_COMMENT_MODE,
    NUMBERS,
    STRINGS
  ];
  const EXPRESSION_CONTEXT = {
    // This mode covers expression context where we can't expect a function
    // definition and shouldn't highlight anything that looks like one:
    // `return some()`, `else if()`, `(x*sum(1, 2))`
    variants: [
      {
        begin: /=/,
        end: /;/
      },
      {
        begin: /\(/,
        end: /\)/
      },
      {
        beginKeywords: "new throw return else",
        end: /;/
      }
    ],
    keywords: CPP_KEYWORDS,
    contains: EXPRESSION_CONTAINS.concat([
      {
        begin: /\(/,
        end: /\)/,
        keywords: CPP_KEYWORDS,
        contains: EXPRESSION_CONTAINS.concat(["self"]),
        relevance: 0
      }
    ]),
    relevance: 0
  };
  const FUNCTION_DECLARATION = {
    className: "function",
    begin: "(" + FUNCTION_TYPE_RE + "[\\*&\\s]+)+" + FUNCTION_TITLE,
    returnBegin: true,
    end: /[{;=]/,
    excludeEnd: true,
    keywords: CPP_KEYWORDS,
    illegal: /[^\w\s\*&:<>.]/,
    contains: [
      {
        // to prevent it from being confused as the function title
        begin: DECLTYPE_AUTO_RE,
        keywords: CPP_KEYWORDS,
        relevance: 0
      },
      {
        begin: FUNCTION_TITLE,
        returnBegin: true,
        contains: [TITLE_MODE],
        relevance: 0
      },
      // needed because we do not have look-behind on the below rule
      // to prevent it from grabbing the final : in a :: pair
      {
        begin: /::/,
        relevance: 0
      },
      // initializers
      {
        begin: /:/,
        endsWithParent: true,
        contains: [
          STRINGS,
          NUMBERS
        ]
      },
      // allow for multiple declarations, e.g.:
      // extern void f(int), g(char);
      {
        relevance: 0,
        match: /,/
      },
      {
        className: "params",
        begin: /\(/,
        end: /\)/,
        keywords: CPP_KEYWORDS,
        relevance: 0,
        contains: [
          C_LINE_COMMENT_MODE,
          hljs.C_BLOCK_COMMENT_MODE,
          STRINGS,
          NUMBERS,
          CPP_PRIMITIVE_TYPES,
          // Count matching parentheses.
          {
            begin: /\(/,
            end: /\)/,
            keywords: CPP_KEYWORDS,
            relevance: 0,
            contains: [
              "self",
              C_LINE_COMMENT_MODE,
              hljs.C_BLOCK_COMMENT_MODE,
              STRINGS,
              NUMBERS,
              CPP_PRIMITIVE_TYPES
            ]
          }
        ]
      },
      CPP_PRIMITIVE_TYPES,
      C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      PREPROCESSOR
    ]
  };
  return {
    name: "C++",
    aliases: [
      "cc",
      "c++",
      "h++",
      "hpp",
      "hh",
      "hxx",
      "cxx"
    ],
    keywords: CPP_KEYWORDS,
    illegal: "</",
    classNameAliases: { "function.dispatch": "built_in" },
    contains: [].concat(
      EXPRESSION_CONTEXT,
      FUNCTION_DECLARATION,
      FUNCTION_DISPATCH,
      EXPRESSION_CONTAINS,
      [
        PREPROCESSOR,
        {
          // containers: ie, `vector <int> rooms (9);`
          begin: "\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function|flat_map|flat_set)\\s*<(?!<)",
          end: ">",
          keywords: CPP_KEYWORDS,
          contains: [
            "self",
            CPP_PRIMITIVE_TYPES
          ]
        },
        {
          begin: hljs.IDENT_RE + "::",
          keywords: CPP_KEYWORDS
        },
        {
          match: [
            // extra complexity to deal with `enum class` and `enum struct`
            /\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,
            /\s+/,
            /\w+/
          ],
          className: {
            1: "keyword",
            3: "title.class"
          }
        }
      ]
    )
  };
}
function arduino(hljs) {
  const ARDUINO_KW = {
    type: [
      "boolean",
      "byte",
      "word",
      "String"
    ],
    built_in: [
      "KeyboardController",
      "MouseController",
      "SoftwareSerial",
      "EthernetServer",
      "EthernetClient",
      "LiquidCrystal",
      "RobotControl",
      "GSMVoiceCall",
      "EthernetUDP",
      "EsploraTFT",
      "HttpClient",
      "RobotMotor",
      "WiFiClient",
      "GSMScanner",
      "FileSystem",
      "Scheduler",
      "GSMServer",
      "YunClient",
      "YunServer",
      "IPAddress",
      "GSMClient",
      "GSMModem",
      "Keyboard",
      "Ethernet",
      "Console",
      "GSMBand",
      "Esplora",
      "Stepper",
      "Process",
      "WiFiUDP",
      "GSM_SMS",
      "Mailbox",
      "USBHost",
      "Firmata",
      "PImage",
      "Client",
      "Server",
      "GSMPIN",
      "FileIO",
      "Bridge",
      "Serial",
      "EEPROM",
      "Stream",
      "Mouse",
      "Audio",
      "Servo",
      "File",
      "Task",
      "GPRS",
      "WiFi",
      "Wire",
      "TFT",
      "GSM",
      "SPI",
      "SD"
    ],
    _hints: [
      "setup",
      "loop",
      "runShellCommandAsynchronously",
      "analogWriteResolution",
      "retrieveCallingNumber",
      "printFirmwareVersion",
      "analogReadResolution",
      "sendDigitalPortPair",
      "noListenOnLocalhost",
      "readJoystickButton",
      "setFirmwareVersion",
      "readJoystickSwitch",
      "scrollDisplayRight",
      "getVoiceCallStatus",
      "scrollDisplayLeft",
      "writeMicroseconds",
      "delayMicroseconds",
      "beginTransmission",
      "getSignalStrength",
      "runAsynchronously",
      "getAsynchronously",
      "listenOnLocalhost",
      "getCurrentCarrier",
      "readAccelerometer",
      "messageAvailable",
      "sendDigitalPorts",
      "lineFollowConfig",
      "countryNameWrite",
      "runShellCommand",
      "readStringUntil",
      "rewindDirectory",
      "readTemperature",
      "setClockDivider",
      "readLightSensor",
      "endTransmission",
      "analogReference",
      "detachInterrupt",
      "countryNameRead",
      "attachInterrupt",
      "encryptionType",
      "readBytesUntil",
      "robotNameWrite",
      "readMicrophone",
      "robotNameRead",
      "cityNameWrite",
      "userNameWrite",
      "readJoystickY",
      "readJoystickX",
      "mouseReleased",
      "openNextFile",
      "scanNetworks",
      "noInterrupts",
      "digitalWrite",
      "beginSpeaker",
      "mousePressed",
      "isActionDone",
      "mouseDragged",
      "displayLogos",
      "noAutoscroll",
      "addParameter",
      "remoteNumber",
      "getModifiers",
      "keyboardRead",
      "userNameRead",
      "waitContinue",
      "processInput",
      "parseCommand",
      "printVersion",
      "readNetworks",
      "writeMessage",
      "blinkVersion",
      "cityNameRead",
      "readMessage",
      "setDataMode",
      "parsePacket",
      "isListening",
      "setBitOrder",
      "beginPacket",
      "isDirectory",
      "motorsWrite",
      "drawCompass",
      "digitalRead",
      "clearScreen",
      "serialEvent",
      "rightToLeft",
      "setTextSize",
      "leftToRight",
      "requestFrom",
      "keyReleased",
      "compassRead",
      "analogWrite",
      "interrupts",
      "WiFiServer",
      "disconnect",
      "playMelody",
      "parseFloat",
      "autoscroll",
      "getPINUsed",
      "setPINUsed",
      "setTimeout",
      "sendAnalog",
      "readSlider",
      "analogRead",
      "beginWrite",
      "createChar",
      "motorsStop",
      "keyPressed",
      "tempoWrite",
      "readButton",
      "subnetMask",
      "debugPrint",
      "macAddress",
      "writeGreen",
      "randomSeed",
      "attachGPRS",
      "readString",
      "sendString",
      "remotePort",
      "releaseAll",
      "mouseMoved",
      "background",
      "getXChange",
      "getYChange",
      "answerCall",
      "getResult",
      "voiceCall",
      "endPacket",
      "constrain",
      "getSocket",
      "writeJSON",
      "getButton",
      "available",
      "connected",
      "findUntil",
      "readBytes",
      "exitValue",
      "readGreen",
      "writeBlue",
      "startLoop",
      "IPAddress",
      "isPressed",
      "sendSysex",
      "pauseMode",
      "gatewayIP",
      "setCursor",
      "getOemKey",
      "tuneWrite",
      "noDisplay",
      "loadImage",
      "switchPIN",
      "onRequest",
      "onReceive",
      "changePIN",
      "playFile",
      "noBuffer",
      "parseInt",
      "overflow",
      "checkPIN",
      "knobRead",
      "beginTFT",
      "bitClear",
      "updateIR",
      "bitWrite",
      "position",
      "writeRGB",
      "highByte",
      "writeRed",
      "setSpeed",
      "readBlue",
      "noStroke",
      "remoteIP",
      "transfer",
      "shutdown",
      "hangCall",
      "beginSMS",
      "endWrite",
      "attached",
      "maintain",
      "noCursor",
      "checkReg",
      "checkPUK",
      "shiftOut",
      "isValid",
      "shiftIn",
      "pulseIn",
      "connect",
      "println",
      "localIP",
      "pinMode",
      "getIMEI",
      "display",
      "noBlink",
      "process",
      "getBand",
      "running",
      "beginSD",
      "drawBMP",
      "lowByte",
      "setBand",
      "release",
      "bitRead",
      "prepare",
      "pointTo",
      "readRed",
      "setMode",
      "noFill",
      "remove",
      "listen",
      "stroke",
      "detach",
      "attach",
      "noTone",
      "exists",
      "buffer",
      "height",
      "bitSet",
      "circle",
      "config",
      "cursor",
      "random",
      "IRread",
      "setDNS",
      "endSMS",
      "getKey",
      "micros",
      "millis",
      "begin",
      "print",
      "write",
      "ready",
      "flush",
      "width",
      "isPIN",
      "blink",
      "clear",
      "press",
      "mkdir",
      "rmdir",
      "close",
      "point",
      "yield",
      "image",
      "BSSID",
      "click",
      "delay",
      "read",
      "text",
      "move",
      "peek",
      "beep",
      "rect",
      "line",
      "open",
      "seek",
      "fill",
      "size",
      "turn",
      "stop",
      "home",
      "find",
      "step",
      "tone",
      "sqrt",
      "RSSI",
      "SSID",
      "end",
      "bit",
      "tan",
      "cos",
      "sin",
      "pow",
      "map",
      "abs",
      "max",
      "min",
      "get",
      "run",
      "put"
    ],
    literal: [
      "DIGITAL_MESSAGE",
      "FIRMATA_STRING",
      "ANALOG_MESSAGE",
      "REPORT_DIGITAL",
      "REPORT_ANALOG",
      "INPUT_PULLUP",
      "SET_PIN_MODE",
      "INTERNAL2V56",
      "SYSTEM_RESET",
      "LED_BUILTIN",
      "INTERNAL1V1",
      "SYSEX_START",
      "INTERNAL",
      "EXTERNAL",
      "DEFAULT",
      "OUTPUT",
      "INPUT",
      "HIGH",
      "LOW"
    ]
  };
  const ARDUINO = cPlusPlus(hljs);
  const kws = (
    /** @type {Record<string,any>} */
    ARDUINO.keywords
  );
  kws.type = [
    ...kws.type,
    ...ARDUINO_KW.type
  ];
  kws.literal = [
    ...kws.literal,
    ...ARDUINO_KW.literal
  ];
  kws.built_in = [
    ...kws.built_in,
    ...ARDUINO_KW.built_in
  ];
  kws._hints = ARDUINO_KW._hints;
  ARDUINO.name = "Arduino";
  ARDUINO.aliases = ["ino"];
  ARDUINO.supersetOf = "cpp";
  return ARDUINO;
}
function bash(hljs) {
  const regex = hljs.regex;
  const VAR = {};
  const BRACED_VAR = {
    begin: /\$\{/,
    end: /\}/,
    contains: [
      "self",
      {
        begin: /:-/,
        contains: [VAR]
      }
      // default values
    ]
  };
  Object.assign(VAR, {
    className: "variable",
    variants: [
      { begin: regex.concat(
        /\$[\w\d#@][\w\d_]*/,
        // negative look-ahead tries to avoid matching patterns that are not
        // Perl at all like $ident$, @ident@, etc.
        `(?![\\w\\d])(?![$])`
      ) },
      BRACED_VAR
    ]
  });
  const SUBST = {
    className: "subst",
    begin: /\$\(/,
    end: /\)/,
    contains: [hljs.BACKSLASH_ESCAPE]
  };
  const COMMENT = hljs.inherit(
    hljs.COMMENT(),
    {
      match: [
        /(^|\s)/,
        /#.*$/
      ],
      scope: {
        2: "comment"
      }
    }
  );
  const HERE_DOC = {
    begin: /<<-?\s*(?=\w+)/,
    starts: { contains: [
      hljs.END_SAME_AS_BEGIN({
        begin: /(\w+)/,
        end: /(\w+)/,
        className: "string"
      })
    ] }
  };
  const QUOTE_STRING = {
    className: "string",
    begin: /"/,
    end: /"/,
    contains: [
      hljs.BACKSLASH_ESCAPE,
      VAR,
      SUBST
    ]
  };
  SUBST.contains.push(QUOTE_STRING);
  const ESCAPED_QUOTE = {
    match: /\\"/
  };
  const APOS_STRING = {
    className: "string",
    begin: /'/,
    end: /'/
  };
  const ESCAPED_APOS = {
    match: /\\'/
  };
  const ARITHMETIC = {
    begin: /\$?\(\(/,
    end: /\)\)/,
    contains: [
      {
        begin: /\d+#[0-9a-f]+/,
        className: "number"
      },
      hljs.NUMBER_MODE,
      VAR
    ]
  };
  const SH_LIKE_SHELLS = [
    "fish",
    "bash",
    "zsh",
    "sh",
    "csh",
    "ksh",
    "tcsh",
    "dash",
    "scsh"
  ];
  const KNOWN_SHEBANG = hljs.SHEBANG({
    binary: `(${SH_LIKE_SHELLS.join("|")})`,
    relevance: 10
  });
  const FUNCTION = {
    className: "function",
    begin: /\w[\w\d_]*\s*\(\s*\)\s*\{/,
    returnBegin: true,
    contains: [hljs.inherit(hljs.TITLE_MODE, { begin: /\w[\w\d_]*/ })],
    relevance: 0
  };
  const KEYWORDS2 = [
    "if",
    "then",
    "else",
    "elif",
    "fi",
    "time",
    "for",
    "while",
    "until",
    "in",
    "do",
    "done",
    "case",
    "esac",
    "coproc",
    "function",
    "select"
  ];
  const LITERALS2 = [
    "true",
    "false"
  ];
  const PATH_MODE = { match: /(\/[a-z._-]+)+/ };
  const SHELL_BUILT_INS = [
    "break",
    "cd",
    "continue",
    "eval",
    "exec",
    "exit",
    "export",
    "getopts",
    "hash",
    "pwd",
    "readonly",
    "return",
    "shift",
    "test",
    "times",
    "trap",
    "umask",
    "unset"
  ];
  const BASH_BUILT_INS = [
    "alias",
    "bind",
    "builtin",
    "caller",
    "command",
    "declare",
    "echo",
    "enable",
    "help",
    "let",
    "local",
    "logout",
    "mapfile",
    "printf",
    "read",
    "readarray",
    "source",
    "sudo",
    "type",
    "typeset",
    "ulimit",
    "unalias"
  ];
  const ZSH_BUILT_INS = [
    "autoload",
    "bg",
    "bindkey",
    "bye",
    "cap",
    "chdir",
    "clone",
    "comparguments",
    "compcall",
    "compctl",
    "compdescribe",
    "compfiles",
    "compgroups",
    "compquote",
    "comptags",
    "comptry",
    "compvalues",
    "dirs",
    "disable",
    "disown",
    "echotc",
    "echoti",
    "emulate",
    "fc",
    "fg",
    "float",
    "functions",
    "getcap",
    "getln",
    "history",
    "integer",
    "jobs",
    "kill",
    "limit",
    "log",
    "noglob",
    "popd",
    "print",
    "pushd",
    "pushln",
    "rehash",
    "sched",
    "setcap",
    "setopt",
    "stat",
    "suspend",
    "ttyctl",
    "unfunction",
    "unhash",
    "unlimit",
    "unsetopt",
    "vared",
    "wait",
    "whence",
    "where",
    "which",
    "zcompile",
    "zformat",
    "zftp",
    "zle",
    "zmodload",
    "zparseopts",
    "zprof",
    "zpty",
    "zregexparse",
    "zsocket",
    "zstyle",
    "ztcp"
  ];
  const GNU_CORE_UTILS = [
    "chcon",
    "chgrp",
    "chown",
    "chmod",
    "cp",
    "dd",
    "df",
    "dir",
    "dircolors",
    "ln",
    "ls",
    "mkdir",
    "mkfifo",
    "mknod",
    "mktemp",
    "mv",
    "realpath",
    "rm",
    "rmdir",
    "shred",
    "sync",
    "touch",
    "truncate",
    "vdir",
    "b2sum",
    "base32",
    "base64",
    "cat",
    "cksum",
    "comm",
    "csplit",
    "cut",
    "expand",
    "fmt",
    "fold",
    "head",
    "join",
    "md5sum",
    "nl",
    "numfmt",
    "od",
    "paste",
    "ptx",
    "pr",
    "sha1sum",
    "sha224sum",
    "sha256sum",
    "sha384sum",
    "sha512sum",
    "shuf",
    "sort",
    "split",
    "sum",
    "tac",
    "tail",
    "tr",
    "tsort",
    "unexpand",
    "uniq",
    "wc",
    "arch",
    "basename",
    "chroot",
    "date",
    "dirname",
    "du",
    "echo",
    "env",
    "expr",
    "factor",
    // "false", // keyword literal already
    "groups",
    "hostid",
    "id",
    "link",
    "logname",
    "nice",
    "nohup",
    "nproc",
    "pathchk",
    "pinky",
    "printenv",
    "printf",
    "pwd",
    "readlink",
    "runcon",
    "seq",
    "sleep",
    "stat",
    "stdbuf",
    "stty",
    "tee",
    "test",
    "timeout",
    // "true", // keyword literal already
    "tty",
    "uname",
    "unlink",
    "uptime",
    "users",
    "who",
    "whoami",
    "yes"
  ];
  return {
    name: "Bash",
    aliases: [
      "sh",
      "zsh"
    ],
    keywords: {
      $pattern: /\b[a-z][a-z0-9._-]+\b/,
      keyword: KEYWORDS2,
      literal: LITERALS2,
      built_in: [
        ...SHELL_BUILT_INS,
        ...BASH_BUILT_INS,
        // Shell modifiers
        "set",
        "shopt",
        ...ZSH_BUILT_INS,
        ...GNU_CORE_UTILS
      ]
    },
    contains: [
      KNOWN_SHEBANG,
      // to catch known shells and boost relevancy
      hljs.SHEBANG(),
      // to catch unknown shells but still highlight the shebang
      FUNCTION,
      ARITHMETIC,
      COMMENT,
      HERE_DOC,
      PATH_MODE,
      QUOTE_STRING,
      ESCAPED_QUOTE,
      APOS_STRING,
      ESCAPED_APOS,
      VAR
    ]
  };
}
function c(hljs) {
  const regex = hljs.regex;
  const C_LINE_COMMENT_MODE = hljs.COMMENT("//", "$", { contains: [{ begin: /\\\n/ }] });
  const DECLTYPE_AUTO_RE = "decltype\\(auto\\)";
  const NAMESPACE_RE = "[a-zA-Z_]\\w*::";
  const TEMPLATE_ARGUMENT_RE = "<[^<>]+>";
  const FUNCTION_TYPE_RE = "(" + DECLTYPE_AUTO_RE + "|" + regex.optional(NAMESPACE_RE) + "[a-zA-Z_]\\w*" + regex.optional(TEMPLATE_ARGUMENT_RE) + ")";
  const TYPES2 = {
    className: "type",
    variants: [
      { begin: "\\b[a-z\\d_]*_t\\b" },
      { match: /\batomic_[a-z]{3,6}\b/ }
    ]
  };
  const CHARACTER_ESCAPES = "\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)";
  const STRINGS = {
    className: "string",
    variants: [
      {
        begin: '(u8?|U|L)?"',
        end: '"',
        illegal: "\\n",
        contains: [hljs.BACKSLASH_ESCAPE]
      },
      {
        begin: "(u8?|U|L)?'(" + CHARACTER_ESCAPES + "|.)",
        end: "'",
        illegal: "."
      },
      hljs.END_SAME_AS_BEGIN({
        begin: /(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,
        end: /\)([^()\\ ]{0,16})"/
      })
    ]
  };
  const NUMBERS = {
    className: "number",
    variants: [
      { match: /\b(0b[01']+)/ },
      { match: /(-?)\b([\d']+(\.[\d']*)?|\.[\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)/ },
      { match: /(-?)\b(0[xX][a-fA-F0-9]+(?:'[a-fA-F0-9]+)*(?:\.[a-fA-F0-9]*(?:'[a-fA-F0-9]*)*)?(?:[pP][-+]?[0-9]+)?(l|L)?(u|U)?)/ },
      { match: /(-?)\b\d+(?:'\d+)*(?:\.\d*(?:'\d*)*)?(?:[eE][-+]?\d+)?/ }
    ],
    relevance: 0
  };
  const PREPROCESSOR = {
    className: "meta",
    begin: /#\s*[a-z]+\b/,
    end: /$/,
    keywords: { keyword: "if else elif endif define undef warning error line pragma _Pragma ifdef ifndef elifdef elifndef include" },
    contains: [
      {
        begin: /\\\n/,
        relevance: 0
      },
      hljs.inherit(STRINGS, { className: "string" }),
      {
        className: "string",
        begin: /<.*?>/
      },
      C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE
    ]
  };
  const TITLE_MODE = {
    className: "title",
    begin: regex.optional(NAMESPACE_RE) + hljs.IDENT_RE,
    relevance: 0
  };
  const FUNCTION_TITLE = regex.optional(NAMESPACE_RE) + hljs.IDENT_RE + "\\s*\\(";
  const C_KEYWORDS = [
    "asm",
    "auto",
    "break",
    "case",
    "continue",
    "default",
    "do",
    "else",
    "enum",
    "extern",
    "for",
    "fortran",
    "goto",
    "if",
    "inline",
    "register",
    "restrict",
    "return",
    "sizeof",
    "typeof",
    "typeof_unqual",
    "struct",
    "switch",
    "typedef",
    "union",
    "volatile",
    "while",
    "_Alignas",
    "_Alignof",
    "_Atomic",
    "_Generic",
    "_Noreturn",
    "_Static_assert",
    "_Thread_local",
    // aliases
    "alignas",
    "alignof",
    "noreturn",
    "static_assert",
    "thread_local",
    // not a C keyword but is, for all intents and purposes, treated exactly like one.
    "_Pragma"
  ];
  const C_TYPES = [
    "float",
    "double",
    "signed",
    "unsigned",
    "int",
    "short",
    "long",
    "char",
    "void",
    "_Bool",
    "_BitInt",
    "_Complex",
    "_Imaginary",
    "_Decimal32",
    "_Decimal64",
    "_Decimal96",
    "_Decimal128",
    "_Decimal64x",
    "_Decimal128x",
    "_Float16",
    "_Float32",
    "_Float64",
    "_Float128",
    "_Float32x",
    "_Float64x",
    "_Float128x",
    // modifiers
    "const",
    "static",
    "constexpr",
    // aliases
    "complex",
    "bool",
    "imaginary"
  ];
  const KEYWORDS2 = {
    keyword: C_KEYWORDS,
    type: C_TYPES,
    literal: "true false NULL",
    // TODO: apply hinting work similar to what was done in cpp.js
    built_in: "std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr"
  };
  const EXPRESSION_CONTAINS = [
    PREPROCESSOR,
    TYPES2,
    C_LINE_COMMENT_MODE,
    hljs.C_BLOCK_COMMENT_MODE,
    NUMBERS,
    STRINGS
  ];
  const EXPRESSION_CONTEXT = {
    // This mode covers expression context where we can't expect a function
    // definition and shouldn't highlight anything that looks like one:
    // `return some()`, `else if()`, `(x*sum(1, 2))`
    variants: [
      {
        begin: /=/,
        end: /;/
      },
      {
        begin: /\(/,
        end: /\)/
      },
      {
        beginKeywords: "new throw return else",
        end: /;/
      }
    ],
    keywords: KEYWORDS2,
    contains: EXPRESSION_CONTAINS.concat([
      {
        begin: /\(/,
        end: /\)/,
        keywords: KEYWORDS2,
        contains: EXPRESSION_CONTAINS.concat(["self"]),
        relevance: 0
      }
    ]),
    relevance: 0
  };
  const FUNCTION_DECLARATION = {
    begin: "(" + FUNCTION_TYPE_RE + "[\\*&\\s]+)+" + FUNCTION_TITLE,
    returnBegin: true,
    end: /[{;=]/,
    excludeEnd: true,
    keywords: KEYWORDS2,
    illegal: /[^\w\s\*&:<>.]/,
    contains: [
      {
        // to prevent it from being confused as the function title
        begin: DECLTYPE_AUTO_RE,
        keywords: KEYWORDS2,
        relevance: 0
      },
      {
        begin: FUNCTION_TITLE,
        returnBegin: true,
        contains: [hljs.inherit(TITLE_MODE, { className: "title.function" })],
        relevance: 0
      },
      // allow for multiple declarations, e.g.:
      // extern void f(int), g(char);
      {
        relevance: 0,
        match: /,/
      },
      {
        className: "params",
        begin: /\(/,
        end: /\)/,
        keywords: KEYWORDS2,
        relevance: 0,
        contains: [
          C_LINE_COMMENT_MODE,
          hljs.C_BLOCK_COMMENT_MODE,
          STRINGS,
          NUMBERS,
          TYPES2,
          // Count matching parentheses.
          {
            begin: /\(/,
            end: /\)/,
            keywords: KEYWORDS2,
            relevance: 0,
            contains: [
              "self",
              C_LINE_COMMENT_MODE,
              hljs.C_BLOCK_COMMENT_MODE,
              STRINGS,
              NUMBERS,
              TYPES2
            ]
          }
        ]
      },
      TYPES2,
      C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      PREPROCESSOR
    ]
  };
  return {
    name: "C",
    aliases: ["h"],
    keywords: KEYWORDS2,
    // Until differentiations are added between `c` and `cpp`, `c` will
    // not be auto-detected to avoid auto-detect conflicts between C and C++
    disableAutodetect: true,
    illegal: "</",
    contains: [].concat(
      EXPRESSION_CONTEXT,
      FUNCTION_DECLARATION,
      EXPRESSION_CONTAINS,
      [
        PREPROCESSOR,
        {
          begin: hljs.IDENT_RE + "::",
          keywords: KEYWORDS2
        },
        {
          className: "class",
          beginKeywords: "enum class struct union",
          end: /[{;:<>=]/,
          contains: [
            { beginKeywords: "final class struct" },
            hljs.TITLE_MODE
          ]
        }
      ]
    ),
    exports: {
      preprocessor: PREPROCESSOR,
      strings: STRINGS,
      keywords: KEYWORDS2
    }
  };
}
function cpp(hljs) {
  const regex = hljs.regex;
  const C_LINE_COMMENT_MODE = hljs.COMMENT("//", "$", { contains: [{ begin: /\\\n/ }] });
  const DECLTYPE_AUTO_RE = "decltype\\(auto\\)";
  const NAMESPACE_RE = "[a-zA-Z_]\\w*::";
  const TEMPLATE_ARGUMENT_RE = "<[^<>]+>";
  const FUNCTION_TYPE_RE = "(?!struct)(" + DECLTYPE_AUTO_RE + "|" + regex.optional(NAMESPACE_RE) + "[a-zA-Z_]\\w*" + regex.optional(TEMPLATE_ARGUMENT_RE) + ")";
  const CPP_PRIMITIVE_TYPES = {
    className: "type",
    begin: "\\b[a-z\\d_]*_t\\b"
  };
  const CHARACTER_ESCAPES = "\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)";
  const STRINGS = {
    className: "string",
    variants: [
      {
        begin: '(u8?|U|L)?"',
        end: '"',
        illegal: "\\n",
        contains: [hljs.BACKSLASH_ESCAPE]
      },
      {
        begin: "(u8?|U|L)?'(" + CHARACTER_ESCAPES + "|.)",
        end: "'",
        illegal: "."
      },
      hljs.END_SAME_AS_BEGIN({
        begin: /(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,
        end: /\)([^()\\ ]{0,16})"/
      })
    ]
  };
  const NUMBERS = {
    className: "number",
    variants: [
      // Floating-point literal.
      {
        begin: "[+-]?(?:(?:[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)"
      },
      // Integer literal.
      {
        begin: "[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)"
        // Note: there are user-defined literal suffixes too, but perhaps having the custom suffix not part of the
        // literal highlight actually makes it stand out more.
      }
    ],
    relevance: 0
  };
  const PREPROCESSOR = {
    className: "meta",
    begin: /#\s*[a-z]+\b/,
    end: /$/,
    keywords: { keyword: "if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" },
    contains: [
      {
        begin: /\\\n/,
        relevance: 0
      },
      hljs.inherit(STRINGS, { className: "string" }),
      {
        className: "string",
        begin: /<.*?>/
      },
      C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE
    ]
  };
  const TITLE_MODE = {
    className: "title",
    begin: regex.optional(NAMESPACE_RE) + hljs.IDENT_RE,
    relevance: 0
  };
  const FUNCTION_TITLE = regex.optional(NAMESPACE_RE) + hljs.IDENT_RE + "\\s*\\(";
  const RESERVED_KEYWORDS = [
    "alignas",
    "alignof",
    "and",
    "and_eq",
    "asm",
    "atomic_cancel",
    "atomic_commit",
    "atomic_noexcept",
    "auto",
    "bitand",
    "bitor",
    "break",
    "case",
    "catch",
    "class",
    "co_await",
    "co_return",
    "co_yield",
    "compl",
    "concept",
    "const_cast|10",
    "consteval",
    "constexpr",
    "constinit",
    "continue",
    "decltype",
    "default",
    "delete",
    "do",
    "dynamic_cast|10",
    "else",
    "enum",
    "explicit",
    "export",
    "extern",
    "false",
    "final",
    "for",
    "friend",
    "goto",
    "if",
    "import",
    "inline",
    "module",
    "mutable",
    "namespace",
    "new",
    "noexcept",
    "not",
    "not_eq",
    "nullptr",
    "operator",
    "or",
    "or_eq",
    "override",
    "private",
    "protected",
    "public",
    "reflexpr",
    "register",
    "reinterpret_cast|10",
    "requires",
    "return",
    "sizeof",
    "static_assert",
    "static_cast|10",
    "struct",
    "switch",
    "synchronized",
    "template",
    "this",
    "thread_local",
    "throw",
    "transaction_safe",
    "transaction_safe_dynamic",
    "true",
    "try",
    "typedef",
    "typeid",
    "typename",
    "union",
    "using",
    "virtual",
    "volatile",
    "while",
    "xor",
    "xor_eq"
  ];
  const RESERVED_TYPES = [
    "bool",
    "char",
    "char16_t",
    "char32_t",
    "char8_t",
    "double",
    "float",
    "int",
    "long",
    "short",
    "void",
    "wchar_t",
    "unsigned",
    "signed",
    "const",
    "static"
  ];
  const TYPE_HINTS = [
    "any",
    "auto_ptr",
    "barrier",
    "binary_semaphore",
    "bitset",
    "complex",
    "condition_variable",
    "condition_variable_any",
    "counting_semaphore",
    "deque",
    "false_type",
    "flat_map",
    "flat_set",
    "future",
    "imaginary",
    "initializer_list",
    "istringstream",
    "jthread",
    "latch",
    "lock_guard",
    "multimap",
    "multiset",
    "mutex",
    "optional",
    "ostringstream",
    "packaged_task",
    "pair",
    "promise",
    "priority_queue",
    "queue",
    "recursive_mutex",
    "recursive_timed_mutex",
    "scoped_lock",
    "set",
    "shared_future",
    "shared_lock",
    "shared_mutex",
    "shared_timed_mutex",
    "shared_ptr",
    "stack",
    "string_view",
    "stringstream",
    "timed_mutex",
    "thread",
    "true_type",
    "tuple",
    "unique_lock",
    "unique_ptr",
    "unordered_map",
    "unordered_multimap",
    "unordered_multiset",
    "unordered_set",
    "variant",
    "vector",
    "weak_ptr",
    "wstring",
    "wstring_view"
  ];
  const FUNCTION_HINTS = [
    "abort",
    "abs",
    "acos",
    "apply",
    "as_const",
    "asin",
    "atan",
    "atan2",
    "calloc",
    "ceil",
    "cerr",
    "cin",
    "clog",
    "cos",
    "cosh",
    "cout",
    "declval",
    "endl",
    "exchange",
    "exit",
    "exp",
    "fabs",
    "floor",
    "fmod",
    "forward",
    "fprintf",
    "fputs",
    "free",
    "frexp",
    "fscanf",
    "future",
    "invoke",
    "isalnum",
    "isalpha",
    "iscntrl",
    "isdigit",
    "isgraph",
    "islower",
    "isprint",
    "ispunct",
    "isspace",
    "isupper",
    "isxdigit",
    "labs",
    "launder",
    "ldexp",
    "log",
    "log10",
    "make_pair",
    "make_shared",
    "make_shared_for_overwrite",
    "make_tuple",
    "make_unique",
    "malloc",
    "memchr",
    "memcmp",
    "memcpy",
    "memset",
    "modf",
    "move",
    "pow",
    "printf",
    "putchar",
    "puts",
    "realloc",
    "scanf",
    "sin",
    "sinh",
    "snprintf",
    "sprintf",
    "sqrt",
    "sscanf",
    "std",
    "stderr",
    "stdin",
    "stdout",
    "strcat",
    "strchr",
    "strcmp",
    "strcpy",
    "strcspn",
    "strlen",
    "strncat",
    "strncmp",
    "strncpy",
    "strpbrk",
    "strrchr",
    "strspn",
    "strstr",
    "swap",
    "tan",
    "tanh",
    "terminate",
    "to_underlying",
    "tolower",
    "toupper",
    "vfprintf",
    "visit",
    "vprintf",
    "vsprintf"
  ];
  const LITERALS2 = [
    "NULL",
    "false",
    "nullopt",
    "nullptr",
    "true"
  ];
  const BUILT_IN = ["_Pragma"];
  const CPP_KEYWORDS = {
    type: RESERVED_TYPES,
    keyword: RESERVED_KEYWORDS,
    literal: LITERALS2,
    built_in: BUILT_IN,
    _type_hints: TYPE_HINTS
  };
  const FUNCTION_DISPATCH = {
    className: "function.dispatch",
    relevance: 0,
    keywords: {
      // Only for relevance, not highlighting.
      _hint: FUNCTION_HINTS
    },
    begin: regex.concat(
      /\b/,
      /(?!decltype)/,
      /(?!if)/,
      /(?!for)/,
      /(?!switch)/,
      /(?!while)/,
      hljs.IDENT_RE,
      regex.lookahead(/(<[^<>]+>|)\s*\(/)
    )
  };
  const EXPRESSION_CONTAINS = [
    FUNCTION_DISPATCH,
    PREPROCESSOR,
    CPP_PRIMITIVE_TYPES,
    C_LINE_COMMENT_MODE,
    hljs.C_BLOCK_COMMENT_MODE,
    NUMBERS,
    STRINGS
  ];
  const EXPRESSION_CONTEXT = {
    // This mode covers expression context where we can't expect a function
    // definition and shouldn't highlight anything that looks like one:
    // `return some()`, `else if()`, `(x*sum(1, 2))`
    variants: [
      {
        begin: /=/,
        end: /;/
      },
      {
        begin: /\(/,
        end: /\)/
      },
      {
        beginKeywords: "new throw return else",
        end: /;/
      }
    ],
    keywords: CPP_KEYWORDS,
    contains: EXPRESSION_CONTAINS.concat([
      {
        begin: /\(/,
        end: /\)/,
        keywords: CPP_KEYWORDS,
        contains: EXPRESSION_CONTAINS.concat(["self"]),
        relevance: 0
      }
    ]),
    relevance: 0
  };
  const FUNCTION_DECLARATION = {
    className: "function",
    begin: "(" + FUNCTION_TYPE_RE + "[\\*&\\s]+)+" + FUNCTION_TITLE,
    returnBegin: true,
    end: /[{;=]/,
    excludeEnd: true,
    keywords: CPP_KEYWORDS,
    illegal: /[^\w\s\*&:<>.]/,
    contains: [
      {
        // to prevent it from being confused as the function title
        begin: DECLTYPE_AUTO_RE,
        keywords: CPP_KEYWORDS,
        relevance: 0
      },
      {
        begin: FUNCTION_TITLE,
        returnBegin: true,
        contains: [TITLE_MODE],
        relevance: 0
      },
      // needed because we do not have look-behind on the below rule
      // to prevent it from grabbing the final : in a :: pair
      {
        begin: /::/,
        relevance: 0
      },
      // initializers
      {
        begin: /:/,
        endsWithParent: true,
        contains: [
          STRINGS,
          NUMBERS
        ]
      },
      // allow for multiple declarations, e.g.:
      // extern void f(int), g(char);
      {
        relevance: 0,
        match: /,/
      },
      {
        className: "params",
        begin: /\(/,
        end: /\)/,
        keywords: CPP_KEYWORDS,
        relevance: 0,
        contains: [
          C_LINE_COMMENT_MODE,
          hljs.C_BLOCK_COMMENT_MODE,
          STRINGS,
          NUMBERS,
          CPP_PRIMITIVE_TYPES,
          // Count matching parentheses.
          {
            begin: /\(/,
            end: /\)/,
            keywords: CPP_KEYWORDS,
            relevance: 0,
            contains: [
              "self",
              C_LINE_COMMENT_MODE,
              hljs.C_BLOCK_COMMENT_MODE,
              STRINGS,
              NUMBERS,
              CPP_PRIMITIVE_TYPES
            ]
          }
        ]
      },
      CPP_PRIMITIVE_TYPES,
      C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      PREPROCESSOR
    ]
  };
  return {
    name: "C++",
    aliases: [
      "cc",
      "c++",
      "h++",
      "hpp",
      "hh",
      "hxx",
      "cxx"
    ],
    keywords: CPP_KEYWORDS,
    illegal: "</",
    classNameAliases: { "function.dispatch": "built_in" },
    contains: [].concat(
      EXPRESSION_CONTEXT,
      FUNCTION_DECLARATION,
      FUNCTION_DISPATCH,
      EXPRESSION_CONTAINS,
      [
        PREPROCESSOR,
        {
          // containers: ie, `vector <int> rooms (9);`
          begin: "\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function|flat_map|flat_set)\\s*<(?!<)",
          end: ">",
          keywords: CPP_KEYWORDS,
          contains: [
            "self",
            CPP_PRIMITIVE_TYPES
          ]
        },
        {
          begin: hljs.IDENT_RE + "::",
          keywords: CPP_KEYWORDS
        },
        {
          match: [
            // extra complexity to deal with `enum class` and `enum struct`
            /\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,
            /\s+/,
            /\w+/
          ],
          className: {
            1: "keyword",
            3: "title.class"
          }
        }
      ]
    )
  };
}
function csharp(hljs) {
  const BUILT_IN_KEYWORDS = [
    "bool",
    "byte",
    "char",
    "decimal",
    "delegate",
    "double",
    "dynamic",
    "enum",
    "float",
    "int",
    "long",
    "nint",
    "nuint",
    "object",
    "sbyte",
    "short",
    "string",
    "ulong",
    "uint",
    "ushort"
  ];
  const FUNCTION_MODIFIERS = [
    "public",
    "private",
    "protected",
    "static",
    "internal",
    "protected",
    "abstract",
    "async",
    "extern",
    "override",
    "unsafe",
    "virtual",
    "new",
    "sealed",
    "partial"
  ];
  const LITERAL_KEYWORDS = [
    "default",
    "false",
    "null",
    "true"
  ];
  const NORMAL_KEYWORDS = [
    "abstract",
    "as",
    "base",
    "break",
    "case",
    "catch",
    "class",
    "const",
    "continue",
    "do",
    "else",
    "event",
    "explicit",
    "extern",
    "finally",
    "fixed",
    "for",
    "foreach",
    "goto",
    "if",
    "implicit",
    "in",
    "interface",
    "internal",
    "is",
    "lock",
    "namespace",
    "new",
    "operator",
    "out",
    "override",
    "params",
    "private",
    "protected",
    "public",
    "readonly",
    "record",
    "ref",
    "return",
    "scoped",
    "sealed",
    "sizeof",
    "stackalloc",
    "static",
    "struct",
    "switch",
    "this",
    "throw",
    "try",
    "typeof",
    "unchecked",
    "unsafe",
    "using",
    "virtual",
    "void",
    "volatile",
    "while"
  ];
  const CONTEXTUAL_KEYWORDS = [
    "add",
    "alias",
    "and",
    "ascending",
    "args",
    "async",
    "await",
    "by",
    "descending",
    "dynamic",
    "equals",
    "file",
    "from",
    "get",
    "global",
    "group",
    "init",
    "into",
    "join",
    "let",
    "nameof",
    "not",
    "notnull",
    "on",
    "or",
    "orderby",
    "partial",
    "record",
    "remove",
    "required",
    "scoped",
    "select",
    "set",
    "unmanaged",
    "value|0",
    "var",
    "when",
    "where",
    "with",
    "yield"
  ];
  const KEYWORDS2 = {
    keyword: NORMAL_KEYWORDS.concat(CONTEXTUAL_KEYWORDS),
    built_in: BUILT_IN_KEYWORDS,
    literal: LITERAL_KEYWORDS
  };
  const TITLE_MODE = hljs.inherit(hljs.TITLE_MODE, { begin: "[a-zA-Z](\\.?\\w)*" });
  const NUMBERS = {
    className: "number",
    variants: [
      { begin: "\\b(0b[01']+)" },
      { begin: "(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)" },
      { begin: "(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" }
    ],
    relevance: 0
  };
  const RAW_STRING = {
    className: "string",
    begin: /"""("*)(?!")(.|\n)*?"""\1/,
    relevance: 1
  };
  const VERBATIM_STRING = {
    className: "string",
    begin: '@"',
    end: '"',
    contains: [{ begin: '""' }]
  };
  const VERBATIM_STRING_NO_LF = hljs.inherit(VERBATIM_STRING, { illegal: /\n/ });
  const SUBST = {
    className: "subst",
    begin: /\{/,
    end: /\}/,
    keywords: KEYWORDS2
  };
  const SUBST_NO_LF = hljs.inherit(SUBST, { illegal: /\n/ });
  const INTERPOLATED_STRING = {
    className: "string",
    begin: /\$"/,
    end: '"',
    illegal: /\n/,
    contains: [
      { begin: /\{\{/ },
      { begin: /\}\}/ },
      hljs.BACKSLASH_ESCAPE,
      SUBST_NO_LF
    ]
  };
  const INTERPOLATED_VERBATIM_STRING = {
    className: "string",
    begin: /\$@"/,
    end: '"',
    contains: [
      { begin: /\{\{/ },
      { begin: /\}\}/ },
      { begin: '""' },
      SUBST
    ]
  };
  const INTERPOLATED_VERBATIM_STRING_NO_LF = hljs.inherit(INTERPOLATED_VERBATIM_STRING, {
    illegal: /\n/,
    contains: [
      { begin: /\{\{/ },
      { begin: /\}\}/ },
      { begin: '""' },
      SUBST_NO_LF
    ]
  });
  SUBST.contains = [
    INTERPOLATED_VERBATIM_STRING,
    INTERPOLATED_STRING,
    VERBATIM_STRING,
    hljs.APOS_STRING_MODE,
    hljs.QUOTE_STRING_MODE,
    NUMBERS,
    hljs.C_BLOCK_COMMENT_MODE
  ];
  SUBST_NO_LF.contains = [
    INTERPOLATED_VERBATIM_STRING_NO_LF,
    INTERPOLATED_STRING,
    VERBATIM_STRING_NO_LF,
    hljs.APOS_STRING_MODE,
    hljs.QUOTE_STRING_MODE,
    NUMBERS,
    hljs.inherit(hljs.C_BLOCK_COMMENT_MODE, { illegal: /\n/ })
  ];
  const STRING = { variants: [
    RAW_STRING,
    INTERPOLATED_VERBATIM_STRING,
    INTERPOLATED_STRING,
    VERBATIM_STRING,
    hljs.APOS_STRING_MODE,
    hljs.QUOTE_STRING_MODE
  ] };
  const GENERIC_MODIFIER = {
    begin: "<",
    end: ">",
    contains: [
      { beginKeywords: "in out" },
      TITLE_MODE
    ]
  };
  const TYPE_IDENT_RE = hljs.IDENT_RE + "(<" + hljs.IDENT_RE + "(\\s*,\\s*" + hljs.IDENT_RE + ")*>)?(\\[\\])?";
  const AT_IDENTIFIER = {
    // prevents expressions like `@class` from incorrect flagging
    // `class` as a keyword
    begin: "@" + hljs.IDENT_RE,
    relevance: 0
  };
  return {
    name: "C#",
    aliases: [
      "cs",
      "c#"
    ],
    keywords: KEYWORDS2,
    illegal: /::/,
    contains: [
      hljs.COMMENT(
        "///",
        "$",
        {
          returnBegin: true,
          contains: [
            {
              className: "doctag",
              variants: [
                {
                  begin: "///",
                  relevance: 0
                },
                { begin: "<!--|-->" },
                {
                  begin: "</?",
                  end: ">"
                }
              ]
            }
          ]
        }
      ),
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      {
        className: "meta",
        begin: "#",
        end: "$",
        keywords: { keyword: "if else elif endif define undef warning error line region endregion pragma checksum" }
      },
      STRING,
      NUMBERS,
      {
        beginKeywords: "class interface",
        relevance: 0,
        end: /[{;=]/,
        illegal: /[^\s:,]/,
        contains: [
          { beginKeywords: "where class" },
          TITLE_MODE,
          GENERIC_MODIFIER,
          hljs.C_LINE_COMMENT_MODE,
          hljs.C_BLOCK_COMMENT_MODE
        ]
      },
      {
        beginKeywords: "namespace",
        relevance: 0,
        end: /[{;=]/,
        illegal: /[^\s:]/,
        contains: [
          TITLE_MODE,
          hljs.C_LINE_COMMENT_MODE,
          hljs.C_BLOCK_COMMENT_MODE
        ]
      },
      {
        beginKeywords: "record",
        relevance: 0,
        end: /[{;=]/,
        illegal: /[^\s:]/,
        contains: [
          TITLE_MODE,
          GENERIC_MODIFIER,
          hljs.C_LINE_COMMENT_MODE,
          hljs.C_BLOCK_COMMENT_MODE
        ]
      },
      {
        // [Attributes("")]
        className: "meta",
        begin: "^\\s*\\[(?=[\\w])",
        excludeBegin: true,
        end: "\\]",
        excludeEnd: true,
        contains: [
          {
            className: "string",
            begin: /"/,
            end: /"/
          }
        ]
      },
      {
        // Expression keywords prevent 'keyword Name(...)' from being
        // recognized as a function definition
        beginKeywords: "new return throw await else",
        relevance: 0
      },
      {
        className: "function",
        begin: "(" + TYPE_IDENT_RE + "\\s+)+" + hljs.IDENT_RE + "\\s*(<[^=]+>\\s*)?\\(",
        returnBegin: true,
        end: /\s*[{;=]/,
        excludeEnd: true,
        keywords: KEYWORDS2,
        contains: [
          // prevents these from being highlighted `title`
          {
            beginKeywords: FUNCTION_MODIFIERS.join(" "),
            relevance: 0
          },
          {
            begin: hljs.IDENT_RE + "\\s*(<[^=]+>\\s*)?\\(",
            returnBegin: true,
            contains: [
              hljs.TITLE_MODE,
              GENERIC_MODIFIER
            ],
            relevance: 0
          },
          { match: /\(\)/ },
          {
            className: "params",
            begin: /\(/,
            end: /\)/,
            excludeBegin: true,
            excludeEnd: true,
            keywords: KEYWORDS2,
            relevance: 0,
            contains: [
              STRING,
              NUMBERS,
              hljs.C_BLOCK_COMMENT_MODE
            ]
          },
          hljs.C_LINE_COMMENT_MODE,
          hljs.C_BLOCK_COMMENT_MODE
        ]
      },
      AT_IDENTIFIER
    ]
  };
}
const MODES$2 = (hljs) => {
  return {
    IMPORTANT: {
      scope: "meta",
      begin: "!important"
    },
    BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,
    HEXCOLOR: {
      scope: "number",
      begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/
    },
    FUNCTION_DISPATCH: {
      className: "built_in",
      begin: /[\w-]+(?=\()/
    },
    ATTRIBUTE_SELECTOR_MODE: {
      scope: "selector-attr",
      begin: /\[/,
      end: /\]/,
      illegal: "$",
      contains: [
        hljs.APOS_STRING_MODE,
        hljs.QUOTE_STRING_MODE
      ]
    },
    CSS_NUMBER_MODE: {
      scope: "number",
      begin: hljs.NUMBER_RE + "(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",
      relevance: 0
    },
    CSS_VARIABLE: {
      className: "attr",
      begin: /--[A-Za-z_][A-Za-z0-9_-]*/
    }
  };
};
const HTML_TAGS$2 = [
  "a",
  "abbr",
  "address",
  "article",
  "aside",
  "audio",
  "b",
  "blockquote",
  "body",
  "button",
  "canvas",
  "caption",
  "cite",
  "code",
  "dd",
  "del",
  "details",
  "dfn",
  "div",
  "dl",
  "dt",
  "em",
  "fieldset",
  "figcaption",
  "figure",
  "footer",
  "form",
  "h1",
  "h2",
  "h3",
  "h4",
  "h5",
  "h6",
  "header",
  "hgroup",
  "html",
  "i",
  "iframe",
  "img",
  "input",
  "ins",
  "kbd",
  "label",
  "legend",
  "li",
  "main",
  "mark",
  "menu",
  "nav",
  "object",
  "ol",
  "optgroup",
  "option",
  "p",
  "picture",
  "q",
  "quote",
  "samp",
  "section",
  "select",
  "source",
  "span",
  "strong",
  "summary",
  "sup",
  "table",
  "tbody",
  "td",
  "textarea",
  "tfoot",
  "th",
  "thead",
  "time",
  "tr",
  "ul",
  "var",
  "video"
];
const SVG_TAGS$2 = [
  "defs",
  "g",
  "marker",
  "mask",
  "pattern",
  "svg",
  "switch",
  "symbol",
  "feBlend",
  "feColorMatrix",
  "feComponentTransfer",
  "feComposite",
  "feConvolveMatrix",
  "feDiffuseLighting",
  "feDisplacementMap",
  "feFlood",
  "feGaussianBlur",
  "feImage",
  "feMerge",
  "feMorphology",
  "feOffset",
  "feSpecularLighting",
  "feTile",
  "feTurbulence",
  "linearGradient",
  "radialGradient",
  "stop",
  "circle",
  "ellipse",
  "image",
  "line",
  "path",
  "polygon",
  "polyline",
  "rect",
  "text",
  "use",
  "textPath",
  "tspan",
  "foreignObject",
  "clipPath"
];
const TAGS$2 = [
  ...HTML_TAGS$2,
  ...SVG_TAGS$2
];
const MEDIA_FEATURES$2 = [
  "any-hover",
  "any-pointer",
  "aspect-ratio",
  "color",
  "color-gamut",
  "color-index",
  "device-aspect-ratio",
  "device-height",
  "device-width",
  "display-mode",
  "forced-colors",
  "grid",
  "height",
  "hover",
  "inverted-colors",
  "monochrome",
  "orientation",
  "overflow-block",
  "overflow-inline",
  "pointer",
  "prefers-color-scheme",
  "prefers-contrast",
  "prefers-reduced-motion",
  "prefers-reduced-transparency",
  "resolution",
  "scan",
  "scripting",
  "update",
  "width",
  // TODO: find a better solution?
  "min-width",
  "max-width",
  "min-height",
  "max-height"
].sort().reverse();
const PSEUDO_CLASSES$2 = [
  "active",
  "any-link",
  "blank",
  "checked",
  "current",
  "default",
  "defined",
  "dir",
  // dir()
  "disabled",
  "drop",
  "empty",
  "enabled",
  "first",
  "first-child",
  "first-of-type",
  "fullscreen",
  "future",
  "focus",
  "focus-visible",
  "focus-within",
  "has",
  // has()
  "host",
  // host or host()
  "host-context",
  // host-context()
  "hover",
  "indeterminate",
  "in-range",
  "invalid",
  "is",
  // is()
  "lang",
  // lang()
  "last-child",
  "last-of-type",
  "left",
  "link",
  "local-link",
  "not",
  // not()
  "nth-child",
  // nth-child()
  "nth-col",
  // nth-col()
  "nth-last-child",
  // nth-last-child()
  "nth-last-col",
  // nth-last-col()
  "nth-last-of-type",
  //nth-last-of-type()
  "nth-of-type",
  //nth-of-type()
  "only-child",
  "only-of-type",
  "optional",
  "out-of-range",
  "past",
  "placeholder-shown",
  "read-only",
  "read-write",
  "required",
  "right",
  "root",
  "scope",
  "target",
  "target-within",
  "user-invalid",
  "valid",
  "visited",
  "where"
  // where()
].sort().reverse();
const PSEUDO_ELEMENTS$2 = [
  "after",
  "backdrop",
  "before",
  "cue",
  "cue-region",
  "first-letter",
  "first-line",
  "grammar-error",
  "marker",
  "part",
  "placeholder",
  "selection",
  "slotted",
  "spelling-error"
].sort().reverse();
const ATTRIBUTES$2 = [
  "accent-color",
  "align-content",
  "align-items",
  "align-self",
  "alignment-baseline",
  "all",
  "anchor-name",
  "animation",
  "animation-composition",
  "animation-delay",
  "animation-direction",
  "animation-duration",
  "animation-fill-mode",
  "animation-iteration-count",
  "animation-name",
  "animation-play-state",
  "animation-range",
  "animation-range-end",
  "animation-range-start",
  "animation-timeline",
  "animation-timing-function",
  "appearance",
  "aspect-ratio",
  "backdrop-filter",
  "backface-visibility",
  "background",
  "background-attachment",
  "background-blend-mode",
  "background-clip",
  "background-color",
  "background-image",
  "background-origin",
  "background-position",
  "background-position-x",
  "background-position-y",
  "background-repeat",
  "background-size",
  "baseline-shift",
  "block-size",
  "border",
  "border-block",
  "border-block-color",
  "border-block-end",
  "border-block-end-color",
  "border-block-end-style",
  "border-block-end-width",
  "border-block-start",
  "border-block-start-color",
  "border-block-start-style",
  "border-block-start-width",
  "border-block-style",
  "border-block-width",
  "border-bottom",
  "border-bottom-color",
  "border-bottom-left-radius",
  "border-bottom-right-radius",
  "border-bottom-style",
  "border-bottom-width",
  "border-collapse",
  "border-color",
  "border-end-end-radius",
  "border-end-start-radius",
  "border-image",
  "border-image-outset",
  "border-image-repeat",
  "border-image-slice",
  "border-image-source",
  "border-image-width",
  "border-inline",
  "border-inline-color",
  "border-inline-end",
  "border-inline-end-color",
  "border-inline-end-style",
  "border-inline-end-width",
  "border-inline-start",
  "border-inline-start-color",
  "border-inline-start-style",
  "border-inline-start-width",
  "border-inline-style",
  "border-inline-width",
  "border-left",
  "border-left-color",
  "border-left-style",
  "border-left-width",
  "border-radius",
  "border-right",
  "border-right-color",
  "border-right-style",
  "border-right-width",
  "border-spacing",
  "border-start-end-radius",
  "border-start-start-radius",
  "border-style",
  "border-top",
  "border-top-color",
  "border-top-left-radius",
  "border-top-right-radius",
  "border-top-style",
  "border-top-width",
  "border-width",
  "bottom",
  "box-align",
  "box-decoration-break",
  "box-direction",
  "box-flex",
  "box-flex-group",
  "box-lines",
  "box-ordinal-group",
  "box-orient",
  "box-pack",
  "box-shadow",
  "box-sizing",
  "break-after",
  "break-before",
  "break-inside",
  "caption-side",
  "caret-color",
  "clear",
  "clip",
  "clip-path",
  "clip-rule",
  "color",
  "color-interpolation",
  "color-interpolation-filters",
  "color-profile",
  "color-rendering",
  "color-scheme",
  "column-count",
  "column-fill",
  "column-gap",
  "column-rule",
  "column-rule-color",
  "column-rule-style",
  "column-rule-width",
  "column-span",
  "column-width",
  "columns",
  "contain",
  "contain-intrinsic-block-size",
  "contain-intrinsic-height",
  "contain-intrinsic-inline-size",
  "contain-intrinsic-size",
  "contain-intrinsic-width",
  "container",
  "container-name",
  "container-type",
  "content",
  "content-visibility",
  "counter-increment",
  "counter-reset",
  "counter-set",
  "cue",
  "cue-after",
  "cue-before",
  "cursor",
  "cx",
  "cy",
  "direction",
  "display",
  "dominant-baseline",
  "empty-cells",
  "enable-background",
  "field-sizing",
  "fill",
  "fill-opacity",
  "fill-rule",
  "filter",
  "flex",
  "flex-basis",
  "flex-direction",
  "flex-flow",
  "flex-grow",
  "flex-shrink",
  "flex-wrap",
  "float",
  "flood-color",
  "flood-opacity",
  "flow",
  "font",
  "font-display",
  "font-family",
  "font-feature-settings",
  "font-kerning",
  "font-language-override",
  "font-optical-sizing",
  "font-palette",
  "font-size",
  "font-size-adjust",
  "font-smooth",
  "font-smoothing",
  "font-stretch",
  "font-style",
  "font-synthesis",
  "font-synthesis-position",
  "font-synthesis-small-caps",
  "font-synthesis-style",
  "font-synthesis-weight",
  "font-variant",
  "font-variant-alternates",
  "font-variant-caps",
  "font-variant-east-asian",
  "font-variant-emoji",
  "font-variant-ligatures",
  "font-variant-numeric",
  "font-variant-position",
  "font-variation-settings",
  "font-weight",
  "forced-color-adjust",
  "gap",
  "glyph-orientation-horizontal",
  "glyph-orientation-vertical",
  "grid",
  "grid-area",
  "grid-auto-columns",
  "grid-auto-flow",
  "grid-auto-rows",
  "grid-column",
  "grid-column-end",
  "grid-column-start",
  "grid-gap",
  "grid-row",
  "grid-row-end",
  "grid-row-start",
  "grid-template",
  "grid-template-areas",
  "grid-template-columns",
  "grid-template-rows",
  "hanging-punctuation",
  "height",
  "hyphenate-character",
  "hyphenate-limit-chars",
  "hyphens",
  "icon",
  "image-orientation",
  "image-rendering",
  "image-resolution",
  "ime-mode",
  "initial-letter",
  "initial-letter-align",
  "inline-size",
  "inset",
  "inset-area",
  "inset-block",
  "inset-block-end",
  "inset-block-start",
  "inset-inline",
  "inset-inline-end",
  "inset-inline-start",
  "isolation",
  "justify-content",
  "justify-items",
  "justify-self",
  "kerning",
  "left",
  "letter-spacing",
  "lighting-color",
  "line-break",
  "line-height",
  "line-height-step",
  "list-style",
  "list-style-image",
  "list-style-position",
  "list-style-type",
  "margin",
  "margin-block",
  "margin-block-end",
  "margin-block-start",
  "margin-bottom",
  "margin-inline",
  "margin-inline-end",
  "margin-inline-start",
  "margin-left",
  "margin-right",
  "margin-top",
  "margin-trim",
  "marker",
  "marker-end",
  "marker-mid",
  "marker-start",
  "marks",
  "mask",
  "mask-border",
  "mask-border-mode",
  "mask-border-outset",
  "mask-border-repeat",
  "mask-border-slice",
  "mask-border-source",
  "mask-border-width",
  "mask-clip",
  "mask-composite",
  "mask-image",
  "mask-mode",
  "mask-origin",
  "mask-position",
  "mask-repeat",
  "mask-size",
  "mask-type",
  "masonry-auto-flow",
  "math-depth",
  "math-shift",
  "math-style",
  "max-block-size",
  "max-height",
  "max-inline-size",
  "max-width",
  "min-block-size",
  "min-height",
  "min-inline-size",
  "min-width",
  "mix-blend-mode",
  "nav-down",
  "nav-index",
  "nav-left",
  "nav-right",
  "nav-up",
  "none",
  "normal",
  "object-fit",
  "object-position",
  "offset",
  "offset-anchor",
  "offset-distance",
  "offset-path",
  "offset-position",
  "offset-rotate",
  "opacity",
  "order",
  "orphans",
  "outline",
  "outline-color",
  "outline-offset",
  "outline-style",
  "outline-width",
  "overflow",
  "overflow-anchor",
  "overflow-block",
  "overflow-clip-margin",
  "overflow-inline",
  "overflow-wrap",
  "overflow-x",
  "overflow-y",
  "overlay",
  "overscroll-behavior",
  "overscroll-behavior-block",
  "overscroll-behavior-inline",
  "overscroll-behavior-x",
  "overscroll-behavior-y",
  "padding",
  "padding-block",
  "padding-block-end",
  "padding-block-start",
  "padding-bottom",
  "padding-inline",
  "padding-inline-end",
  "padding-inline-start",
  "padding-left",
  "padding-right",
  "padding-top",
  "page",
  "page-break-after",
  "page-break-before",
  "page-break-inside",
  "paint-order",
  "pause",
  "pause-after",
  "pause-before",
  "perspective",
  "perspective-origin",
  "place-content",
  "place-items",
  "place-self",
  "pointer-events",
  "position",
  "position-anchor",
  "position-visibility",
  "print-color-adjust",
  "quotes",
  "r",
  "resize",
  "rest",
  "rest-after",
  "rest-before",
  "right",
  "rotate",
  "row-gap",
  "ruby-align",
  "ruby-position",
  "scale",
  "scroll-behavior",
  "scroll-margin",
  "scroll-margin-block",
  "scroll-margin-block-end",
  "scroll-margin-block-start",
  "scroll-margin-bottom",
  "scroll-margin-inline",
  "scroll-margin-inline-end",
  "scroll-margin-inline-start",
  "scroll-margin-left",
  "scroll-margin-right",
  "scroll-margin-top",
  "scroll-padding",
  "scroll-padding-block",
  "scroll-padding-block-end",
  "scroll-padding-block-start",
  "scroll-padding-bottom",
  "scroll-padding-inline",
  "scroll-padding-inline-end",
  "scroll-padding-inline-start",
  "scroll-padding-left",
  "scroll-padding-right",
  "scroll-padding-top",
  "scroll-snap-align",
  "scroll-snap-stop",
  "scroll-snap-type",
  "scroll-timeline",
  "scroll-timeline-axis",
  "scroll-timeline-name",
  "scrollbar-color",
  "scrollbar-gutter",
  "scrollbar-width",
  "shape-image-threshold",
  "shape-margin",
  "shape-outside",
  "shape-rendering",
  "speak",
  "speak-as",
  "src",
  // @font-face
  "stop-color",
  "stop-opacity",
  "stroke",
  "stroke-dasharray",
  "stroke-dashoffset",
  "stroke-linecap",
  "stroke-linejoin",
  "stroke-miterlimit",
  "stroke-opacity",
  "stroke-width",
  "tab-size",
  "table-layout",
  "text-align",
  "text-align-all",
  "text-align-last",
  "text-anchor",
  "text-combine-upright",
  "text-decoration",
  "text-decoration-color",
  "text-decoration-line",
  "text-decoration-skip",
  "text-decoration-skip-ink",
  "text-decoration-style",
  "text-decoration-thickness",
  "text-emphasis",
  "text-emphasis-color",
  "text-emphasis-position",
  "text-emphasis-style",
  "text-indent",
  "text-justify",
  "text-orientation",
  "text-overflow",
  "text-rendering",
  "text-shadow",
  "text-size-adjust",
  "text-transform",
  "text-underline-offset",
  "text-underline-position",
  "text-wrap",
  "text-wrap-mode",
  "text-wrap-style",
  "timeline-scope",
  "top",
  "touch-action",
  "transform",
  "transform-box",
  "transform-origin",
  "transform-style",
  "transition",
  "transition-behavior",
  "transition-delay",
  "transition-duration",
  "transition-property",
  "transition-timing-function",
  "translate",
  "unicode-bidi",
  "user-modify",
  "user-select",
  "vector-effect",
  "vertical-align",
  "view-timeline",
  "view-timeline-axis",
  "view-timeline-inset",
  "view-timeline-name",
  "view-transition-name",
  "visibility",
  "voice-balance",
  "voice-duration",
  "voice-family",
  "voice-pitch",
  "voice-range",
  "voice-rate",
  "voice-stress",
  "voice-volume",
  "white-space",
  "white-space-collapse",
  "widows",
  "width",
  "will-change",
  "word-break",
  "word-spacing",
  "word-wrap",
  "writing-mode",
  "x",
  "y",
  "z-index",
  "zoom"
].sort().reverse();
function css(hljs) {
  const regex = hljs.regex;
  const modes = MODES$2(hljs);
  const VENDOR_PREFIX = { begin: /-(webkit|moz|ms|o)-(?=[a-z])/ };
  const AT_MODIFIERS = "and or not only";
  const AT_PROPERTY_RE = /@-?\w[\w]*(-\w+)*/;
  const IDENT_RE2 = "[a-zA-Z-][a-zA-Z0-9_-]*";
  const STRINGS = [
    hljs.APOS_STRING_MODE,
    hljs.QUOTE_STRING_MODE
  ];
  return {
    name: "CSS",
    case_insensitive: true,
    illegal: /[=|'\$]/,
    keywords: { keyframePosition: "from to" },
    classNameAliases: {
      // for visual continuity with `tag {}` and because we
      // don't have a great class for this?
      keyframePosition: "selector-tag"
    },
    contains: [
      modes.BLOCK_COMMENT,
      VENDOR_PREFIX,
      // to recognize keyframe 40% etc which are outside the scope of our
      // attribute value mode
      modes.CSS_NUMBER_MODE,
      {
        className: "selector-id",
        begin: /#[A-Za-z0-9_-]+/,
        relevance: 0
      },
      {
        className: "selector-class",
        begin: "\\." + IDENT_RE2,
        relevance: 0
      },
      modes.ATTRIBUTE_SELECTOR_MODE,
      {
        className: "selector-pseudo",
        variants: [
          { begin: ":(" + PSEUDO_CLASSES$2.join("|") + ")" },
          { begin: ":(:)?(" + PSEUDO_ELEMENTS$2.join("|") + ")" }
        ]
      },
      // we may actually need this (12/2020)
      // { // pseudo-selector params
      //   begin: /\(/,
      //   end: /\)/,
      //   contains: [ hljs.CSS_NUMBER_MODE ]
      // },
      modes.CSS_VARIABLE,
      {
        className: "attribute",
        begin: "\\b(" + ATTRIBUTES$2.join("|") + ")\\b"
      },
      // attribute values
      {
        begin: /:/,
        end: /[;}{]/,
        contains: [
          modes.BLOCK_COMMENT,
          modes.HEXCOLOR,
          modes.IMPORTANT,
          modes.CSS_NUMBER_MODE,
          ...STRINGS,
          // needed to highlight these as strings and to avoid issues with
          // illegal characters that might be inside urls that would tigger the
          // languages illegal stack
          {
            begin: /(url|data-uri)\(/,
            end: /\)/,
            relevance: 0,
            // from keywords
            keywords: { built_in: "url data-uri" },
            contains: [
              ...STRINGS,
              {
                className: "string",
                // any character other than `)` as in `url()` will be the start
                // of a string, which ends with `)` (from the parent mode)
                begin: /[^)]/,
                endsWithParent: true,
                excludeEnd: true
              }
            ]
          },
          modes.FUNCTION_DISPATCH
        ]
      },
      {
        begin: regex.lookahead(/@/),
        end: "[{;]",
        relevance: 0,
        illegal: /:/,
        // break on Less variables @var: ...
        contains: [
          {
            className: "keyword",
            begin: AT_PROPERTY_RE
          },
          {
            begin: /\s/,
            endsWithParent: true,
            excludeEnd: true,
            relevance: 0,
            keywords: {
              $pattern: /[a-z-]+/,
              keyword: AT_MODIFIERS,
              attribute: MEDIA_FEATURES$2.join(" ")
            },
            contains: [
              {
                begin: /[a-z-]+(?=:)/,
                className: "attribute"
              },
              ...STRINGS,
              modes.CSS_NUMBER_MODE
            ]
          }
        ]
      },
      {
        className: "selector-tag",
        begin: "\\b(" + TAGS$2.join("|") + ")\\b"
      }
    ]
  };
}
function diff(hljs) {
  const regex = hljs.regex;
  return {
    name: "Diff",
    aliases: ["patch"],
    contains: [
      {
        className: "meta",
        relevance: 10,
        match: regex.either(
          /^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,
          /^\*\*\* +\d+,\d+ +\*\*\*\*$/,
          /^--- +\d+,\d+ +----$/
        )
      },
      {
        className: "comment",
        variants: [
          {
            begin: regex.either(
              /Index: /,
              /^index/,
              /={3,}/,
              /^-{3}/,
              /^\*{3} /,
              /^\+{3}/,
              /^diff --git/
            ),
            end: /$/
          },
          { match: /^\*{15}$/ }
        ]
      },
      {
        className: "addition",
        begin: /^\+/,
        end: /$/
      },
      {
        className: "deletion",
        begin: /^-/,
        end: /$/
      },
      {
        className: "addition",
        begin: /^!/,
        end: /$/
      }
    ]
  };
}
function go(hljs) {
  const LITERALS2 = [
    "true",
    "false",
    "iota",
    "nil"
  ];
  const BUILT_INS2 = [
    "append",
    "cap",
    "close",
    "complex",
    "copy",
    "imag",
    "len",
    "make",
    "new",
    "panic",
    "print",
    "println",
    "real",
    "recover",
    "delete"
  ];
  const TYPES2 = [
    "bool",
    "byte",
    "complex64",
    "complex128",
    "error",
    "float32",
    "float64",
    "int8",
    "int16",
    "int32",
    "int64",
    "string",
    "uint8",
    "uint16",
    "uint32",
    "uint64",
    "int",
    "uint",
    "uintptr",
    "rune"
  ];
  const KWS = [
    "break",
    "case",
    "chan",
    "const",
    "continue",
    "default",
    "defer",
    "else",
    "fallthrough",
    "for",
    "func",
    "go",
    "goto",
    "if",
    "import",
    "interface",
    "map",
    "package",
    "range",
    "return",
    "select",
    "struct",
    "switch",
    "type",
    "var"
  ];
  const KEYWORDS2 = {
    keyword: KWS,
    type: TYPES2,
    literal: LITERALS2,
    built_in: BUILT_INS2
  };
  return {
    name: "Go",
    aliases: ["golang"],
    keywords: KEYWORDS2,
    illegal: "</",
    contains: [
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      {
        className: "string",
        variants: [
          hljs.QUOTE_STRING_MODE,
          hljs.APOS_STRING_MODE,
          {
            begin: "`",
            end: "`"
          }
        ]
      },
      {
        className: "number",
        variants: [
          {
            match: /-?\b0[xX]\.[a-fA-F0-9](_?[a-fA-F0-9])*[pP][+-]?\d(_?\d)*i?/,
            // hex without a present digit before . (making a digit afterwards required)
            relevance: 0
          },
          {
            match: /-?\b0[xX](_?[a-fA-F0-9])+((\.([a-fA-F0-9](_?[a-fA-F0-9])*)?)?[pP][+-]?\d(_?\d)*)?i?/,
            // hex with a present digit before . (making a digit afterwards optional)
            relevance: 0
          },
          {
            match: /-?\b0[oO](_?[0-7])*i?/,
            // leading 0o octal
            relevance: 0
          },
          {
            match: /-?\.\d(_?\d)*([eE][+-]?\d(_?\d)*)?i?/,
            // decimal without a present digit before . (making a digit afterwards required)
            relevance: 0
          },
          {
            match: /-?\b\d(_?\d)*(\.(\d(_?\d)*)?)?([eE][+-]?\d(_?\d)*)?i?/,
            // decimal with a present digit before . (making a digit afterwards optional)
            relevance: 0
          }
        ]
      },
      {
        begin: /:=/
        // relevance booster
      },
      {
        className: "function",
        beginKeywords: "func",
        end: "\\s*(\\{|$)",
        excludeEnd: true,
        contains: [
          hljs.TITLE_MODE,
          {
            className: "params",
            begin: /\(/,
            end: /\)/,
            endsParent: true,
            keywords: KEYWORDS2,
            illegal: /["']/
          }
        ]
      }
    ]
  };
}
function graphql(hljs) {
  const regex = hljs.regex;
  const GQL_NAME = /[_A-Za-z][_0-9A-Za-z]*/;
  return {
    name: "GraphQL",
    aliases: ["gql"],
    case_insensitive: true,
    disableAutodetect: false,
    keywords: {
      keyword: [
        "query",
        "mutation",
        "subscription",
        "type",
        "input",
        "schema",
        "directive",
        "interface",
        "union",
        "scalar",
        "fragment",
        "enum",
        "on"
      ],
      literal: [
        "true",
        "false",
        "null"
      ]
    },
    contains: [
      hljs.HASH_COMMENT_MODE,
      hljs.QUOTE_STRING_MODE,
      hljs.NUMBER_MODE,
      {
        scope: "punctuation",
        match: /[.]{3}/,
        relevance: 0
      },
      {
        scope: "punctuation",
        begin: /[\!\(\)\:\=\[\]\{\|\}]{1}/,
        relevance: 0
      },
      {
        scope: "variable",
        begin: /\$/,
        end: /\W/,
        excludeEnd: true,
        relevance: 0
      },
      {
        scope: "meta",
        match: /@\w+/,
        excludeEnd: true
      },
      {
        scope: "symbol",
        begin: regex.concat(GQL_NAME, regex.lookahead(/\s*:/)),
        relevance: 0
      }
    ],
    illegal: [
      /[;<']/,
      /BEGIN/
    ]
  };
}
function ini(hljs) {
  const regex = hljs.regex;
  const NUMBERS = {
    className: "number",
    relevance: 0,
    variants: [
      { begin: /([+-]+)?[\d]+_[\d_]+/ },
      { begin: hljs.NUMBER_RE }
    ]
  };
  const COMMENTS = hljs.COMMENT();
  COMMENTS.variants = [
    {
      begin: /;/,
      end: /$/
    },
    {
      begin: /#/,
      end: /$/
    }
  ];
  const VARIABLES = {
    className: "variable",
    variants: [
      { begin: /\$[\w\d"][\w\d_]*/ },
      { begin: /\$\{(.*?)\}/ }
    ]
  };
  const LITERALS2 = {
    className: "literal",
    begin: /\bon|off|true|false|yes|no\b/
  };
  const STRINGS = {
    className: "string",
    contains: [hljs.BACKSLASH_ESCAPE],
    variants: [
      {
        begin: "'''",
        end: "'''",
        relevance: 10
      },
      {
        begin: '"""',
        end: '"""',
        relevance: 10
      },
      {
        begin: '"',
        end: '"'
      },
      {
        begin: "'",
        end: "'"
      }
    ]
  };
  const ARRAY = {
    begin: /\[/,
    end: /\]/,
    contains: [
      COMMENTS,
      LITERALS2,
      VARIABLES,
      STRINGS,
      NUMBERS,
      "self"
    ],
    relevance: 0
  };
  const BARE_KEY = /[A-Za-z0-9_-]+/;
  const QUOTED_KEY_DOUBLE_QUOTE = /"(\\"|[^"])*"/;
  const QUOTED_KEY_SINGLE_QUOTE = /'[^']*'/;
  const ANY_KEY = regex.either(
    BARE_KEY,
    QUOTED_KEY_DOUBLE_QUOTE,
    QUOTED_KEY_SINGLE_QUOTE
  );
  const DOTTED_KEY = regex.concat(
    ANY_KEY,
    "(\\s*\\.\\s*",
    ANY_KEY,
    ")*",
    regex.lookahead(/\s*=\s*[^#\s]/)
  );
  return {
    name: "TOML, also INI",
    aliases: ["toml"],
    case_insensitive: true,
    illegal: /\S/,
    contains: [
      COMMENTS,
      {
        className: "section",
        begin: /\[+/,
        end: /\]+/
      },
      {
        begin: DOTTED_KEY,
        className: "attr",
        starts: {
          end: /$/,
          contains: [
            COMMENTS,
            ARRAY,
            LITERALS2,
            VARIABLES,
            STRINGS,
            NUMBERS
          ]
        }
      }
    ]
  };
}
var decimalDigits$1 = "[0-9](_*[0-9])*";
var frac$1 = `\\.(${decimalDigits$1})`;
var hexDigits$1 = "[0-9a-fA-F](_*[0-9a-fA-F])*";
var NUMERIC$1 = {
  className: "number",
  variants: [
    // DecimalFloatingPointLiteral
    // including ExponentPart
    { begin: `(\\b(${decimalDigits$1})((${frac$1})|\\.)?|(${frac$1}))[eE][+-]?(${decimalDigits$1})[fFdD]?\\b` },
    // excluding ExponentPart
    { begin: `\\b(${decimalDigits$1})((${frac$1})[fFdD]?\\b|\\.([fFdD]\\b)?)` },
    { begin: `(${frac$1})[fFdD]?\\b` },
    { begin: `\\b(${decimalDigits$1})[fFdD]\\b` },
    // HexadecimalFloatingPointLiteral
    { begin: `\\b0[xX]((${hexDigits$1})\\.?|(${hexDigits$1})?\\.(${hexDigits$1}))[pP][+-]?(${decimalDigits$1})[fFdD]?\\b` },
    // DecimalIntegerLiteral
    { begin: "\\b(0|[1-9](_*[0-9])*)[lL]?\\b" },
    // HexIntegerLiteral
    { begin: `\\b0[xX](${hexDigits$1})[lL]?\\b` },
    // OctalIntegerLiteral
    { begin: "\\b0(_*[0-7])*[lL]?\\b" },
    // BinaryIntegerLiteral
    { begin: "\\b0[bB][01](_*[01])*[lL]?\\b" }
  ],
  relevance: 0
};
function recurRegex(re2, substitution, depth) {
  if (depth === -1) return "";
  return re2.replace(substitution, (_2) => {
    return recurRegex(re2, substitution, depth - 1);
  });
}
function java(hljs) {
  const regex = hljs.regex;
  const JAVA_IDENT_RE = "[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*";
  const GENERIC_IDENT_RE = JAVA_IDENT_RE + recurRegex("(?:<" + JAVA_IDENT_RE + "~~~(?:\\s*,\\s*" + JAVA_IDENT_RE + "~~~)*>)?", /~~~/g, 2);
  const MAIN_KEYWORDS = [
    "synchronized",
    "abstract",
    "private",
    "var",
    "static",
    "if",
    "const ",
    "for",
    "while",
    "strictfp",
    "finally",
    "protected",
    "import",
    "native",
    "final",
    "void",
    "enum",
    "else",
    "break",
    "transient",
    "catch",
    "instanceof",
    "volatile",
    "case",
    "assert",
    "package",
    "default",
    "public",
    "try",
    "switch",
    "continue",
    "throws",
    "protected",
    "public",
    "private",
    "module",
    "requires",
    "exports",
    "do",
    "sealed",
    "yield",
    "permits",
    "goto",
    "when"
  ];
  const BUILT_INS2 = [
    "super",
    "this"
  ];
  const LITERALS2 = [
    "false",
    "true",
    "null"
  ];
  const TYPES2 = [
    "char",
    "boolean",
    "long",
    "float",
    "int",
    "byte",
    "short",
    "double"
  ];
  const KEYWORDS2 = {
    keyword: MAIN_KEYWORDS,
    literal: LITERALS2,
    type: TYPES2,
    built_in: BUILT_INS2
  };
  const ANNOTATION = {
    className: "meta",
    begin: "@" + JAVA_IDENT_RE,
    contains: [
      {
        begin: /\(/,
        end: /\)/,
        contains: ["self"]
        // allow nested () inside our annotation
      }
    ]
  };
  const PARAMS = {
    className: "params",
    begin: /\(/,
    end: /\)/,
    keywords: KEYWORDS2,
    relevance: 0,
    contains: [hljs.C_BLOCK_COMMENT_MODE],
    endsParent: true
  };
  return {
    name: "Java",
    aliases: ["jsp"],
    keywords: KEYWORDS2,
    illegal: /<\/|#/,
    contains: [
      hljs.COMMENT(
        "/\\*\\*",
        "\\*/",
        {
          relevance: 0,
          contains: [
            {
              // eat up @'s in emails to prevent them to be recognized as doctags
              begin: /\w+@/,
              relevance: 0
            },
            {
              className: "doctag",
              begin: "@[A-Za-z]+"
            }
          ]
        }
      ),
      // relevance boost
      {
        begin: /import java\.[a-z]+\./,
        keywords: "import",
        relevance: 2
      },
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      {
        begin: /"""/,
        end: /"""/,
        className: "string",
        contains: [hljs.BACKSLASH_ESCAPE]
      },
      hljs.APOS_STRING_MODE,
      hljs.QUOTE_STRING_MODE,
      {
        match: [
          /\b(?:class|interface|enum|extends|implements|new)/,
          /\s+/,
          JAVA_IDENT_RE
        ],
        className: {
          1: "keyword",
          3: "title.class"
        }
      },
      {
        // Exceptions for hyphenated keywords
        match: /non-sealed/,
        scope: "keyword"
      },
      {
        begin: [
          regex.concat(/(?!else)/, JAVA_IDENT_RE),
          /\s+/,
          JAVA_IDENT_RE,
          /\s+/,
          /=(?!=)/
        ],
        className: {
          1: "type",
          3: "variable",
          5: "operator"
        }
      },
      {
        begin: [
          /record/,
          /\s+/,
          JAVA_IDENT_RE
        ],
        className: {
          1: "keyword",
          3: "title.class"
        },
        contains: [
          PARAMS,
          hljs.C_LINE_COMMENT_MODE,
          hljs.C_BLOCK_COMMENT_MODE
        ]
      },
      {
        // Expression keywords prevent 'keyword Name(...)' from being
        // recognized as a function definition
        beginKeywords: "new throw return else",
        relevance: 0
      },
      {
        begin: [
          "(?:" + GENERIC_IDENT_RE + "\\s+)",
          hljs.UNDERSCORE_IDENT_RE,
          /\s*(?=\()/
        ],
        className: { 2: "title.function" },
        keywords: KEYWORDS2,
        contains: [
          {
            className: "params",
            begin: /\(/,
            end: /\)/,
            keywords: KEYWORDS2,
            relevance: 0,
            contains: [
              ANNOTATION,
              hljs.APOS_STRING_MODE,
              hljs.QUOTE_STRING_MODE,
              NUMERIC$1,
              hljs.C_BLOCK_COMMENT_MODE
            ]
          },
          hljs.C_LINE_COMMENT_MODE,
          hljs.C_BLOCK_COMMENT_MODE
        ]
      },
      NUMERIC$1,
      ANNOTATION
    ]
  };
}
const IDENT_RE$1 = "[A-Za-z$_][0-9A-Za-z$_]*";
const KEYWORDS$1 = [
  "as",
  // for exports
  "in",
  "of",
  "if",
  "for",
  "while",
  "finally",
  "var",
  "new",
  "function",
  "do",
  "return",
  "void",
  "else",
  "break",
  "catch",
  "instanceof",
  "with",
  "throw",
  "case",
  "default",
  "try",
  "switch",
  "continue",
  "typeof",
  "delete",
  "let",
  "yield",
  "const",
  "class",
  // JS handles these with a special rule
  // "get",
  // "set",
  "debugger",
  "async",
  "await",
  "static",
  "import",
  "from",
  "export",
  "extends",
  // It's reached stage 3, which is "recommended for implementation":
  "using"
];
const LITERALS$1 = [
  "true",
  "false",
  "null",
  "undefined",
  "NaN",
  "Infinity"
];
const TYPES$1 = [
  // Fundamental objects
  "Object",
  "Function",
  "Boolean",
  "Symbol",
  // numbers and dates
  "Math",
  "Date",
  "Number",
  "BigInt",
  // text
  "String",
  "RegExp",
  // Indexed collections
  "Array",
  "Float32Array",
  "Float64Array",
  "Int8Array",
  "Uint8Array",
  "Uint8ClampedArray",
  "Int16Array",
  "Int32Array",
  "Uint16Array",
  "Uint32Array",
  "BigInt64Array",
  "BigUint64Array",
  // Keyed collections
  "Set",
  "Map",
  "WeakSet",
  "WeakMap",
  // Structured data
  "ArrayBuffer",
  "SharedArrayBuffer",
  "Atomics",
  "DataView",
  "JSON",
  // Control abstraction objects
  "Promise",
  "Generator",
  "GeneratorFunction",
  "AsyncFunction",
  // Reflection
  "Reflect",
  "Proxy",
  // Internationalization
  "Intl",
  // WebAssembly
  "WebAssembly"
];
const ERROR_TYPES$1 = [
  "Error",
  "EvalError",
  "InternalError",
  "RangeError",
  "ReferenceError",
  "SyntaxError",
  "TypeError",
  "URIError"
];
const BUILT_IN_GLOBALS$1 = [
  "setInterval",
  "setTimeout",
  "clearInterval",
  "clearTimeout",
  "require",
  "exports",
  "eval",
  "isFinite",
  "isNaN",
  "parseFloat",
  "parseInt",
  "decodeURI",
  "decodeURIComponent",
  "encodeURI",
  "encodeURIComponent",
  "escape",
  "unescape"
];
const BUILT_IN_VARIABLES$1 = [
  "arguments",
  "this",
  "super",
  "console",
  "window",
  "document",
  "localStorage",
  "sessionStorage",
  "module",
  "global"
  // Node.js
];
const BUILT_INS$1 = [].concat(
  BUILT_IN_GLOBALS$1,
  TYPES$1,
  ERROR_TYPES$1
);
function javascript$1(hljs) {
  const regex = hljs.regex;
  const hasClosingTag = (match, { after }) => {
    const tag = "</" + match[0].slice(1);
    const pos = match.input.indexOf(tag, after);
    return pos !== -1;
  };
  const IDENT_RE$1$1 = IDENT_RE$1;
  const FRAGMENT = {
    begin: "<>",
    end: "</>"
  };
  const XML_SELF_CLOSING = /<[A-Za-z0-9\\._:-]+\s*\/>/;
  const XML_TAG = {
    begin: /<[A-Za-z0-9\\._:-]+/,
    end: /\/[A-Za-z0-9\\._:-]+>|\/>/,
    /**
     * @param {RegExpMatchArray} match
     * @param {CallbackResponse} response
     */
    isTrulyOpeningTag: (match, response) => {
      const afterMatchIndex = match[0].length + match.index;
      const nextChar = match.input[afterMatchIndex];
      if (
        // HTML should not include another raw `<` inside a tag
        // nested type?
        // `<Array<Array<number>>`, etc.
        nextChar === "<" || // the , gives away that this is not HTML
        // `<T, A extends keyof T, V>`
        nextChar === ","
      ) {
        response.ignoreMatch();
        return;
      }
      if (nextChar === ">") {
        if (!hasClosingTag(match, { after: afterMatchIndex })) {
          response.ignoreMatch();
        }
      }
      let m2;
      const afterMatch = match.input.substring(afterMatchIndex);
      if (m2 = afterMatch.match(/^\s*=/)) {
        response.ignoreMatch();
        return;
      }
      if (m2 = afterMatch.match(/^\s+extends\s+/)) {
        if (m2.index === 0) {
          response.ignoreMatch();
          return;
        }
      }
    }
  };
  const KEYWORDS$1$1 = {
    $pattern: IDENT_RE$1,
    keyword: KEYWORDS$1,
    literal: LITERALS$1,
    built_in: BUILT_INS$1,
    "variable.language": BUILT_IN_VARIABLES$1
  };
  const decimalDigits2 = "[0-9](_?[0-9])*";
  const frac2 = `\\.(${decimalDigits2})`;
  const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;
  const NUMBER = {
    className: "number",
    variants: [
      // DecimalLiteral
      { begin: `(\\b(${decimalInteger})((${frac2})|\\.)?|(${frac2}))[eE][+-]?(${decimalDigits2})\\b` },
      { begin: `\\b(${decimalInteger})\\b((${frac2})\\b|\\.)?|(${frac2})\\b` },
      // DecimalBigIntegerLiteral
      { begin: `\\b(0|[1-9](_?[0-9])*)n\\b` },
      // NonDecimalIntegerLiteral
      { begin: "\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b" },
      { begin: "\\b0[bB][0-1](_?[0-1])*n?\\b" },
      { begin: "\\b0[oO][0-7](_?[0-7])*n?\\b" },
      // LegacyOctalIntegerLiteral (does not include underscore separators)
      // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals
      { begin: "\\b0[0-7]+n?\\b" }
    ],
    relevance: 0
  };
  const SUBST = {
    className: "subst",
    begin: "\\$\\{",
    end: "\\}",
    keywords: KEYWORDS$1$1,
    contains: []
    // defined later
  };
  const HTML_TEMPLATE = {
    begin: ".?html`",
    end: "",
    starts: {
      end: "`",
      returnEnd: false,
      contains: [
        hljs.BACKSLASH_ESCAPE,
        SUBST
      ],
      subLanguage: "xml"
    }
  };
  const CSS_TEMPLATE = {
    begin: ".?css`",
    end: "",
    starts: {
      end: "`",
      returnEnd: false,
      contains: [
        hljs.BACKSLASH_ESCAPE,
        SUBST
      ],
      subLanguage: "css"
    }
  };
  const GRAPHQL_TEMPLATE = {
    begin: ".?gql`",
    end: "",
    starts: {
      end: "`",
      returnEnd: false,
      contains: [
        hljs.BACKSLASH_ESCAPE,
        SUBST
      ],
      subLanguage: "graphql"
    }
  };
  const TEMPLATE_STRING = {
    className: "string",
    begin: "`",
    end: "`",
    contains: [
      hljs.BACKSLASH_ESCAPE,
      SUBST
    ]
  };
  const JSDOC_COMMENT = hljs.COMMENT(
    /\/\*\*(?!\/)/,
    "\\*/",
    {
      relevance: 0,
      contains: [
        {
          begin: "(?=@[A-Za-z]+)",
          relevance: 0,
          contains: [
            {
              className: "doctag",
              begin: "@[A-Za-z]+"
            },
            {
              className: "type",
              begin: "\\{",
              end: "\\}",
              excludeEnd: true,
              excludeBegin: true,
              relevance: 0
            },
            {
              className: "variable",
              begin: IDENT_RE$1$1 + "(?=\\s*(-)|$)",
              endsParent: true,
              relevance: 0
            },
            // eat spaces (not newlines) so we can find
            // types or variables
            {
              begin: /(?=[^\n])\s/,
              relevance: 0
            }
          ]
        }
      ]
    }
  );
  const COMMENT = {
    className: "comment",
    variants: [
      JSDOC_COMMENT,
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.C_LINE_COMMENT_MODE
    ]
  };
  const SUBST_INTERNALS = [
    hljs.APOS_STRING_MODE,
    hljs.QUOTE_STRING_MODE,
    HTML_TEMPLATE,
    CSS_TEMPLATE,
    GRAPHQL_TEMPLATE,
    TEMPLATE_STRING,
    // Skip numbers when they are part of a variable name
    { match: /\$\d+/ },
    NUMBER
    // This is intentional:
    // See https://github.com/highlightjs/highlight.js/issues/3288
    // hljs.REGEXP_MODE
  ];
  SUBST.contains = SUBST_INTERNALS.concat({
    // we need to pair up {} inside our subst to prevent
    // it from ending too early by matching another }
    begin: /\{/,
    end: /\}/,
    keywords: KEYWORDS$1$1,
    contains: [
      "self"
    ].concat(SUBST_INTERNALS)
  });
  const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);
  const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([
    // eat recursive parens in sub expressions
    {
      begin: /(\s*)\(/,
      end: /\)/,
      keywords: KEYWORDS$1$1,
      contains: ["self"].concat(SUBST_AND_COMMENTS)
    }
  ]);
  const PARAMS = {
    className: "params",
    // convert this to negative lookbehind in v12
    begin: /(\s*)\(/,
    // to match the parms with
    end: /\)/,
    excludeBegin: true,
    excludeEnd: true,
    keywords: KEYWORDS$1$1,
    contains: PARAMS_CONTAINS
  };
  const CLASS_OR_EXTENDS = {
    variants: [
      // class Car extends vehicle
      {
        match: [
          /class/,
          /\s+/,
          IDENT_RE$1$1,
          /\s+/,
          /extends/,
          /\s+/,
          regex.concat(IDENT_RE$1$1, "(", regex.concat(/\./, IDENT_RE$1$1), ")*")
        ],
        scope: {
          1: "keyword",
          3: "title.class",
          5: "keyword",
          7: "title.class.inherited"
        }
      },
      // class Car
      {
        match: [
          /class/,
          /\s+/,
          IDENT_RE$1$1
        ],
        scope: {
          1: "keyword",
          3: "title.class"
        }
      }
    ]
  };
  const CLASS_REFERENCE = {
    relevance: 0,
    match: regex.either(
      // Hard coded exceptions
      /\bJSON/,
      // Float32Array, OutT
      /\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,
      // CSSFactory, CSSFactoryT
      /\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,
      // FPs, FPsT
      /\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/
      // P
      // single letters are not highlighted
      // BLAH
      // this will be flagged as a UPPER_CASE_CONSTANT instead
    ),
    className: "title.class",
    keywords: {
      _: [
        // se we still get relevance credit for JS library classes
        ...TYPES$1,
        ...ERROR_TYPES$1
      ]
    }
  };
  const USE_STRICT = {
    label: "use_strict",
    className: "meta",
    relevance: 10,
    begin: /^\s*['"]use (strict|asm)['"]/
  };
  const FUNCTION_DEFINITION = {
    variants: [
      {
        match: [
          /function/,
          /\s+/,
          IDENT_RE$1$1,
          /(?=\s*\()/
        ]
      },
      // anonymous function
      {
        match: [
          /function/,
          /\s*(?=\()/
        ]
      }
    ],
    className: {
      1: "keyword",
      3: "title.function"
    },
    label: "func.def",
    contains: [PARAMS],
    illegal: /%/
  };
  const UPPER_CASE_CONSTANT = {
    relevance: 0,
    match: /\b[A-Z][A-Z_0-9]+\b/,
    className: "variable.constant"
  };
  function noneOf(list) {
    return regex.concat("(?!", list.join("|"), ")");
  }
  const FUNCTION_CALL = {
    match: regex.concat(
      /\b/,
      noneOf([
        ...BUILT_IN_GLOBALS$1,
        "super",
        "import"
      ].map((x2) => `${x2}\\s*\\(`)),
      IDENT_RE$1$1,
      regex.lookahead(/\s*\(/)
    ),
    className: "title.function",
    relevance: 0
  };
  const PROPERTY_ACCESS = {
    begin: regex.concat(/\./, regex.lookahead(
      regex.concat(IDENT_RE$1$1, /(?![0-9A-Za-z$_(])/)
    )),
    end: IDENT_RE$1$1,
    excludeBegin: true,
    keywords: "prototype",
    className: "property",
    relevance: 0
  };
  const GETTER_OR_SETTER = {
    match: [
      /get|set/,
      /\s+/,
      IDENT_RE$1$1,
      /(?=\()/
    ],
    className: {
      1: "keyword",
      3: "title.function"
    },
    contains: [
      {
        // eat to avoid empty params
        begin: /\(\)/
      },
      PARAMS
    ]
  };
  const FUNC_LEAD_IN_RE = "(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|" + hljs.UNDERSCORE_IDENT_RE + ")\\s*=>";
  const FUNCTION_VARIABLE = {
    match: [
      /const|var|let/,
      /\s+/,
      IDENT_RE$1$1,
      /\s*/,
      /=\s*/,
      /(async\s*)?/,
      // async is optional
      regex.lookahead(FUNC_LEAD_IN_RE)
    ],
    keywords: "async",
    className: {
      1: "keyword",
      3: "title.function"
    },
    contains: [
      PARAMS
    ]
  };
  return {
    name: "JavaScript",
    aliases: ["js", "jsx", "mjs", "cjs"],
    keywords: KEYWORDS$1$1,
    // this will be extended by TypeScript
    exports: { PARAMS_CONTAINS, CLASS_REFERENCE },
    illegal: /#(?![$_A-z])/,
    contains: [
      hljs.SHEBANG({
        label: "shebang",
        binary: "node",
        relevance: 5
      }),
      USE_STRICT,
      hljs.APOS_STRING_MODE,
      hljs.QUOTE_STRING_MODE,
      HTML_TEMPLATE,
      CSS_TEMPLATE,
      GRAPHQL_TEMPLATE,
      TEMPLATE_STRING,
      COMMENT,
      // Skip numbers when they are part of a variable name
      { match: /\$\d+/ },
      NUMBER,
      CLASS_REFERENCE,
      {
        scope: "attr",
        match: IDENT_RE$1$1 + regex.lookahead(":"),
        relevance: 0
      },
      FUNCTION_VARIABLE,
      {
        // "value" container
        begin: "(" + hljs.RE_STARTERS_RE + "|\\b(case|return|throw)\\b)\\s*",
        keywords: "return throw case",
        relevance: 0,
        contains: [
          COMMENT,
          hljs.REGEXP_MODE,
          {
            className: "function",
            // we have to count the parens to make sure we actually have the
            // correct bounding ( ) before the =>.  There could be any number of
            // sub-expressions inside also surrounded by parens.
            begin: FUNC_LEAD_IN_RE,
            returnBegin: true,
            end: "\\s*=>",
            contains: [
              {
                className: "params",
                variants: [
                  {
                    begin: hljs.UNDERSCORE_IDENT_RE,
                    relevance: 0
                  },
                  {
                    className: null,
                    begin: /\(\s*\)/,
                    skip: true
                  },
                  {
                    begin: /(\s*)\(/,
                    end: /\)/,
                    excludeBegin: true,
                    excludeEnd: true,
                    keywords: KEYWORDS$1$1,
                    contains: PARAMS_CONTAINS
                  }
                ]
              }
            ]
          },
          {
            // could be a comma delimited list of params to a function call
            begin: /,/,
            relevance: 0
          },
          {
            match: /\s+/,
            relevance: 0
          },
          {
            // JSX
            variants: [
              { begin: FRAGMENT.begin, end: FRAGMENT.end },
              { match: XML_SELF_CLOSING },
              {
                begin: XML_TAG.begin,
                // we carefully check the opening tag to see if it truly
                // is a tag and not a false positive
                "on:begin": XML_TAG.isTrulyOpeningTag,
                end: XML_TAG.end
              }
            ],
            subLanguage: "xml",
            contains: [
              {
                begin: XML_TAG.begin,
                end: XML_TAG.end,
                skip: true,
                contains: ["self"]
              }
            ]
          }
        ]
      },
      FUNCTION_DEFINITION,
      {
        // prevent this from getting swallowed up by function
        // since they appear "function like"
        beginKeywords: "while if switch catch for"
      },
      {
        // we have to count the parens to make sure we actually have the correct
        // bounding ( ).  There could be any number of sub-expressions inside
        // also surrounded by parens.
        begin: "\\b(?!function)" + hljs.UNDERSCORE_IDENT_RE + "\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",
        // end parens
        returnBegin: true,
        label: "func.def",
        contains: [
          PARAMS,
          hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1$1, className: "title.function" })
        ]
      },
      // catch ... so it won't trigger the property rule below
      {
        match: /\.\.\./,
        relevance: 0
      },
      PROPERTY_ACCESS,
      // hack: prevents detection of keywords in some circumstances
      // .keyword()
      // $keyword = x
      {
        match: "\\$" + IDENT_RE$1$1,
        relevance: 0
      },
      {
        match: [/\bconstructor(?=\s*\()/],
        className: { 1: "title.function" },
        contains: [PARAMS]
      },
      FUNCTION_CALL,
      UPPER_CASE_CONSTANT,
      CLASS_OR_EXTENDS,
      GETTER_OR_SETTER,
      {
        match: /\$[(.]/
        // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`
      }
    ]
  };
}
function json(hljs) {
  const ATTRIBUTE = {
    className: "attr",
    begin: /"(\\.|[^\\"\r\n])*"(?=\s*:)/,
    relevance: 1.01
  };
  const PUNCTUATION = {
    match: /[{}[\],:]/,
    className: "punctuation",
    relevance: 0
  };
  const LITERALS2 = [
    "true",
    "false",
    "null"
  ];
  const LITERALS_MODE = {
    scope: "literal",
    beginKeywords: LITERALS2.join(" ")
  };
  return {
    name: "JSON",
    aliases: ["jsonc"],
    keywords: {
      literal: LITERALS2
    },
    contains: [
      ATTRIBUTE,
      PUNCTUATION,
      hljs.QUOTE_STRING_MODE,
      LITERALS_MODE,
      hljs.C_NUMBER_MODE,
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE
    ],
    illegal: "\\S"
  };
}
var decimalDigits = "[0-9](_*[0-9])*";
var frac = `\\.(${decimalDigits})`;
var hexDigits = "[0-9a-fA-F](_*[0-9a-fA-F])*";
var NUMERIC = {
  className: "number",
  variants: [
    // DecimalFloatingPointLiteral
    // including ExponentPart
    { begin: `(\\b(${decimalDigits})((${frac})|\\.)?|(${frac}))[eE][+-]?(${decimalDigits})[fFdD]?\\b` },
    // excluding ExponentPart
    { begin: `\\b(${decimalDigits})((${frac})[fFdD]?\\b|\\.([fFdD]\\b)?)` },
    { begin: `(${frac})[fFdD]?\\b` },
    { begin: `\\b(${decimalDigits})[fFdD]\\b` },
    // HexadecimalFloatingPointLiteral
    { begin: `\\b0[xX]((${hexDigits})\\.?|(${hexDigits})?\\.(${hexDigits}))[pP][+-]?(${decimalDigits})[fFdD]?\\b` },
    // DecimalIntegerLiteral
    { begin: "\\b(0|[1-9](_*[0-9])*)[lL]?\\b" },
    // HexIntegerLiteral
    { begin: `\\b0[xX](${hexDigits})[lL]?\\b` },
    // OctalIntegerLiteral
    { begin: "\\b0(_*[0-7])*[lL]?\\b" },
    // BinaryIntegerLiteral
    { begin: "\\b0[bB][01](_*[01])*[lL]?\\b" }
  ],
  relevance: 0
};
function kotlin(hljs) {
  const KEYWORDS2 = {
    keyword: "abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual",
    built_in: "Byte Short Char Int Long Boolean Float Double Void Unit Nothing",
    literal: "true false null"
  };
  const KEYWORDS_WITH_LABEL = {
    className: "keyword",
    begin: /\b(break|continue|return|this)\b/,
    starts: { contains: [
      {
        className: "symbol",
        begin: /@\w+/
      }
    ] }
  };
  const LABEL = {
    className: "symbol",
    begin: hljs.UNDERSCORE_IDENT_RE + "@"
  };
  const SUBST = {
    className: "subst",
    begin: /\$\{/,
    end: /\}/,
    contains: [hljs.C_NUMBER_MODE]
  };
  const VARIABLE = {
    className: "variable",
    begin: "\\$" + hljs.UNDERSCORE_IDENT_RE
  };
  const STRING = {
    className: "string",
    variants: [
      {
        begin: '"""',
        end: '"""(?=[^"])',
        contains: [
          VARIABLE,
          SUBST
        ]
      },
      // Can't use built-in modes easily, as we want to use STRING in the meta
      // context as 'meta-string' and there's no syntax to remove explicitly set
      // classNames in built-in modes.
      {
        begin: "'",
        end: "'",
        illegal: /\n/,
        contains: [hljs.BACKSLASH_ESCAPE]
      },
      {
        begin: '"',
        end: '"',
        illegal: /\n/,
        contains: [
          hljs.BACKSLASH_ESCAPE,
          VARIABLE,
          SUBST
        ]
      }
    ]
  };
  SUBST.contains.push(STRING);
  const ANNOTATION_USE_SITE = {
    className: "meta",
    begin: "@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*" + hljs.UNDERSCORE_IDENT_RE + ")?"
  };
  const ANNOTATION = {
    className: "meta",
    begin: "@" + hljs.UNDERSCORE_IDENT_RE,
    contains: [
      {
        begin: /\(/,
        end: /\)/,
        contains: [
          hljs.inherit(STRING, { className: "string" }),
          "self"
        ]
      }
    ]
  };
  const KOTLIN_NUMBER_MODE = NUMERIC;
  const KOTLIN_NESTED_COMMENT = hljs.COMMENT(
    "/\\*",
    "\\*/",
    { contains: [hljs.C_BLOCK_COMMENT_MODE] }
  );
  const KOTLIN_PAREN_TYPE = { variants: [
    {
      className: "type",
      begin: hljs.UNDERSCORE_IDENT_RE
    },
    {
      begin: /\(/,
      end: /\)/,
      contains: []
      // defined later
    }
  ] };
  const KOTLIN_PAREN_TYPE2 = KOTLIN_PAREN_TYPE;
  KOTLIN_PAREN_TYPE2.variants[1].contains = [KOTLIN_PAREN_TYPE];
  KOTLIN_PAREN_TYPE.variants[1].contains = [KOTLIN_PAREN_TYPE2];
  return {
    name: "Kotlin",
    aliases: [
      "kt",
      "kts"
    ],
    keywords: KEYWORDS2,
    contains: [
      hljs.COMMENT(
        "/\\*\\*",
        "\\*/",
        {
          relevance: 0,
          contains: [
            {
              className: "doctag",
              begin: "@[A-Za-z]+"
            }
          ]
        }
      ),
      hljs.C_LINE_COMMENT_MODE,
      KOTLIN_NESTED_COMMENT,
      KEYWORDS_WITH_LABEL,
      LABEL,
      ANNOTATION_USE_SITE,
      ANNOTATION,
      {
        className: "function",
        beginKeywords: "fun",
        end: "[(]|$",
        returnBegin: true,
        excludeEnd: true,
        keywords: KEYWORDS2,
        relevance: 5,
        contains: [
          {
            begin: hljs.UNDERSCORE_IDENT_RE + "\\s*\\(",
            returnBegin: true,
            relevance: 0,
            contains: [hljs.UNDERSCORE_TITLE_MODE]
          },
          {
            className: "type",
            begin: /</,
            end: />/,
            keywords: "reified",
            relevance: 0
          },
          {
            className: "params",
            begin: /\(/,
            end: /\)/,
            endsParent: true,
            keywords: KEYWORDS2,
            relevance: 0,
            contains: [
              {
                begin: /:/,
                end: /[=,\/]/,
                endsWithParent: true,
                contains: [
                  KOTLIN_PAREN_TYPE,
                  hljs.C_LINE_COMMENT_MODE,
                  KOTLIN_NESTED_COMMENT
                ],
                relevance: 0
              },
              hljs.C_LINE_COMMENT_MODE,
              KOTLIN_NESTED_COMMENT,
              ANNOTATION_USE_SITE,
              ANNOTATION,
              STRING,
              hljs.C_NUMBER_MODE
            ]
          },
          KOTLIN_NESTED_COMMENT
        ]
      },
      {
        begin: [
          /class|interface|trait/,
          /\s+/,
          hljs.UNDERSCORE_IDENT_RE
        ],
        beginScope: {
          3: "title.class"
        },
        keywords: "class interface trait",
        end: /[:\{(]|$/,
        excludeEnd: true,
        illegal: "extends implements",
        contains: [
          { beginKeywords: "public protected internal private constructor" },
          hljs.UNDERSCORE_TITLE_MODE,
          {
            className: "type",
            begin: /</,
            end: />/,
            excludeBegin: true,
            excludeEnd: true,
            relevance: 0
          },
          {
            className: "type",
            begin: /[,:]\s*/,
            end: /[<\(,){\s]|$/,
            excludeBegin: true,
            returnEnd: true
          },
          ANNOTATION_USE_SITE,
          ANNOTATION
        ]
      },
      STRING,
      {
        className: "meta",
        begin: "^#!/usr/bin/env",
        end: "$",
        illegal: "\n"
      },
      KOTLIN_NUMBER_MODE
    ]
  };
}
const MODES$1 = (hljs) => {
  return {
    IMPORTANT: {
      scope: "meta",
      begin: "!important"
    },
    BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,
    HEXCOLOR: {
      scope: "number",
      begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/
    },
    FUNCTION_DISPATCH: {
      className: "built_in",
      begin: /[\w-]+(?=\()/
    },
    ATTRIBUTE_SELECTOR_MODE: {
      scope: "selector-attr",
      begin: /\[/,
      end: /\]/,
      illegal: "$",
      contains: [
        hljs.APOS_STRING_MODE,
        hljs.QUOTE_STRING_MODE
      ]
    },
    CSS_NUMBER_MODE: {
      scope: "number",
      begin: hljs.NUMBER_RE + "(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",
      relevance: 0
    },
    CSS_VARIABLE: {
      className: "attr",
      begin: /--[A-Za-z_][A-Za-z0-9_-]*/
    }
  };
};
const HTML_TAGS$1 = [
  "a",
  "abbr",
  "address",
  "article",
  "aside",
  "audio",
  "b",
  "blockquote",
  "body",
  "button",
  "canvas",
  "caption",
  "cite",
  "code",
  "dd",
  "del",
  "details",
  "dfn",
  "div",
  "dl",
  "dt",
  "em",
  "fieldset",
  "figcaption",
  "figure",
  "footer",
  "form",
  "h1",
  "h2",
  "h3",
  "h4",
  "h5",
  "h6",
  "header",
  "hgroup",
  "html",
  "i",
  "iframe",
  "img",
  "input",
  "ins",
  "kbd",
  "label",
  "legend",
  "li",
  "main",
  "mark",
  "menu",
  "nav",
  "object",
  "ol",
  "optgroup",
  "option",
  "p",
  "picture",
  "q",
  "quote",
  "samp",
  "section",
  "select",
  "source",
  "span",
  "strong",
  "summary",
  "sup",
  "table",
  "tbody",
  "td",
  "textarea",
  "tfoot",
  "th",
  "thead",
  "time",
  "tr",
  "ul",
  "var",
  "video"
];
const SVG_TAGS$1 = [
  "defs",
  "g",
  "marker",
  "mask",
  "pattern",
  "svg",
  "switch",
  "symbol",
  "feBlend",
  "feColorMatrix",
  "feComponentTransfer",
  "feComposite",
  "feConvolveMatrix",
  "feDiffuseLighting",
  "feDisplacementMap",
  "feFlood",
  "feGaussianBlur",
  "feImage",
  "feMerge",
  "feMorphology",
  "feOffset",
  "feSpecularLighting",
  "feTile",
  "feTurbulence",
  "linearGradient",
  "radialGradient",
  "stop",
  "circle",
  "ellipse",
  "image",
  "line",
  "path",
  "polygon",
  "polyline",
  "rect",
  "text",
  "use",
  "textPath",
  "tspan",
  "foreignObject",
  "clipPath"
];
const TAGS$1 = [
  ...HTML_TAGS$1,
  ...SVG_TAGS$1
];
const MEDIA_FEATURES$1 = [
  "any-hover",
  "any-pointer",
  "aspect-ratio",
  "color",
  "color-gamut",
  "color-index",
  "device-aspect-ratio",
  "device-height",
  "device-width",
  "display-mode",
  "forced-colors",
  "grid",
  "height",
  "hover",
  "inverted-colors",
  "monochrome",
  "orientation",
  "overflow-block",
  "overflow-inline",
  "pointer",
  "prefers-color-scheme",
  "prefers-contrast",
  "prefers-reduced-motion",
  "prefers-reduced-transparency",
  "resolution",
  "scan",
  "scripting",
  "update",
  "width",
  // TODO: find a better solution?
  "min-width",
  "max-width",
  "min-height",
  "max-height"
].sort().reverse();
const PSEUDO_CLASSES$1 = [
  "active",
  "any-link",
  "blank",
  "checked",
  "current",
  "default",
  "defined",
  "dir",
  // dir()
  "disabled",
  "drop",
  "empty",
  "enabled",
  "first",
  "first-child",
  "first-of-type",
  "fullscreen",
  "future",
  "focus",
  "focus-visible",
  "focus-within",
  "has",
  // has()
  "host",
  // host or host()
  "host-context",
  // host-context()
  "hover",
  "indeterminate",
  "in-range",
  "invalid",
  "is",
  // is()
  "lang",
  // lang()
  "last-child",
  "last-of-type",
  "left",
  "link",
  "local-link",
  "not",
  // not()
  "nth-child",
  // nth-child()
  "nth-col",
  // nth-col()
  "nth-last-child",
  // nth-last-child()
  "nth-last-col",
  // nth-last-col()
  "nth-last-of-type",
  //nth-last-of-type()
  "nth-of-type",
  //nth-of-type()
  "only-child",
  "only-of-type",
  "optional",
  "out-of-range",
  "past",
  "placeholder-shown",
  "read-only",
  "read-write",
  "required",
  "right",
  "root",
  "scope",
  "target",
  "target-within",
  "user-invalid",
  "valid",
  "visited",
  "where"
  // where()
].sort().reverse();
const PSEUDO_ELEMENTS$1 = [
  "after",
  "backdrop",
  "before",
  "cue",
  "cue-region",
  "first-letter",
  "first-line",
  "grammar-error",
  "marker",
  "part",
  "placeholder",
  "selection",
  "slotted",
  "spelling-error"
].sort().reverse();
const ATTRIBUTES$1 = [
  "accent-color",
  "align-content",
  "align-items",
  "align-self",
  "alignment-baseline",
  "all",
  "anchor-name",
  "animation",
  "animation-composition",
  "animation-delay",
  "animation-direction",
  "animation-duration",
  "animation-fill-mode",
  "animation-iteration-count",
  "animation-name",
  "animation-play-state",
  "animation-range",
  "animation-range-end",
  "animation-range-start",
  "animation-timeline",
  "animation-timing-function",
  "appearance",
  "aspect-ratio",
  "backdrop-filter",
  "backface-visibility",
  "background",
  "background-attachment",
  "background-blend-mode",
  "background-clip",
  "background-color",
  "background-image",
  "background-origin",
  "background-position",
  "background-position-x",
  "background-position-y",
  "background-repeat",
  "background-size",
  "baseline-shift",
  "block-size",
  "border",
  "border-block",
  "border-block-color",
  "border-block-end",
  "border-block-end-color",
  "border-block-end-style",
  "border-block-end-width",
  "border-block-start",
  "border-block-start-color",
  "border-block-start-style",
  "border-block-start-width",
  "border-block-style",
  "border-block-width",
  "border-bottom",
  "border-bottom-color",
  "border-bottom-left-radius",
  "border-bottom-right-radius",
  "border-bottom-style",
  "border-bottom-width",
  "border-collapse",
  "border-color",
  "border-end-end-radius",
  "border-end-start-radius",
  "border-image",
  "border-image-outset",
  "border-image-repeat",
  "border-image-slice",
  "border-image-source",
  "border-image-width",
  "border-inline",
  "border-inline-color",
  "border-inline-end",
  "border-inline-end-color",
  "border-inline-end-style",
  "border-inline-end-width",
  "border-inline-start",
  "border-inline-start-color",
  "border-inline-start-style",
  "border-inline-start-width",
  "border-inline-style",
  "border-inline-width",
  "border-left",
  "border-left-color",
  "border-left-style",
  "border-left-width",
  "border-radius",
  "border-right",
  "border-right-color",
  "border-right-style",
  "border-right-width",
  "border-spacing",
  "border-start-end-radius",
  "border-start-start-radius",
  "border-style",
  "border-top",
  "border-top-color",
  "border-top-left-radius",
  "border-top-right-radius",
  "border-top-style",
  "border-top-width",
  "border-width",
  "bottom",
  "box-align",
  "box-decoration-break",
  "box-direction",
  "box-flex",
  "box-flex-group",
  "box-lines",
  "box-ordinal-group",
  "box-orient",
  "box-pack",
  "box-shadow",
  "box-sizing",
  "break-after",
  "break-before",
  "break-inside",
  "caption-side",
  "caret-color",
  "clear",
  "clip",
  "clip-path",
  "clip-rule",
  "color",
  "color-interpolation",
  "color-interpolation-filters",
  "color-profile",
  "color-rendering",
  "color-scheme",
  "column-count",
  "column-fill",
  "column-gap",
  "column-rule",
  "column-rule-color",
  "column-rule-style",
  "column-rule-width",
  "column-span",
  "column-width",
  "columns",
  "contain",
  "contain-intrinsic-block-size",
  "contain-intrinsic-height",
  "contain-intrinsic-inline-size",
  "contain-intrinsic-size",
  "contain-intrinsic-width",
  "container",
  "container-name",
  "container-type",
  "content",
  "content-visibility",
  "counter-increment",
  "counter-reset",
  "counter-set",
  "cue",
  "cue-after",
  "cue-before",
  "cursor",
  "cx",
  "cy",
  "direction",
  "display",
  "dominant-baseline",
  "empty-cells",
  "enable-background",
  "field-sizing",
  "fill",
  "fill-opacity",
  "fill-rule",
  "filter",
  "flex",
  "flex-basis",
  "flex-direction",
  "flex-flow",
  "flex-grow",
  "flex-shrink",
  "flex-wrap",
  "float",
  "flood-color",
  "flood-opacity",
  "flow",
  "font",
  "font-display",
  "font-family",
  "font-feature-settings",
  "font-kerning",
  "font-language-override",
  "font-optical-sizing",
  "font-palette",
  "font-size",
  "font-size-adjust",
  "font-smooth",
  "font-smoothing",
  "font-stretch",
  "font-style",
  "font-synthesis",
  "font-synthesis-position",
  "font-synthesis-small-caps",
  "font-synthesis-style",
  "font-synthesis-weight",
  "font-variant",
  "font-variant-alternates",
  "font-variant-caps",
  "font-variant-east-asian",
  "font-variant-emoji",
  "font-variant-ligatures",
  "font-variant-numeric",
  "font-variant-position",
  "font-variation-settings",
  "font-weight",
  "forced-color-adjust",
  "gap",
  "glyph-orientation-horizontal",
  "glyph-orientation-vertical",
  "grid",
  "grid-area",
  "grid-auto-columns",
  "grid-auto-flow",
  "grid-auto-rows",
  "grid-column",
  "grid-column-end",
  "grid-column-start",
  "grid-gap",
  "grid-row",
  "grid-row-end",
  "grid-row-start",
  "grid-template",
  "grid-template-areas",
  "grid-template-columns",
  "grid-template-rows",
  "hanging-punctuation",
  "height",
  "hyphenate-character",
  "hyphenate-limit-chars",
  "hyphens",
  "icon",
  "image-orientation",
  "image-rendering",
  "image-resolution",
  "ime-mode",
  "initial-letter",
  "initial-letter-align",
  "inline-size",
  "inset",
  "inset-area",
  "inset-block",
  "inset-block-end",
  "inset-block-start",
  "inset-inline",
  "inset-inline-end",
  "inset-inline-start",
  "isolation",
  "justify-content",
  "justify-items",
  "justify-self",
  "kerning",
  "left",
  "letter-spacing",
  "lighting-color",
  "line-break",
  "line-height",
  "line-height-step",
  "list-style",
  "list-style-image",
  "list-style-position",
  "list-style-type",
  "margin",
  "margin-block",
  "margin-block-end",
  "margin-block-start",
  "margin-bottom",
  "margin-inline",
  "margin-inline-end",
  "margin-inline-start",
  "margin-left",
  "margin-right",
  "margin-top",
  "margin-trim",
  "marker",
  "marker-end",
  "marker-mid",
  "marker-start",
  "marks",
  "mask",
  "mask-border",
  "mask-border-mode",
  "mask-border-outset",
  "mask-border-repeat",
  "mask-border-slice",
  "mask-border-source",
  "mask-border-width",
  "mask-clip",
  "mask-composite",
  "mask-image",
  "mask-mode",
  "mask-origin",
  "mask-position",
  "mask-repeat",
  "mask-size",
  "mask-type",
  "masonry-auto-flow",
  "math-depth",
  "math-shift",
  "math-style",
  "max-block-size",
  "max-height",
  "max-inline-size",
  "max-width",
  "min-block-size",
  "min-height",
  "min-inline-size",
  "min-width",
  "mix-blend-mode",
  "nav-down",
  "nav-index",
  "nav-left",
  "nav-right",
  "nav-up",
  "none",
  "normal",
  "object-fit",
  "object-position",
  "offset",
  "offset-anchor",
  "offset-distance",
  "offset-path",
  "offset-position",
  "offset-rotate",
  "opacity",
  "order",
  "orphans",
  "outline",
  "outline-color",
  "outline-offset",
  "outline-style",
  "outline-width",
  "overflow",
  "overflow-anchor",
  "overflow-block",
  "overflow-clip-margin",
  "overflow-inline",
  "overflow-wrap",
  "overflow-x",
  "overflow-y",
  "overlay",
  "overscroll-behavior",
  "overscroll-behavior-block",
  "overscroll-behavior-inline",
  "overscroll-behavior-x",
  "overscroll-behavior-y",
  "padding",
  "padding-block",
  "padding-block-end",
  "padding-block-start",
  "padding-bottom",
  "padding-inline",
  "padding-inline-end",
  "padding-inline-start",
  "padding-left",
  "padding-right",
  "padding-top",
  "page",
  "page-break-after",
  "page-break-before",
  "page-break-inside",
  "paint-order",
  "pause",
  "pause-after",
  "pause-before",
  "perspective",
  "perspective-origin",
  "place-content",
  "place-items",
  "place-self",
  "pointer-events",
  "position",
  "position-anchor",
  "position-visibility",
  "print-color-adjust",
  "quotes",
  "r",
  "resize",
  "rest",
  "rest-after",
  "rest-before",
  "right",
  "rotate",
  "row-gap",
  "ruby-align",
  "ruby-position",
  "scale",
  "scroll-behavior",
  "scroll-margin",
  "scroll-margin-block",
  "scroll-margin-block-end",
  "scroll-margin-block-start",
  "scroll-margin-bottom",
  "scroll-margin-inline",
  "scroll-margin-inline-end",
  "scroll-margin-inline-start",
  "scroll-margin-left",
  "scroll-margin-right",
  "scroll-margin-top",
  "scroll-padding",
  "scroll-padding-block",
  "scroll-padding-block-end",
  "scroll-padding-block-start",
  "scroll-padding-bottom",
  "scroll-padding-inline",
  "scroll-padding-inline-end",
  "scroll-padding-inline-start",
  "scroll-padding-left",
  "scroll-padding-right",
  "scroll-padding-top",
  "scroll-snap-align",
  "scroll-snap-stop",
  "scroll-snap-type",
  "scroll-timeline",
  "scroll-timeline-axis",
  "scroll-timeline-name",
  "scrollbar-color",
  "scrollbar-gutter",
  "scrollbar-width",
  "shape-image-threshold",
  "shape-margin",
  "shape-outside",
  "shape-rendering",
  "speak",
  "speak-as",
  "src",
  // @font-face
  "stop-color",
  "stop-opacity",
  "stroke",
  "stroke-dasharray",
  "stroke-dashoffset",
  "stroke-linecap",
  "stroke-linejoin",
  "stroke-miterlimit",
  "stroke-opacity",
  "stroke-width",
  "tab-size",
  "table-layout",
  "text-align",
  "text-align-all",
  "text-align-last",
  "text-anchor",
  "text-combine-upright",
  "text-decoration",
  "text-decoration-color",
  "text-decoration-line",
  "text-decoration-skip",
  "text-decoration-skip-ink",
  "text-decoration-style",
  "text-decoration-thickness",
  "text-emphasis",
  "text-emphasis-color",
  "text-emphasis-position",
  "text-emphasis-style",
  "text-indent",
  "text-justify",
  "text-orientation",
  "text-overflow",
  "text-rendering",
  "text-shadow",
  "text-size-adjust",
  "text-transform",
  "text-underline-offset",
  "text-underline-position",
  "text-wrap",
  "text-wrap-mode",
  "text-wrap-style",
  "timeline-scope",
  "top",
  "touch-action",
  "transform",
  "transform-box",
  "transform-origin",
  "transform-style",
  "transition",
  "transition-behavior",
  "transition-delay",
  "transition-duration",
  "transition-property",
  "transition-timing-function",
  "translate",
  "unicode-bidi",
  "user-modify",
  "user-select",
  "vector-effect",
  "vertical-align",
  "view-timeline",
  "view-timeline-axis",
  "view-timeline-inset",
  "view-timeline-name",
  "view-transition-name",
  "visibility",
  "voice-balance",
  "voice-duration",
  "voice-family",
  "voice-pitch",
  "voice-range",
  "voice-rate",
  "voice-stress",
  "voice-volume",
  "white-space",
  "white-space-collapse",
  "widows",
  "width",
  "will-change",
  "word-break",
  "word-spacing",
  "word-wrap",
  "writing-mode",
  "x",
  "y",
  "z-index",
  "zoom"
].sort().reverse();
const PSEUDO_SELECTORS = PSEUDO_CLASSES$1.concat(PSEUDO_ELEMENTS$1).sort().reverse();
function less(hljs) {
  const modes = MODES$1(hljs);
  const PSEUDO_SELECTORS$1 = PSEUDO_SELECTORS;
  const AT_MODIFIERS = "and or not only";
  const IDENT_RE2 = "[\\w-]+";
  const INTERP_IDENT_RE = "(" + IDENT_RE2 + "|@\\{" + IDENT_RE2 + "\\})";
  const RULES = [];
  const VALUE_MODES = [];
  const STRING_MODE = function(c2) {
    return {
      // Less strings are not multiline (also include '~' for more consistent coloring of "escaped" strings)
      className: "string",
      begin: "~?" + c2 + ".*?" + c2
    };
  };
  const IDENT_MODE = function(name, begin, relevance) {
    return {
      className: name,
      begin,
      relevance
    };
  };
  const AT_KEYWORDS = {
    $pattern: /[a-z-]+/,
    keyword: AT_MODIFIERS,
    attribute: MEDIA_FEATURES$1.join(" ")
  };
  const PARENS_MODE = {
    // used only to properly balance nested parens inside mixin call, def. arg list
    begin: "\\(",
    end: "\\)",
    contains: VALUE_MODES,
    keywords: AT_KEYWORDS,
    relevance: 0
  };
  VALUE_MODES.push(
    hljs.C_LINE_COMMENT_MODE,
    hljs.C_BLOCK_COMMENT_MODE,
    STRING_MODE("'"),
    STRING_MODE('"'),
    modes.CSS_NUMBER_MODE,
    // fixme: it does not include dot for numbers like .5em :(
    {
      begin: "(url|data-uri)\\(",
      starts: {
        className: "string",
        end: "[\\)\\n]",
        excludeEnd: true
      }
    },
    modes.HEXCOLOR,
    PARENS_MODE,
    IDENT_MODE("variable", "@@?" + IDENT_RE2, 10),
    IDENT_MODE("variable", "@\\{" + IDENT_RE2 + "\\}"),
    IDENT_MODE("built_in", "~?`[^`]*?`"),
    // inline javascript (or whatever host language) *multiline* string
    {
      // @media features (it’s here to not duplicate things in AT_RULE_MODE with extra PARENS_MODE overriding):
      className: "attribute",
      begin: IDENT_RE2 + "\\s*:",
      end: ":",
      returnBegin: true,
      excludeEnd: true
    },
    modes.IMPORTANT,
    { beginKeywords: "and not" },
    modes.FUNCTION_DISPATCH
  );
  const VALUE_WITH_RULESETS = VALUE_MODES.concat({
    begin: /\{/,
    end: /\}/,
    contains: RULES
  });
  const MIXIN_GUARD_MODE = {
    beginKeywords: "when",
    endsWithParent: true,
    contains: [{ beginKeywords: "and not" }].concat(VALUE_MODES)
    // using this form to override VALUE’s 'function' match
  };
  const RULE_MODE = {
    begin: INTERP_IDENT_RE + "\\s*:",
    returnBegin: true,
    end: /[;}]/,
    relevance: 0,
    contains: [
      { begin: /-(webkit|moz|ms|o)-/ },
      modes.CSS_VARIABLE,
      {
        className: "attribute",
        begin: "\\b(" + ATTRIBUTES$1.join("|") + ")\\b",
        end: /(?=:)/,
        starts: {
          endsWithParent: true,
          illegal: "[<=$]",
          relevance: 0,
          contains: VALUE_MODES
        }
      }
    ]
  };
  const AT_RULE_MODE = {
    className: "keyword",
    begin: "@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",
    starts: {
      end: "[;{}]",
      keywords: AT_KEYWORDS,
      returnEnd: true,
      contains: VALUE_MODES,
      relevance: 0
    }
  };
  const VAR_RULE_MODE = {
    className: "variable",
    variants: [
      // using more strict pattern for higher relevance to increase chances of Less detection.
      // this is *the only* Less specific statement used in most of the sources, so...
      // (we’ll still often loose to the css-parser unless there's '//' comment,
      // simply because 1 variable just can't beat 99 properties :)
      {
        begin: "@" + IDENT_RE2 + "\\s*:",
        relevance: 15
      },
      { begin: "@" + IDENT_RE2 }
    ],
    starts: {
      end: "[;}]",
      returnEnd: true,
      contains: VALUE_WITH_RULESETS
    }
  };
  const SELECTOR_MODE = {
    // first parse unambiguous selectors (i.e. those not starting with tag)
    // then fall into the scary lookahead-discriminator variant.
    // this mode also handles mixin definitions and calls
    variants: [
      {
        begin: "[\\.#:&\\[>]",
        end: "[;{}]"
        // mixin calls end with ';'
      },
      {
        begin: INTERP_IDENT_RE,
        end: /\{/
      }
    ],
    returnBegin: true,
    returnEnd: true,
    illegal: `[<='$"]`,
    relevance: 0,
    contains: [
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      MIXIN_GUARD_MODE,
      IDENT_MODE("keyword", "all\\b"),
      IDENT_MODE("variable", "@\\{" + IDENT_RE2 + "\\}"),
      // otherwise it’s identified as tag
      {
        begin: "\\b(" + TAGS$1.join("|") + ")\\b",
        className: "selector-tag"
      },
      modes.CSS_NUMBER_MODE,
      IDENT_MODE("selector-tag", INTERP_IDENT_RE, 0),
      IDENT_MODE("selector-id", "#" + INTERP_IDENT_RE),
      IDENT_MODE("selector-class", "\\." + INTERP_IDENT_RE, 0),
      IDENT_MODE("selector-tag", "&", 0),
      modes.ATTRIBUTE_SELECTOR_MODE,
      {
        className: "selector-pseudo",
        begin: ":(" + PSEUDO_CLASSES$1.join("|") + ")"
      },
      {
        className: "selector-pseudo",
        begin: ":(:)?(" + PSEUDO_ELEMENTS$1.join("|") + ")"
      },
      {
        begin: /\(/,
        end: /\)/,
        relevance: 0,
        contains: VALUE_WITH_RULESETS
      },
      // argument list of parametric mixins
      { begin: "!important" },
      // eat !important after mixin call or it will be colored as tag
      modes.FUNCTION_DISPATCH
    ]
  };
  const PSEUDO_SELECTOR_MODE = {
    begin: IDENT_RE2 + `:(:)?(${PSEUDO_SELECTORS$1.join("|")})`,
    returnBegin: true,
    contains: [SELECTOR_MODE]
  };
  RULES.push(
    hljs.C_LINE_COMMENT_MODE,
    hljs.C_BLOCK_COMMENT_MODE,
    AT_RULE_MODE,
    VAR_RULE_MODE,
    PSEUDO_SELECTOR_MODE,
    RULE_MODE,
    SELECTOR_MODE,
    MIXIN_GUARD_MODE,
    modes.FUNCTION_DISPATCH
  );
  return {
    name: "Less",
    case_insensitive: true,
    illegal: `[=>'/<($"]`,
    contains: RULES
  };
}
function lua(hljs) {
  const OPENING_LONG_BRACKET = "\\[=*\\[";
  const CLOSING_LONG_BRACKET = "\\]=*\\]";
  const LONG_BRACKETS = {
    begin: OPENING_LONG_BRACKET,
    end: CLOSING_LONG_BRACKET,
    contains: ["self"]
  };
  const COMMENTS = [
    hljs.COMMENT("--(?!" + OPENING_LONG_BRACKET + ")", "$"),
    hljs.COMMENT(
      "--" + OPENING_LONG_BRACKET,
      CLOSING_LONG_BRACKET,
      {
        contains: [LONG_BRACKETS],
        relevance: 10
      }
    )
  ];
  return {
    name: "Lua",
    aliases: ["pluto"],
    keywords: {
      $pattern: hljs.UNDERSCORE_IDENT_RE,
      literal: "true false nil",
      keyword: "and break do else elseif end for goto if in local not or repeat return then until while",
      built_in: (
        // Metatags and globals:
        "_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"
      )
    },
    contains: COMMENTS.concat([
      {
        className: "function",
        beginKeywords: "function",
        end: "\\)",
        contains: [
          hljs.inherit(hljs.TITLE_MODE, { begin: "([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*" }),
          {
            className: "params",
            begin: "\\(",
            endsWithParent: true,
            contains: COMMENTS
          }
        ].concat(COMMENTS)
      },
      hljs.C_NUMBER_MODE,
      hljs.APOS_STRING_MODE,
      hljs.QUOTE_STRING_MODE,
      {
        className: "string",
        begin: OPENING_LONG_BRACKET,
        end: CLOSING_LONG_BRACKET,
        contains: [LONG_BRACKETS],
        relevance: 5
      }
    ])
  };
}
function makefile(hljs) {
  const VARIABLE = {
    className: "variable",
    variants: [
      {
        begin: "\\$\\(" + hljs.UNDERSCORE_IDENT_RE + "\\)",
        contains: [hljs.BACKSLASH_ESCAPE]
      },
      { begin: /\$[@%<?\^\+\*]/ }
    ]
  };
  const QUOTE_STRING = {
    className: "string",
    begin: /"/,
    end: /"/,
    contains: [
      hljs.BACKSLASH_ESCAPE,
      VARIABLE
    ]
  };
  const FUNC = {
    className: "variable",
    begin: /\$\([\w-]+\s/,
    end: /\)/,
    keywords: { built_in: "subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value" },
    contains: [
      VARIABLE,
      QUOTE_STRING
      // Added QUOTE_STRING as they can be a part of functions
    ]
  };
  const ASSIGNMENT = { begin: "^" + hljs.UNDERSCORE_IDENT_RE + "\\s*(?=[:+?]?=)" };
  const META = {
    className: "meta",
    begin: /^\.PHONY:/,
    end: /$/,
    keywords: {
      $pattern: /[\.\w]+/,
      keyword: ".PHONY"
    }
  };
  const TARGET = {
    className: "section",
    begin: /^[^\s]+:/,
    end: /$/,
    contains: [VARIABLE]
  };
  return {
    name: "Makefile",
    aliases: [
      "mk",
      "mak",
      "make"
    ],
    keywords: {
      $pattern: /[\w-]+/,
      keyword: "define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath"
    },
    contains: [
      hljs.HASH_COMMENT_MODE,
      VARIABLE,
      QUOTE_STRING,
      FUNC,
      ASSIGNMENT,
      META,
      TARGET
    ]
  };
}
function markdown(hljs) {
  const regex = hljs.regex;
  const INLINE_HTML = {
    begin: /<\/?[A-Za-z_]/,
    end: ">",
    subLanguage: "xml",
    relevance: 0
  };
  const HORIZONTAL_RULE = {
    begin: "^[-\\*]{3,}",
    end: "$"
  };
  const CODE = {
    className: "code",
    variants: [
      // TODO: fix to allow these to work with sublanguage also
      { begin: "(`{3,})[^`](.|\\n)*?\\1`*[ ]*" },
      { begin: "(~{3,})[^~](.|\\n)*?\\1~*[ ]*" },
      // needed to allow markdown as a sublanguage to work
      {
        begin: "```",
        end: "```+[ ]*$"
      },
      {
        begin: "~~~",
        end: "~~~+[ ]*$"
      },
      { begin: "`.+?`" },
      {
        begin: "(?=^( {4}|\\t))",
        // use contains to gobble up multiple lines to allow the block to be whatever size
        // but only have a single open/close tag vs one per line
        contains: [
          {
            begin: "^( {4}|\\t)",
            end: "(\\n)$"
          }
        ],
        relevance: 0
      }
    ]
  };
  const LIST = {
    className: "bullet",
    begin: "^[ 	]*([*+-]|(\\d+\\.))(?=\\s+)",
    end: "\\s+",
    excludeEnd: true
  };
  const LINK_REFERENCE = {
    begin: /^\[[^\n]+\]:/,
    returnBegin: true,
    contains: [
      {
        className: "symbol",
        begin: /\[/,
        end: /\]/,
        excludeBegin: true,
        excludeEnd: true
      },
      {
        className: "link",
        begin: /:\s*/,
        end: /$/,
        excludeBegin: true
      }
    ]
  };
  const URL_SCHEME = /[A-Za-z][A-Za-z0-9+.-]*/;
  const LINK = {
    variants: [
      // too much like nested array access in so many languages
      // to have any real relevance
      {
        begin: /\[.+?\]\[.*?\]/,
        relevance: 0
      },
      // popular internet URLs
      {
        begin: /\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,
        relevance: 2
      },
      {
        begin: regex.concat(/\[.+?\]\(/, URL_SCHEME, /:\/\/.*?\)/),
        relevance: 2
      },
      // relative urls
      {
        begin: /\[.+?\]\([./?&#].*?\)/,
        relevance: 1
      },
      // whatever else, lower relevance (might not be a link at all)
      {
        begin: /\[.*?\]\(.*?\)/,
        relevance: 0
      }
    ],
    returnBegin: true,
    contains: [
      {
        // empty strings for alt or link text
        match: /\[(?=\])/
      },
      {
        className: "string",
        relevance: 0,
        begin: "\\[",
        end: "\\]",
        excludeBegin: true,
        returnEnd: true
      },
      {
        className: "link",
        relevance: 0,
        begin: "\\]\\(",
        end: "\\)",
        excludeBegin: true,
        excludeEnd: true
      },
      {
        className: "symbol",
        relevance: 0,
        begin: "\\]\\[",
        end: "\\]",
        excludeBegin: true,
        excludeEnd: true
      }
    ]
  };
  const BOLD = {
    className: "strong",
    contains: [],
    // defined later
    variants: [
      {
        begin: /_{2}(?!\s)/,
        end: /_{2}/
      },
      {
        begin: /\*{2}(?!\s)/,
        end: /\*{2}/
      }
    ]
  };
  const ITALIC = {
    className: "emphasis",
    contains: [],
    // defined later
    variants: [
      {
        begin: /\*(?![*\s])/,
        end: /\*/
      },
      {
        begin: /_(?![_\s])/,
        end: /_/,
        relevance: 0
      }
    ]
  };
  const BOLD_WITHOUT_ITALIC = hljs.inherit(BOLD, { contains: [] });
  const ITALIC_WITHOUT_BOLD = hljs.inherit(ITALIC, { contains: [] });
  BOLD.contains.push(ITALIC_WITHOUT_BOLD);
  ITALIC.contains.push(BOLD_WITHOUT_ITALIC);
  let CONTAINABLE = [
    INLINE_HTML,
    LINK
  ];
  [
    BOLD,
    ITALIC,
    BOLD_WITHOUT_ITALIC,
    ITALIC_WITHOUT_BOLD
  ].forEach((m2) => {
    m2.contains = m2.contains.concat(CONTAINABLE);
  });
  CONTAINABLE = CONTAINABLE.concat(BOLD, ITALIC);
  const HEADER = {
    className: "section",
    variants: [
      {
        begin: "^#{1,6}",
        end: "$",
        contains: CONTAINABLE
      },
      {
        begin: "(?=^.+?\\n[=-]{2,}$)",
        contains: [
          { begin: "^[=-]*$" },
          {
            begin: "^",
            end: "\\n",
            contains: CONTAINABLE
          }
        ]
      }
    ]
  };
  const BLOCKQUOTE = {
    className: "quote",
    begin: "^>\\s+",
    contains: CONTAINABLE,
    end: "$"
  };
  const ENTITY = {
    //https://spec.commonmark.org/0.31.2/#entity-references
    scope: "literal",
    match: /&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/
  };
  return {
    name: "Markdown",
    aliases: [
      "md",
      "mkdown",
      "mkd"
    ],
    contains: [
      HEADER,
      INLINE_HTML,
      LIST,
      BOLD,
      ITALIC,
      BLOCKQUOTE,
      CODE,
      HORIZONTAL_RULE,
      LINK,
      LINK_REFERENCE,
      ENTITY
    ]
  };
}
function objectivec(hljs) {
  const API_CLASS = {
    className: "built_in",
    begin: "\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"
  };
  const IDENTIFIER_RE = /[a-zA-Z@][a-zA-Z0-9_]*/;
  const TYPES2 = [
    "int",
    "float",
    "char",
    "unsigned",
    "signed",
    "short",
    "long",
    "double",
    "wchar_t",
    "unichar",
    "void",
    "bool",
    "BOOL",
    "id|0",
    "_Bool"
  ];
  const KWS = [
    "while",
    "export",
    "sizeof",
    "typedef",
    "const",
    "struct",
    "for",
    "union",
    "volatile",
    "static",
    "mutable",
    "if",
    "do",
    "return",
    "goto",
    "enum",
    "else",
    "break",
    "extern",
    "asm",
    "case",
    "default",
    "register",
    "explicit",
    "typename",
    "switch",
    "continue",
    "inline",
    "readonly",
    "assign",
    "readwrite",
    "self",
    "@synchronized",
    "id",
    "typeof",
    "nonatomic",
    "IBOutlet",
    "IBAction",
    "strong",
    "weak",
    "copy",
    "in",
    "out",
    "inout",
    "bycopy",
    "byref",
    "oneway",
    "__strong",
    "__weak",
    "__block",
    "__autoreleasing",
    "@private",
    "@protected",
    "@public",
    "@try",
    "@property",
    "@end",
    "@throw",
    "@catch",
    "@finally",
    "@autoreleasepool",
    "@synthesize",
    "@dynamic",
    "@selector",
    "@optional",
    "@required",
    "@encode",
    "@package",
    "@import",
    "@defs",
    "@compatibility_alias",
    "__bridge",
    "__bridge_transfer",
    "__bridge_retained",
    "__bridge_retain",
    "__covariant",
    "__contravariant",
    "__kindof",
    "_Nonnull",
    "_Nullable",
    "_Null_unspecified",
    "__FUNCTION__",
    "__PRETTY_FUNCTION__",
    "__attribute__",
    "getter",
    "setter",
    "retain",
    "unsafe_unretained",
    "nonnull",
    "nullable",
    "null_unspecified",
    "null_resettable",
    "class",
    "instancetype",
    "NS_DESIGNATED_INITIALIZER",
    "NS_UNAVAILABLE",
    "NS_REQUIRES_SUPER",
    "NS_RETURNS_INNER_POINTER",
    "NS_INLINE",
    "NS_AVAILABLE",
    "NS_DEPRECATED",
    "NS_ENUM",
    "NS_OPTIONS",
    "NS_SWIFT_UNAVAILABLE",
    "NS_ASSUME_NONNULL_BEGIN",
    "NS_ASSUME_NONNULL_END",
    "NS_REFINED_FOR_SWIFT",
    "NS_SWIFT_NAME",
    "NS_SWIFT_NOTHROW",
    "NS_DURING",
    "NS_HANDLER",
    "NS_ENDHANDLER",
    "NS_VALUERETURN",
    "NS_VOIDRETURN"
  ];
  const LITERALS2 = [
    "false",
    "true",
    "FALSE",
    "TRUE",
    "nil",
    "YES",
    "NO",
    "NULL"
  ];
  const BUILT_INS2 = [
    "dispatch_once_t",
    "dispatch_queue_t",
    "dispatch_sync",
    "dispatch_async",
    "dispatch_once"
  ];
  const KEYWORDS2 = {
    "variable.language": [
      "this",
      "super"
    ],
    $pattern: IDENTIFIER_RE,
    keyword: KWS,
    literal: LITERALS2,
    built_in: BUILT_INS2,
    type: TYPES2
  };
  const CLASS_KEYWORDS = {
    $pattern: IDENTIFIER_RE,
    keyword: [
      "@interface",
      "@class",
      "@protocol",
      "@implementation"
    ]
  };
  return {
    name: "Objective-C",
    aliases: [
      "mm",
      "objc",
      "obj-c",
      "obj-c++",
      "objective-c++"
    ],
    keywords: KEYWORDS2,
    illegal: "</",
    contains: [
      API_CLASS,
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.C_NUMBER_MODE,
      hljs.QUOTE_STRING_MODE,
      hljs.APOS_STRING_MODE,
      {
        className: "string",
        variants: [
          {
            begin: '@"',
            end: '"',
            illegal: "\\n",
            contains: [hljs.BACKSLASH_ESCAPE]
          }
        ]
      },
      {
        className: "meta",
        begin: /#\s*[a-z]+\b/,
        end: /$/,
        keywords: { keyword: "if else elif endif define undef warning error line pragma ifdef ifndef include" },
        contains: [
          {
            begin: /\\\n/,
            relevance: 0
          },
          hljs.inherit(hljs.QUOTE_STRING_MODE, { className: "string" }),
          {
            className: "string",
            begin: /<.*?>/,
            end: /$/,
            illegal: "\\n"
          },
          hljs.C_LINE_COMMENT_MODE,
          hljs.C_BLOCK_COMMENT_MODE
        ]
      },
      {
        className: "class",
        begin: "(" + CLASS_KEYWORDS.keyword.join("|") + ")\\b",
        end: /(\{|$)/,
        excludeEnd: true,
        keywords: CLASS_KEYWORDS,
        contains: [hljs.UNDERSCORE_TITLE_MODE]
      },
      {
        begin: "\\." + hljs.UNDERSCORE_IDENT_RE,
        relevance: 0
      }
    ]
  };
}
function perl(hljs) {
  const regex = hljs.regex;
  const KEYWORDS2 = [
    "abs",
    "accept",
    "alarm",
    "and",
    "atan2",
    "bind",
    "binmode",
    "bless",
    "break",
    "caller",
    "chdir",
    "chmod",
    "chomp",
    "chop",
    "chown",
    "chr",
    "chroot",
    "class",
    "close",
    "closedir",
    "connect",
    "continue",
    "cos",
    "crypt",
    "dbmclose",
    "dbmopen",
    "defined",
    "delete",
    "die",
    "do",
    "dump",
    "each",
    "else",
    "elsif",
    "endgrent",
    "endhostent",
    "endnetent",
    "endprotoent",
    "endpwent",
    "endservent",
    "eof",
    "eval",
    "exec",
    "exists",
    "exit",
    "exp",
    "fcntl",
    "field",
    "fileno",
    "flock",
    "for",
    "foreach",
    "fork",
    "format",
    "formline",
    "getc",
    "getgrent",
    "getgrgid",
    "getgrnam",
    "gethostbyaddr",
    "gethostbyname",
    "gethostent",
    "getlogin",
    "getnetbyaddr",
    "getnetbyname",
    "getnetent",
    "getpeername",
    "getpgrp",
    "getpriority",
    "getprotobyname",
    "getprotobynumber",
    "getprotoent",
    "getpwent",
    "getpwnam",
    "getpwuid",
    "getservbyname",
    "getservbyport",
    "getservent",
    "getsockname",
    "getsockopt",
    "given",
    "glob",
    "gmtime",
    "goto",
    "grep",
    "gt",
    "hex",
    "if",
    "index",
    "int",
    "ioctl",
    "join",
    "keys",
    "kill",
    "last",
    "lc",
    "lcfirst",
    "length",
    "link",
    "listen",
    "local",
    "localtime",
    "log",
    "lstat",
    "lt",
    "ma",
    "map",
    "method",
    "mkdir",
    "msgctl",
    "msgget",
    "msgrcv",
    "msgsnd",
    "my",
    "ne",
    "next",
    "no",
    "not",
    "oct",
    "open",
    "opendir",
    "or",
    "ord",
    "our",
    "pack",
    "package",
    "pipe",
    "pop",
    "pos",
    "print",
    "printf",
    "prototype",
    "push",
    "q|0",
    "qq",
    "quotemeta",
    "qw",
    "qx",
    "rand",
    "read",
    "readdir",
    "readline",
    "readlink",
    "readpipe",
    "recv",
    "redo",
    "ref",
    "rename",
    "require",
    "reset",
    "return",
    "reverse",
    "rewinddir",
    "rindex",
    "rmdir",
    "say",
    "scalar",
    "seek",
    "seekdir",
    "select",
    "semctl",
    "semget",
    "semop",
    "send",
    "setgrent",
    "sethostent",
    "setnetent",
    "setpgrp",
    "setpriority",
    "setprotoent",
    "setpwent",
    "setservent",
    "setsockopt",
    "shift",
    "shmctl",
    "shmget",
    "shmread",
    "shmwrite",
    "shutdown",
    "sin",
    "sleep",
    "socket",
    "socketpair",
    "sort",
    "splice",
    "split",
    "sprintf",
    "sqrt",
    "srand",
    "stat",
    "state",
    "study",
    "sub",
    "substr",
    "symlink",
    "syscall",
    "sysopen",
    "sysread",
    "sysseek",
    "system",
    "syswrite",
    "tell",
    "telldir",
    "tie",
    "tied",
    "time",
    "times",
    "tr",
    "truncate",
    "uc",
    "ucfirst",
    "umask",
    "undef",
    "unless",
    "unlink",
    "unpack",
    "unshift",
    "untie",
    "until",
    "use",
    "utime",
    "values",
    "vec",
    "wait",
    "waitpid",
    "wantarray",
    "warn",
    "when",
    "while",
    "write",
    "x|0",
    "xor",
    "y|0"
  ];
  const REGEX_MODIFIERS = /[dualxmsipngr]{0,12}/;
  const PERL_KEYWORDS = {
    $pattern: /[\w.]+/,
    keyword: KEYWORDS2.join(" ")
  };
  const SUBST = {
    className: "subst",
    begin: "[$@]\\{",
    end: "\\}",
    keywords: PERL_KEYWORDS
  };
  const METHOD = {
    begin: /->\{/,
    end: /\}/
    // contains defined later
  };
  const ATTR = {
    scope: "attr",
    match: /\s+:\s*\w+(\s*\(.*?\))?/
  };
  const VAR = {
    scope: "variable",
    variants: [
      { begin: /\$\d/ },
      {
        begin: regex.concat(
          /[$%@](?!")(\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,
          // negative look-ahead tries to avoid matching patterns that are not
          // Perl at all like $ident$, @ident@, etc.
          `(?![A-Za-z])(?![@$%])`
        )
      },
      {
        // Only $= is a special Perl variable and one can't declare @= or %=.
        begin: /[$%@](?!")[^\s\w{=]|\$=/,
        relevance: 0
      }
    ],
    contains: [ATTR]
  };
  const NUMBER = {
    className: "number",
    variants: [
      // decimal numbers:
      // include the case where a number starts with a dot (eg. .9), and
      // the leading 0? avoids mixing the first and second match on 0.x cases
      { match: /0?\.[0-9][0-9_]+\b/ },
      // include the special versioned number (eg. v5.38)
      { match: /\bv?(0|[1-9][0-9_]*(\.[0-9_]+)?|[1-9][0-9_]*)\b/ },
      // non-decimal numbers:
      { match: /\b0[0-7][0-7_]*\b/ },
      { match: /\b0x[0-9a-fA-F][0-9a-fA-F_]*\b/ },
      { match: /\b0b[0-1][0-1_]*\b/ }
    ],
    relevance: 0
  };
  const STRING_CONTAINS = [
    hljs.BACKSLASH_ESCAPE,
    SUBST,
    VAR
  ];
  const REGEX_DELIMS = [
    /!/,
    /\//,
    /\|/,
    /\?/,
    /'/,
    /"/,
    // valid but infrequent and weird
    /#/
    // valid but infrequent and weird
  ];
  const PAIRED_DOUBLE_RE = (prefix, open, close2 = "\\1") => {
    const middle = close2 === "\\1" ? close2 : regex.concat(close2, open);
    return regex.concat(
      regex.concat("(?:", prefix, ")"),
      open,
      /(?:\\.|[^\\\/])*?/,
      middle,
      /(?:\\.|[^\\\/])*?/,
      close2,
      REGEX_MODIFIERS
    );
  };
  const PAIRED_RE = (prefix, open, close2) => {
    return regex.concat(
      regex.concat("(?:", prefix, ")"),
      open,
      /(?:\\.|[^\\\/])*?/,
      close2,
      REGEX_MODIFIERS
    );
  };
  const PERL_DEFAULT_CONTAINS = [
    VAR,
    hljs.HASH_COMMENT_MODE,
    hljs.COMMENT(
      /^=\w/,
      /=cut/,
      { endsWithParent: true }
    ),
    METHOD,
    {
      className: "string",
      contains: STRING_CONTAINS,
      variants: [
        {
          begin: "q[qwxr]?\\s*\\(",
          end: "\\)",
          relevance: 5
        },
        {
          begin: "q[qwxr]?\\s*\\[",
          end: "\\]",
          relevance: 5
        },
        {
          begin: "q[qwxr]?\\s*\\{",
          end: "\\}",
          relevance: 5
        },
        {
          begin: "q[qwxr]?\\s*\\|",
          end: "\\|",
          relevance: 5
        },
        {
          begin: "q[qwxr]?\\s*<",
          end: ">",
          relevance: 5
        },
        {
          begin: "qw\\s+q",
          end: "q",
          relevance: 5
        },
        {
          begin: "'",
          end: "'",
          contains: [hljs.BACKSLASH_ESCAPE]
        },
        {
          begin: '"',
          end: '"'
        },
        {
          begin: "`",
          end: "`",
          contains: [hljs.BACKSLASH_ESCAPE]
        },
        {
          begin: /\{\w+\}/,
          relevance: 0
        },
        {
          begin: "-?\\w+\\s*=>",
          relevance: 0
        }
      ]
    },
    NUMBER,
    {
      // regexp container
      begin: "(\\/\\/|" + hljs.RE_STARTERS_RE + "|\\b(split|return|print|reverse|grep)\\b)\\s*",
      keywords: "split return print reverse grep",
      relevance: 0,
      contains: [
        hljs.HASH_COMMENT_MODE,
        {
          className: "regexp",
          variants: [
            // allow matching common delimiters
            { begin: PAIRED_DOUBLE_RE("s|tr|y", regex.either(...REGEX_DELIMS, { capture: true })) },
            // and then paired delmis
            { begin: PAIRED_DOUBLE_RE("s|tr|y", "\\(", "\\)") },
            { begin: PAIRED_DOUBLE_RE("s|tr|y", "\\[", "\\]") },
            { begin: PAIRED_DOUBLE_RE("s|tr|y", "\\{", "\\}") }
          ],
          relevance: 2
        },
        {
          className: "regexp",
          variants: [
            {
              // could be a comment in many languages so do not count
              // as relevant
              begin: /(m|qr)\/\//,
              relevance: 0
            },
            // prefix is optional with /regex/
            { begin: PAIRED_RE("(?:m|qr)?", /\//, /\//) },
            // allow matching common delimiters
            { begin: PAIRED_RE("m|qr", regex.either(...REGEX_DELIMS, { capture: true }), /\1/) },
            // allow common paired delmins
            { begin: PAIRED_RE("m|qr", /\(/, /\)/) },
            { begin: PAIRED_RE("m|qr", /\[/, /\]/) },
            { begin: PAIRED_RE("m|qr", /\{/, /\}/) }
          ]
        }
      ]
    },
    {
      className: "function",
      beginKeywords: "sub method",
      end: "(\\s*\\(.*?\\))?[;{]",
      excludeEnd: true,
      relevance: 5,
      contains: [hljs.TITLE_MODE, ATTR]
    },
    {
      className: "class",
      beginKeywords: "class",
      end: "[;{]",
      excludeEnd: true,
      relevance: 5,
      contains: [hljs.TITLE_MODE, ATTR, NUMBER]
    },
    {
      begin: "-\\w\\b",
      relevance: 0
    },
    {
      begin: "^__DATA__$",
      end: "^__END__$",
      subLanguage: "mojolicious",
      contains: [
        {
          begin: "^@@.*",
          end: "$",
          className: "comment"
        }
      ]
    }
  ];
  SUBST.contains = PERL_DEFAULT_CONTAINS;
  METHOD.contains = PERL_DEFAULT_CONTAINS;
  return {
    name: "Perl",
    aliases: [
      "pl",
      "pm"
    ],
    keywords: PERL_KEYWORDS,
    contains: PERL_DEFAULT_CONTAINS
  };
}
function php(hljs) {
  const regex = hljs.regex;
  const NOT_PERL_ETC = /(?![A-Za-z0-9])(?![$])/;
  const IDENT_RE2 = regex.concat(
    /[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,
    NOT_PERL_ETC
  );
  const PASCAL_CASE_CLASS_NAME_RE = regex.concat(
    /(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,
    NOT_PERL_ETC
  );
  const UPCASE_NAME_RE = regex.concat(
    /[A-Z]+/,
    NOT_PERL_ETC
  );
  const VARIABLE = {
    scope: "variable",
    match: "\\$+" + IDENT_RE2
  };
  const PREPROCESSOR = {
    scope: "meta",
    variants: [
      { begin: /<\?php/, relevance: 10 },
      // boost for obvious PHP
      { begin: /<\?=/ },
      // less relevant per PSR-1 which says not to use short-tags
      { begin: /<\?/, relevance: 0.1 },
      { begin: /\?>/ }
      // end php tag
    ]
  };
  const SUBST = {
    scope: "subst",
    variants: [
      { begin: /\$\w+/ },
      {
        begin: /\{\$/,
        end: /\}/
      }
    ]
  };
  const SINGLE_QUOTED = hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null });
  const DOUBLE_QUOTED = hljs.inherit(hljs.QUOTE_STRING_MODE, {
    illegal: null,
    contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST)
  });
  const HEREDOC = {
    begin: /<<<[ \t]*(?:(\w+)|"(\w+)")\n/,
    end: /[ \t]*(\w+)\b/,
    contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST),
    "on:begin": (m2, resp) => {
      resp.data._beginMatch = m2[1] || m2[2];
    },
    "on:end": (m2, resp) => {
      if (resp.data._beginMatch !== m2[1]) resp.ignoreMatch();
    }
  };
  const NOWDOC = hljs.END_SAME_AS_BEGIN({
    begin: /<<<[ \t]*'(\w+)'\n/,
    end: /[ \t]*(\w+)\b/
  });
  const WHITESPACE = "[ 	\n]";
  const STRING = {
    scope: "string",
    variants: [
      DOUBLE_QUOTED,
      SINGLE_QUOTED,
      HEREDOC,
      NOWDOC
    ]
  };
  const NUMBER = {
    scope: "number",
    variants: [
      { begin: `\\b0[bB][01]+(?:_[01]+)*\\b` },
      // Binary w/ underscore support
      { begin: `\\b0[oO][0-7]+(?:_[0-7]+)*\\b` },
      // Octals w/ underscore support
      { begin: `\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b` },
      // Hex w/ underscore support
      // Decimals w/ underscore support, with optional fragments and scientific exponent (e) suffix.
      { begin: `(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?` }
    ],
    relevance: 0
  };
  const LITERALS2 = [
    "false",
    "null",
    "true"
  ];
  const KWS = [
    // Magic constants:
    // <https://www.php.net/manual/en/language.constants.predefined.php>
    "__CLASS__",
    "__DIR__",
    "__FILE__",
    "__FUNCTION__",
    "__COMPILER_HALT_OFFSET__",
    "__LINE__",
    "__METHOD__",
    "__NAMESPACE__",
    "__TRAIT__",
    // Function that look like language construct or language construct that look like function:
    // List of keywords that may not require parenthesis
    "die",
    "echo",
    "exit",
    "include",
    "include_once",
    "print",
    "require",
    "require_once",
    // These are not language construct (function) but operate on the currently-executing function and can access the current symbol table
    // 'compact extract func_get_arg func_get_args func_num_args get_called_class get_parent_class ' +
    // Other keywords:
    // <https://www.php.net/manual/en/reserved.php>
    // <https://www.php.net/manual/en/language.types.type-juggling.php>
    "array",
    "abstract",
    "and",
    "as",
    "binary",
    "bool",
    "boolean",
    "break",
    "callable",
    "case",
    "catch",
    "class",
    "clone",
    "const",
    "continue",
    "declare",
    "default",
    "do",
    "double",
    "else",
    "elseif",
    "empty",
    "enddeclare",
    "endfor",
    "endforeach",
    "endif",
    "endswitch",
    "endwhile",
    "enum",
    "eval",
    "extends",
    "final",
    "finally",
    "float",
    "for",
    "foreach",
    "from",
    "global",
    "goto",
    "if",
    "implements",
    "instanceof",
    "insteadof",
    "int",
    "integer",
    "interface",
    "isset",
    "iterable",
    "list",
    "match|0",
    "mixed",
    "new",
    "never",
    "object",
    "or",
    "private",
    "protected",
    "public",
    "readonly",
    "real",
    "return",
    "string",
    "switch",
    "throw",
    "trait",
    "try",
    "unset",
    "use",
    "var",
    "void",
    "while",
    "xor",
    "yield"
  ];
  const BUILT_INS2 = [
    // Standard PHP library:
    // <https://www.php.net/manual/en/book.spl.php>
    "Error|0",
    "AppendIterator",
    "ArgumentCountError",
    "ArithmeticError",
    "ArrayIterator",
    "ArrayObject",
    "AssertionError",
    "BadFunctionCallException",
    "BadMethodCallException",
    "CachingIterator",
    "CallbackFilterIterator",
    "CompileError",
    "Countable",
    "DirectoryIterator",
    "DivisionByZeroError",
    "DomainException",
    "EmptyIterator",
    "ErrorException",
    "Exception",
    "FilesystemIterator",
    "FilterIterator",
    "GlobIterator",
    "InfiniteIterator",
    "InvalidArgumentException",
    "IteratorIterator",
    "LengthException",
    "LimitIterator",
    "LogicException",
    "MultipleIterator",
    "NoRewindIterator",
    "OutOfBoundsException",
    "OutOfRangeException",
    "OuterIterator",
    "OverflowException",
    "ParentIterator",
    "ParseError",
    "RangeException",
    "RecursiveArrayIterator",
    "RecursiveCachingIterator",
    "RecursiveCallbackFilterIterator",
    "RecursiveDirectoryIterator",
    "RecursiveFilterIterator",
    "RecursiveIterator",
    "RecursiveIteratorIterator",
    "RecursiveRegexIterator",
    "RecursiveTreeIterator",
    "RegexIterator",
    "RuntimeException",
    "SeekableIterator",
    "SplDoublyLinkedList",
    "SplFileInfo",
    "SplFileObject",
    "SplFixedArray",
    "SplHeap",
    "SplMaxHeap",
    "SplMinHeap",
    "SplObjectStorage",
    "SplObserver",
    "SplPriorityQueue",
    "SplQueue",
    "SplStack",
    "SplSubject",
    "SplTempFileObject",
    "TypeError",
    "UnderflowException",
    "UnexpectedValueException",
    "UnhandledMatchError",
    // Reserved interfaces:
    // <https://www.php.net/manual/en/reserved.interfaces.php>
    "ArrayAccess",
    "BackedEnum",
    "Closure",
    "Fiber",
    "Generator",
    "Iterator",
    "IteratorAggregate",
    "Serializable",
    "Stringable",
    "Throwable",
    "Traversable",
    "UnitEnum",
    "WeakReference",
    "WeakMap",
    // Reserved classes:
    // <https://www.php.net/manual/en/reserved.classes.php>
    "Directory",
    "__PHP_Incomplete_Class",
    "parent",
    "php_user_filter",
    "self",
    "static",
    "stdClass"
  ];
  const dualCase = (items) => {
    const result = [];
    items.forEach((item) => {
      result.push(item);
      if (item.toLowerCase() === item) {
        result.push(item.toUpperCase());
      } else {
        result.push(item.toLowerCase());
      }
    });
    return result;
  };
  const KEYWORDS2 = {
    keyword: KWS,
    literal: dualCase(LITERALS2),
    built_in: BUILT_INS2
  };
  const normalizeKeywords = (items) => {
    return items.map((item) => {
      return item.replace(/\|\d+$/, "");
    });
  };
  const CONSTRUCTOR_CALL = { variants: [
    {
      match: [
        /new/,
        regex.concat(WHITESPACE, "+"),
        // to prevent built ins from being confused as the class constructor call
        regex.concat("(?!", normalizeKeywords(BUILT_INS2).join("\\b|"), "\\b)"),
        PASCAL_CASE_CLASS_NAME_RE
      ],
      scope: {
        1: "keyword",
        4: "title.class"
      }
    }
  ] };
  const CONSTANT_REFERENCE = regex.concat(IDENT_RE2, "\\b(?!\\()");
  const LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON = { variants: [
    {
      match: [
        regex.concat(
          /::/,
          regex.lookahead(/(?!class\b)/)
        ),
        CONSTANT_REFERENCE
      ],
      scope: { 2: "variable.constant" }
    },
    {
      match: [
        /::/,
        /class/
      ],
      scope: { 2: "variable.language" }
    },
    {
      match: [
        PASCAL_CASE_CLASS_NAME_RE,
        regex.concat(
          /::/,
          regex.lookahead(/(?!class\b)/)
        ),
        CONSTANT_REFERENCE
      ],
      scope: {
        1: "title.class",
        3: "variable.constant"
      }
    },
    {
      match: [
        PASCAL_CASE_CLASS_NAME_RE,
        regex.concat(
          "::",
          regex.lookahead(/(?!class\b)/)
        )
      ],
      scope: { 1: "title.class" }
    },
    {
      match: [
        PASCAL_CASE_CLASS_NAME_RE,
        /::/,
        /class/
      ],
      scope: {
        1: "title.class",
        3: "variable.language"
      }
    }
  ] };
  const NAMED_ARGUMENT = {
    scope: "attr",
    match: regex.concat(IDENT_RE2, regex.lookahead(":"), regex.lookahead(/(?!::)/))
  };
  const PARAMS_MODE = {
    relevance: 0,
    begin: /\(/,
    end: /\)/,
    keywords: KEYWORDS2,
    contains: [
      NAMED_ARGUMENT,
      VARIABLE,
      LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,
      hljs.C_BLOCK_COMMENT_MODE,
      STRING,
      NUMBER,
      CONSTRUCTOR_CALL
    ]
  };
  const FUNCTION_INVOKE = {
    relevance: 0,
    match: [
      /\b/,
      // to prevent keywords from being confused as the function title
      regex.concat("(?!fn\\b|function\\b|", normalizeKeywords(KWS).join("\\b|"), "|", normalizeKeywords(BUILT_INS2).join("\\b|"), "\\b)"),
      IDENT_RE2,
      regex.concat(WHITESPACE, "*"),
      regex.lookahead(/(?=\()/)
    ],
    scope: { 3: "title.function.invoke" },
    contains: [PARAMS_MODE]
  };
  PARAMS_MODE.contains.push(FUNCTION_INVOKE);
  const ATTRIBUTE_CONTAINS = [
    NAMED_ARGUMENT,
    LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,
    hljs.C_BLOCK_COMMENT_MODE,
    STRING,
    NUMBER,
    CONSTRUCTOR_CALL
  ];
  const ATTRIBUTES2 = {
    begin: regex.concat(
      /#\[\s*\\?/,
      regex.either(
        PASCAL_CASE_CLASS_NAME_RE,
        UPCASE_NAME_RE
      )
    ),
    beginScope: "meta",
    end: /]/,
    endScope: "meta",
    keywords: {
      literal: LITERALS2,
      keyword: [
        "new",
        "array"
      ]
    },
    contains: [
      {
        begin: /\[/,
        end: /]/,
        keywords: {
          literal: LITERALS2,
          keyword: [
            "new",
            "array"
          ]
        },
        contains: [
          "self",
          ...ATTRIBUTE_CONTAINS
        ]
      },
      ...ATTRIBUTE_CONTAINS,
      {
        scope: "meta",
        variants: [
          { match: PASCAL_CASE_CLASS_NAME_RE },
          { match: UPCASE_NAME_RE }
        ]
      }
    ]
  };
  return {
    case_insensitive: false,
    keywords: KEYWORDS2,
    contains: [
      ATTRIBUTES2,
      hljs.HASH_COMMENT_MODE,
      hljs.COMMENT("//", "$"),
      hljs.COMMENT(
        "/\\*",
        "\\*/",
        { contains: [
          {
            scope: "doctag",
            match: "@[A-Za-z]+"
          }
        ] }
      ),
      {
        match: /__halt_compiler\(\);/,
        keywords: "__halt_compiler",
        starts: {
          scope: "comment",
          end: hljs.MATCH_NOTHING_RE,
          contains: [
            {
              match: /\?>/,
              scope: "meta",
              endsParent: true
            }
          ]
        }
      },
      PREPROCESSOR,
      {
        scope: "variable.language",
        match: /\$this\b/
      },
      VARIABLE,
      FUNCTION_INVOKE,
      LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,
      {
        match: [
          /const/,
          /\s/,
          IDENT_RE2
        ],
        scope: {
          1: "keyword",
          3: "variable.constant"
        }
      },
      CONSTRUCTOR_CALL,
      {
        scope: "function",
        relevance: 0,
        beginKeywords: "fn function",
        end: /[;{]/,
        excludeEnd: true,
        illegal: "[$%\\[]",
        contains: [
          { beginKeywords: "use" },
          hljs.UNDERSCORE_TITLE_MODE,
          {
            begin: "=>",
            // No markup, just a relevance booster
            endsParent: true
          },
          {
            scope: "params",
            begin: "\\(",
            end: "\\)",
            excludeBegin: true,
            excludeEnd: true,
            keywords: KEYWORDS2,
            contains: [
              "self",
              ATTRIBUTES2,
              VARIABLE,
              LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,
              hljs.C_BLOCK_COMMENT_MODE,
              STRING,
              NUMBER
            ]
          }
        ]
      },
      {
        scope: "class",
        variants: [
          {
            beginKeywords: "enum",
            illegal: /[($"]/
          },
          {
            beginKeywords: "class interface trait",
            illegal: /[:($"]/
          }
        ],
        relevance: 0,
        end: /\{/,
        excludeEnd: true,
        contains: [
          { beginKeywords: "extends implements" },
          hljs.UNDERSCORE_TITLE_MODE
        ]
      },
      // both use and namespace still use "old style" rules (vs multi-match)
      // because the namespace name can include `\` and we still want each
      // element to be treated as its own *individual* title
      {
        beginKeywords: "namespace",
        relevance: 0,
        end: ";",
        illegal: /[.']/,
        contains: [hljs.inherit(hljs.UNDERSCORE_TITLE_MODE, { scope: "title.class" })]
      },
      {
        beginKeywords: "use",
        relevance: 0,
        end: ";",
        contains: [
          // TODO: title.function vs title.class
          {
            match: /\b(as|const|function)\b/,
            scope: "keyword"
          },
          // TODO: could be title.class or title.function
          hljs.UNDERSCORE_TITLE_MODE
        ]
      },
      STRING,
      NUMBER
    ]
  };
}
function phpTemplate(hljs) {
  return {
    name: "PHP template",
    subLanguage: "xml",
    contains: [
      {
        begin: /<\?(php|=)?/,
        end: /\?>/,
        subLanguage: "php",
        contains: [
          // We don't want the php closing tag ?> to close the PHP block when
          // inside any of the following blocks:
          {
            begin: "/\\*",
            end: "\\*/",
            skip: true
          },
          {
            begin: 'b"',
            end: '"',
            skip: true
          },
          {
            begin: "b'",
            end: "'",
            skip: true
          },
          hljs.inherit(hljs.APOS_STRING_MODE, {
            illegal: null,
            className: null,
            contains: null,
            skip: true
          }),
          hljs.inherit(hljs.QUOTE_STRING_MODE, {
            illegal: null,
            className: null,
            contains: null,
            skip: true
          })
        ]
      }
    ]
  };
}
function plaintext(hljs) {
  return {
    name: "Plain text",
    aliases: [
      "text",
      "txt"
    ],
    disableAutodetect: true
  };
}
function python(hljs) {
  const regex = hljs.regex;
  const IDENT_RE2 = new RegExp("[\\p{XID_Start}_]\\p{XID_Continue}*", "u");
  const RESERVED_WORDS = [
    "and",
    "as",
    "assert",
    "async",
    "await",
    "break",
    "case",
    "class",
    "continue",
    "def",
    "del",
    "elif",
    "else",
    "except",
    "finally",
    "for",
    "from",
    "global",
    "if",
    "import",
    "in",
    "is",
    "lambda",
    "match",
    "nonlocal|10",
    "not",
    "or",
    "pass",
    "raise",
    "return",
    "try",
    "while",
    "with",
    "yield"
  ];
  const BUILT_INS2 = [
    "__import__",
    "abs",
    "all",
    "any",
    "ascii",
    "bin",
    "bool",
    "breakpoint",
    "bytearray",
    "bytes",
    "callable",
    "chr",
    "classmethod",
    "compile",
    "complex",
    "delattr",
    "dict",
    "dir",
    "divmod",
    "enumerate",
    "eval",
    "exec",
    "filter",
    "float",
    "format",
    "frozenset",
    "getattr",
    "globals",
    "hasattr",
    "hash",
    "help",
    "hex",
    "id",
    "input",
    "int",
    "isinstance",
    "issubclass",
    "iter",
    "len",
    "list",
    "locals",
    "map",
    "max",
    "memoryview",
    "min",
    "next",
    "object",
    "oct",
    "open",
    "ord",
    "pow",
    "print",
    "property",
    "range",
    "repr",
    "reversed",
    "round",
    "set",
    "setattr",
    "slice",
    "sorted",
    "staticmethod",
    "str",
    "sum",
    "super",
    "tuple",
    "type",
    "vars",
    "zip"
  ];
  const LITERALS2 = [
    "__debug__",
    "Ellipsis",
    "False",
    "None",
    "NotImplemented",
    "True"
  ];
  const TYPES2 = [
    "Any",
    "Callable",
    "Coroutine",
    "Dict",
    "List",
    "Literal",
    "Generic",
    "Optional",
    "Sequence",
    "Set",
    "Tuple",
    "Type",
    "Union"
  ];
  const KEYWORDS2 = {
    $pattern: /[A-Za-z]\w+|__\w+__/,
    keyword: RESERVED_WORDS,
    built_in: BUILT_INS2,
    literal: LITERALS2,
    type: TYPES2
  };
  const PROMPT = {
    className: "meta",
    begin: /^(>>>|\.\.\.) /
  };
  const SUBST = {
    className: "subst",
    begin: /\{/,
    end: /\}/,
    keywords: KEYWORDS2,
    illegal: /#/
  };
  const LITERAL_BRACKET = {
    begin: /\{\{/,
    relevance: 0
  };
  const STRING = {
    className: "string",
    contains: [hljs.BACKSLASH_ESCAPE],
    variants: [
      {
        begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,
        end: /'''/,
        contains: [
          hljs.BACKSLASH_ESCAPE,
          PROMPT
        ],
        relevance: 10
      },
      {
        begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,
        end: /"""/,
        contains: [
          hljs.BACKSLASH_ESCAPE,
          PROMPT
        ],
        relevance: 10
      },
      {
        begin: /([fF][rR]|[rR][fF]|[fF])'''/,
        end: /'''/,
        contains: [
          hljs.BACKSLASH_ESCAPE,
          PROMPT,
          LITERAL_BRACKET,
          SUBST
        ]
      },
      {
        begin: /([fF][rR]|[rR][fF]|[fF])"""/,
        end: /"""/,
        contains: [
          hljs.BACKSLASH_ESCAPE,
          PROMPT,
          LITERAL_BRACKET,
          SUBST
        ]
      },
      {
        begin: /([uU]|[rR])'/,
        end: /'/,
        relevance: 10
      },
      {
        begin: /([uU]|[rR])"/,
        end: /"/,
        relevance: 10
      },
      {
        begin: /([bB]|[bB][rR]|[rR][bB])'/,
        end: /'/
      },
      {
        begin: /([bB]|[bB][rR]|[rR][bB])"/,
        end: /"/
      },
      {
        begin: /([fF][rR]|[rR][fF]|[fF])'/,
        end: /'/,
        contains: [
          hljs.BACKSLASH_ESCAPE,
          LITERAL_BRACKET,
          SUBST
        ]
      },
      {
        begin: /([fF][rR]|[rR][fF]|[fF])"/,
        end: /"/,
        contains: [
          hljs.BACKSLASH_ESCAPE,
          LITERAL_BRACKET,
          SUBST
        ]
      },
      hljs.APOS_STRING_MODE,
      hljs.QUOTE_STRING_MODE
    ]
  };
  const digitpart = "[0-9](_?[0-9])*";
  const pointfloat = `(\\b(${digitpart}))?\\.(${digitpart})|\\b(${digitpart})\\.`;
  const lookahead2 = `\\b|${RESERVED_WORDS.join("|")}`;
  const NUMBER = {
    className: "number",
    relevance: 0,
    variants: [
      // exponentfloat, pointfloat
      // https://docs.python.org/3.9/reference/lexical_analysis.html#floating-point-literals
      // optionally imaginary
      // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals
      // Note: no leading \b because floats can start with a decimal point
      // and we don't want to mishandle e.g. `fn(.5)`,
      // no trailing \b for pointfloat because it can end with a decimal point
      // and we don't want to mishandle e.g. `0..hex()`; this should be safe
      // because both MUST contain a decimal point and so cannot be confused with
      // the interior part of an identifier
      {
        begin: `(\\b(${digitpart})|(${pointfloat}))[eE][+-]?(${digitpart})[jJ]?(?=${lookahead2})`
      },
      {
        begin: `(${pointfloat})[jJ]?`
      },
      // decinteger, bininteger, octinteger, hexinteger
      // https://docs.python.org/3.9/reference/lexical_analysis.html#integer-literals
      // optionally "long" in Python 2
      // https://docs.python.org/2.7/reference/lexical_analysis.html#integer-and-long-integer-literals
      // decinteger is optionally imaginary
      // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals
      {
        begin: `\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${lookahead2})`
      },
      {
        begin: `\\b0[bB](_?[01])+[lL]?(?=${lookahead2})`
      },
      {
        begin: `\\b0[oO](_?[0-7])+[lL]?(?=${lookahead2})`
      },
      {
        begin: `\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${lookahead2})`
      },
      // imagnumber (digitpart-based)
      // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals
      {
        begin: `\\b(${digitpart})[jJ](?=${lookahead2})`
      }
    ]
  };
  const COMMENT_TYPE = {
    className: "comment",
    begin: regex.lookahead(/# type:/),
    end: /$/,
    keywords: KEYWORDS2,
    contains: [
      {
        // prevent keywords from coloring `type`
        begin: /# type:/
      },
      // comment within a datatype comment includes no keywords
      {
        begin: /#/,
        end: /\b\B/,
        endsWithParent: true
      }
    ]
  };
  const PARAMS = {
    className: "params",
    variants: [
      // Exclude params in functions without params
      {
        className: "",
        begin: /\(\s*\)/,
        skip: true
      },
      {
        begin: /\(/,
        end: /\)/,
        excludeBegin: true,
        excludeEnd: true,
        keywords: KEYWORDS2,
        contains: [
          "self",
          PROMPT,
          NUMBER,
          STRING,
          hljs.HASH_COMMENT_MODE
        ]
      }
    ]
  };
  SUBST.contains = [
    STRING,
    NUMBER,
    PROMPT
  ];
  return {
    name: "Python",
    aliases: [
      "py",
      "gyp",
      "ipython"
    ],
    unicodeRegex: true,
    keywords: KEYWORDS2,
    illegal: /(<\/|\?)|=>/,
    contains: [
      PROMPT,
      NUMBER,
      {
        // very common convention
        scope: "variable.language",
        match: /\bself\b/
      },
      {
        // eat "if" prior to string so that it won't accidentally be
        // labeled as an f-string
        beginKeywords: "if",
        relevance: 0
      },
      { match: /\bor\b/, scope: "keyword" },
      STRING,
      COMMENT_TYPE,
      hljs.HASH_COMMENT_MODE,
      {
        match: [
          /\bdef/,
          /\s+/,
          IDENT_RE2
        ],
        scope: {
          1: "keyword",
          3: "title.function"
        },
        contains: [PARAMS]
      },
      {
        variants: [
          {
            match: [
              /\bclass/,
              /\s+/,
              IDENT_RE2,
              /\s*/,
              /\(\s*/,
              IDENT_RE2,
              /\s*\)/
            ]
          },
          {
            match: [
              /\bclass/,
              /\s+/,
              IDENT_RE2
            ]
          }
        ],
        scope: {
          1: "keyword",
          3: "title.class",
          6: "title.class.inherited"
        }
      },
      {
        className: "meta",
        begin: /^[\t ]*@/,
        end: /(?=#)|$/,
        contains: [
          NUMBER,
          PARAMS,
          STRING
        ]
      }
    ]
  };
}
function pythonRepl(hljs) {
  return {
    aliases: ["pycon"],
    contains: [
      {
        className: "meta.prompt",
        starts: {
          // a space separates the REPL prefix from the actual code
          // this is purely for cleaner HTML output
          end: / |$/,
          starts: {
            end: "$",
            subLanguage: "python"
          }
        },
        variants: [
          { begin: /^>>>(?=[ ]|$)/ },
          { begin: /^\.\.\.(?=[ ]|$)/ }
        ]
      }
    ]
  };
}
function r(hljs) {
  const regex = hljs.regex;
  const IDENT_RE2 = /(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/;
  const NUMBER_TYPES_RE = regex.either(
    // Special case: only hexadecimal binary powers can contain fractions
    /0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/,
    // Hexadecimal numbers without fraction and optional binary power
    /0[xX][0-9a-fA-F]+(?:[pP][+-]?\d+)?[Li]?/,
    // Decimal numbers
    /(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?[Li]?/
  );
  const OPERATORS_RE = /[=!<>:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!$&|:<=>@^~]|\*\*/;
  const PUNCTUATION_RE = regex.either(
    /[()]/,
    /[{}]/,
    /\[\[/,
    /[[\]]/,
    /\\/,
    /,/
  );
  return {
    name: "R",
    keywords: {
      $pattern: IDENT_RE2,
      keyword: "function if in break next repeat else for while",
      literal: "NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10",
      built_in: (
        // Builtin constants
        "LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm"
      )
    },
    contains: [
      // Roxygen comments
      hljs.COMMENT(
        /#'/,
        /$/,
        { contains: [
          {
            // Handle `@examples` separately to cause all subsequent code
            // until the next `@`-tag on its own line to be kept as-is,
            // preventing highlighting. This code is example R code, so nested
            // doctags shouldn’t be treated as such. See
            // `test/markup/r/roxygen.txt` for an example.
            scope: "doctag",
            match: /@examples/,
            starts: {
              end: regex.lookahead(regex.either(
                // end if another doc comment
                /\n^#'\s*(?=@[a-zA-Z]+)/,
                // or a line with no comment
                /\n^(?!#')/
              )),
              endsParent: true
            }
          },
          {
            // Handle `@param` to highlight the parameter name following
            // after.
            scope: "doctag",
            begin: "@param",
            end: /$/,
            contains: [
              {
                scope: "variable",
                variants: [
                  { match: IDENT_RE2 },
                  { match: /`(?:\\.|[^`\\])+`/ }
                ],
                endsParent: true
              }
            ]
          },
          {
            scope: "doctag",
            match: /@[a-zA-Z]+/
          },
          {
            scope: "keyword",
            match: /\\[a-zA-Z]+/
          }
        ] }
      ),
      hljs.HASH_COMMENT_MODE,
      {
        scope: "string",
        contains: [hljs.BACKSLASH_ESCAPE],
        variants: [
          hljs.END_SAME_AS_BEGIN({
            begin: /[rR]"(-*)\(/,
            end: /\)(-*)"/
          }),
          hljs.END_SAME_AS_BEGIN({
            begin: /[rR]"(-*)\{/,
            end: /\}(-*)"/
          }),
          hljs.END_SAME_AS_BEGIN({
            begin: /[rR]"(-*)\[/,
            end: /\](-*)"/
          }),
          hljs.END_SAME_AS_BEGIN({
            begin: /[rR]'(-*)\(/,
            end: /\)(-*)'/
          }),
          hljs.END_SAME_AS_BEGIN({
            begin: /[rR]'(-*)\{/,
            end: /\}(-*)'/
          }),
          hljs.END_SAME_AS_BEGIN({
            begin: /[rR]'(-*)\[/,
            end: /\](-*)'/
          }),
          {
            begin: '"',
            end: '"',
            relevance: 0
          },
          {
            begin: "'",
            end: "'",
            relevance: 0
          }
        ]
      },
      // Matching numbers immediately following punctuation and operators is
      // tricky since we need to look at the character ahead of a number to
      // ensure the number is not part of an identifier, and we cannot use
      // negative look-behind assertions. So instead we explicitly handle all
      // possible combinations of (operator|punctuation), number.
      // TODO: replace with negative look-behind when available
      // { begin: /(?<![a-zA-Z0-9._])0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/ },
      // { begin: /(?<![a-zA-Z0-9._])0[xX][0-9a-fA-F]+([pP][+-]?\d+)?[Li]?/ },
      // { begin: /(?<![a-zA-Z0-9._])(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?[Li]?/ }
      {
        relevance: 0,
        variants: [
          {
            scope: {
              1: "operator",
              2: "number"
            },
            match: [
              OPERATORS_RE,
              NUMBER_TYPES_RE
            ]
          },
          {
            scope: {
              1: "operator",
              2: "number"
            },
            match: [
              /%[^%]*%/,
              NUMBER_TYPES_RE
            ]
          },
          {
            scope: {
              1: "punctuation",
              2: "number"
            },
            match: [
              PUNCTUATION_RE,
              NUMBER_TYPES_RE
            ]
          },
          {
            scope: { 2: "number" },
            match: [
              /[^a-zA-Z0-9._]|^/,
              // not part of an identifier, or start of document
              NUMBER_TYPES_RE
            ]
          }
        ]
      },
      // Operators/punctuation when they're not directly followed by numbers
      {
        // Relevance boost for the most common assignment form.
        scope: { 3: "operator" },
        match: [
          IDENT_RE2,
          /\s+/,
          /<-/,
          /\s+/
        ]
      },
      {
        scope: "operator",
        relevance: 0,
        variants: [
          { match: OPERATORS_RE },
          { match: /%[^%]*%/ }
        ]
      },
      {
        scope: "punctuation",
        relevance: 0,
        match: PUNCTUATION_RE
      },
      {
        // Escaped identifier
        begin: "`",
        end: "`",
        contains: [{ begin: /\\./ }]
      }
    ]
  };
}
function ruby(hljs) {
  const regex = hljs.regex;
  const RUBY_METHOD_RE = "([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)";
  const CLASS_NAME_RE = regex.either(
    /\b([A-Z]+[a-z0-9]+)+/,
    // ends in caps
    /\b([A-Z]+[a-z0-9]+)+[A-Z]+/
  );
  const CLASS_NAME_WITH_NAMESPACE_RE = regex.concat(CLASS_NAME_RE, /(::\w+)*/);
  const PSEUDO_KWS = [
    "include",
    "extend",
    "prepend",
    "public",
    "private",
    "protected",
    "raise",
    "throw"
  ];
  const RUBY_KEYWORDS = {
    "variable.constant": [
      "__FILE__",
      "__LINE__",
      "__ENCODING__"
    ],
    "variable.language": [
      "self",
      "super"
    ],
    keyword: [
      "alias",
      "and",
      "begin",
      "BEGIN",
      "break",
      "case",
      "class",
      "defined",
      "do",
      "else",
      "elsif",
      "end",
      "END",
      "ensure",
      "for",
      "if",
      "in",
      "module",
      "next",
      "not",
      "or",
      "redo",
      "require",
      "rescue",
      "retry",
      "return",
      "then",
      "undef",
      "unless",
      "until",
      "when",
      "while",
      "yield",
      ...PSEUDO_KWS
    ],
    built_in: [
      "proc",
      "lambda",
      "attr_accessor",
      "attr_reader",
      "attr_writer",
      "define_method",
      "private_constant",
      "module_function"
    ],
    literal: [
      "true",
      "false",
      "nil"
    ]
  };
  const YARDOCTAG = {
    className: "doctag",
    begin: "@[A-Za-z]+"
  };
  const IRB_OBJECT = {
    begin: "#<",
    end: ">"
  };
  const COMMENT_MODES = [
    hljs.COMMENT(
      "#",
      "$",
      { contains: [YARDOCTAG] }
    ),
    hljs.COMMENT(
      "^=begin",
      "^=end",
      {
        contains: [YARDOCTAG],
        relevance: 10
      }
    ),
    hljs.COMMENT("^__END__", hljs.MATCH_NOTHING_RE)
  ];
  const SUBST = {
    className: "subst",
    begin: /#\{/,
    end: /\}/,
    keywords: RUBY_KEYWORDS
  };
  const STRING = {
    className: "string",
    contains: [
      hljs.BACKSLASH_ESCAPE,
      SUBST
    ],
    variants: [
      {
        begin: /'/,
        end: /'/
      },
      {
        begin: /"/,
        end: /"/
      },
      {
        begin: /`/,
        end: /`/
      },
      {
        begin: /%[qQwWx]?\(/,
        end: /\)/
      },
      {
        begin: /%[qQwWx]?\[/,
        end: /\]/
      },
      {
        begin: /%[qQwWx]?\{/,
        end: /\}/
      },
      {
        begin: /%[qQwWx]?</,
        end: />/
      },
      {
        begin: /%[qQwWx]?\//,
        end: /\//
      },
      {
        begin: /%[qQwWx]?%/,
        end: /%/
      },
      {
        begin: /%[qQwWx]?-/,
        end: /-/
      },
      {
        begin: /%[qQwWx]?\|/,
        end: /\|/
      },
      // in the following expressions, \B in the beginning suppresses recognition of ?-sequences
      // where ? is the last character of a preceding identifier, as in: `func?4`
      { begin: /\B\?(\\\d{1,3})/ },
      { begin: /\B\?(\\x[A-Fa-f0-9]{1,2})/ },
      { begin: /\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/ },
      { begin: /\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/ },
      { begin: /\B\?\\(c|C-)[\x20-\x7e]/ },
      { begin: /\B\?\\?\S/ },
      // heredocs
      {
        // this guard makes sure that we have an entire heredoc and not a false
        // positive (auto-detect, etc.)
        begin: regex.concat(
          /<<[-~]?'?/,
          regex.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)
        ),
        contains: [
          hljs.END_SAME_AS_BEGIN({
            begin: /(\w+)/,
            end: /(\w+)/,
            contains: [
              hljs.BACKSLASH_ESCAPE,
              SUBST
            ]
          })
        ]
      }
    ]
  };
  const decimal = "[1-9](_?[0-9])*|0";
  const digits = "[0-9](_?[0-9])*";
  const NUMBER = {
    className: "number",
    relevance: 0,
    variants: [
      // decimal integer/float, optionally exponential or rational, optionally imaginary
      { begin: `\\b(${decimal})(\\.(${digits}))?([eE][+-]?(${digits})|r)?i?\\b` },
      // explicit decimal/binary/octal/hexadecimal integer,
      // optionally rational and/or imaginary
      { begin: "\\b0[dD][0-9](_?[0-9])*r?i?\\b" },
      { begin: "\\b0[bB][0-1](_?[0-1])*r?i?\\b" },
      { begin: "\\b0[oO][0-7](_?[0-7])*r?i?\\b" },
      { begin: "\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b" },
      // 0-prefixed implicit octal integer, optionally rational and/or imaginary
      { begin: "\\b0(_?[0-7])+r?i?\\b" }
    ]
  };
  const PARAMS = {
    variants: [
      {
        match: /\(\)/
      },
      {
        className: "params",
        begin: /\(/,
        end: /(?=\))/,
        excludeBegin: true,
        endsParent: true,
        keywords: RUBY_KEYWORDS
      }
    ]
  };
  const INCLUDE_EXTEND = {
    match: [
      /(include|extend)\s+/,
      CLASS_NAME_WITH_NAMESPACE_RE
    ],
    scope: {
      2: "title.class"
    },
    keywords: RUBY_KEYWORDS
  };
  const CLASS_DEFINITION = {
    variants: [
      {
        match: [
          /class\s+/,
          CLASS_NAME_WITH_NAMESPACE_RE,
          /\s+<\s+/,
          CLASS_NAME_WITH_NAMESPACE_RE
        ]
      },
      {
        match: [
          /\b(class|module)\s+/,
          CLASS_NAME_WITH_NAMESPACE_RE
        ]
      }
    ],
    scope: {
      2: "title.class",
      4: "title.class.inherited"
    },
    keywords: RUBY_KEYWORDS
  };
  const UPPER_CASE_CONSTANT = {
    relevance: 0,
    match: /\b[A-Z][A-Z_0-9]+\b/,
    className: "variable.constant"
  };
  const METHOD_DEFINITION = {
    match: [
      /def/,
      /\s+/,
      RUBY_METHOD_RE
    ],
    scope: {
      1: "keyword",
      3: "title.function"
    },
    contains: [
      PARAMS
    ]
  };
  const OBJECT_CREATION = {
    relevance: 0,
    match: [
      CLASS_NAME_WITH_NAMESPACE_RE,
      /\.new[. (]/
    ],
    scope: {
      1: "title.class"
    }
  };
  const CLASS_REFERENCE = {
    relevance: 0,
    match: CLASS_NAME_RE,
    scope: "title.class"
  };
  const RUBY_DEFAULT_CONTAINS = [
    STRING,
    CLASS_DEFINITION,
    INCLUDE_EXTEND,
    OBJECT_CREATION,
    UPPER_CASE_CONSTANT,
    CLASS_REFERENCE,
    METHOD_DEFINITION,
    {
      // swallow namespace qualifiers before symbols
      begin: hljs.IDENT_RE + "::"
    },
    {
      className: "symbol",
      begin: hljs.UNDERSCORE_IDENT_RE + "(!|\\?)?:",
      relevance: 0
    },
    {
      className: "symbol",
      begin: ":(?!\\s)",
      contains: [
        STRING,
        { begin: RUBY_METHOD_RE }
      ],
      relevance: 0
    },
    NUMBER,
    {
      // negative-look forward attempts to prevent false matches like:
      // @ident@ or $ident$ that might indicate this is not ruby at all
      className: "variable",
      begin: `(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])`
    },
    {
      className: "params",
      begin: /\|(?!=)/,
      end: /\|/,
      excludeBegin: true,
      excludeEnd: true,
      relevance: 0,
      // this could be a lot of things (in other languages) other than params
      keywords: RUBY_KEYWORDS
    },
    {
      // regexp container
      begin: "(" + hljs.RE_STARTERS_RE + "|unless)\\s*",
      keywords: "unless",
      contains: [
        {
          className: "regexp",
          contains: [
            hljs.BACKSLASH_ESCAPE,
            SUBST
          ],
          illegal: /\n/,
          variants: [
            {
              begin: "/",
              end: "/[a-z]*"
            },
            {
              begin: /%r\{/,
              end: /\}[a-z]*/
            },
            {
              begin: "%r\\(",
              end: "\\)[a-z]*"
            },
            {
              begin: "%r!",
              end: "![a-z]*"
            },
            {
              begin: "%r\\[",
              end: "\\][a-z]*"
            }
          ]
        }
      ].concat(IRB_OBJECT, COMMENT_MODES),
      relevance: 0
    }
  ].concat(IRB_OBJECT, COMMENT_MODES);
  SUBST.contains = RUBY_DEFAULT_CONTAINS;
  PARAMS.contains = RUBY_DEFAULT_CONTAINS;
  const SIMPLE_PROMPT = "[>?]>";
  const DEFAULT_PROMPT = "[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]";
  const RVM_PROMPT = "(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>";
  const IRB_DEFAULT = [
    {
      begin: /^\s*=>/,
      starts: {
        end: "$",
        contains: RUBY_DEFAULT_CONTAINS
      }
    },
    {
      className: "meta.prompt",
      begin: "^(" + SIMPLE_PROMPT + "|" + DEFAULT_PROMPT + "|" + RVM_PROMPT + ")(?=[ ])",
      starts: {
        end: "$",
        keywords: RUBY_KEYWORDS,
        contains: RUBY_DEFAULT_CONTAINS
      }
    }
  ];
  COMMENT_MODES.unshift(IRB_OBJECT);
  return {
    name: "Ruby",
    aliases: [
      "rb",
      "gemspec",
      "podspec",
      "thor",
      "irb"
    ],
    keywords: RUBY_KEYWORDS,
    illegal: /\/\*/,
    contains: [hljs.SHEBANG({ binary: "ruby" })].concat(IRB_DEFAULT).concat(COMMENT_MODES).concat(RUBY_DEFAULT_CONTAINS)
  };
}
function rust(hljs) {
  const regex = hljs.regex;
  const RAW_IDENTIFIER = /(r#)?/;
  const UNDERSCORE_IDENT_RE = regex.concat(RAW_IDENTIFIER, hljs.UNDERSCORE_IDENT_RE);
  const IDENT_RE2 = regex.concat(RAW_IDENTIFIER, hljs.IDENT_RE);
  const FUNCTION_INVOKE = {
    className: "title.function.invoke",
    relevance: 0,
    begin: regex.concat(
      /\b/,
      /(?!let|for|while|if|else|match\b)/,
      IDENT_RE2,
      regex.lookahead(/\s*\(/)
    )
  };
  const NUMBER_SUFFIX = "([ui](8|16|32|64|128|size)|f(32|64))?";
  const KEYWORDS2 = [
    "abstract",
    "as",
    "async",
    "await",
    "become",
    "box",
    "break",
    "const",
    "continue",
    "crate",
    "do",
    "dyn",
    "else",
    "enum",
    "extern",
    "false",
    "final",
    "fn",
    "for",
    "if",
    "impl",
    "in",
    "let",
    "loop",
    "macro",
    "match",
    "mod",
    "move",
    "mut",
    "override",
    "priv",
    "pub",
    "ref",
    "return",
    "self",
    "Self",
    "static",
    "struct",
    "super",
    "trait",
    "true",
    "try",
    "type",
    "typeof",
    "union",
    "unsafe",
    "unsized",
    "use",
    "virtual",
    "where",
    "while",
    "yield"
  ];
  const LITERALS2 = [
    "true",
    "false",
    "Some",
    "None",
    "Ok",
    "Err"
  ];
  const BUILTINS = [
    // functions
    "drop ",
    // traits
    "Copy",
    "Send",
    "Sized",
    "Sync",
    "Drop",
    "Fn",
    "FnMut",
    "FnOnce",
    "ToOwned",
    "Clone",
    "Debug",
    "PartialEq",
    "PartialOrd",
    "Eq",
    "Ord",
    "AsRef",
    "AsMut",
    "Into",
    "From",
    "Default",
    "Iterator",
    "Extend",
    "IntoIterator",
    "DoubleEndedIterator",
    "ExactSizeIterator",
    "SliceConcatExt",
    "ToString",
    // macros
    "assert!",
    "assert_eq!",
    "bitflags!",
    "bytes!",
    "cfg!",
    "col!",
    "concat!",
    "concat_idents!",
    "debug_assert!",
    "debug_assert_eq!",
    "env!",
    "eprintln!",
    "panic!",
    "file!",
    "format!",
    "format_args!",
    "include_bytes!",
    "include_str!",
    "line!",
    "local_data_key!",
    "module_path!",
    "option_env!",
    "print!",
    "println!",
    "select!",
    "stringify!",
    "try!",
    "unimplemented!",
    "unreachable!",
    "vec!",
    "write!",
    "writeln!",
    "macro_rules!",
    "assert_ne!",
    "debug_assert_ne!"
  ];
  const TYPES2 = [
    "i8",
    "i16",
    "i32",
    "i64",
    "i128",
    "isize",
    "u8",
    "u16",
    "u32",
    "u64",
    "u128",
    "usize",
    "f32",
    "f64",
    "str",
    "char",
    "bool",
    "Box",
    "Option",
    "Result",
    "String",
    "Vec"
  ];
  return {
    name: "Rust",
    aliases: ["rs"],
    keywords: {
      $pattern: hljs.IDENT_RE + "!?",
      type: TYPES2,
      keyword: KEYWORDS2,
      literal: LITERALS2,
      built_in: BUILTINS
    },
    illegal: "</",
    contains: [
      hljs.C_LINE_COMMENT_MODE,
      hljs.COMMENT("/\\*", "\\*/", { contains: ["self"] }),
      hljs.inherit(hljs.QUOTE_STRING_MODE, {
        begin: /b?"/,
        illegal: null
      }),
      {
        className: "symbol",
        // negative lookahead to avoid matching `'`
        begin: /'[a-zA-Z_][a-zA-Z0-9_]*(?!')/
      },
      {
        scope: "string",
        variants: [
          { begin: /b?r(#*)"(.|\n)*?"\1(?!#)/ },
          {
            begin: /b?'/,
            end: /'/,
            contains: [
              {
                scope: "char.escape",
                match: /\\('|\w|x\w{2}|u\w{4}|U\w{8})/
              }
            ]
          }
        ]
      },
      {
        className: "number",
        variants: [
          { begin: "\\b0b([01_]+)" + NUMBER_SUFFIX },
          { begin: "\\b0o([0-7_]+)" + NUMBER_SUFFIX },
          { begin: "\\b0x([A-Fa-f0-9_]+)" + NUMBER_SUFFIX },
          { begin: "\\b(\\d[\\d_]*(\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)" + NUMBER_SUFFIX }
        ],
        relevance: 0
      },
      {
        begin: [
          /fn/,
          /\s+/,
          UNDERSCORE_IDENT_RE
        ],
        className: {
          1: "keyword",
          3: "title.function"
        }
      },
      {
        className: "meta",
        begin: "#!?\\[",
        end: "\\]",
        contains: [
          {
            className: "string",
            begin: /"/,
            end: /"/,
            contains: [
              hljs.BACKSLASH_ESCAPE
            ]
          }
        ]
      },
      {
        begin: [
          /let/,
          /\s+/,
          /(?:mut\s+)?/,
          UNDERSCORE_IDENT_RE
        ],
        className: {
          1: "keyword",
          3: "keyword",
          4: "variable"
        }
      },
      // must come before impl/for rule later
      {
        begin: [
          /for/,
          /\s+/,
          UNDERSCORE_IDENT_RE,
          /\s+/,
          /in/
        ],
        className: {
          1: "keyword",
          3: "variable",
          5: "keyword"
        }
      },
      {
        begin: [
          /type/,
          /\s+/,
          UNDERSCORE_IDENT_RE
        ],
        className: {
          1: "keyword",
          3: "title.class"
        }
      },
      {
        begin: [
          /(?:trait|enum|struct|union|impl|for)/,
          /\s+/,
          UNDERSCORE_IDENT_RE
        ],
        className: {
          1: "keyword",
          3: "title.class"
        }
      },
      {
        begin: hljs.IDENT_RE + "::",
        keywords: {
          keyword: "Self",
          built_in: BUILTINS,
          type: TYPES2
        }
      },
      {
        className: "punctuation",
        begin: "->"
      },
      FUNCTION_INVOKE
    ]
  };
}
const MODES = (hljs) => {
  return {
    IMPORTANT: {
      scope: "meta",
      begin: "!important"
    },
    BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,
    HEXCOLOR: {
      scope: "number",
      begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/
    },
    FUNCTION_DISPATCH: {
      className: "built_in",
      begin: /[\w-]+(?=\()/
    },
    ATTRIBUTE_SELECTOR_MODE: {
      scope: "selector-attr",
      begin: /\[/,
      end: /\]/,
      illegal: "$",
      contains: [
        hljs.APOS_STRING_MODE,
        hljs.QUOTE_STRING_MODE
      ]
    },
    CSS_NUMBER_MODE: {
      scope: "number",
      begin: hljs.NUMBER_RE + "(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",
      relevance: 0
    },
    CSS_VARIABLE: {
      className: "attr",
      begin: /--[A-Za-z_][A-Za-z0-9_-]*/
    }
  };
};
const HTML_TAGS = [
  "a",
  "abbr",
  "address",
  "article",
  "aside",
  "audio",
  "b",
  "blockquote",
  "body",
  "button",
  "canvas",
  "caption",
  "cite",
  "code",
  "dd",
  "del",
  "details",
  "dfn",
  "div",
  "dl",
  "dt",
  "em",
  "fieldset",
  "figcaption",
  "figure",
  "footer",
  "form",
  "h1",
  "h2",
  "h3",
  "h4",
  "h5",
  "h6",
  "header",
  "hgroup",
  "html",
  "i",
  "iframe",
  "img",
  "input",
  "ins",
  "kbd",
  "label",
  "legend",
  "li",
  "main",
  "mark",
  "menu",
  "nav",
  "object",
  "ol",
  "optgroup",
  "option",
  "p",
  "picture",
  "q",
  "quote",
  "samp",
  "section",
  "select",
  "source",
  "span",
  "strong",
  "summary",
  "sup",
  "table",
  "tbody",
  "td",
  "textarea",
  "tfoot",
  "th",
  "thead",
  "time",
  "tr",
  "ul",
  "var",
  "video"
];
const SVG_TAGS = [
  "defs",
  "g",
  "marker",
  "mask",
  "pattern",
  "svg",
  "switch",
  "symbol",
  "feBlend",
  "feColorMatrix",
  "feComponentTransfer",
  "feComposite",
  "feConvolveMatrix",
  "feDiffuseLighting",
  "feDisplacementMap",
  "feFlood",
  "feGaussianBlur",
  "feImage",
  "feMerge",
  "feMorphology",
  "feOffset",
  "feSpecularLighting",
  "feTile",
  "feTurbulence",
  "linearGradient",
  "radialGradient",
  "stop",
  "circle",
  "ellipse",
  "image",
  "line",
  "path",
  "polygon",
  "polyline",
  "rect",
  "text",
  "use",
  "textPath",
  "tspan",
  "foreignObject",
  "clipPath"
];
const TAGS = [
  ...HTML_TAGS,
  ...SVG_TAGS
];
const MEDIA_FEATURES = [
  "any-hover",
  "any-pointer",
  "aspect-ratio",
  "color",
  "color-gamut",
  "color-index",
  "device-aspect-ratio",
  "device-height",
  "device-width",
  "display-mode",
  "forced-colors",
  "grid",
  "height",
  "hover",
  "inverted-colors",
  "monochrome",
  "orientation",
  "overflow-block",
  "overflow-inline",
  "pointer",
  "prefers-color-scheme",
  "prefers-contrast",
  "prefers-reduced-motion",
  "prefers-reduced-transparency",
  "resolution",
  "scan",
  "scripting",
  "update",
  "width",
  // TODO: find a better solution?
  "min-width",
  "max-width",
  "min-height",
  "max-height"
].sort().reverse();
const PSEUDO_CLASSES = [
  "active",
  "any-link",
  "blank",
  "checked",
  "current",
  "default",
  "defined",
  "dir",
  // dir()
  "disabled",
  "drop",
  "empty",
  "enabled",
  "first",
  "first-child",
  "first-of-type",
  "fullscreen",
  "future",
  "focus",
  "focus-visible",
  "focus-within",
  "has",
  // has()
  "host",
  // host or host()
  "host-context",
  // host-context()
  "hover",
  "indeterminate",
  "in-range",
  "invalid",
  "is",
  // is()
  "lang",
  // lang()
  "last-child",
  "last-of-type",
  "left",
  "link",
  "local-link",
  "not",
  // not()
  "nth-child",
  // nth-child()
  "nth-col",
  // nth-col()
  "nth-last-child",
  // nth-last-child()
  "nth-last-col",
  // nth-last-col()
  "nth-last-of-type",
  //nth-last-of-type()
  "nth-of-type",
  //nth-of-type()
  "only-child",
  "only-of-type",
  "optional",
  "out-of-range",
  "past",
  "placeholder-shown",
  "read-only",
  "read-write",
  "required",
  "right",
  "root",
  "scope",
  "target",
  "target-within",
  "user-invalid",
  "valid",
  "visited",
  "where"
  // where()
].sort().reverse();
const PSEUDO_ELEMENTS = [
  "after",
  "backdrop",
  "before",
  "cue",
  "cue-region",
  "first-letter",
  "first-line",
  "grammar-error",
  "marker",
  "part",
  "placeholder",
  "selection",
  "slotted",
  "spelling-error"
].sort().reverse();
const ATTRIBUTES = [
  "accent-color",
  "align-content",
  "align-items",
  "align-self",
  "alignment-baseline",
  "all",
  "anchor-name",
  "animation",
  "animation-composition",
  "animation-delay",
  "animation-direction",
  "animation-duration",
  "animation-fill-mode",
  "animation-iteration-count",
  "animation-name",
  "animation-play-state",
  "animation-range",
  "animation-range-end",
  "animation-range-start",
  "animation-timeline",
  "animation-timing-function",
  "appearance",
  "aspect-ratio",
  "backdrop-filter",
  "backface-visibility",
  "background",
  "background-attachment",
  "background-blend-mode",
  "background-clip",
  "background-color",
  "background-image",
  "background-origin",
  "background-position",
  "background-position-x",
  "background-position-y",
  "background-repeat",
  "background-size",
  "baseline-shift",
  "block-size",
  "border",
  "border-block",
  "border-block-color",
  "border-block-end",
  "border-block-end-color",
  "border-block-end-style",
  "border-block-end-width",
  "border-block-start",
  "border-block-start-color",
  "border-block-start-style",
  "border-block-start-width",
  "border-block-style",
  "border-block-width",
  "border-bottom",
  "border-bottom-color",
  "border-bottom-left-radius",
  "border-bottom-right-radius",
  "border-bottom-style",
  "border-bottom-width",
  "border-collapse",
  "border-color",
  "border-end-end-radius",
  "border-end-start-radius",
  "border-image",
  "border-image-outset",
  "border-image-repeat",
  "border-image-slice",
  "border-image-source",
  "border-image-width",
  "border-inline",
  "border-inline-color",
  "border-inline-end",
  "border-inline-end-color",
  "border-inline-end-style",
  "border-inline-end-width",
  "border-inline-start",
  "border-inline-start-color",
  "border-inline-start-style",
  "border-inline-start-width",
  "border-inline-style",
  "border-inline-width",
  "border-left",
  "border-left-color",
  "border-left-style",
  "border-left-width",
  "border-radius",
  "border-right",
  "border-right-color",
  "border-right-style",
  "border-right-width",
  "border-spacing",
  "border-start-end-radius",
  "border-start-start-radius",
  "border-style",
  "border-top",
  "border-top-color",
  "border-top-left-radius",
  "border-top-right-radius",
  "border-top-style",
  "border-top-width",
  "border-width",
  "bottom",
  "box-align",
  "box-decoration-break",
  "box-direction",
  "box-flex",
  "box-flex-group",
  "box-lines",
  "box-ordinal-group",
  "box-orient",
  "box-pack",
  "box-shadow",
  "box-sizing",
  "break-after",
  "break-before",
  "break-inside",
  "caption-side",
  "caret-color",
  "clear",
  "clip",
  "clip-path",
  "clip-rule",
  "color",
  "color-interpolation",
  "color-interpolation-filters",
  "color-profile",
  "color-rendering",
  "color-scheme",
  "column-count",
  "column-fill",
  "column-gap",
  "column-rule",
  "column-rule-color",
  "column-rule-style",
  "column-rule-width",
  "column-span",
  "column-width",
  "columns",
  "contain",
  "contain-intrinsic-block-size",
  "contain-intrinsic-height",
  "contain-intrinsic-inline-size",
  "contain-intrinsic-size",
  "contain-intrinsic-width",
  "container",
  "container-name",
  "container-type",
  "content",
  "content-visibility",
  "counter-increment",
  "counter-reset",
  "counter-set",
  "cue",
  "cue-after",
  "cue-before",
  "cursor",
  "cx",
  "cy",
  "direction",
  "display",
  "dominant-baseline",
  "empty-cells",
  "enable-background",
  "field-sizing",
  "fill",
  "fill-opacity",
  "fill-rule",
  "filter",
  "flex",
  "flex-basis",
  "flex-direction",
  "flex-flow",
  "flex-grow",
  "flex-shrink",
  "flex-wrap",
  "float",
  "flood-color",
  "flood-opacity",
  "flow",
  "font",
  "font-display",
  "font-family",
  "font-feature-settings",
  "font-kerning",
  "font-language-override",
  "font-optical-sizing",
  "font-palette",
  "font-size",
  "font-size-adjust",
  "font-smooth",
  "font-smoothing",
  "font-stretch",
  "font-style",
  "font-synthesis",
  "font-synthesis-position",
  "font-synthesis-small-caps",
  "font-synthesis-style",
  "font-synthesis-weight",
  "font-variant",
  "font-variant-alternates",
  "font-variant-caps",
  "font-variant-east-asian",
  "font-variant-emoji",
  "font-variant-ligatures",
  "font-variant-numeric",
  "font-variant-position",
  "font-variation-settings",
  "font-weight",
  "forced-color-adjust",
  "gap",
  "glyph-orientation-horizontal",
  "glyph-orientation-vertical",
  "grid",
  "grid-area",
  "grid-auto-columns",
  "grid-auto-flow",
  "grid-auto-rows",
  "grid-column",
  "grid-column-end",
  "grid-column-start",
  "grid-gap",
  "grid-row",
  "grid-row-end",
  "grid-row-start",
  "grid-template",
  "grid-template-areas",
  "grid-template-columns",
  "grid-template-rows",
  "hanging-punctuation",
  "height",
  "hyphenate-character",
  "hyphenate-limit-chars",
  "hyphens",
  "icon",
  "image-orientation",
  "image-rendering",
  "image-resolution",
  "ime-mode",
  "initial-letter",
  "initial-letter-align",
  "inline-size",
  "inset",
  "inset-area",
  "inset-block",
  "inset-block-end",
  "inset-block-start",
  "inset-inline",
  "inset-inline-end",
  "inset-inline-start",
  "isolation",
  "justify-content",
  "justify-items",
  "justify-self",
  "kerning",
  "left",
  "letter-spacing",
  "lighting-color",
  "line-break",
  "line-height",
  "line-height-step",
  "list-style",
  "list-style-image",
  "list-style-position",
  "list-style-type",
  "margin",
  "margin-block",
  "margin-block-end",
  "margin-block-start",
  "margin-bottom",
  "margin-inline",
  "margin-inline-end",
  "margin-inline-start",
  "margin-left",
  "margin-right",
  "margin-top",
  "margin-trim",
  "marker",
  "marker-end",
  "marker-mid",
  "marker-start",
  "marks",
  "mask",
  "mask-border",
  "mask-border-mode",
  "mask-border-outset",
  "mask-border-repeat",
  "mask-border-slice",
  "mask-border-source",
  "mask-border-width",
  "mask-clip",
  "mask-composite",
  "mask-image",
  "mask-mode",
  "mask-origin",
  "mask-position",
  "mask-repeat",
  "mask-size",
  "mask-type",
  "masonry-auto-flow",
  "math-depth",
  "math-shift",
  "math-style",
  "max-block-size",
  "max-height",
  "max-inline-size",
  "max-width",
  "min-block-size",
  "min-height",
  "min-inline-size",
  "min-width",
  "mix-blend-mode",
  "nav-down",
  "nav-index",
  "nav-left",
  "nav-right",
  "nav-up",
  "none",
  "normal",
  "object-fit",
  "object-position",
  "offset",
  "offset-anchor",
  "offset-distance",
  "offset-path",
  "offset-position",
  "offset-rotate",
  "opacity",
  "order",
  "orphans",
  "outline",
  "outline-color",
  "outline-offset",
  "outline-style",
  "outline-width",
  "overflow",
  "overflow-anchor",
  "overflow-block",
  "overflow-clip-margin",
  "overflow-inline",
  "overflow-wrap",
  "overflow-x",
  "overflow-y",
  "overlay",
  "overscroll-behavior",
  "overscroll-behavior-block",
  "overscroll-behavior-inline",
  "overscroll-behavior-x",
  "overscroll-behavior-y",
  "padding",
  "padding-block",
  "padding-block-end",
  "padding-block-start",
  "padding-bottom",
  "padding-inline",
  "padding-inline-end",
  "padding-inline-start",
  "padding-left",
  "padding-right",
  "padding-top",
  "page",
  "page-break-after",
  "page-break-before",
  "page-break-inside",
  "paint-order",
  "pause",
  "pause-after",
  "pause-before",
  "perspective",
  "perspective-origin",
  "place-content",
  "place-items",
  "place-self",
  "pointer-events",
  "position",
  "position-anchor",
  "position-visibility",
  "print-color-adjust",
  "quotes",
  "r",
  "resize",
  "rest",
  "rest-after",
  "rest-before",
  "right",
  "rotate",
  "row-gap",
  "ruby-align",
  "ruby-position",
  "scale",
  "scroll-behavior",
  "scroll-margin",
  "scroll-margin-block",
  "scroll-margin-block-end",
  "scroll-margin-block-start",
  "scroll-margin-bottom",
  "scroll-margin-inline",
  "scroll-margin-inline-end",
  "scroll-margin-inline-start",
  "scroll-margin-left",
  "scroll-margin-right",
  "scroll-margin-top",
  "scroll-padding",
  "scroll-padding-block",
  "scroll-padding-block-end",
  "scroll-padding-block-start",
  "scroll-padding-bottom",
  "scroll-padding-inline",
  "scroll-padding-inline-end",
  "scroll-padding-inline-start",
  "scroll-padding-left",
  "scroll-padding-right",
  "scroll-padding-top",
  "scroll-snap-align",
  "scroll-snap-stop",
  "scroll-snap-type",
  "scroll-timeline",
  "scroll-timeline-axis",
  "scroll-timeline-name",
  "scrollbar-color",
  "scrollbar-gutter",
  "scrollbar-width",
  "shape-image-threshold",
  "shape-margin",
  "shape-outside",
  "shape-rendering",
  "speak",
  "speak-as",
  "src",
  // @font-face
  "stop-color",
  "stop-opacity",
  "stroke",
  "stroke-dasharray",
  "stroke-dashoffset",
  "stroke-linecap",
  "stroke-linejoin",
  "stroke-miterlimit",
  "stroke-opacity",
  "stroke-width",
  "tab-size",
  "table-layout",
  "text-align",
  "text-align-all",
  "text-align-last",
  "text-anchor",
  "text-combine-upright",
  "text-decoration",
  "text-decoration-color",
  "text-decoration-line",
  "text-decoration-skip",
  "text-decoration-skip-ink",
  "text-decoration-style",
  "text-decoration-thickness",
  "text-emphasis",
  "text-emphasis-color",
  "text-emphasis-position",
  "text-emphasis-style",
  "text-indent",
  "text-justify",
  "text-orientation",
  "text-overflow",
  "text-rendering",
  "text-shadow",
  "text-size-adjust",
  "text-transform",
  "text-underline-offset",
  "text-underline-position",
  "text-wrap",
  "text-wrap-mode",
  "text-wrap-style",
  "timeline-scope",
  "top",
  "touch-action",
  "transform",
  "transform-box",
  "transform-origin",
  "transform-style",
  "transition",
  "transition-behavior",
  "transition-delay",
  "transition-duration",
  "transition-property",
  "transition-timing-function",
  "translate",
  "unicode-bidi",
  "user-modify",
  "user-select",
  "vector-effect",
  "vertical-align",
  "view-timeline",
  "view-timeline-axis",
  "view-timeline-inset",
  "view-timeline-name",
  "view-transition-name",
  "visibility",
  "voice-balance",
  "voice-duration",
  "voice-family",
  "voice-pitch",
  "voice-range",
  "voice-rate",
  "voice-stress",
  "voice-volume",
  "white-space",
  "white-space-collapse",
  "widows",
  "width",
  "will-change",
  "word-break",
  "word-spacing",
  "word-wrap",
  "writing-mode",
  "x",
  "y",
  "z-index",
  "zoom"
].sort().reverse();
function scss(hljs) {
  const modes = MODES(hljs);
  const PSEUDO_ELEMENTS$12 = PSEUDO_ELEMENTS;
  const PSEUDO_CLASSES$12 = PSEUDO_CLASSES;
  const AT_IDENTIFIER = "@[a-z-]+";
  const AT_MODIFIERS = "and or not only";
  const IDENT_RE2 = "[a-zA-Z-][a-zA-Z0-9_-]*";
  const VARIABLE = {
    className: "variable",
    begin: "(\\$" + IDENT_RE2 + ")\\b",
    relevance: 0
  };
  return {
    name: "SCSS",
    case_insensitive: true,
    illegal: "[=/|']",
    contains: [
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      // to recognize keyframe 40% etc which are outside the scope of our
      // attribute value mode
      modes.CSS_NUMBER_MODE,
      {
        className: "selector-id",
        begin: "#[A-Za-z0-9_-]+",
        relevance: 0
      },
      {
        className: "selector-class",
        begin: "\\.[A-Za-z0-9_-]+",
        relevance: 0
      },
      modes.ATTRIBUTE_SELECTOR_MODE,
      {
        className: "selector-tag",
        begin: "\\b(" + TAGS.join("|") + ")\\b",
        // was there, before, but why?
        relevance: 0
      },
      {
        className: "selector-pseudo",
        begin: ":(" + PSEUDO_CLASSES$12.join("|") + ")"
      },
      {
        className: "selector-pseudo",
        begin: ":(:)?(" + PSEUDO_ELEMENTS$12.join("|") + ")"
      },
      VARIABLE,
      {
        // pseudo-selector params
        begin: /\(/,
        end: /\)/,
        contains: [modes.CSS_NUMBER_MODE]
      },
      modes.CSS_VARIABLE,
      {
        className: "attribute",
        begin: "\\b(" + ATTRIBUTES.join("|") + ")\\b"
      },
      { begin: "\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b" },
      {
        begin: /:/,
        end: /[;}{]/,
        relevance: 0,
        contains: [
          modes.BLOCK_COMMENT,
          VARIABLE,
          modes.HEXCOLOR,
          modes.CSS_NUMBER_MODE,
          hljs.QUOTE_STRING_MODE,
          hljs.APOS_STRING_MODE,
          modes.IMPORTANT,
          modes.FUNCTION_DISPATCH
        ]
      },
      // matching these here allows us to treat them more like regular CSS
      // rules so everything between the {} gets regular rule highlighting,
      // which is what we want for page and font-face
      {
        begin: "@(page|font-face)",
        keywords: {
          $pattern: AT_IDENTIFIER,
          keyword: "@page @font-face"
        }
      },
      {
        begin: "@",
        end: "[{;]",
        returnBegin: true,
        keywords: {
          $pattern: /[a-z-]+/,
          keyword: AT_MODIFIERS,
          attribute: MEDIA_FEATURES.join(" ")
        },
        contains: [
          {
            begin: AT_IDENTIFIER,
            className: "keyword"
          },
          {
            begin: /[a-z-]+(?=:)/,
            className: "attribute"
          },
          VARIABLE,
          hljs.QUOTE_STRING_MODE,
          hljs.APOS_STRING_MODE,
          modes.HEXCOLOR,
          modes.CSS_NUMBER_MODE
        ]
      },
      modes.FUNCTION_DISPATCH
    ]
  };
}
function shell(hljs) {
  return {
    name: "Shell Session",
    aliases: [
      "console",
      "shellsession"
    ],
    contains: [
      {
        className: "meta.prompt",
        // We cannot add \s (spaces) in the regular expression otherwise it will be too broad and produce unexpected result.
        // For instance, in the following example, it would match "echo /path/to/home >" as a prompt:
        // echo /path/to/home > t.exe
        begin: /^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,
        starts: {
          end: /[^\\](?=\s*$)/,
          subLanguage: "bash"
        }
      }
    ]
  };
}
function sql(hljs) {
  const regex = hljs.regex;
  const COMMENT_MODE = hljs.COMMENT("--", "$");
  const STRING = {
    scope: "string",
    variants: [
      {
        begin: /'/,
        end: /'/,
        contains: [{ match: /''/ }]
      }
    ]
  };
  const QUOTED_IDENTIFIER = {
    begin: /"/,
    end: /"/,
    contains: [{ match: /""/ }]
  };
  const LITERALS2 = [
    "true",
    "false",
    // Not sure it's correct to call NULL literal, and clauses like IS [NOT] NULL look strange that way.
    // "null",
    "unknown"
  ];
  const MULTI_WORD_TYPES = [
    "double precision",
    "large object",
    "with timezone",
    "without timezone"
  ];
  const TYPES2 = [
    "bigint",
    "binary",
    "blob",
    "boolean",
    "char",
    "character",
    "clob",
    "date",
    "dec",
    "decfloat",
    "decimal",
    "float",
    "int",
    "integer",
    "interval",
    "nchar",
    "nclob",
    "national",
    "numeric",
    "real",
    "row",
    "smallint",
    "time",
    "timestamp",
    "varchar",
    "varying",
    // modifier (character varying)
    "varbinary"
  ];
  const NON_RESERVED_WORDS = [
    "add",
    "asc",
    "collation",
    "desc",
    "final",
    "first",
    "last",
    "view"
  ];
  const RESERVED_WORDS = [
    "abs",
    "acos",
    "all",
    "allocate",
    "alter",
    "and",
    "any",
    "are",
    "array",
    "array_agg",
    "array_max_cardinality",
    "as",
    "asensitive",
    "asin",
    "asymmetric",
    "at",
    "atan",
    "atomic",
    "authorization",
    "avg",
    "begin",
    "begin_frame",
    "begin_partition",
    "between",
    "bigint",
    "binary",
    "blob",
    "boolean",
    "both",
    "by",
    "call",
    "called",
    "cardinality",
    "cascaded",
    "case",
    "cast",
    "ceil",
    "ceiling",
    "char",
    "char_length",
    "character",
    "character_length",
    "check",
    "classifier",
    "clob",
    "close",
    "coalesce",
    "collate",
    "collect",
    "column",
    "commit",
    "condition",
    "connect",
    "constraint",
    "contains",
    "convert",
    "copy",
    "corr",
    "corresponding",
    "cos",
    "cosh",
    "count",
    "covar_pop",
    "covar_samp",
    "create",
    "cross",
    "cube",
    "cume_dist",
    "current",
    "current_catalog",
    "current_date",
    "current_default_transform_group",
    "current_path",
    "current_role",
    "current_row",
    "current_schema",
    "current_time",
    "current_timestamp",
    "current_path",
    "current_role",
    "current_transform_group_for_type",
    "current_user",
    "cursor",
    "cycle",
    "date",
    "day",
    "deallocate",
    "dec",
    "decimal",
    "decfloat",
    "declare",
    "default",
    "define",
    "delete",
    "dense_rank",
    "deref",
    "describe",
    "deterministic",
    "disconnect",
    "distinct",
    "double",
    "drop",
    "dynamic",
    "each",
    "element",
    "else",
    "empty",
    "end",
    "end_frame",
    "end_partition",
    "end-exec",
    "equals",
    "escape",
    "every",
    "except",
    "exec",
    "execute",
    "exists",
    "exp",
    "external",
    "extract",
    "false",
    "fetch",
    "filter",
    "first_value",
    "float",
    "floor",
    "for",
    "foreign",
    "frame_row",
    "free",
    "from",
    "full",
    "function",
    "fusion",
    "get",
    "global",
    "grant",
    "group",
    "grouping",
    "groups",
    "having",
    "hold",
    "hour",
    "identity",
    "in",
    "indicator",
    "initial",
    "inner",
    "inout",
    "insensitive",
    "insert",
    "int",
    "integer",
    "intersect",
    "intersection",
    "interval",
    "into",
    "is",
    "join",
    "json_array",
    "json_arrayagg",
    "json_exists",
    "json_object",
    "json_objectagg",
    "json_query",
    "json_table",
    "json_table_primitive",
    "json_value",
    "lag",
    "language",
    "large",
    "last_value",
    "lateral",
    "lead",
    "leading",
    "left",
    "like",
    "like_regex",
    "listagg",
    "ln",
    "local",
    "localtime",
    "localtimestamp",
    "log",
    "log10",
    "lower",
    "match",
    "match_number",
    "match_recognize",
    "matches",
    "max",
    "member",
    "merge",
    "method",
    "min",
    "minute",
    "mod",
    "modifies",
    "module",
    "month",
    "multiset",
    "national",
    "natural",
    "nchar",
    "nclob",
    "new",
    "no",
    "none",
    "normalize",
    "not",
    "nth_value",
    "ntile",
    "null",
    "nullif",
    "numeric",
    "octet_length",
    "occurrences_regex",
    "of",
    "offset",
    "old",
    "omit",
    "on",
    "one",
    "only",
    "open",
    "or",
    "order",
    "out",
    "outer",
    "over",
    "overlaps",
    "overlay",
    "parameter",
    "partition",
    "pattern",
    "per",
    "percent",
    "percent_rank",
    "percentile_cont",
    "percentile_disc",
    "period",
    "portion",
    "position",
    "position_regex",
    "power",
    "precedes",
    "precision",
    "prepare",
    "primary",
    "procedure",
    "ptf",
    "range",
    "rank",
    "reads",
    "real",
    "recursive",
    "ref",
    "references",
    "referencing",
    "regr_avgx",
    "regr_avgy",
    "regr_count",
    "regr_intercept",
    "regr_r2",
    "regr_slope",
    "regr_sxx",
    "regr_sxy",
    "regr_syy",
    "release",
    "result",
    "return",
    "returns",
    "revoke",
    "right",
    "rollback",
    "rollup",
    "row",
    "row_number",
    "rows",
    "running",
    "savepoint",
    "scope",
    "scroll",
    "search",
    "second",
    "seek",
    "select",
    "sensitive",
    "session_user",
    "set",
    "show",
    "similar",
    "sin",
    "sinh",
    "skip",
    "smallint",
    "some",
    "specific",
    "specifictype",
    "sql",
    "sqlexception",
    "sqlstate",
    "sqlwarning",
    "sqrt",
    "start",
    "static",
    "stddev_pop",
    "stddev_samp",
    "submultiset",
    "subset",
    "substring",
    "substring_regex",
    "succeeds",
    "sum",
    "symmetric",
    "system",
    "system_time",
    "system_user",
    "table",
    "tablesample",
    "tan",
    "tanh",
    "then",
    "time",
    "timestamp",
    "timezone_hour",
    "timezone_minute",
    "to",
    "trailing",
    "translate",
    "translate_regex",
    "translation",
    "treat",
    "trigger",
    "trim",
    "trim_array",
    "true",
    "truncate",
    "uescape",
    "union",
    "unique",
    "unknown",
    "unnest",
    "update",
    "upper",
    "user",
    "using",
    "value",
    "values",
    "value_of",
    "var_pop",
    "var_samp",
    "varbinary",
    "varchar",
    "varying",
    "versioning",
    "when",
    "whenever",
    "where",
    "width_bucket",
    "window",
    "with",
    "within",
    "without",
    "year"
  ];
  const RESERVED_FUNCTIONS = [
    "abs",
    "acos",
    "array_agg",
    "asin",
    "atan",
    "avg",
    "cast",
    "ceil",
    "ceiling",
    "coalesce",
    "corr",
    "cos",
    "cosh",
    "count",
    "covar_pop",
    "covar_samp",
    "cume_dist",
    "dense_rank",
    "deref",
    "element",
    "exp",
    "extract",
    "first_value",
    "floor",
    "json_array",
    "json_arrayagg",
    "json_exists",
    "json_object",
    "json_objectagg",
    "json_query",
    "json_table",
    "json_table_primitive",
    "json_value",
    "lag",
    "last_value",
    "lead",
    "listagg",
    "ln",
    "log",
    "log10",
    "lower",
    "max",
    "min",
    "mod",
    "nth_value",
    "ntile",
    "nullif",
    "percent_rank",
    "percentile_cont",
    "percentile_disc",
    "position",
    "position_regex",
    "power",
    "rank",
    "regr_avgx",
    "regr_avgy",
    "regr_count",
    "regr_intercept",
    "regr_r2",
    "regr_slope",
    "regr_sxx",
    "regr_sxy",
    "regr_syy",
    "row_number",
    "sin",
    "sinh",
    "sqrt",
    "stddev_pop",
    "stddev_samp",
    "substring",
    "substring_regex",
    "sum",
    "tan",
    "tanh",
    "translate",
    "translate_regex",
    "treat",
    "trim",
    "trim_array",
    "unnest",
    "upper",
    "value_of",
    "var_pop",
    "var_samp",
    "width_bucket"
  ];
  const POSSIBLE_WITHOUT_PARENS = [
    "current_catalog",
    "current_date",
    "current_default_transform_group",
    "current_path",
    "current_role",
    "current_schema",
    "current_transform_group_for_type",
    "current_user",
    "session_user",
    "system_time",
    "system_user",
    "current_time",
    "localtime",
    "current_timestamp",
    "localtimestamp"
  ];
  const COMBOS = [
    "create table",
    "insert into",
    "primary key",
    "foreign key",
    "not null",
    "alter table",
    "add constraint",
    "grouping sets",
    "on overflow",
    "character set",
    "respect nulls",
    "ignore nulls",
    "nulls first",
    "nulls last",
    "depth first",
    "breadth first"
  ];
  const FUNCTIONS = RESERVED_FUNCTIONS;
  const KEYWORDS2 = [
    ...RESERVED_WORDS,
    ...NON_RESERVED_WORDS
  ].filter((keyword) => {
    return !RESERVED_FUNCTIONS.includes(keyword);
  });
  const VARIABLE = {
    scope: "variable",
    match: /@[a-z0-9][a-z0-9_]*/
  };
  const OPERATOR = {
    scope: "operator",
    match: /[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,
    relevance: 0
  };
  const FUNCTION_CALL = {
    match: regex.concat(/\b/, regex.either(...FUNCTIONS), /\s*\(/),
    relevance: 0,
    keywords: { built_in: FUNCTIONS }
  };
  function kws_to_regex(list) {
    return regex.concat(
      /\b/,
      regex.either(...list.map((kw) => {
        return kw.replace(/\s+/, "\\s+");
      })),
      /\b/
    );
  }
  const MULTI_WORD_KEYWORDS = {
    scope: "keyword",
    match: kws_to_regex(COMBOS),
    relevance: 0
  };
  function reduceRelevancy(list, {
    exceptions,
    when
  } = {}) {
    const qualifyFn = when;
    exceptions = exceptions || [];
    return list.map((item) => {
      if (item.match(/\|\d+$/) || exceptions.includes(item)) {
        return item;
      } else if (qualifyFn(item)) {
        return `${item}|0`;
      } else {
        return item;
      }
    });
  }
  return {
    name: "SQL",
    case_insensitive: true,
    // does not include {} or HTML tags `</`
    illegal: /[{}]|<\//,
    keywords: {
      $pattern: /\b[\w\.]+/,
      keyword: reduceRelevancy(KEYWORDS2, { when: (x2) => x2.length < 3 }),
      literal: LITERALS2,
      type: TYPES2,
      built_in: POSSIBLE_WITHOUT_PARENS
    },
    contains: [
      {
        scope: "type",
        match: kws_to_regex(MULTI_WORD_TYPES)
      },
      MULTI_WORD_KEYWORDS,
      FUNCTION_CALL,
      VARIABLE,
      STRING,
      QUOTED_IDENTIFIER,
      hljs.C_NUMBER_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      COMMENT_MODE,
      OPERATOR
    ]
  };
}
function source(re2) {
  if (!re2) return null;
  if (typeof re2 === "string") return re2;
  return re2.source;
}
function lookahead(re2) {
  return concat("(?=", re2, ")");
}
function concat(...args) {
  const joined = args.map((x2) => source(x2)).join("");
  return joined;
}
function stripOptionsFromArgs(args) {
  const opts = args[args.length - 1];
  if (typeof opts === "object" && opts.constructor === Object) {
    args.splice(args.length - 1, 1);
    return opts;
  } else {
    return {};
  }
}
function either(...args) {
  const opts = stripOptionsFromArgs(args);
  const joined = "(" + (opts.capture ? "" : "?:") + args.map((x2) => source(x2)).join("|") + ")";
  return joined;
}
const keywordWrapper = (keyword) => concat(
  /\b/,
  keyword,
  /\w$/.test(keyword) ? /\b/ : /\B/
);
const dotKeywords = [
  "Protocol",
  // contextual
  "Type"
  // contextual
].map(keywordWrapper);
const optionalDotKeywords = [
  "init",
  "self"
].map(keywordWrapper);
const keywordTypes = [
  "Any",
  "Self"
];
const keywords = [
  // strings below will be fed into the regular `keywords` engine while regex
  // will result in additional modes being created to scan for those keywords to
  // avoid conflicts with other rules
  "actor",
  "any",
  // contextual
  "associatedtype",
  "async",
  "await",
  /as\?/,
  // operator
  /as!/,
  // operator
  "as",
  // operator
  "borrowing",
  // contextual
  "break",
  "case",
  "catch",
  "class",
  "consume",
  // contextual
  "consuming",
  // contextual
  "continue",
  "convenience",
  // contextual
  "copy",
  // contextual
  "default",
  "defer",
  "deinit",
  "didSet",
  // contextual
  "distributed",
  "do",
  "dynamic",
  // contextual
  "each",
  "else",
  "enum",
  "extension",
  "fallthrough",
  /fileprivate\(set\)/,
  "fileprivate",
  "final",
  // contextual
  "for",
  "func",
  "get",
  // contextual
  "guard",
  "if",
  "import",
  "indirect",
  // contextual
  "infix",
  // contextual
  /init\?/,
  /init!/,
  "inout",
  /internal\(set\)/,
  "internal",
  "in",
  "is",
  // operator
  "isolated",
  // contextual
  "nonisolated",
  // contextual
  "lazy",
  // contextual
  "let",
  "macro",
  "mutating",
  // contextual
  "nonmutating",
  // contextual
  /open\(set\)/,
  // contextual
  "open",
  // contextual
  "operator",
  "optional",
  // contextual
  "override",
  // contextual
  "package",
  "postfix",
  // contextual
  "precedencegroup",
  "prefix",
  // contextual
  /private\(set\)/,
  "private",
  "protocol",
  /public\(set\)/,
  "public",
  "repeat",
  "required",
  // contextual
  "rethrows",
  "return",
  "set",
  // contextual
  "some",
  // contextual
  "static",
  "struct",
  "subscript",
  "super",
  "switch",
  "throws",
  "throw",
  /try\?/,
  // operator
  /try!/,
  // operator
  "try",
  // operator
  "typealias",
  /unowned\(safe\)/,
  // contextual
  /unowned\(unsafe\)/,
  // contextual
  "unowned",
  // contextual
  "var",
  "weak",
  // contextual
  "where",
  "while",
  "willSet"
  // contextual
];
const literals = [
  "false",
  "nil",
  "true"
];
const precedencegroupKeywords = [
  "assignment",
  "associativity",
  "higherThan",
  "left",
  "lowerThan",
  "none",
  "right"
];
const numberSignKeywords = [
  "#colorLiteral",
  "#column",
  "#dsohandle",
  "#else",
  "#elseif",
  "#endif",
  "#error",
  "#file",
  "#fileID",
  "#fileLiteral",
  "#filePath",
  "#function",
  "#if",
  "#imageLiteral",
  "#keyPath",
  "#line",
  "#selector",
  "#sourceLocation",
  "#warning"
];
const builtIns = [
  "abs",
  "all",
  "any",
  "assert",
  "assertionFailure",
  "debugPrint",
  "dump",
  "fatalError",
  "getVaList",
  "isKnownUniquelyReferenced",
  "max",
  "min",
  "numericCast",
  "pointwiseMax",
  "pointwiseMin",
  "precondition",
  "preconditionFailure",
  "print",
  "readLine",
  "repeatElement",
  "sequence",
  "stride",
  "swap",
  "swift_unboxFromSwiftValueWithType",
  "transcode",
  "type",
  "unsafeBitCast",
  "unsafeDowncast",
  "withExtendedLifetime",
  "withUnsafeMutablePointer",
  "withUnsafePointer",
  "withVaList",
  "withoutActuallyEscaping",
  "zip"
];
const operatorHead = either(
  /[/=\-+!*%<>&|^~?]/,
  /[\u00A1-\u00A7]/,
  /[\u00A9\u00AB]/,
  /[\u00AC\u00AE]/,
  /[\u00B0\u00B1]/,
  /[\u00B6\u00BB\u00BF\u00D7\u00F7]/,
  /[\u2016-\u2017]/,
  /[\u2020-\u2027]/,
  /[\u2030-\u203E]/,
  /[\u2041-\u2053]/,
  /[\u2055-\u205E]/,
  /[\u2190-\u23FF]/,
  /[\u2500-\u2775]/,
  /[\u2794-\u2BFF]/,
  /[\u2E00-\u2E7F]/,
  /[\u3001-\u3003]/,
  /[\u3008-\u3020]/,
  /[\u3030]/
);
const operatorCharacter = either(
  operatorHead,
  /[\u0300-\u036F]/,
  /[\u1DC0-\u1DFF]/,
  /[\u20D0-\u20FF]/,
  /[\uFE00-\uFE0F]/,
  /[\uFE20-\uFE2F]/
  // TODO: The following characters are also allowed, but the regex isn't supported yet.
  // /[\u{E0100}-\u{E01EF}]/u
);
const operator = concat(operatorHead, operatorCharacter, "*");
const identifierHead = either(
  /[a-zA-Z_]/,
  /[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,
  /[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,
  /[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,
  /[\u1E00-\u1FFF]/,
  /[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,
  /[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,
  /[\u2C00-\u2DFF\u2E80-\u2FFF]/,
  /[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,
  /[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,
  /[\uFE47-\uFEFE\uFF00-\uFFFD]/
  // Should be /[\uFE47-\uFFFD]/, but we have to exclude FEFF.
  // The following characters are also allowed, but the regexes aren't supported yet.
  // /[\u{10000}-\u{1FFFD}\u{20000-\u{2FFFD}\u{30000}-\u{3FFFD}\u{40000}-\u{4FFFD}]/u,
  // /[\u{50000}-\u{5FFFD}\u{60000-\u{6FFFD}\u{70000}-\u{7FFFD}\u{80000}-\u{8FFFD}]/u,
  // /[\u{90000}-\u{9FFFD}\u{A0000-\u{AFFFD}\u{B0000}-\u{BFFFD}\u{C0000}-\u{CFFFD}]/u,
  // /[\u{D0000}-\u{DFFFD}\u{E0000-\u{EFFFD}]/u
);
const identifierCharacter = either(
  identifierHead,
  /\d/,
  /[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/
);
const identifier = concat(identifierHead, identifierCharacter, "*");
const typeIdentifier = concat(/[A-Z]/, identifierCharacter, "*");
const keywordAttributes = [
  "attached",
  "autoclosure",
  concat(/convention\(/, either("swift", "block", "c"), /\)/),
  "discardableResult",
  "dynamicCallable",
  "dynamicMemberLookup",
  "escaping",
  "freestanding",
  "frozen",
  "GKInspectable",
  "IBAction",
  "IBDesignable",
  "IBInspectable",
  "IBOutlet",
  "IBSegueAction",
  "inlinable",
  "main",
  "nonobjc",
  "NSApplicationMain",
  "NSCopying",
  "NSManaged",
  concat(/objc\(/, identifier, /\)/),
  "objc",
  "objcMembers",
  "propertyWrapper",
  "requires_stored_property_inits",
  "resultBuilder",
  "Sendable",
  "testable",
  "UIApplicationMain",
  "unchecked",
  "unknown",
  "usableFromInline",
  "warn_unqualified_access"
];
const availabilityKeywords = [
  "iOS",
  "iOSApplicationExtension",
  "macOS",
  "macOSApplicationExtension",
  "macCatalyst",
  "macCatalystApplicationExtension",
  "watchOS",
  "watchOSApplicationExtension",
  "tvOS",
  "tvOSApplicationExtension",
  "swift"
];
function swift(hljs) {
  const WHITESPACE = {
    match: /\s+/,
    relevance: 0
  };
  const BLOCK_COMMENT = hljs.COMMENT(
    "/\\*",
    "\\*/",
    { contains: ["self"] }
  );
  const COMMENTS = [
    hljs.C_LINE_COMMENT_MODE,
    BLOCK_COMMENT
  ];
  const DOT_KEYWORD = {
    match: [
      /\./,
      either(...dotKeywords, ...optionalDotKeywords)
    ],
    className: { 2: "keyword" }
  };
  const KEYWORD_GUARD = {
    // Consume .keyword to prevent highlighting properties and methods as keywords.
    match: concat(/\./, either(...keywords)),
    relevance: 0
  };
  const PLAIN_KEYWORDS = keywords.filter((kw) => typeof kw === "string").concat(["_|0"]);
  const REGEX_KEYWORDS = keywords.filter((kw) => typeof kw !== "string").concat(keywordTypes).map(keywordWrapper);
  const KEYWORD = { variants: [
    {
      className: "keyword",
      match: either(...REGEX_KEYWORDS, ...optionalDotKeywords)
    }
  ] };
  const KEYWORDS2 = {
    $pattern: either(
      /\b\w+/,
      // regular keywords
      /#\w+/
      // number keywords
    ),
    keyword: PLAIN_KEYWORDS.concat(numberSignKeywords),
    literal: literals
  };
  const KEYWORD_MODES = [
    DOT_KEYWORD,
    KEYWORD_GUARD,
    KEYWORD
  ];
  const BUILT_IN_GUARD = {
    // Consume .built_in to prevent highlighting properties and methods.
    match: concat(/\./, either(...builtIns)),
    relevance: 0
  };
  const BUILT_IN = {
    className: "built_in",
    match: concat(/\b/, either(...builtIns), /(?=\()/)
  };
  const BUILT_INS2 = [
    BUILT_IN_GUARD,
    BUILT_IN
  ];
  const OPERATOR_GUARD = {
    // Prevent -> from being highlighting as an operator.
    match: /->/,
    relevance: 0
  };
  const OPERATOR = {
    className: "operator",
    relevance: 0,
    variants: [
      { match: operator },
      {
        // dot-operator: only operators that start with a dot are allowed to use dots as
        // characters (..., ...<, .*, etc). So there rule here is: a dot followed by one or more
        // characters that may also include dots.
        match: `\\.(\\.|${operatorCharacter})+`
      }
    ]
  };
  const OPERATORS = [
    OPERATOR_GUARD,
    OPERATOR
  ];
  const decimalDigits2 = "([0-9]_*)+";
  const hexDigits2 = "([0-9a-fA-F]_*)+";
  const NUMBER = {
    className: "number",
    relevance: 0,
    variants: [
      // decimal floating-point-literal (subsumes decimal-literal)
      { match: `\\b(${decimalDigits2})(\\.(${decimalDigits2}))?([eE][+-]?(${decimalDigits2}))?\\b` },
      // hexadecimal floating-point-literal (subsumes hexadecimal-literal)
      { match: `\\b0x(${hexDigits2})(\\.(${hexDigits2}))?([pP][+-]?(${decimalDigits2}))?\\b` },
      // octal-literal
      { match: /\b0o([0-7]_*)+\b/ },
      // binary-literal
      { match: /\b0b([01]_*)+\b/ }
    ]
  };
  const ESCAPED_CHARACTER = (rawDelimiter = "") => ({
    className: "subst",
    variants: [
      { match: concat(/\\/, rawDelimiter, /[0\\tnr"']/) },
      { match: concat(/\\/, rawDelimiter, /u\{[0-9a-fA-F]{1,8}\}/) }
    ]
  });
  const ESCAPED_NEWLINE = (rawDelimiter = "") => ({
    className: "subst",
    match: concat(/\\/, rawDelimiter, /[\t ]*(?:[\r\n]|\r\n)/)
  });
  const INTERPOLATION = (rawDelimiter = "") => ({
    className: "subst",
    label: "interpol",
    begin: concat(/\\/, rawDelimiter, /\(/),
    end: /\)/
  });
  const MULTILINE_STRING = (rawDelimiter = "") => ({
    begin: concat(rawDelimiter, /"""/),
    end: concat(/"""/, rawDelimiter),
    contains: [
      ESCAPED_CHARACTER(rawDelimiter),
      ESCAPED_NEWLINE(rawDelimiter),
      INTERPOLATION(rawDelimiter)
    ]
  });
  const SINGLE_LINE_STRING = (rawDelimiter = "") => ({
    begin: concat(rawDelimiter, /"/),
    end: concat(/"/, rawDelimiter),
    contains: [
      ESCAPED_CHARACTER(rawDelimiter),
      INTERPOLATION(rawDelimiter)
    ]
  });
  const STRING = {
    className: "string",
    variants: [
      MULTILINE_STRING(),
      MULTILINE_STRING("#"),
      MULTILINE_STRING("##"),
      MULTILINE_STRING("###"),
      SINGLE_LINE_STRING(),
      SINGLE_LINE_STRING("#"),
      SINGLE_LINE_STRING("##"),
      SINGLE_LINE_STRING("###")
    ]
  };
  const REGEXP_CONTENTS = [
    hljs.BACKSLASH_ESCAPE,
    {
      begin: /\[/,
      end: /\]/,
      relevance: 0,
      contains: [hljs.BACKSLASH_ESCAPE]
    }
  ];
  const BARE_REGEXP_LITERAL = {
    begin: /\/[^\s](?=[^/\n]*\/)/,
    end: /\//,
    contains: REGEXP_CONTENTS
  };
  const EXTENDED_REGEXP_LITERAL = (rawDelimiter) => {
    const begin = concat(rawDelimiter, /\//);
    const end = concat(/\//, rawDelimiter);
    return {
      begin,
      end,
      contains: [
        ...REGEXP_CONTENTS,
        {
          scope: "comment",
          begin: `#(?!.*${end})`,
          end: /$/
        }
      ]
    };
  };
  const REGEXP = {
    scope: "regexp",
    variants: [
      EXTENDED_REGEXP_LITERAL("###"),
      EXTENDED_REGEXP_LITERAL("##"),
      EXTENDED_REGEXP_LITERAL("#"),
      BARE_REGEXP_LITERAL
    ]
  };
  const QUOTED_IDENTIFIER = { match: concat(/`/, identifier, /`/) };
  const IMPLICIT_PARAMETER = {
    className: "variable",
    match: /\$\d+/
  };
  const PROPERTY_WRAPPER_PROJECTION = {
    className: "variable",
    match: `\\$${identifierCharacter}+`
  };
  const IDENTIFIERS = [
    QUOTED_IDENTIFIER,
    IMPLICIT_PARAMETER,
    PROPERTY_WRAPPER_PROJECTION
  ];
  const AVAILABLE_ATTRIBUTE = {
    match: /(@|#(un)?)available/,
    scope: "keyword",
    starts: { contains: [
      {
        begin: /\(/,
        end: /\)/,
        keywords: availabilityKeywords,
        contains: [
          ...OPERATORS,
          NUMBER,
          STRING
        ]
      }
    ] }
  };
  const KEYWORD_ATTRIBUTE = {
    scope: "keyword",
    match: concat(/@/, either(...keywordAttributes), lookahead(either(/\(/, /\s+/)))
  };
  const USER_DEFINED_ATTRIBUTE = {
    scope: "meta",
    match: concat(/@/, identifier)
  };
  const ATTRIBUTES2 = [
    AVAILABLE_ATTRIBUTE,
    KEYWORD_ATTRIBUTE,
    USER_DEFINED_ATTRIBUTE
  ];
  const TYPE = {
    match: lookahead(/\b[A-Z]/),
    relevance: 0,
    contains: [
      {
        // Common Apple frameworks, for relevance boost
        className: "type",
        match: concat(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/, identifierCharacter, "+")
      },
      {
        // Type identifier
        className: "type",
        match: typeIdentifier,
        relevance: 0
      },
      {
        // Optional type
        match: /[?!]+/,
        relevance: 0
      },
      {
        // Variadic parameter
        match: /\.\.\./,
        relevance: 0
      },
      {
        // Protocol composition
        match: concat(/\s+&\s+/, lookahead(typeIdentifier)),
        relevance: 0
      }
    ]
  };
  const GENERIC_ARGUMENTS = {
    begin: /</,
    end: />/,
    keywords: KEYWORDS2,
    contains: [
      ...COMMENTS,
      ...KEYWORD_MODES,
      ...ATTRIBUTES2,
      OPERATOR_GUARD,
      TYPE
    ]
  };
  TYPE.contains.push(GENERIC_ARGUMENTS);
  const TUPLE_ELEMENT_NAME = {
    match: concat(identifier, /\s*:/),
    keywords: "_|0",
    relevance: 0
  };
  const TUPLE = {
    begin: /\(/,
    end: /\)/,
    relevance: 0,
    keywords: KEYWORDS2,
    contains: [
      "self",
      TUPLE_ELEMENT_NAME,
      ...COMMENTS,
      REGEXP,
      ...KEYWORD_MODES,
      ...BUILT_INS2,
      ...OPERATORS,
      NUMBER,
      STRING,
      ...IDENTIFIERS,
      ...ATTRIBUTES2,
      TYPE
    ]
  };
  const GENERIC_PARAMETERS = {
    begin: /</,
    end: />/,
    keywords: "repeat each",
    contains: [
      ...COMMENTS,
      TYPE
    ]
  };
  const FUNCTION_PARAMETER_NAME = {
    begin: either(
      lookahead(concat(identifier, /\s*:/)),
      lookahead(concat(identifier, /\s+/, identifier, /\s*:/))
    ),
    end: /:/,
    relevance: 0,
    contains: [
      {
        className: "keyword",
        match: /\b_\b/
      },
      {
        className: "params",
        match: identifier
      }
    ]
  };
  const FUNCTION_PARAMETERS = {
    begin: /\(/,
    end: /\)/,
    keywords: KEYWORDS2,
    contains: [
      FUNCTION_PARAMETER_NAME,
      ...COMMENTS,
      ...KEYWORD_MODES,
      ...OPERATORS,
      NUMBER,
      STRING,
      ...ATTRIBUTES2,
      TYPE,
      TUPLE
    ],
    endsParent: true,
    illegal: /["']/
  };
  const FUNCTION_OR_MACRO = {
    match: [
      /(func|macro)/,
      /\s+/,
      either(QUOTED_IDENTIFIER.match, identifier, operator)
    ],
    className: {
      1: "keyword",
      3: "title.function"
    },
    contains: [
      GENERIC_PARAMETERS,
      FUNCTION_PARAMETERS,
      WHITESPACE
    ],
    illegal: [
      /\[/,
      /%/
    ]
  };
  const INIT_SUBSCRIPT = {
    match: [
      /\b(?:subscript|init[?!]?)/,
      /\s*(?=[<(])/
    ],
    className: { 1: "keyword" },
    contains: [
      GENERIC_PARAMETERS,
      FUNCTION_PARAMETERS,
      WHITESPACE
    ],
    illegal: /\[|%/
  };
  const OPERATOR_DECLARATION = {
    match: [
      /operator/,
      /\s+/,
      operator
    ],
    className: {
      1: "keyword",
      3: "title"
    }
  };
  const PRECEDENCEGROUP = {
    begin: [
      /precedencegroup/,
      /\s+/,
      typeIdentifier
    ],
    className: {
      1: "keyword",
      3: "title"
    },
    contains: [TYPE],
    keywords: [
      ...precedencegroupKeywords,
      ...literals
    ],
    end: /}/
  };
  const CLASS_FUNC_DECLARATION = {
    match: [
      /class\b/,
      /\s+/,
      /func\b/,
      /\s+/,
      /\b[A-Za-z_][A-Za-z0-9_]*\b/
    ],
    scope: {
      1: "keyword",
      3: "keyword",
      5: "title.function"
    }
  };
  const CLASS_VAR_DECLARATION = {
    match: [
      /class\b/,
      /\s+/,
      /var\b/
    ],
    scope: {
      1: "keyword",
      3: "keyword"
    }
  };
  const TYPE_DECLARATION = {
    begin: [
      /(struct|protocol|class|extension|enum|actor)/,
      /\s+/,
      identifier,
      /\s*/
    ],
    beginScope: {
      1: "keyword",
      3: "title.class"
    },
    keywords: KEYWORDS2,
    contains: [
      GENERIC_PARAMETERS,
      ...KEYWORD_MODES,
      {
        begin: /:/,
        end: /\{/,
        keywords: KEYWORDS2,
        contains: [
          {
            scope: "title.class.inherited",
            match: typeIdentifier
          },
          ...KEYWORD_MODES
        ],
        relevance: 0
      }
    ]
  };
  for (const variant of STRING.variants) {
    const interpolation = variant.contains.find((mode) => mode.label === "interpol");
    interpolation.keywords = KEYWORDS2;
    const submodes = [
      ...KEYWORD_MODES,
      ...BUILT_INS2,
      ...OPERATORS,
      NUMBER,
      STRING,
      ...IDENTIFIERS
    ];
    interpolation.contains = [
      ...submodes,
      {
        begin: /\(/,
        end: /\)/,
        contains: [
          "self",
          ...submodes
        ]
      }
    ];
  }
  return {
    name: "Swift",
    keywords: KEYWORDS2,
    contains: [
      ...COMMENTS,
      FUNCTION_OR_MACRO,
      INIT_SUBSCRIPT,
      CLASS_FUNC_DECLARATION,
      CLASS_VAR_DECLARATION,
      TYPE_DECLARATION,
      OPERATOR_DECLARATION,
      PRECEDENCEGROUP,
      {
        beginKeywords: "import",
        end: /$/,
        contains: [...COMMENTS],
        relevance: 0
      },
      REGEXP,
      ...KEYWORD_MODES,
      ...BUILT_INS2,
      ...OPERATORS,
      NUMBER,
      STRING,
      ...IDENTIFIERS,
      ...ATTRIBUTES2,
      TYPE,
      TUPLE
    ]
  };
}
const IDENT_RE = "[A-Za-z$_][0-9A-Za-z$_]*";
const KEYWORDS = [
  "as",
  // for exports
  "in",
  "of",
  "if",
  "for",
  "while",
  "finally",
  "var",
  "new",
  "function",
  "do",
  "return",
  "void",
  "else",
  "break",
  "catch",
  "instanceof",
  "with",
  "throw",
  "case",
  "default",
  "try",
  "switch",
  "continue",
  "typeof",
  "delete",
  "let",
  "yield",
  "const",
  "class",
  // JS handles these with a special rule
  // "get",
  // "set",
  "debugger",
  "async",
  "await",
  "static",
  "import",
  "from",
  "export",
  "extends",
  // It's reached stage 3, which is "recommended for implementation":
  "using"
];
const LITERALS = [
  "true",
  "false",
  "null",
  "undefined",
  "NaN",
  "Infinity"
];
const TYPES = [
  // Fundamental objects
  "Object",
  "Function",
  "Boolean",
  "Symbol",
  // numbers and dates
  "Math",
  "Date",
  "Number",
  "BigInt",
  // text
  "String",
  "RegExp",
  // Indexed collections
  "Array",
  "Float32Array",
  "Float64Array",
  "Int8Array",
  "Uint8Array",
  "Uint8ClampedArray",
  "Int16Array",
  "Int32Array",
  "Uint16Array",
  "Uint32Array",
  "BigInt64Array",
  "BigUint64Array",
  // Keyed collections
  "Set",
  "Map",
  "WeakSet",
  "WeakMap",
  // Structured data
  "ArrayBuffer",
  "SharedArrayBuffer",
  "Atomics",
  "DataView",
  "JSON",
  // Control abstraction objects
  "Promise",
  "Generator",
  "GeneratorFunction",
  "AsyncFunction",
  // Reflection
  "Reflect",
  "Proxy",
  // Internationalization
  "Intl",
  // WebAssembly
  "WebAssembly"
];
const ERROR_TYPES = [
  "Error",
  "EvalError",
  "InternalError",
  "RangeError",
  "ReferenceError",
  "SyntaxError",
  "TypeError",
  "URIError"
];
const BUILT_IN_GLOBALS = [
  "setInterval",
  "setTimeout",
  "clearInterval",
  "clearTimeout",
  "require",
  "exports",
  "eval",
  "isFinite",
  "isNaN",
  "parseFloat",
  "parseInt",
  "decodeURI",
  "decodeURIComponent",
  "encodeURI",
  "encodeURIComponent",
  "escape",
  "unescape"
];
const BUILT_IN_VARIABLES = [
  "arguments",
  "this",
  "super",
  "console",
  "window",
  "document",
  "localStorage",
  "sessionStorage",
  "module",
  "global"
  // Node.js
];
const BUILT_INS = [].concat(
  BUILT_IN_GLOBALS,
  TYPES,
  ERROR_TYPES
);
function javascript(hljs) {
  const regex = hljs.regex;
  const hasClosingTag = (match, { after }) => {
    const tag = "</" + match[0].slice(1);
    const pos = match.input.indexOf(tag, after);
    return pos !== -1;
  };
  const IDENT_RE$12 = IDENT_RE;
  const FRAGMENT = {
    begin: "<>",
    end: "</>"
  };
  const XML_SELF_CLOSING = /<[A-Za-z0-9\\._:-]+\s*\/>/;
  const XML_TAG = {
    begin: /<[A-Za-z0-9\\._:-]+/,
    end: /\/[A-Za-z0-9\\._:-]+>|\/>/,
    /**
     * @param {RegExpMatchArray} match
     * @param {CallbackResponse} response
     */
    isTrulyOpeningTag: (match, response) => {
      const afterMatchIndex = match[0].length + match.index;
      const nextChar = match.input[afterMatchIndex];
      if (
        // HTML should not include another raw `<` inside a tag
        // nested type?
        // `<Array<Array<number>>`, etc.
        nextChar === "<" || // the , gives away that this is not HTML
        // `<T, A extends keyof T, V>`
        nextChar === ","
      ) {
        response.ignoreMatch();
        return;
      }
      if (nextChar === ">") {
        if (!hasClosingTag(match, { after: afterMatchIndex })) {
          response.ignoreMatch();
        }
      }
      let m2;
      const afterMatch = match.input.substring(afterMatchIndex);
      if (m2 = afterMatch.match(/^\s*=/)) {
        response.ignoreMatch();
        return;
      }
      if (m2 = afterMatch.match(/^\s+extends\s+/)) {
        if (m2.index === 0) {
          response.ignoreMatch();
          return;
        }
      }
    }
  };
  const KEYWORDS$12 = {
    $pattern: IDENT_RE,
    keyword: KEYWORDS,
    literal: LITERALS,
    built_in: BUILT_INS,
    "variable.language": BUILT_IN_VARIABLES
  };
  const decimalDigits2 = "[0-9](_?[0-9])*";
  const frac2 = `\\.(${decimalDigits2})`;
  const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;
  const NUMBER = {
    className: "number",
    variants: [
      // DecimalLiteral
      { begin: `(\\b(${decimalInteger})((${frac2})|\\.)?|(${frac2}))[eE][+-]?(${decimalDigits2})\\b` },
      { begin: `\\b(${decimalInteger})\\b((${frac2})\\b|\\.)?|(${frac2})\\b` },
      // DecimalBigIntegerLiteral
      { begin: `\\b(0|[1-9](_?[0-9])*)n\\b` },
      // NonDecimalIntegerLiteral
      { begin: "\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b" },
      { begin: "\\b0[bB][0-1](_?[0-1])*n?\\b" },
      { begin: "\\b0[oO][0-7](_?[0-7])*n?\\b" },
      // LegacyOctalIntegerLiteral (does not include underscore separators)
      // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals
      { begin: "\\b0[0-7]+n?\\b" }
    ],
    relevance: 0
  };
  const SUBST = {
    className: "subst",
    begin: "\\$\\{",
    end: "\\}",
    keywords: KEYWORDS$12,
    contains: []
    // defined later
  };
  const HTML_TEMPLATE = {
    begin: ".?html`",
    end: "",
    starts: {
      end: "`",
      returnEnd: false,
      contains: [
        hljs.BACKSLASH_ESCAPE,
        SUBST
      ],
      subLanguage: "xml"
    }
  };
  const CSS_TEMPLATE = {
    begin: ".?css`",
    end: "",
    starts: {
      end: "`",
      returnEnd: false,
      contains: [
        hljs.BACKSLASH_ESCAPE,
        SUBST
      ],
      subLanguage: "css"
    }
  };
  const GRAPHQL_TEMPLATE = {
    begin: ".?gql`",
    end: "",
    starts: {
      end: "`",
      returnEnd: false,
      contains: [
        hljs.BACKSLASH_ESCAPE,
        SUBST
      ],
      subLanguage: "graphql"
    }
  };
  const TEMPLATE_STRING = {
    className: "string",
    begin: "`",
    end: "`",
    contains: [
      hljs.BACKSLASH_ESCAPE,
      SUBST
    ]
  };
  const JSDOC_COMMENT = hljs.COMMENT(
    /\/\*\*(?!\/)/,
    "\\*/",
    {
      relevance: 0,
      contains: [
        {
          begin: "(?=@[A-Za-z]+)",
          relevance: 0,
          contains: [
            {
              className: "doctag",
              begin: "@[A-Za-z]+"
            },
            {
              className: "type",
              begin: "\\{",
              end: "\\}",
              excludeEnd: true,
              excludeBegin: true,
              relevance: 0
            },
            {
              className: "variable",
              begin: IDENT_RE$12 + "(?=\\s*(-)|$)",
              endsParent: true,
              relevance: 0
            },
            // eat spaces (not newlines) so we can find
            // types or variables
            {
              begin: /(?=[^\n])\s/,
              relevance: 0
            }
          ]
        }
      ]
    }
  );
  const COMMENT = {
    className: "comment",
    variants: [
      JSDOC_COMMENT,
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.C_LINE_COMMENT_MODE
    ]
  };
  const SUBST_INTERNALS = [
    hljs.APOS_STRING_MODE,
    hljs.QUOTE_STRING_MODE,
    HTML_TEMPLATE,
    CSS_TEMPLATE,
    GRAPHQL_TEMPLATE,
    TEMPLATE_STRING,
    // Skip numbers when they are part of a variable name
    { match: /\$\d+/ },
    NUMBER
    // This is intentional:
    // See https://github.com/highlightjs/highlight.js/issues/3288
    // hljs.REGEXP_MODE
  ];
  SUBST.contains = SUBST_INTERNALS.concat({
    // we need to pair up {} inside our subst to prevent
    // it from ending too early by matching another }
    begin: /\{/,
    end: /\}/,
    keywords: KEYWORDS$12,
    contains: [
      "self"
    ].concat(SUBST_INTERNALS)
  });
  const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);
  const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([
    // eat recursive parens in sub expressions
    {
      begin: /(\s*)\(/,
      end: /\)/,
      keywords: KEYWORDS$12,
      contains: ["self"].concat(SUBST_AND_COMMENTS)
    }
  ]);
  const PARAMS = {
    className: "params",
    // convert this to negative lookbehind in v12
    begin: /(\s*)\(/,
    // to match the parms with
    end: /\)/,
    excludeBegin: true,
    excludeEnd: true,
    keywords: KEYWORDS$12,
    contains: PARAMS_CONTAINS
  };
  const CLASS_OR_EXTENDS = {
    variants: [
      // class Car extends vehicle
      {
        match: [
          /class/,
          /\s+/,
          IDENT_RE$12,
          /\s+/,
          /extends/,
          /\s+/,
          regex.concat(IDENT_RE$12, "(", regex.concat(/\./, IDENT_RE$12), ")*")
        ],
        scope: {
          1: "keyword",
          3: "title.class",
          5: "keyword",
          7: "title.class.inherited"
        }
      },
      // class Car
      {
        match: [
          /class/,
          /\s+/,
          IDENT_RE$12
        ],
        scope: {
          1: "keyword",
          3: "title.class"
        }
      }
    ]
  };
  const CLASS_REFERENCE = {
    relevance: 0,
    match: regex.either(
      // Hard coded exceptions
      /\bJSON/,
      // Float32Array, OutT
      /\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,
      // CSSFactory, CSSFactoryT
      /\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,
      // FPs, FPsT
      /\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/
      // P
      // single letters are not highlighted
      // BLAH
      // this will be flagged as a UPPER_CASE_CONSTANT instead
    ),
    className: "title.class",
    keywords: {
      _: [
        // se we still get relevance credit for JS library classes
        ...TYPES,
        ...ERROR_TYPES
      ]
    }
  };
  const USE_STRICT = {
    label: "use_strict",
    className: "meta",
    relevance: 10,
    begin: /^\s*['"]use (strict|asm)['"]/
  };
  const FUNCTION_DEFINITION = {
    variants: [
      {
        match: [
          /function/,
          /\s+/,
          IDENT_RE$12,
          /(?=\s*\()/
        ]
      },
      // anonymous function
      {
        match: [
          /function/,
          /\s*(?=\()/
        ]
      }
    ],
    className: {
      1: "keyword",
      3: "title.function"
    },
    label: "func.def",
    contains: [PARAMS],
    illegal: /%/
  };
  const UPPER_CASE_CONSTANT = {
    relevance: 0,
    match: /\b[A-Z][A-Z_0-9]+\b/,
    className: "variable.constant"
  };
  function noneOf(list) {
    return regex.concat("(?!", list.join("|"), ")");
  }
  const FUNCTION_CALL = {
    match: regex.concat(
      /\b/,
      noneOf([
        ...BUILT_IN_GLOBALS,
        "super",
        "import"
      ].map((x2) => `${x2}\\s*\\(`)),
      IDENT_RE$12,
      regex.lookahead(/\s*\(/)
    ),
    className: "title.function",
    relevance: 0
  };
  const PROPERTY_ACCESS = {
    begin: regex.concat(/\./, regex.lookahead(
      regex.concat(IDENT_RE$12, /(?![0-9A-Za-z$_(])/)
    )),
    end: IDENT_RE$12,
    excludeBegin: true,
    keywords: "prototype",
    className: "property",
    relevance: 0
  };
  const GETTER_OR_SETTER = {
    match: [
      /get|set/,
      /\s+/,
      IDENT_RE$12,
      /(?=\()/
    ],
    className: {
      1: "keyword",
      3: "title.function"
    },
    contains: [
      {
        // eat to avoid empty params
        begin: /\(\)/
      },
      PARAMS
    ]
  };
  const FUNC_LEAD_IN_RE = "(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|" + hljs.UNDERSCORE_IDENT_RE + ")\\s*=>";
  const FUNCTION_VARIABLE = {
    match: [
      /const|var|let/,
      /\s+/,
      IDENT_RE$12,
      /\s*/,
      /=\s*/,
      /(async\s*)?/,
      // async is optional
      regex.lookahead(FUNC_LEAD_IN_RE)
    ],
    keywords: "async",
    className: {
      1: "keyword",
      3: "title.function"
    },
    contains: [
      PARAMS
    ]
  };
  return {
    name: "JavaScript",
    aliases: ["js", "jsx", "mjs", "cjs"],
    keywords: KEYWORDS$12,
    // this will be extended by TypeScript
    exports: { PARAMS_CONTAINS, CLASS_REFERENCE },
    illegal: /#(?![$_A-z])/,
    contains: [
      hljs.SHEBANG({
        label: "shebang",
        binary: "node",
        relevance: 5
      }),
      USE_STRICT,
      hljs.APOS_STRING_MODE,
      hljs.QUOTE_STRING_MODE,
      HTML_TEMPLATE,
      CSS_TEMPLATE,
      GRAPHQL_TEMPLATE,
      TEMPLATE_STRING,
      COMMENT,
      // Skip numbers when they are part of a variable name
      { match: /\$\d+/ },
      NUMBER,
      CLASS_REFERENCE,
      {
        scope: "attr",
        match: IDENT_RE$12 + regex.lookahead(":"),
        relevance: 0
      },
      FUNCTION_VARIABLE,
      {
        // "value" container
        begin: "(" + hljs.RE_STARTERS_RE + "|\\b(case|return|throw)\\b)\\s*",
        keywords: "return throw case",
        relevance: 0,
        contains: [
          COMMENT,
          hljs.REGEXP_MODE,
          {
            className: "function",
            // we have to count the parens to make sure we actually have the
            // correct bounding ( ) before the =>.  There could be any number of
            // sub-expressions inside also surrounded by parens.
            begin: FUNC_LEAD_IN_RE,
            returnBegin: true,
            end: "\\s*=>",
            contains: [
              {
                className: "params",
                variants: [
                  {
                    begin: hljs.UNDERSCORE_IDENT_RE,
                    relevance: 0
                  },
                  {
                    className: null,
                    begin: /\(\s*\)/,
                    skip: true
                  },
                  {
                    begin: /(\s*)\(/,
                    end: /\)/,
                    excludeBegin: true,
                    excludeEnd: true,
                    keywords: KEYWORDS$12,
                    contains: PARAMS_CONTAINS
                  }
                ]
              }
            ]
          },
          {
            // could be a comma delimited list of params to a function call
            begin: /,/,
            relevance: 0
          },
          {
            match: /\s+/,
            relevance: 0
          },
          {
            // JSX
            variants: [
              { begin: FRAGMENT.begin, end: FRAGMENT.end },
              { match: XML_SELF_CLOSING },
              {
                begin: XML_TAG.begin,
                // we carefully check the opening tag to see if it truly
                // is a tag and not a false positive
                "on:begin": XML_TAG.isTrulyOpeningTag,
                end: XML_TAG.end
              }
            ],
            subLanguage: "xml",
            contains: [
              {
                begin: XML_TAG.begin,
                end: XML_TAG.end,
                skip: true,
                contains: ["self"]
              }
            ]
          }
        ]
      },
      FUNCTION_DEFINITION,
      {
        // prevent this from getting swallowed up by function
        // since they appear "function like"
        beginKeywords: "while if switch catch for"
      },
      {
        // we have to count the parens to make sure we actually have the correct
        // bounding ( ).  There could be any number of sub-expressions inside
        // also surrounded by parens.
        begin: "\\b(?!function)" + hljs.UNDERSCORE_IDENT_RE + "\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",
        // end parens
        returnBegin: true,
        label: "func.def",
        contains: [
          PARAMS,
          hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$12, className: "title.function" })
        ]
      },
      // catch ... so it won't trigger the property rule below
      {
        match: /\.\.\./,
        relevance: 0
      },
      PROPERTY_ACCESS,
      // hack: prevents detection of keywords in some circumstances
      // .keyword()
      // $keyword = x
      {
        match: "\\$" + IDENT_RE$12,
        relevance: 0
      },
      {
        match: [/\bconstructor(?=\s*\()/],
        className: { 1: "title.function" },
        contains: [PARAMS]
      },
      FUNCTION_CALL,
      UPPER_CASE_CONSTANT,
      CLASS_OR_EXTENDS,
      GETTER_OR_SETTER,
      {
        match: /\$[(.]/
        // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`
      }
    ]
  };
}
function typescript(hljs) {
  const regex = hljs.regex;
  const tsLanguage = javascript(hljs);
  const IDENT_RE$12 = IDENT_RE;
  const TYPES2 = [
    "any",
    "void",
    "number",
    "boolean",
    "string",
    "object",
    "never",
    "symbol",
    "bigint",
    "unknown"
  ];
  const NAMESPACE = {
    begin: [
      /namespace/,
      /\s+/,
      hljs.IDENT_RE
    ],
    beginScope: {
      1: "keyword",
      3: "title.class"
    }
  };
  const INTERFACE = {
    beginKeywords: "interface",
    end: /\{/,
    excludeEnd: true,
    keywords: {
      keyword: "interface extends",
      built_in: TYPES2
    },
    contains: [tsLanguage.exports.CLASS_REFERENCE]
  };
  const USE_STRICT = {
    className: "meta",
    relevance: 10,
    begin: /^\s*['"]use strict['"]/
  };
  const TS_SPECIFIC_KEYWORDS = [
    "type",
    // "namespace",
    "interface",
    "public",
    "private",
    "protected",
    "implements",
    "declare",
    "abstract",
    "readonly",
    "enum",
    "override",
    "satisfies"
  ];
  const KEYWORDS$12 = {
    $pattern: IDENT_RE,
    keyword: KEYWORDS.concat(TS_SPECIFIC_KEYWORDS),
    literal: LITERALS,
    built_in: BUILT_INS.concat(TYPES2),
    "variable.language": BUILT_IN_VARIABLES
  };
  const DECORATOR = {
    className: "meta",
    begin: "@" + IDENT_RE$12
  };
  const swapMode = (mode, label, replacement) => {
    const indx = mode.contains.findIndex((m2) => m2.label === label);
    if (indx === -1) {
      throw new Error("can not find mode to replace");
    }
    mode.contains.splice(indx, 1, replacement);
  };
  Object.assign(tsLanguage.keywords, KEYWORDS$12);
  tsLanguage.exports.PARAMS_CONTAINS.push(DECORATOR);
  const ATTRIBUTE_HIGHLIGHT = tsLanguage.contains.find((c2) => c2.scope === "attr");
  const OPTIONAL_KEY_OR_ARGUMENT = Object.assign(
    {},
    ATTRIBUTE_HIGHLIGHT,
    { match: regex.concat(IDENT_RE$12, regex.lookahead(/\s*\?:/)) }
  );
  tsLanguage.exports.PARAMS_CONTAINS.push([
    tsLanguage.exports.CLASS_REFERENCE,
    // class reference for highlighting the params types
    ATTRIBUTE_HIGHLIGHT,
    // highlight the params key
    OPTIONAL_KEY_OR_ARGUMENT
    // Added for optional property assignment highlighting
  ]);
  tsLanguage.contains = tsLanguage.contains.concat([
    DECORATOR,
    NAMESPACE,
    INTERFACE,
    OPTIONAL_KEY_OR_ARGUMENT
    // Added for optional property assignment highlighting
  ]);
  swapMode(tsLanguage, "shebang", hljs.SHEBANG());
  swapMode(tsLanguage, "use_strict", USE_STRICT);
  const functionDeclaration = tsLanguage.contains.find((m2) => m2.label === "func.def");
  functionDeclaration.relevance = 0;
  Object.assign(tsLanguage, {
    name: "TypeScript",
    aliases: [
      "ts",
      "tsx",
      "mts",
      "cts"
    ]
  });
  return tsLanguage;
}
function vbnet(hljs) {
  const regex = hljs.regex;
  const CHARACTER = {
    className: "string",
    begin: /"(""|[^/n])"C\b/
  };
  const STRING = {
    className: "string",
    begin: /"/,
    end: /"/,
    illegal: /\n/,
    contains: [
      {
        // double quote escape
        begin: /""/
      }
    ]
  };
  const MM_DD_YYYY = /\d{1,2}\/\d{1,2}\/\d{4}/;
  const YYYY_MM_DD = /\d{4}-\d{1,2}-\d{1,2}/;
  const TIME_12H = /(\d|1[012])(:\d+){0,2} *(AM|PM)/;
  const TIME_24H = /\d{1,2}(:\d{1,2}){1,2}/;
  const DATE = {
    className: "literal",
    variants: [
      {
        // #YYYY-MM-DD# (ISO-Date) or #M/D/YYYY# (US-Date)
        begin: regex.concat(/# */, regex.either(YYYY_MM_DD, MM_DD_YYYY), / *#/)
      },
      {
        // #H:mm[:ss]# (24h Time)
        begin: regex.concat(/# */, TIME_24H, / *#/)
      },
      {
        // #h[:mm[:ss]] A# (12h Time)
        begin: regex.concat(/# */, TIME_12H, / *#/)
      },
      {
        // date plus time
        begin: regex.concat(
          /# */,
          regex.either(YYYY_MM_DD, MM_DD_YYYY),
          / +/,
          regex.either(TIME_12H, TIME_24H),
          / *#/
        )
      }
    ]
  };
  const NUMBER = {
    className: "number",
    relevance: 0,
    variants: [
      {
        // Float
        begin: /\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/
      },
      {
        // Integer (base 10)
        begin: /\b\d[\d_]*((U?[SIL])|[%&])?/
      },
      {
        // Integer (base 16)
        begin: /&H[\dA-F_]+((U?[SIL])|[%&])?/
      },
      {
        // Integer (base 8)
        begin: /&O[0-7_]+((U?[SIL])|[%&])?/
      },
      {
        // Integer (base 2)
        begin: /&B[01_]+((U?[SIL])|[%&])?/
      }
    ]
  };
  const LABEL = {
    className: "label",
    begin: /^\w+:/
  };
  const DOC_COMMENT = hljs.COMMENT(/'''/, /$/, { contains: [
    {
      className: "doctag",
      begin: /<\/?/,
      end: />/
    }
  ] });
  const COMMENT = hljs.COMMENT(null, /$/, { variants: [
    { begin: /'/ },
    {
      // TODO: Use multi-class for leading spaces
      begin: /([\t ]|^)REM(?=\s)/
    }
  ] });
  const DIRECTIVES = {
    className: "meta",
    // TODO: Use multi-class for indentation once available
    begin: /[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/,
    end: /$/,
    keywords: { keyword: "const disable else elseif enable end externalsource if region then" },
    contains: [COMMENT]
  };
  return {
    name: "Visual Basic .NET",
    aliases: ["vb"],
    case_insensitive: true,
    classNameAliases: { label: "symbol" },
    keywords: {
      keyword: "addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield",
      built_in: (
        // Operators https://docs.microsoft.com/dotnet/visual-basic/language-reference/operators
        "addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort"
      ),
      type: (
        // Data types https://docs.microsoft.com/dotnet/visual-basic/language-reference/data-types
        "boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort"
      ),
      literal: "true false nothing"
    },
    illegal: "//|\\{|\\}|endif|gosub|variant|wend|^\\$ ",
    contains: [
      CHARACTER,
      STRING,
      DATE,
      NUMBER,
      LABEL,
      DOC_COMMENT,
      COMMENT,
      DIRECTIVES
    ]
  };
}
function wasm(hljs) {
  hljs.regex;
  const BLOCK_COMMENT = hljs.COMMENT(/\(;/, /;\)/);
  BLOCK_COMMENT.contains.push("self");
  const LINE_COMMENT = hljs.COMMENT(/;;/, /$/);
  const KWS = [
    "anyfunc",
    "block",
    "br",
    "br_if",
    "br_table",
    "call",
    "call_indirect",
    "data",
    "drop",
    "elem",
    "else",
    "end",
    "export",
    "func",
    "global.get",
    "global.set",
    "local.get",
    "local.set",
    "local.tee",
    "get_global",
    "get_local",
    "global",
    "if",
    "import",
    "local",
    "loop",
    "memory",
    "memory.grow",
    "memory.size",
    "module",
    "mut",
    "nop",
    "offset",
    "param",
    "result",
    "return",
    "select",
    "set_global",
    "set_local",
    "start",
    "table",
    "tee_local",
    "then",
    "type",
    "unreachable"
  ];
  const FUNCTION_REFERENCE = {
    begin: [
      /(?:func|call|call_indirect)/,
      /\s+/,
      /\$[^\s)]+/
    ],
    className: {
      1: "keyword",
      3: "title.function"
    }
  };
  const ARGUMENT = {
    className: "variable",
    begin: /\$[\w_]+/
  };
  const PARENS = {
    match: /(\((?!;)|\))+/,
    className: "punctuation",
    relevance: 0
  };
  const NUMBER = {
    className: "number",
    relevance: 0,
    // borrowed from Prism, TODO: split out into variants
    match: /[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/
  };
  const TYPE = {
    // look-ahead prevents us from gobbling up opcodes
    match: /(i32|i64|f32|f64)(?!\.)/,
    className: "type"
  };
  const MATH_OPERATIONS = {
    className: "keyword",
    // borrowed from Prism, TODO: split out into variants
    match: /\b(f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))\b/
  };
  const OFFSET_ALIGN = {
    match: [
      /(?:offset|align)/,
      /\s*/,
      /=/
    ],
    className: {
      1: "keyword",
      3: "operator"
    }
  };
  return {
    name: "WebAssembly",
    keywords: {
      $pattern: /[\w.]+/,
      keyword: KWS
    },
    contains: [
      LINE_COMMENT,
      BLOCK_COMMENT,
      OFFSET_ALIGN,
      ARGUMENT,
      PARENS,
      FUNCTION_REFERENCE,
      hljs.QUOTE_STRING_MODE,
      TYPE,
      MATH_OPERATIONS,
      NUMBER
    ]
  };
}
function xml(hljs) {
  const regex = hljs.regex;
  const TAG_NAME_RE = regex.concat(/[\p{L}_]/u, regex.optional(/[\p{L}0-9_.-]*:/u), /[\p{L}0-9_.-]*/u);
  const XML_IDENT_RE = /[\p{L}0-9._:-]+/u;
  const XML_ENTITIES = {
    className: "symbol",
    begin: /&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/
  };
  const XML_META_KEYWORDS = {
    begin: /\s/,
    contains: [
      {
        className: "keyword",
        begin: /#?[a-z_][a-z1-9_-]+/,
        illegal: /\n/
      }
    ]
  };
  const XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, {
    begin: /\(/,
    end: /\)/
  });
  const APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, { className: "string" });
  const QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, { className: "string" });
  const TAG_INTERNALS = {
    endsWithParent: true,
    illegal: /</,
    relevance: 0,
    contains: [
      {
        className: "attr",
        begin: XML_IDENT_RE,
        relevance: 0
      },
      {
        begin: /=\s*/,
        relevance: 0,
        contains: [
          {
            className: "string",
            endsParent: true,
            variants: [
              {
                begin: /"/,
                end: /"/,
                contains: [XML_ENTITIES]
              },
              {
                begin: /'/,
                end: /'/,
                contains: [XML_ENTITIES]
              },
              { begin: /[^\s"'=<>`]+/ }
            ]
          }
        ]
      }
    ]
  };
  return {
    name: "HTML, XML",
    aliases: [
      "html",
      "xhtml",
      "rss",
      "atom",
      "xjb",
      "xsd",
      "xsl",
      "plist",
      "wsf",
      "svg"
    ],
    case_insensitive: true,
    unicodeRegex: true,
    contains: [
      {
        className: "meta",
        begin: /<![a-z]/,
        end: />/,
        relevance: 10,
        contains: [
          XML_META_KEYWORDS,
          QUOTE_META_STRING_MODE,
          APOS_META_STRING_MODE,
          XML_META_PAR_KEYWORDS,
          {
            begin: /\[/,
            end: /\]/,
            contains: [
              {
                className: "meta",
                begin: /<![a-z]/,
                end: />/,
                contains: [
                  XML_META_KEYWORDS,
                  XML_META_PAR_KEYWORDS,
                  QUOTE_META_STRING_MODE,
                  APOS_META_STRING_MODE
                ]
              }
            ]
          }
        ]
      },
      hljs.COMMENT(
        /<!--/,
        /-->/,
        { relevance: 10 }
      ),
      {
        begin: /<!\[CDATA\[/,
        end: /\]\]>/,
        relevance: 10
      },
      XML_ENTITIES,
      // xml processing instructions
      {
        className: "meta",
        end: /\?>/,
        variants: [
          {
            begin: /<\?xml/,
            relevance: 10,
            contains: [
              QUOTE_META_STRING_MODE
            ]
          },
          {
            begin: /<\?[a-z][a-z0-9]+/
          }
        ]
      },
      {
        className: "tag",
        /*
        The lookahead pattern (?=...) ensures that 'begin' only matches
        '<style' as a single word, followed by a whitespace or an
        ending bracket.
        */
        begin: /<style(?=\s|>)/,
        end: />/,
        keywords: { name: "style" },
        contains: [TAG_INTERNALS],
        starts: {
          end: /<\/style>/,
          returnEnd: true,
          subLanguage: [
            "css",
            "xml"
          ]
        }
      },
      {
        className: "tag",
        // See the comment in the <style tag about the lookahead pattern
        begin: /<script(?=\s|>)/,
        end: />/,
        keywords: { name: "script" },
        contains: [TAG_INTERNALS],
        starts: {
          end: /<\/script>/,
          returnEnd: true,
          subLanguage: [
            "javascript",
            "handlebars",
            "xml"
          ]
        }
      },
      // we need this for now for jSX
      {
        className: "tag",
        begin: /<>|<\/>/
      },
      // open tag
      {
        className: "tag",
        begin: regex.concat(
          /</,
          regex.lookahead(regex.concat(
            TAG_NAME_RE,
            // <tag/>
            // <tag>
            // <tag ...
            regex.either(/\/>/, />/, /\s/)
          ))
        ),
        end: /\/?>/,
        contains: [
          {
            className: "name",
            begin: TAG_NAME_RE,
            relevance: 0,
            starts: TAG_INTERNALS
          }
        ]
      },
      // close tag
      {
        className: "tag",
        begin: regex.concat(
          /<\//,
          regex.lookahead(regex.concat(
            TAG_NAME_RE,
            />/
          ))
        ),
        contains: [
          {
            className: "name",
            begin: TAG_NAME_RE,
            relevance: 0
          },
          {
            begin: />/,
            relevance: 0,
            endsParent: true
          }
        ]
      }
    ]
  };
}
function yaml(hljs) {
  const LITERALS2 = "true false yes no null";
  const URI_CHARACTERS = "[\\w#;/?:@&=+$,.~*'()[\\]]+";
  const KEY = {
    className: "attr",
    variants: [
      // added brackets support and special char support
      { begin: /[\w*@][\w*@ :()\./-]*:(?=[ \t]|$)/ },
      {
        // double quoted keys - with brackets and special char support
        begin: /"[\w*@][\w*@ :()\./-]*":(?=[ \t]|$)/
      },
      {
        // single quoted keys - with brackets and special char support
        begin: /'[\w*@][\w*@ :()\./-]*':(?=[ \t]|$)/
      }
    ]
  };
  const TEMPLATE_VARIABLES = {
    className: "template-variable",
    variants: [
      {
        // jinja templates Ansible
        begin: /\{\{/,
        end: /\}\}/
      },
      {
        // Ruby i18n
        begin: /%\{/,
        end: /\}/
      }
    ]
  };
  const SINGLE_QUOTE_STRING = {
    className: "string",
    relevance: 0,
    begin: /'/,
    end: /'/,
    contains: [
      {
        match: /''/,
        scope: "char.escape",
        relevance: 0
      }
    ]
  };
  const STRING = {
    className: "string",
    relevance: 0,
    variants: [
      {
        begin: /"/,
        end: /"/
      },
      { begin: /\S+/ }
    ],
    contains: [
      hljs.BACKSLASH_ESCAPE,
      TEMPLATE_VARIABLES
    ]
  };
  const CONTAINER_STRING = hljs.inherit(STRING, { variants: [
    {
      begin: /'/,
      end: /'/,
      contains: [
        {
          begin: /''/,
          relevance: 0
        }
      ]
    },
    {
      begin: /"/,
      end: /"/
    },
    { begin: /[^\s,{}[\]]+/ }
  ] });
  const DATE_RE = "[0-9]{4}(-[0-9][0-9]){0,2}";
  const TIME_RE = "([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?";
  const FRACTION_RE = "(\\.[0-9]*)?";
  const ZONE_RE = "([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?";
  const TIMESTAMP = {
    className: "number",
    begin: "\\b" + DATE_RE + TIME_RE + FRACTION_RE + ZONE_RE + "\\b"
  };
  const VALUE_CONTAINER = {
    end: ",",
    endsWithParent: true,
    excludeEnd: true,
    keywords: LITERALS2,
    relevance: 0
  };
  const OBJECT = {
    begin: /\{/,
    end: /\}/,
    contains: [VALUE_CONTAINER],
    illegal: "\\n",
    relevance: 0
  };
  const ARRAY = {
    begin: "\\[",
    end: "\\]",
    contains: [VALUE_CONTAINER],
    illegal: "\\n",
    relevance: 0
  };
  const MODES2 = [
    KEY,
    {
      className: "meta",
      begin: "^---\\s*$",
      relevance: 10
    },
    {
      // multi line string
      // Blocks start with a | or > followed by a newline
      //
      // Indentation of subsequent lines must be the same to
      // be considered part of the block
      className: "string",
      begin: "[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"
    },
    {
      // Ruby/Rails erb
      begin: "<%[%=-]?",
      end: "[%-]?%>",
      subLanguage: "ruby",
      excludeBegin: true,
      excludeEnd: true,
      relevance: 0
    },
    {
      // named tags
      className: "type",
      begin: "!\\w+!" + URI_CHARACTERS
    },
    // https://yaml.org/spec/1.2/spec.html#id2784064
    {
      // verbatim tags
      className: "type",
      begin: "!<" + URI_CHARACTERS + ">"
    },
    {
      // primary tags
      className: "type",
      begin: "!" + URI_CHARACTERS
    },
    {
      // secondary tags
      className: "type",
      begin: "!!" + URI_CHARACTERS
    },
    {
      // fragment id &ref
      className: "meta",
      begin: "&" + hljs.UNDERSCORE_IDENT_RE + "$"
    },
    {
      // fragment reference *ref
      className: "meta",
      begin: "\\*" + hljs.UNDERSCORE_IDENT_RE + "$"
    },
    {
      // array listing
      className: "bullet",
      // TODO: remove |$ hack when we have proper look-ahead support
      begin: "-(?=[ ]|$)",
      relevance: 0
    },
    hljs.HASH_COMMENT_MODE,
    {
      beginKeywords: LITERALS2,
      keywords: { literal: LITERALS2 }
    },
    TIMESTAMP,
    // numbers are any valid C-style number that
    // sit isolated from other words
    {
      className: "number",
      begin: hljs.C_NUMBER_RE + "\\b",
      relevance: 0
    },
    OBJECT,
    ARRAY,
    SINGLE_QUOTE_STRING,
    STRING
  ];
  const VALUE_MODES = [...MODES2];
  VALUE_MODES.pop();
  VALUE_MODES.push(CONTAINER_STRING);
  VALUE_CONTAINER.contains = VALUE_MODES;
  return {
    name: "YAML",
    case_insensitive: true,
    aliases: ["yml"],
    contains: MODES2
  };
}
const grammars$1 = {
  arduino,
  bash,
  c,
  cpp,
  csharp,
  css,
  diff,
  go,
  graphql,
  ini,
  java,
  javascript: javascript$1,
  json,
  kotlin,
  less,
  lua,
  makefile,
  markdown,
  objectivec,
  perl,
  php,
  "php-template": phpTemplate,
  plaintext,
  python,
  "python-repl": pythonRepl,
  r,
  ruby,
  rust,
  scss,
  shell,
  sql,
  swift,
  typescript,
  vbnet,
  wasm,
  xml,
  yaml
};
const grammars = {
  ...grammars$1,
  "1c": _1c,
  abnf,
  accesslog,
  actionscript,
  ada,
  angelscript,
  apache,
  applescript,
  arcade,
  armasm,
  asciidoc,
  aspectj,
  autohotkey,
  autoit,
  avrasm,
  awk,
  axapta,
  basic,
  bnf,
  brainfuck,
  cal,
  capnproto,
  ceylon,
  clean,
  clojure,
  "clojure-repl": clojureRepl,
  cmake,
  coffeescript,
  coq,
  cos,
  crmsh,
  crystal,
  csp,
  d,
  dart,
  delphi,
  django,
  dns,
  dockerfile,
  dos,
  dsconfig,
  dts,
  dust,
  ebnf,
  elixir,
  elm,
  erb,
  erlang,
  "erlang-repl": erlangRepl,
  excel,
  fix,
  flix,
  fortran,
  fsharp,
  gams,
  gauss,
  gcode,
  gherkin,
  glsl,
  gml,
  golo,
  gradle,
  groovy,
  haml,
  handlebars,
  haskell,
  haxe,
  hsp,
  http,
  hy,
  inform7,
  irpf90,
  isbl,
  "jboss-cli": jbossCli,
  julia,
  "julia-repl": juliaRepl,
  lasso,
  latex,
  ldif,
  leaf,
  lisp,
  livecodeserver,
  livescript,
  llvm,
  lsl,
  mathematica,
  matlab,
  maxima,
  mel,
  mercury,
  mipsasm,
  mizar,
  mojolicious,
  monkey,
  moonscript,
  n1ql,
  nestedtext,
  nginx,
  nim,
  nix,
  "node-repl": nodeRepl,
  nsis,
  ocaml,
  openscad,
  oxygene,
  parser3,
  pf,
  pgsql,
  pony,
  powershell,
  processing,
  profile,
  prolog,
  properties,
  protobuf,
  puppet,
  purebasic,
  q,
  qml,
  reasonml,
  rib,
  roboconf,
  routeros,
  rsl,
  ruleslanguage,
  sas,
  scala,
  scheme: scheme$1,
  scilab,
  smali,
  smalltalk,
  sml,
  sqf,
  stan,
  stata,
  step21,
  stylus,
  subunit,
  taggerscript,
  tap,
  tcl,
  thrift,
  tp,
  twig,
  vala,
  vbscript,
  "vbscript-html": vbscriptHtml,
  verilog,
  vhdl,
  vim,
  wren,
  x86asm,
  xl,
  xquery,
  zephir
};
const emptyOptions = {};
const defaultPrefix = "hljs-";
function createLowlight(grammars2) {
  const high = HighlightJS.newInstance();
  if (grammars2) {
    register(grammars2);
  }
  return {
    highlight,
    highlightAuto,
    listLanguages,
    register,
    registerAlias,
    registered: registered2
  };
  function highlight(language, value, options) {
    const settings = options || emptyOptions;
    const prefix = typeof settings.prefix === "string" ? settings.prefix : defaultPrefix;
    if (!high.getLanguage(language)) {
      throw new Error("Unknown language: `" + language + "` is not registered");
    }
    high.configure({ __emitter: HastEmitter, classPrefix: prefix });
    const result = (
      /** @type {HighlightResult & {_emitter: HastEmitter}} */
      high.highlight(value, { ignoreIllegals: true, language })
    );
    if (result.errorRaised) {
      throw new Error("Could not highlight with `Highlight.js`", {
        cause: result.errorRaised
      });
    }
    const root = result._emitter.root;
    const data = (
      /** @type {RootData} */
      root.data
    );
    data.language = result.language;
    data.relevance = result.relevance;
    return root;
  }
  function highlightAuto(value, options) {
    const settings = options || emptyOptions;
    const subset = settings.subset || listLanguages();
    let index2 = -1;
    let relevance = 0;
    let result;
    while (++index2 < subset.length) {
      const name = subset[index2];
      if (!high.getLanguage(name)) continue;
      const current = highlight(name, value, options);
      if (current.data && current.data.relevance !== void 0 && current.data.relevance > relevance) {
        relevance = current.data.relevance;
        result = current;
      }
    }
    return result || {
      type: "root",
      children: [],
      data: { language: void 0, relevance }
    };
  }
  function listLanguages() {
    return high.listLanguages();
  }
  function register(grammarsOrName, grammar) {
    if (typeof grammarsOrName === "string") {
      high.registerLanguage(grammarsOrName, grammar);
    } else {
      let name;
      for (name in grammarsOrName) {
        if (Object.hasOwn(grammarsOrName, name)) {
          high.registerLanguage(name, grammarsOrName[name]);
        }
      }
    }
  }
  function registerAlias(aliasesOrName, alias) {
    if (typeof aliasesOrName === "string") {
      high.registerAliases(
        // Note: copy needed because hljs doesn’t accept readonly arrays yet.
        typeof alias === "string" ? alias : [...alias],
        { languageName: aliasesOrName }
      );
    } else {
      let key;
      for (key in aliasesOrName) {
        if (Object.hasOwn(aliasesOrName, key)) {
          const aliases = aliasesOrName[key];
          high.registerAliases(
            // Note: copy needed because hljs doesn’t accept readonly arrays yet.
            typeof aliases === "string" ? aliases : [...aliases],
            { languageName: key }
          );
        }
      }
    }
  }
  function registered2(aliasOrName) {
    return Boolean(high.getLanguage(aliasOrName));
  }
}
class HastEmitter {
  /**
   * @param {Readonly<HljsOptions>} options
   *   Configuration.
   * @returns
   *   Instance.
   */
  constructor(options) {
    this.options = options;
    this.root = {
      type: "root",
      children: [],
      data: { language: void 0, relevance: 0 }
    };
    this.stack = [this.root];
  }
  /**
   * @param {string} value
   *   Text to add.
   * @returns {undefined}
   *   Nothing.
   *
   */
  addText(value) {
    if (value === "") return;
    const current = this.stack[this.stack.length - 1];
    const tail = current.children[current.children.length - 1];
    if (tail && tail.type === "text") {
      tail.value += value;
    } else {
      current.children.push({ type: "text", value });
    }
  }
  /**
   *
   * @param {unknown} rawName
   *   Name to add.
   * @returns {undefined}
   *   Nothing.
   */
  startScope(rawName) {
    this.openNode(String(rawName));
  }
  /**
   * @returns {undefined}
   *   Nothing.
   */
  endScope() {
    this.closeNode();
  }
  /**
   * @param {HastEmitter} other
   *   Other emitter.
   * @param {string} name
   *   Name of the sublanguage.
   * @returns {undefined}
   *   Nothing.
   */
  __addSublanguage(other, name) {
    const current = this.stack[this.stack.length - 1];
    const results = (
      /** @type {Array<ElementContent>} */
      other.root.children
    );
    if (name) {
      current.children.push({
        type: "element",
        tagName: "span",
        properties: { className: [name] },
        children: results
      });
    } else {
      current.children.push(...results);
    }
  }
  /**
   * @param {string} name
   *   Name to add.
   * @returns {undefined}
   *   Nothing.
   */
  openNode(name) {
    const self2 = this;
    const className = name.split(".").map(function(d2, i) {
      return i ? d2 + "_".repeat(i) : self2.options.classPrefix + d2;
    });
    const current = this.stack[this.stack.length - 1];
    const child = {
      type: "element",
      tagName: "span",
      properties: { className },
      children: []
    };
    current.children.push(child);
    this.stack.push(child);
  }
  /**
   * @returns {undefined}
   *   Nothing.
   */
  closeNode() {
    this.stack.pop();
  }
  /**
   * @returns {undefined}
   *   Nothing.
   */
  finalize() {
  }
  /**
   * @returns {string}
   *   Nothing.
   */
  toHTML() {
    return "";
  }
}
var h = (tag, attributes) => {
  if (tag === "slot") {
    return 0;
  }
  if (tag instanceof Function) {
    return tag(attributes);
  }
  const { children, ...rest } = attributes != null ? attributes : {};
  if (tag === "svg") {
    throw new Error("SVG elements are not supported in the JSX syntax, use the array syntax instead");
  }
  return [tag, rest, children];
};
var inputRegex$2 = /^\s*>\s$/;
var Blockquote = Node3.create({
  name: "blockquote",
  addOptions() {
    return {
      HTMLAttributes: {}
    };
  },
  content: "block+",
  group: "block",
  defining: true,
  parseHTML() {
    return [{ tag: "blockquote" }];
  },
  renderHTML({ HTMLAttributes }) {
    return /* @__PURE__ */ h("blockquote", { ...mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), children: /* @__PURE__ */ h("slot", {}) });
  },
  parseMarkdown: (token2, helpers) => {
    return helpers.createNode("blockquote", void 0, helpers.parseChildren(token2.tokens || []));
  },
  renderMarkdown: (node, h2) => {
    if (!node.content) {
      return "";
    }
    const prefix = ">";
    const result = [];
    node.content.forEach((child) => {
      const childContent = h2.renderChildren([child]);
      const lines = childContent.split("\n");
      const linesWithPrefix = lines.map((line) => {
        if (line.trim() === "") {
          return prefix;
        }
        return `${prefix} ${line}`;
      });
      result.push(linesWithPrefix.join("\n"));
    });
    return result.join(`
${prefix}
`);
  },
  addCommands() {
    return {
      setBlockquote: () => ({ commands }) => {
        return commands.wrapIn(this.name);
      },
      toggleBlockquote: () => ({ commands }) => {
        return commands.toggleWrap(this.name);
      },
      unsetBlockquote: () => ({ commands }) => {
        return commands.lift(this.name);
      }
    };
  },
  addKeyboardShortcuts() {
    return {
      "Mod-Shift-b": () => this.editor.commands.toggleBlockquote()
    };
  },
  addInputRules() {
    return [
      wrappingInputRule({
        find: inputRegex$2,
        type: this.type
      })
    ];
  }
});
var starInputRegex$1 = /(?:^|\s)(\*\*(?!\s+\*\*)((?:[^*]+))\*\*(?!\s+\*\*))$/;
var starPasteRegex$1 = /(?:^|\s)(\*\*(?!\s+\*\*)((?:[^*]+))\*\*(?!\s+\*\*))/g;
var underscoreInputRegex$1 = /(?:^|\s)(__(?!\s+__)((?:[^_]+))__(?!\s+__))$/;
var underscorePasteRegex$1 = /(?:^|\s)(__(?!\s+__)((?:[^_]+))__(?!\s+__))/g;
var Bold = Mark2.create({
  name: "bold",
  addOptions() {
    return {
      HTMLAttributes: {}
    };
  },
  parseHTML() {
    return [
      {
        tag: "strong"
      },
      {
        tag: "b",
        getAttrs: (node) => node.style.fontWeight !== "normal" && null
      },
      {
        style: "font-weight=400",
        clearMark: (mark) => mark.type.name === this.name
      },
      {
        style: "font-weight",
        getAttrs: (value) => /^(bold(er)?|[5-9]\d{2,})$/.test(value) && null
      }
    ];
  },
  renderHTML({ HTMLAttributes }) {
    return /* @__PURE__ */ h("strong", { ...mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), children: /* @__PURE__ */ h("slot", {}) });
  },
  markdownTokenName: "strong",
  parseMarkdown: (token2, helpers) => {
    return helpers.applyMark("bold", helpers.parseInline(token2.tokens || []));
  },
  renderMarkdown: (node, h2) => {
    return `**${h2.renderChildren(node)}**`;
  },
  addCommands() {
    return {
      setBold: () => ({ commands }) => {
        return commands.setMark(this.name);
      },
      toggleBold: () => ({ commands }) => {
        return commands.toggleMark(this.name);
      },
      unsetBold: () => ({ commands }) => {
        return commands.unsetMark(this.name);
      }
    };
  },
  addKeyboardShortcuts() {
    return {
      "Mod-b": () => this.editor.commands.toggleBold(),
      "Mod-B": () => this.editor.commands.toggleBold()
    };
  },
  addInputRules() {
    return [
      markInputRule({
        find: starInputRegex$1,
        type: this.type
      }),
      markInputRule({
        find: underscoreInputRegex$1,
        type: this.type
      })
    ];
  },
  addPasteRules() {
    return [
      markPasteRule({
        find: starPasteRegex$1,
        type: this.type
      }),
      markPasteRule({
        find: underscorePasteRegex$1,
        type: this.type
      })
    ];
  }
});
var inputRegex$1 = /(^|[^`])`([^`]+)`(?!`)$/;
var pasteRegex$1 = /(^|[^`])`([^`]+)`(?!`)/g;
var Code = Mark2.create({
  name: "code",
  addOptions() {
    return {
      HTMLAttributes: {}
    };
  },
  excludes: "_",
  code: true,
  exitable: true,
  parseHTML() {
    return [{ tag: "code" }];
  },
  renderHTML({ HTMLAttributes }) {
    return ["code", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
  },
  markdownTokenName: "codespan",
  parseMarkdown: (token2, helpers) => {
    return helpers.applyMark("code", [{ type: "text", text: token2.text || "" }]);
  },
  renderMarkdown: (node, h2) => {
    if (!node.content) {
      return "";
    }
    return `\`${h2.renderChildren(node.content)}\``;
  },
  addCommands() {
    return {
      setCode: () => ({ commands }) => {
        return commands.setMark(this.name);
      },
      toggleCode: () => ({ commands }) => {
        return commands.toggleMark(this.name);
      },
      unsetCode: () => ({ commands }) => {
        return commands.unsetMark(this.name);
      }
    };
  },
  addKeyboardShortcuts() {
    return {
      "Mod-e": () => this.editor.commands.toggleCode()
    };
  },
  addInputRules() {
    return [
      markInputRule({
        find: inputRegex$1,
        type: this.type
      })
    ];
  },
  addPasteRules() {
    return [
      markPasteRule({
        find: pasteRegex$1,
        type: this.type
      })
    ];
  }
});
var HardBreak = Node3.create({
  name: "hardBreak",
  markdownTokenName: "br",
  addOptions() {
    return {
      keepMarks: true,
      HTMLAttributes: {}
    };
  },
  inline: true,
  group: "inline",
  selectable: false,
  linebreakReplacement: true,
  parseHTML() {
    return [{ tag: "br" }];
  },
  renderHTML({ HTMLAttributes }) {
    return ["br", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes)];
  },
  renderText() {
    return "\n";
  },
  renderMarkdown: () => `  
`,
  parseMarkdown: () => {
    return {
      type: "hardBreak"
    };
  },
  addCommands() {
    return {
      setHardBreak: () => ({ commands, chain, state, editor }) => {
        return commands.first([
          () => commands.exitCode(),
          () => commands.command(() => {
            const { selection, storedMarks } = state;
            if (selection.$from.parent.type.spec.isolating) {
              return false;
            }
            const { keepMarks } = this.options;
            const { splittableMarks } = editor.extensionManager;
            const marks = storedMarks || selection.$to.parentOffset && selection.$from.marks();
            return chain().insertContent({ type: this.name }).command(({ tr: tr2, dispatch }) => {
              if (dispatch && marks && keepMarks) {
                const filteredMarks = marks.filter((mark) => splittableMarks.includes(mark.type.name));
                tr2.ensureMarks(filteredMarks);
              }
              return true;
            }).run();
          })
        ]);
      }
    };
  },
  addKeyboardShortcuts() {
    return {
      "Mod-Enter": () => this.editor.commands.setHardBreak(),
      "Shift-Enter": () => this.editor.commands.setHardBreak()
    };
  }
});
var Heading = Node3.create({
  name: "heading",
  addOptions() {
    return {
      levels: [1, 2, 3, 4, 5, 6],
      HTMLAttributes: {}
    };
  },
  content: "inline*",
  group: "block",
  defining: true,
  addAttributes() {
    return {
      level: {
        default: 1,
        rendered: false
      }
    };
  },
  parseHTML() {
    return this.options.levels.map((level) => ({
      tag: `h${level}`,
      attrs: { level }
    }));
  },
  renderHTML({ node, HTMLAttributes }) {
    const hasLevel = this.options.levels.includes(node.attrs.level);
    const level = hasLevel ? node.attrs.level : this.options.levels[0];
    return [`h${level}`, mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
  },
  parseMarkdown: (token2, helpers) => {
    return helpers.createNode("heading", { level: token2.depth || 1 }, helpers.parseInline(token2.tokens || []));
  },
  renderMarkdown: (node, h2) => {
    var _a2;
    const level = ((_a2 = node.attrs) == null ? void 0 : _a2.level) ? parseInt(node.attrs.level, 10) : 1;
    const headingChars = "#".repeat(level);
    if (!node.content) {
      return "";
    }
    return `${headingChars} ${h2.renderChildren(node.content)}`;
  },
  addCommands() {
    return {
      setHeading: (attributes) => ({ commands }) => {
        if (!this.options.levels.includes(attributes.level)) {
          return false;
        }
        return commands.setNode(this.name, attributes);
      },
      toggleHeading: (attributes) => ({ commands }) => {
        if (!this.options.levels.includes(attributes.level)) {
          return false;
        }
        return commands.toggleNode(this.name, "paragraph", attributes);
      }
    };
  },
  addKeyboardShortcuts() {
    return this.options.levels.reduce(
      (items, level) => ({
        ...items,
        ...{
          [`Mod-Alt-${level}`]: () => this.editor.commands.toggleHeading({ level })
        }
      }),
      {}
    );
  },
  addInputRules() {
    return this.options.levels.map((level) => {
      return textblockTypeInputRule({
        find: new RegExp(`^(#{${Math.min(...this.options.levels)},${level}})\\s$`),
        type: this.type,
        getAttributes: {
          level
        }
      });
    });
  }
});
var HorizontalRule = Node3.create({
  name: "horizontalRule",
  addOptions() {
    return {
      HTMLAttributes: {},
      nextNodeType: "paragraph"
    };
  },
  group: "block",
  parseHTML() {
    return [{ tag: "hr" }];
  },
  renderHTML({ HTMLAttributes }) {
    return ["hr", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes)];
  },
  markdownTokenName: "hr",
  parseMarkdown: (token2, helpers) => {
    return helpers.createNode("horizontalRule");
  },
  renderMarkdown: () => {
    return "---";
  },
  addCommands() {
    return {
      setHorizontalRule: () => ({ chain, state }) => {
        if (!canInsertNode(state, state.schema.nodes[this.name])) {
          return false;
        }
        const { selection } = state;
        const { $to: $originTo } = selection;
        const currentChain = chain();
        if (isNodeSelection(selection)) {
          currentChain.insertContentAt($originTo.pos, {
            type: this.name
          });
        } else {
          currentChain.insertContent({ type: this.name });
        }
        return currentChain.command(({ state: chainState, tr: tr2, dispatch }) => {
          if (dispatch) {
            const { $to } = tr2.selection;
            const posAfter = $to.end();
            if ($to.nodeAfter) {
              if ($to.nodeAfter.isTextblock) {
                tr2.setSelection(TextSelection.create(tr2.doc, $to.pos + 1));
              } else if ($to.nodeAfter.isBlock) {
                tr2.setSelection(NodeSelection.create(tr2.doc, $to.pos));
              } else {
                tr2.setSelection(TextSelection.create(tr2.doc, $to.pos));
              }
            } else {
              const nodeType = chainState.schema.nodes[this.options.nextNodeType] || $to.parent.type.contentMatch.defaultType;
              const node = nodeType == null ? void 0 : nodeType.create();
              if (node) {
                tr2.insert(posAfter, node);
                tr2.setSelection(TextSelection.create(tr2.doc, posAfter + 1));
              }
            }
            tr2.scrollIntoView();
          }
          return true;
        }).run();
      }
    };
  },
  addInputRules() {
    return [
      nodeInputRule({
        find: /^(?:---|—-|___\s|\*\*\*\s)$/,
        type: this.type
      })
    ];
  }
});
var starInputRegex = /(?:^|\s)(\*(?!\s+\*)((?:[^*]+))\*(?!\s+\*))$/;
var starPasteRegex = /(?:^|\s)(\*(?!\s+\*)((?:[^*]+))\*(?!\s+\*))/g;
var underscoreInputRegex = /(?:^|\s)(_(?!\s+_)((?:[^_]+))_(?!\s+_))$/;
var underscorePasteRegex = /(?:^|\s)(_(?!\s+_)((?:[^_]+))_(?!\s+_))/g;
var Italic = Mark2.create({
  name: "italic",
  addOptions() {
    return {
      HTMLAttributes: {}
    };
  },
  parseHTML() {
    return [
      {
        tag: "em"
      },
      {
        tag: "i",
        getAttrs: (node) => node.style.fontStyle !== "normal" && null
      },
      {
        style: "font-style=normal",
        clearMark: (mark) => mark.type.name === this.name
      },
      {
        style: "font-style=italic"
      }
    ];
  },
  renderHTML({ HTMLAttributes }) {
    return ["em", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
  },
  addCommands() {
    return {
      setItalic: () => ({ commands }) => {
        return commands.setMark(this.name);
      },
      toggleItalic: () => ({ commands }) => {
        return commands.toggleMark(this.name);
      },
      unsetItalic: () => ({ commands }) => {
        return commands.unsetMark(this.name);
      }
    };
  },
  markdownTokenName: "em",
  parseMarkdown: (token2, helpers) => {
    return helpers.applyMark("italic", helpers.parseInline(token2.tokens || []));
  },
  renderMarkdown: (node, h2) => {
    return `*${h2.renderChildren(node)}*`;
  },
  addKeyboardShortcuts() {
    return {
      "Mod-i": () => this.editor.commands.toggleItalic(),
      "Mod-I": () => this.editor.commands.toggleItalic()
    };
  },
  addInputRules() {
    return [
      markInputRule({
        find: starInputRegex,
        type: this.type
      }),
      markInputRule({
        find: underscoreInputRegex,
        type: this.type
      })
    ];
  },
  addPasteRules() {
    return [
      markPasteRule({
        find: starPasteRegex,
        type: this.type
      }),
      markPasteRule({
        find: underscorePasteRegex,
        type: this.type
      })
    ];
  }
});
const encodedTlds = " ögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2olterskluwer11odside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2";
const encodedUtlds = "ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2";
const numeric = "numeric";
const ascii = "ascii";
const alpha = "alpha";
const asciinumeric = "asciinumeric";
const alphanumeric = "alphanumeric";
const domain = "domain";
const emoji = "emoji";
const scheme = "scheme";
const slashscheme = "slashscheme";
const whitespace = "whitespace";
function registerGroup(name, groups) {
  if (!(name in groups)) {
    groups[name] = [];
  }
  return groups[name];
}
function addToGroups(t2, flags, groups) {
  if (flags[numeric]) {
    flags[asciinumeric] = true;
    flags[alphanumeric] = true;
  }
  if (flags[ascii]) {
    flags[asciinumeric] = true;
    flags[alpha] = true;
  }
  if (flags[asciinumeric]) {
    flags[alphanumeric] = true;
  }
  if (flags[alpha]) {
    flags[alphanumeric] = true;
  }
  if (flags[alphanumeric]) {
    flags[domain] = true;
  }
  if (flags[emoji]) {
    flags[domain] = true;
  }
  for (const k2 in flags) {
    const group = registerGroup(k2, groups);
    if (group.indexOf(t2) < 0) {
      group.push(t2);
    }
  }
}
function flagsForToken(t2, groups) {
  const result = {};
  for (const c2 in groups) {
    if (groups[c2].indexOf(t2) >= 0) {
      result[c2] = true;
    }
  }
  return result;
}
function State(token2 = null) {
  this.j = {};
  this.jr = [];
  this.jd = null;
  this.t = token2;
}
State.groups = {};
State.prototype = {
  accepts() {
    return !!this.t;
  },
  /**
   * Follow an existing transition from the given input to the next state.
   * Does not mutate.
   * @param {string} input character or token type to transition on
   * @returns {?State<T>} the next state, if any
   */
  go(input) {
    const state = this;
    const nextState = state.j[input];
    if (nextState) {
      return nextState;
    }
    for (let i = 0; i < state.jr.length; i++) {
      const regex = state.jr[i][0];
      const nextState2 = state.jr[i][1];
      if (nextState2 && regex.test(input)) {
        return nextState2;
      }
    }
    return state.jd;
  },
  /**
   * Whether the state has a transition for the given input. Set the second
   * argument to true to only look for an exact match (and not a default or
   * regular-expression-based transition)
   * @param {string} input
   * @param {boolean} exactOnly
   */
  has(input, exactOnly = false) {
    return exactOnly ? input in this.j : !!this.go(input);
  },
  /**
   * Short for "transition all"; create a transition from the array of items
   * in the given list to the same final resulting state.
   * @param {string | string[]} inputs Group of inputs to transition on
   * @param {Transition<T> | State<T>} [next] Transition options
   * @param {Flags} [flags] Collections flags to add token to
   * @param {Collections<T>} [groups] Master list of token groups
   */
  ta(inputs, next, flags, groups) {
    for (let i = 0; i < inputs.length; i++) {
      this.tt(inputs[i], next, flags, groups);
    }
  },
  /**
   * Short for "take regexp transition"; defines a transition for this state
   * when it encounters a token which matches the given regular expression
   * @param {RegExp} regexp Regular expression transition (populate first)
   * @param {T | State<T>} [next] Transition options
   * @param {Flags} [flags] Collections flags to add token to
   * @param {Collections<T>} [groups] Master list of token groups
   * @returns {State<T>} taken after the given input
   */
  tr(regexp, next, flags, groups) {
    groups = groups || State.groups;
    let nextState;
    if (next && next.j) {
      nextState = next;
    } else {
      nextState = new State(next);
      if (flags && groups) {
        addToGroups(next, flags, groups);
      }
    }
    this.jr.push([regexp, nextState]);
    return nextState;
  },
  /**
   * Short for "take transitions", will take as many sequential transitions as
   * the length of the given input and returns the
   * resulting final state.
   * @param {string | string[]} input
   * @param {T | State<T>} [next] Transition options
   * @param {Flags} [flags] Collections flags to add token to
   * @param {Collections<T>} [groups] Master list of token groups
   * @returns {State<T>} taken after the given input
   */
  ts(input, next, flags, groups) {
    let state = this;
    const len = input.length;
    if (!len) {
      return state;
    }
    for (let i = 0; i < len - 1; i++) {
      state = state.tt(input[i]);
    }
    return state.tt(input[len - 1], next, flags, groups);
  },
  /**
   * Short for "take transition", this is a method for building/working with
   * state machines.
   *
   * If a state already exists for the given input, returns it.
   *
   * If a token is specified, that state will emit that token when reached by
   * the linkify engine.
   *
   * If no state exists, it will be initialized with some default transitions
   * that resemble existing default transitions.
   *
   * If a state is given for the second argument, that state will be
   * transitioned to on the given input regardless of what that input
   * previously did.
   *
   * Specify a token group flags to define groups that this token belongs to.
   * The token will be added to corresponding entires in the given groups
   * object.
   *
   * @param {string} input character, token type to transition on
   * @param {T | State<T>} [next] Transition options
   * @param {Flags} [flags] Collections flags to add token to
   * @param {Collections<T>} [groups] Master list of groups
   * @returns {State<T>} taken after the given input
   */
  tt(input, next, flags, groups) {
    groups = groups || State.groups;
    const state = this;
    if (next && next.j) {
      state.j[input] = next;
      return next;
    }
    const t2 = next;
    let nextState, templateState = state.go(input);
    if (templateState) {
      nextState = new State();
      Object.assign(nextState.j, templateState.j);
      nextState.jr.push.apply(nextState.jr, templateState.jr);
      nextState.jd = templateState.jd;
      nextState.t = templateState.t;
    } else {
      nextState = new State();
    }
    if (t2) {
      if (groups) {
        if (nextState.t && typeof nextState.t === "string") {
          const allFlags = Object.assign(flagsForToken(nextState.t, groups), flags);
          addToGroups(t2, allFlags, groups);
        } else if (flags) {
          addToGroups(t2, flags, groups);
        }
      }
      nextState.t = t2;
    }
    state.j[input] = nextState;
    return nextState;
  }
};
const ta = (state, input, next, flags, groups) => state.ta(input, next, flags, groups);
const tr = (state, regexp, next, flags, groups) => state.tr(regexp, next, flags, groups);
const ts = (state, input, next, flags, groups) => state.ts(input, next, flags, groups);
const tt = (state, input, next, flags, groups) => state.tt(input, next, flags, groups);
const WORD = "WORD";
const UWORD = "UWORD";
const ASCIINUMERICAL = "ASCIINUMERICAL";
const ALPHANUMERICAL = "ALPHANUMERICAL";
const LOCALHOST = "LOCALHOST";
const TLD = "TLD";
const UTLD = "UTLD";
const SCHEME = "SCHEME";
const SLASH_SCHEME = "SLASH_SCHEME";
const NUM = "NUM";
const WS = "WS";
const NL = "NL";
const OPENBRACE = "OPENBRACE";
const CLOSEBRACE = "CLOSEBRACE";
const OPENBRACKET = "OPENBRACKET";
const CLOSEBRACKET = "CLOSEBRACKET";
const OPENPAREN = "OPENPAREN";
const CLOSEPAREN = "CLOSEPAREN";
const OPENANGLEBRACKET = "OPENANGLEBRACKET";
const CLOSEANGLEBRACKET = "CLOSEANGLEBRACKET";
const FULLWIDTHLEFTPAREN = "FULLWIDTHLEFTPAREN";
const FULLWIDTHRIGHTPAREN = "FULLWIDTHRIGHTPAREN";
const LEFTCORNERBRACKET = "LEFTCORNERBRACKET";
const RIGHTCORNERBRACKET = "RIGHTCORNERBRACKET";
const LEFTWHITECORNERBRACKET = "LEFTWHITECORNERBRACKET";
const RIGHTWHITECORNERBRACKET = "RIGHTWHITECORNERBRACKET";
const FULLWIDTHLESSTHAN = "FULLWIDTHLESSTHAN";
const FULLWIDTHGREATERTHAN = "FULLWIDTHGREATERTHAN";
const AMPERSAND = "AMPERSAND";
const APOSTROPHE = "APOSTROPHE";
const ASTERISK = "ASTERISK";
const AT = "AT";
const BACKSLASH = "BACKSLASH";
const BACKTICK = "BACKTICK";
const CARET = "CARET";
const COLON = "COLON";
const COMMA = "COMMA";
const DOLLAR = "DOLLAR";
const DOT = "DOT";
const EQUALS = "EQUALS";
const EXCLAMATION = "EXCLAMATION";
const HYPHEN = "HYPHEN";
const PERCENT = "PERCENT";
const PIPE = "PIPE";
const PLUS = "PLUS";
const POUND = "POUND";
const QUERY = "QUERY";
const QUOTE = "QUOTE";
const FULLWIDTHMIDDLEDOT = "FULLWIDTHMIDDLEDOT";
const SEMI = "SEMI";
const SLASH = "SLASH";
const TILDE = "TILDE";
const UNDERSCORE = "UNDERSCORE";
const EMOJI$1 = "EMOJI";
const SYM = "SYM";
var tk = /* @__PURE__ */ Object.freeze({
  __proto__: null,
  ALPHANUMERICAL,
  AMPERSAND,
  APOSTROPHE,
  ASCIINUMERICAL,
  ASTERISK,
  AT,
  BACKSLASH,
  BACKTICK,
  CARET,
  CLOSEANGLEBRACKET,
  CLOSEBRACE,
  CLOSEBRACKET,
  CLOSEPAREN,
  COLON,
  COMMA,
  DOLLAR,
  DOT,
  EMOJI: EMOJI$1,
  EQUALS,
  EXCLAMATION,
  FULLWIDTHGREATERTHAN,
  FULLWIDTHLEFTPAREN,
  FULLWIDTHLESSTHAN,
  FULLWIDTHMIDDLEDOT,
  FULLWIDTHRIGHTPAREN,
  HYPHEN,
  LEFTCORNERBRACKET,
  LEFTWHITECORNERBRACKET,
  LOCALHOST,
  NL,
  NUM,
  OPENANGLEBRACKET,
  OPENBRACE,
  OPENBRACKET,
  OPENPAREN,
  PERCENT,
  PIPE,
  PLUS,
  POUND,
  QUERY,
  QUOTE,
  RIGHTCORNERBRACKET,
  RIGHTWHITECORNERBRACKET,
  SCHEME,
  SEMI,
  SLASH,
  SLASH_SCHEME,
  SYM,
  TILDE,
  TLD,
  UNDERSCORE,
  UTLD,
  UWORD,
  WORD,
  WS
});
const ASCII_LETTER = /[a-z]/;
const LETTER = new RegExp("\\p{L}", "u");
const EMOJI = new RegExp("\\p{Emoji}", "u");
const DIGIT = /\d/;
const SPACE = /\s/;
const CR = "\r";
const LF = "\n";
const EMOJI_VARIATION = "️";
const EMOJI_JOINER = "‍";
const OBJECT_REPLACEMENT = "￼";
let tlds = null, utlds = null;
function init$2(customSchemes = []) {
  const groups = {};
  State.groups = groups;
  const Start = new State();
  if (tlds == null) {
    tlds = decodeTlds(encodedTlds);
  }
  if (utlds == null) {
    utlds = decodeTlds(encodedUtlds);
  }
  tt(Start, "'", APOSTROPHE);
  tt(Start, "{", OPENBRACE);
  tt(Start, "}", CLOSEBRACE);
  tt(Start, "[", OPENBRACKET);
  tt(Start, "]", CLOSEBRACKET);
  tt(Start, "(", OPENPAREN);
  tt(Start, ")", CLOSEPAREN);
  tt(Start, "<", OPENANGLEBRACKET);
  tt(Start, ">", CLOSEANGLEBRACKET);
  tt(Start, "（", FULLWIDTHLEFTPAREN);
  tt(Start, "）", FULLWIDTHRIGHTPAREN);
  tt(Start, "「", LEFTCORNERBRACKET);
  tt(Start, "」", RIGHTCORNERBRACKET);
  tt(Start, "『", LEFTWHITECORNERBRACKET);
  tt(Start, "』", RIGHTWHITECORNERBRACKET);
  tt(Start, "＜", FULLWIDTHLESSTHAN);
  tt(Start, "＞", FULLWIDTHGREATERTHAN);
  tt(Start, "&", AMPERSAND);
  tt(Start, "*", ASTERISK);
  tt(Start, "@", AT);
  tt(Start, "`", BACKTICK);
  tt(Start, "^", CARET);
  tt(Start, ":", COLON);
  tt(Start, ",", COMMA);
  tt(Start, "$", DOLLAR);
  tt(Start, ".", DOT);
  tt(Start, "=", EQUALS);
  tt(Start, "!", EXCLAMATION);
  tt(Start, "-", HYPHEN);
  tt(Start, "%", PERCENT);
  tt(Start, "|", PIPE);
  tt(Start, "+", PLUS);
  tt(Start, "#", POUND);
  tt(Start, "?", QUERY);
  tt(Start, '"', QUOTE);
  tt(Start, "/", SLASH);
  tt(Start, ";", SEMI);
  tt(Start, "~", TILDE);
  tt(Start, "_", UNDERSCORE);
  tt(Start, "\\", BACKSLASH);
  tt(Start, "・", FULLWIDTHMIDDLEDOT);
  const Num = tr(Start, DIGIT, NUM, {
    [numeric]: true
  });
  tr(Num, DIGIT, Num);
  const Asciinumeric = tr(Num, ASCII_LETTER, ASCIINUMERICAL, {
    [asciinumeric]: true
  });
  const Alphanumeric = tr(Num, LETTER, ALPHANUMERICAL, {
    [alphanumeric]: true
  });
  const Word = tr(Start, ASCII_LETTER, WORD, {
    [ascii]: true
  });
  tr(Word, DIGIT, Asciinumeric);
  tr(Word, ASCII_LETTER, Word);
  tr(Asciinumeric, DIGIT, Asciinumeric);
  tr(Asciinumeric, ASCII_LETTER, Asciinumeric);
  const UWord = tr(Start, LETTER, UWORD, {
    [alpha]: true
  });
  tr(UWord, ASCII_LETTER);
  tr(UWord, DIGIT, Alphanumeric);
  tr(UWord, LETTER, UWord);
  tr(Alphanumeric, DIGIT, Alphanumeric);
  tr(Alphanumeric, ASCII_LETTER);
  tr(Alphanumeric, LETTER, Alphanumeric);
  const Nl2 = tt(Start, LF, NL, {
    [whitespace]: true
  });
  const Cr2 = tt(Start, CR, WS, {
    [whitespace]: true
  });
  const Ws = tr(Start, SPACE, WS, {
    [whitespace]: true
  });
  tt(Start, OBJECT_REPLACEMENT, Ws);
  tt(Cr2, LF, Nl2);
  tt(Cr2, OBJECT_REPLACEMENT, Ws);
  tr(Cr2, SPACE, Ws);
  tt(Ws, CR);
  tt(Ws, LF);
  tr(Ws, SPACE, Ws);
  tt(Ws, OBJECT_REPLACEMENT, Ws);
  const Emoji = tr(Start, EMOJI, EMOJI$1, {
    [emoji]: true
  });
  tt(Emoji, "#");
  tr(Emoji, EMOJI, Emoji);
  tt(Emoji, EMOJI_VARIATION, Emoji);
  const EmojiJoiner = tt(Emoji, EMOJI_JOINER);
  tt(EmojiJoiner, "#");
  tr(EmojiJoiner, EMOJI, Emoji);
  const wordjr = [[ASCII_LETTER, Word], [DIGIT, Asciinumeric]];
  const uwordjr = [[ASCII_LETTER, null], [LETTER, UWord], [DIGIT, Alphanumeric]];
  for (let i = 0; i < tlds.length; i++) {
    fastts(Start, tlds[i], TLD, WORD, wordjr);
  }
  for (let i = 0; i < utlds.length; i++) {
    fastts(Start, utlds[i], UTLD, UWORD, uwordjr);
  }
  addToGroups(TLD, {
    tld: true,
    ascii: true
  }, groups);
  addToGroups(UTLD, {
    utld: true,
    alpha: true
  }, groups);
  fastts(Start, "file", SCHEME, WORD, wordjr);
  fastts(Start, "mailto", SCHEME, WORD, wordjr);
  fastts(Start, "http", SLASH_SCHEME, WORD, wordjr);
  fastts(Start, "https", SLASH_SCHEME, WORD, wordjr);
  fastts(Start, "ftp", SLASH_SCHEME, WORD, wordjr);
  fastts(Start, "ftps", SLASH_SCHEME, WORD, wordjr);
  addToGroups(SCHEME, {
    scheme: true,
    ascii: true
  }, groups);
  addToGroups(SLASH_SCHEME, {
    slashscheme: true,
    ascii: true
  }, groups);
  customSchemes = customSchemes.sort((a2, b2) => a2[0] > b2[0] ? 1 : -1);
  for (let i = 0; i < customSchemes.length; i++) {
    const sch = customSchemes[i][0];
    const optionalSlashSlash = customSchemes[i][1];
    const flags = optionalSlashSlash ? {
      [scheme]: true
    } : {
      [slashscheme]: true
    };
    if (sch.indexOf("-") >= 0) {
      flags[domain] = true;
    } else if (!ASCII_LETTER.test(sch)) {
      flags[numeric] = true;
    } else if (DIGIT.test(sch)) {
      flags[asciinumeric] = true;
    } else {
      flags[ascii] = true;
    }
    ts(Start, sch, sch, flags);
  }
  ts(Start, "localhost", LOCALHOST, {
    ascii: true
  });
  Start.jd = new State(SYM);
  return {
    start: Start,
    tokens: Object.assign({
      groups
    }, tk)
  };
}
function run$1(start, str) {
  const iterable = stringToArray(str.replace(/[A-Z]/g, (c2) => c2.toLowerCase()));
  const charCount = iterable.length;
  const tokens = [];
  let cursor = 0;
  let charCursor = 0;
  while (charCursor < charCount) {
    let state = start;
    let nextState = null;
    let tokenLength = 0;
    let latestAccepting = null;
    let sinceAccepts = -1;
    let charsSinceAccepts = -1;
    while (charCursor < charCount && (nextState = state.go(iterable[charCursor]))) {
      state = nextState;
      if (state.accepts()) {
        sinceAccepts = 0;
        charsSinceAccepts = 0;
        latestAccepting = state;
      } else if (sinceAccepts >= 0) {
        sinceAccepts += iterable[charCursor].length;
        charsSinceAccepts++;
      }
      tokenLength += iterable[charCursor].length;
      cursor += iterable[charCursor].length;
      charCursor++;
    }
    cursor -= sinceAccepts;
    charCursor -= charsSinceAccepts;
    tokenLength -= sinceAccepts;
    tokens.push({
      t: latestAccepting.t,
      // token type/name
      v: str.slice(cursor - tokenLength, cursor),
      // string value
      s: cursor - tokenLength,
      // start index
      e: cursor
      // end index (excluding)
    });
  }
  return tokens;
}
function stringToArray(str) {
  const result = [];
  const len = str.length;
  let index2 = 0;
  while (index2 < len) {
    let first2 = str.charCodeAt(index2);
    let second;
    let char = first2 < 55296 || first2 > 56319 || index2 + 1 === len || (second = str.charCodeAt(index2 + 1)) < 56320 || second > 57343 ? str[index2] : str.slice(index2, index2 + 2);
    result.push(char);
    index2 += char.length;
  }
  return result;
}
function fastts(state, input, t2, defaultt, jr2) {
  let next;
  const len = input.length;
  for (let i = 0; i < len - 1; i++) {
    const char = input[i];
    if (state.j[char]) {
      next = state.j[char];
    } else {
      next = new State(defaultt);
      next.jr = jr2.slice();
      state.j[char] = next;
    }
    state = next;
  }
  next = new State(t2);
  next.jr = jr2.slice();
  state.j[input[len - 1]] = next;
  return next;
}
function decodeTlds(encoded) {
  const words = [];
  const stack2 = [];
  let i = 0;
  let digits = "0123456789";
  while (i < encoded.length) {
    let popDigitCount = 0;
    while (digits.indexOf(encoded[i + popDigitCount]) >= 0) {
      popDigitCount++;
    }
    if (popDigitCount > 0) {
      words.push(stack2.join(""));
      for (let popCount = parseInt(encoded.substring(i, i + popDigitCount), 10); popCount > 0; popCount--) {
        stack2.pop();
      }
      i += popDigitCount;
    } else {
      stack2.push(encoded[i]);
      i++;
    }
  }
  return words;
}
const defaults = {
  defaultProtocol: "http",
  events: null,
  format: noop,
  formatHref: noop,
  nl2br: false,
  tagName: "a",
  target: null,
  rel: null,
  validate: true,
  truncate: Infinity,
  className: null,
  attributes: null,
  ignoreTags: [],
  render: null
};
function Options(opts, defaultRender = null) {
  let o2 = Object.assign({}, defaults);
  if (opts) {
    o2 = Object.assign(o2, opts instanceof Options ? opts.o : opts);
  }
  const ignoredTags = o2.ignoreTags;
  const uppercaseIgnoredTags = [];
  for (let i = 0; i < ignoredTags.length; i++) {
    uppercaseIgnoredTags.push(ignoredTags[i].toUpperCase());
  }
  this.o = o2;
  if (defaultRender) {
    this.defaultRender = defaultRender;
  }
  this.ignoreTags = uppercaseIgnoredTags;
}
Options.prototype = {
  o: defaults,
  /**
   * @type string[]
   */
  ignoreTags: [],
  /**
   * @param {IntermediateRepresentation} ir
   * @returns {any}
   */
  defaultRender(ir2) {
    return ir2;
  },
  /**
   * Returns true or false based on whether a token should be displayed as a
   * link based on the user options.
   * @param {MultiToken} token
   * @returns {boolean}
   */
  check(token2) {
    return this.get("validate", token2.toString(), token2);
  },
  // Private methods
  /**
   * Resolve an option's value based on the value of the option and the given
   * params. If operator and token are specified and the target option is
   * callable, automatically calls the function with the given argument.
   * @template {keyof Opts} K
   * @param {K} key Name of option to use
   * @param {string} [operator] will be passed to the target option if it's a
   * function. If not specified, RAW function value gets returned
   * @param {MultiToken} [token] The token from linkify.tokenize
   * @returns {Opts[K] | any}
   */
  get(key, operator2, token2) {
    const isCallable = operator2 != null;
    let option = this.o[key];
    if (!option) {
      return option;
    }
    if (typeof option === "object") {
      option = token2.t in option ? option[token2.t] : defaults[key];
      if (typeof option === "function" && isCallable) {
        option = option(operator2, token2);
      }
    } else if (typeof option === "function" && isCallable) {
      option = option(operator2, token2.t, token2);
    }
    return option;
  },
  /**
   * @template {keyof Opts} L
   * @param {L} key Name of options object to use
   * @param {string} [operator]
   * @param {MultiToken} [token]
   * @returns {Opts[L] | any}
   */
  getObj(key, operator2, token2) {
    let obj = this.o[key];
    if (typeof obj === "function" && operator2 != null) {
      obj = obj(operator2, token2.t, token2);
    }
    return obj;
  },
  /**
   * Convert the given token to a rendered element that may be added to the
   * calling-interface's DOM
   * @param {MultiToken} token Token to render to an HTML element
   * @returns {any} Render result; e.g., HTML string, DOM element, React
   *   Component, etc.
   */
  render(token2) {
    const ir2 = token2.render(this);
    const renderFn = this.get("render", null, token2) || this.defaultRender;
    return renderFn(ir2, token2.t, token2);
  }
};
function noop(val) {
  return val;
}
function MultiToken(value, tokens) {
  this.t = "token";
  this.v = value;
  this.tk = tokens;
}
MultiToken.prototype = {
  isLink: false,
  /**
   * Return the string this token represents.
   * @return {string}
   */
  toString() {
    return this.v;
  },
  /**
   * What should the value for this token be in the `href` HTML attribute?
   * Returns the `.toString` value by default.
   * @param {string} [scheme]
   * @return {string}
   */
  toHref(scheme2) {
    return this.toString();
  },
  /**
   * @param {Options} options Formatting options
   * @returns {string}
   */
  toFormattedString(options) {
    const val = this.toString();
    const truncate = options.get("truncate", val, this);
    const formatted = options.get("format", val, this);
    return truncate && formatted.length > truncate ? formatted.substring(0, truncate) + "…" : formatted;
  },
  /**
   *
   * @param {Options} options
   * @returns {string}
   */
  toFormattedHref(options) {
    return options.get("formatHref", this.toHref(options.get("defaultProtocol")), this);
  },
  /**
   * The start index of this token in the original input string
   * @returns {number}
   */
  startIndex() {
    return this.tk[0].s;
  },
  /**
   * The end index of this token in the original input string (up to this
   * index but not including it)
   * @returns {number}
   */
  endIndex() {
    return this.tk[this.tk.length - 1].e;
  },
  /**
  	Returns an object  of relevant values for this token, which includes keys
  	* type - Kind of token ('url', 'email', etc.)
  	* value - Original text
  	* href - The value that should be added to the anchor tag's href
  		attribute
  		@method toObject
  	@param {string} [protocol] `'http'` by default
  */
  toObject(protocol = defaults.defaultProtocol) {
    return {
      type: this.t,
      value: this.toString(),
      isLink: this.isLink,
      href: this.toHref(protocol),
      start: this.startIndex(),
      end: this.endIndex()
    };
  },
  /**
   *
   * @param {Options} options Formatting option
   */
  toFormattedObject(options) {
    return {
      type: this.t,
      value: this.toFormattedString(options),
      isLink: this.isLink,
      href: this.toFormattedHref(options),
      start: this.startIndex(),
      end: this.endIndex()
    };
  },
  /**
   * Whether this token should be rendered as a link according to the given options
   * @param {Options} options
   * @returns {boolean}
   */
  validate(options) {
    return options.get("validate", this.toString(), this);
  },
  /**
   * Return an object that represents how this link should be rendered.
   * @param {Options} options Formattinng options
   */
  render(options) {
    const token2 = this;
    const href = this.toHref(options.get("defaultProtocol"));
    const formattedHref = options.get("formatHref", href, this);
    const tagName = options.get("tagName", href, token2);
    const content = this.toFormattedString(options);
    const attributes = {};
    const className = options.get("className", href, token2);
    const target = options.get("target", href, token2);
    const rel = options.get("rel", href, token2);
    const attrs = options.getObj("attributes", href, token2);
    const eventListeners = options.getObj("events", href, token2);
    attributes.href = formattedHref;
    if (className) {
      attributes.class = className;
    }
    if (target) {
      attributes.target = target;
    }
    if (rel) {
      attributes.rel = rel;
    }
    if (attrs) {
      Object.assign(attributes, attrs);
    }
    return {
      tagName,
      attributes,
      content,
      eventListeners
    };
  }
};
function createTokenClass(type, props) {
  class Token extends MultiToken {
    constructor(value, tokens) {
      super(value, tokens);
      this.t = type;
    }
  }
  for (const p2 in props) {
    Token.prototype[p2] = props[p2];
  }
  Token.t = type;
  return Token;
}
const Email = createTokenClass("email", {
  isLink: true,
  toHref() {
    return "mailto:" + this.toString();
  }
});
const Text$1 = createTokenClass("text");
const Nl = createTokenClass("nl");
const Url = createTokenClass("url", {
  isLink: true,
  /**
  	Lowercases relevant parts of the domain and adds the protocol if
  	required. Note that this will not escape unsafe HTML characters in the
  	URL.
  		@param {string} [scheme] default scheme (e.g., 'https')
  	@return {string} the full href
  */
  toHref(scheme2 = defaults.defaultProtocol) {
    return this.hasProtocol() ? this.v : `${scheme2}://${this.v}`;
  },
  /**
   * Check whether this URL token has a protocol
   * @return {boolean}
   */
  hasProtocol() {
    const tokens = this.tk;
    return tokens.length >= 2 && tokens[0].t !== LOCALHOST && tokens[1].t === COLON;
  }
});
const makeState = (arg) => new State(arg);
function init$1({
  groups
}) {
  const qsAccepting = groups.domain.concat([AMPERSAND, ASTERISK, AT, BACKSLASH, BACKTICK, CARET, DOLLAR, EQUALS, HYPHEN, NUM, PERCENT, PIPE, PLUS, POUND, SLASH, SYM, TILDE, UNDERSCORE]);
  const qsNonAccepting = [APOSTROPHE, COLON, COMMA, DOT, EXCLAMATION, PERCENT, QUERY, QUOTE, SEMI, OPENANGLEBRACKET, CLOSEANGLEBRACKET, OPENBRACE, CLOSEBRACE, CLOSEBRACKET, OPENBRACKET, OPENPAREN, CLOSEPAREN, FULLWIDTHLEFTPAREN, FULLWIDTHRIGHTPAREN, LEFTCORNERBRACKET, RIGHTCORNERBRACKET, LEFTWHITECORNERBRACKET, RIGHTWHITECORNERBRACKET, FULLWIDTHLESSTHAN, FULLWIDTHGREATERTHAN];
  const localpartAccepting = [AMPERSAND, APOSTROPHE, ASTERISK, BACKSLASH, BACKTICK, CARET, DOLLAR, EQUALS, HYPHEN, OPENBRACE, CLOSEBRACE, PERCENT, PIPE, PLUS, POUND, QUERY, SLASH, SYM, TILDE, UNDERSCORE];
  const Start = makeState();
  const Localpart = tt(Start, TILDE);
  ta(Localpart, localpartAccepting, Localpart);
  ta(Localpart, groups.domain, Localpart);
  const Domain = makeState(), Scheme = makeState(), SlashScheme = makeState();
  ta(Start, groups.domain, Domain);
  ta(Start, groups.scheme, Scheme);
  ta(Start, groups.slashscheme, SlashScheme);
  ta(Domain, localpartAccepting, Localpart);
  ta(Domain, groups.domain, Domain);
  const LocalpartAt = tt(Domain, AT);
  tt(Localpart, AT, LocalpartAt);
  tt(Scheme, AT, LocalpartAt);
  tt(SlashScheme, AT, LocalpartAt);
  const LocalpartDot = tt(Localpart, DOT);
  ta(LocalpartDot, localpartAccepting, Localpart);
  ta(LocalpartDot, groups.domain, Localpart);
  const EmailDomain = makeState();
  ta(LocalpartAt, groups.domain, EmailDomain);
  ta(EmailDomain, groups.domain, EmailDomain);
  const EmailDomainDot = tt(EmailDomain, DOT);
  ta(EmailDomainDot, groups.domain, EmailDomain);
  const Email$1 = makeState(Email);
  ta(EmailDomainDot, groups.tld, Email$1);
  ta(EmailDomainDot, groups.utld, Email$1);
  tt(LocalpartAt, LOCALHOST, Email$1);
  const EmailDomainHyphen = tt(EmailDomain, HYPHEN);
  tt(EmailDomainHyphen, HYPHEN, EmailDomainHyphen);
  ta(EmailDomainHyphen, groups.domain, EmailDomain);
  ta(Email$1, groups.domain, EmailDomain);
  tt(Email$1, DOT, EmailDomainDot);
  tt(Email$1, HYPHEN, EmailDomainHyphen);
  const EmailColon = tt(Email$1, COLON);
  ta(EmailColon, groups.numeric, Email);
  const DomainHyphen = tt(Domain, HYPHEN);
  const DomainDot = tt(Domain, DOT);
  tt(DomainHyphen, HYPHEN, DomainHyphen);
  ta(DomainHyphen, groups.domain, Domain);
  ta(DomainDot, localpartAccepting, Localpart);
  ta(DomainDot, groups.domain, Domain);
  const DomainDotTld = makeState(Url);
  ta(DomainDot, groups.tld, DomainDotTld);
  ta(DomainDot, groups.utld, DomainDotTld);
  ta(DomainDotTld, groups.domain, Domain);
  ta(DomainDotTld, localpartAccepting, Localpart);
  tt(DomainDotTld, DOT, DomainDot);
  tt(DomainDotTld, HYPHEN, DomainHyphen);
  tt(DomainDotTld, AT, LocalpartAt);
  const DomainDotTldColon = tt(DomainDotTld, COLON);
  const DomainDotTldColonPort = makeState(Url);
  ta(DomainDotTldColon, groups.numeric, DomainDotTldColonPort);
  const Url$1 = makeState(Url);
  const UrlNonaccept = makeState();
  ta(Url$1, qsAccepting, Url$1);
  ta(Url$1, qsNonAccepting, UrlNonaccept);
  ta(UrlNonaccept, qsAccepting, Url$1);
  ta(UrlNonaccept, qsNonAccepting, UrlNonaccept);
  tt(DomainDotTld, SLASH, Url$1);
  tt(DomainDotTldColonPort, SLASH, Url$1);
  const SchemeColon = tt(Scheme, COLON);
  const SlashSchemeColon = tt(SlashScheme, COLON);
  const SlashSchemeColonSlash = tt(SlashSchemeColon, SLASH);
  const UriPrefix = tt(SlashSchemeColonSlash, SLASH);
  ta(Scheme, groups.domain, Domain);
  tt(Scheme, DOT, DomainDot);
  tt(Scheme, HYPHEN, DomainHyphen);
  ta(SlashScheme, groups.domain, Domain);
  tt(SlashScheme, DOT, DomainDot);
  tt(SlashScheme, HYPHEN, DomainHyphen);
  ta(SchemeColon, groups.domain, Url$1);
  tt(SchemeColon, SLASH, Url$1);
  tt(SchemeColon, QUERY, Url$1);
  ta(UriPrefix, groups.domain, Url$1);
  ta(UriPrefix, qsAccepting, Url$1);
  tt(UriPrefix, SLASH, Url$1);
  const bracketPairs = [
    [OPENBRACE, CLOSEBRACE],
    // {}
    [OPENBRACKET, CLOSEBRACKET],
    // []
    [OPENPAREN, CLOSEPAREN],
    // ()
    [OPENANGLEBRACKET, CLOSEANGLEBRACKET],
    // <>
    [FULLWIDTHLEFTPAREN, FULLWIDTHRIGHTPAREN],
    // （）
    [LEFTCORNERBRACKET, RIGHTCORNERBRACKET],
    // 「」
    [LEFTWHITECORNERBRACKET, RIGHTWHITECORNERBRACKET],
    // 『』
    [FULLWIDTHLESSTHAN, FULLWIDTHGREATERTHAN]
    // ＜＞
  ];
  for (let i = 0; i < bracketPairs.length; i++) {
    const [OPEN, CLOSE] = bracketPairs[i];
    const UrlOpen = tt(Url$1, OPEN);
    tt(UrlNonaccept, OPEN, UrlOpen);
    tt(UrlOpen, CLOSE, Url$1);
    const UrlOpenQ = makeState(Url);
    ta(UrlOpen, qsAccepting, UrlOpenQ);
    const UrlOpenSyms = makeState();
    ta(UrlOpen, qsNonAccepting);
    ta(UrlOpenQ, qsAccepting, UrlOpenQ);
    ta(UrlOpenQ, qsNonAccepting, UrlOpenSyms);
    ta(UrlOpenSyms, qsAccepting, UrlOpenQ);
    ta(UrlOpenSyms, qsNonAccepting, UrlOpenSyms);
    tt(UrlOpenQ, CLOSE, Url$1);
    tt(UrlOpenSyms, CLOSE, Url$1);
  }
  tt(Start, LOCALHOST, DomainDotTld);
  tt(Start, NL, Nl);
  return {
    start: Start,
    tokens: tk
  };
}
function run(start, input, tokens) {
  let len = tokens.length;
  let cursor = 0;
  let multis = [];
  let textTokens = [];
  while (cursor < len) {
    let state = start;
    let secondState = null;
    let nextState = null;
    let multiLength = 0;
    let latestAccepting = null;
    let sinceAccepts = -1;
    while (cursor < len && !(secondState = state.go(tokens[cursor].t))) {
      textTokens.push(tokens[cursor++]);
    }
    while (cursor < len && (nextState = secondState || state.go(tokens[cursor].t))) {
      secondState = null;
      state = nextState;
      if (state.accepts()) {
        sinceAccepts = 0;
        latestAccepting = state;
      } else if (sinceAccepts >= 0) {
        sinceAccepts++;
      }
      cursor++;
      multiLength++;
    }
    if (sinceAccepts < 0) {
      cursor -= multiLength;
      if (cursor < len) {
        textTokens.push(tokens[cursor]);
        cursor++;
      }
    } else {
      if (textTokens.length > 0) {
        multis.push(initMultiToken(Text$1, input, textTokens));
        textTokens = [];
      }
      cursor -= sinceAccepts;
      multiLength -= sinceAccepts;
      const Multi = latestAccepting.t;
      const subtokens = tokens.slice(cursor - multiLength, cursor);
      multis.push(initMultiToken(Multi, input, subtokens));
    }
  }
  if (textTokens.length > 0) {
    multis.push(initMultiToken(Text$1, input, textTokens));
  }
  return multis;
}
function initMultiToken(Multi, input, tokens) {
  const startIdx = tokens[0].s;
  const endIdx = tokens[tokens.length - 1].e;
  const value = input.slice(startIdx, endIdx);
  return new Multi(value, tokens);
}
const warn = typeof console !== "undefined" && console && console.warn || (() => {
});
const warnAdvice = "until manual call of linkify.init(). Register all schemes and plugins before invoking linkify the first time.";
const INIT = {
  scanner: null,
  parser: null,
  tokenQueue: [],
  pluginQueue: [],
  customSchemes: [],
  initialized: false
};
function reset() {
  State.groups = {};
  INIT.scanner = null;
  INIT.parser = null;
  INIT.tokenQueue = [];
  INIT.pluginQueue = [];
  INIT.customSchemes = [];
  INIT.initialized = false;
  return INIT;
}
function registerCustomProtocol(scheme2, optionalSlashSlash = false) {
  if (INIT.initialized) {
    warn(`linkifyjs: already initialized - will not register custom scheme "${scheme2}" ${warnAdvice}`);
  }
  if (!/^[0-9a-z]+(-[0-9a-z]+)*$/.test(scheme2)) {
    throw new Error(`linkifyjs: incorrect scheme format.
1. Must only contain digits, lowercase ASCII letters or "-"
2. Cannot start or end with "-"
3. "-" cannot repeat`);
  }
  INIT.customSchemes.push([scheme2, optionalSlashSlash]);
}
function init() {
  INIT.scanner = init$2(INIT.customSchemes);
  for (let i = 0; i < INIT.tokenQueue.length; i++) {
    INIT.tokenQueue[i][1]({
      scanner: INIT.scanner
    });
  }
  INIT.parser = init$1(INIT.scanner.tokens);
  for (let i = 0; i < INIT.pluginQueue.length; i++) {
    INIT.pluginQueue[i][1]({
      scanner: INIT.scanner,
      parser: INIT.parser
    });
  }
  INIT.initialized = true;
  return INIT;
}
function tokenize(str) {
  if (!INIT.initialized) {
    init();
  }
  return run(INIT.parser.start, str, run$1(INIT.scanner.start, str));
}
tokenize.scan = run$1;
function find(str, type = null, opts = null) {
  if (type && typeof type === "object") {
    if (opts) {
      throw Error(`linkifyjs: Invalid link type ${type}; must be a string`);
    }
    opts = type;
    type = null;
  }
  const options = new Options(opts);
  const tokens = tokenize(str);
  const filtered = [];
  for (let i = 0; i < tokens.length; i++) {
    const token2 = tokens[i];
    if (token2.isLink && (!type || token2.t === type) && options.check(token2)) {
      filtered.push(token2.toFormattedObject(options));
    }
  }
  return filtered;
}
var UNICODE_WHITESPACE_PATTERN = "[\0-   ᠎ -\u2029 　]";
var UNICODE_WHITESPACE_REGEX = new RegExp(UNICODE_WHITESPACE_PATTERN);
var UNICODE_WHITESPACE_REGEX_END = new RegExp(`${UNICODE_WHITESPACE_PATTERN}$`);
var UNICODE_WHITESPACE_REGEX_GLOBAL = new RegExp(UNICODE_WHITESPACE_PATTERN, "g");
function isValidLinkStructure(tokens) {
  if (tokens.length === 1) {
    return tokens[0].isLink;
  }
  if (tokens.length === 3 && tokens[1].isLink) {
    return ["()", "[]"].includes(tokens[0].value + tokens[2].value);
  }
  return false;
}
function autolink(options) {
  return new Plugin({
    key: new PluginKey("autolink"),
    appendTransaction: (transactions, oldState, newState) => {
      const docChanges = transactions.some((transaction) => transaction.docChanged) && !oldState.doc.eq(newState.doc);
      const preventAutolink = transactions.some((transaction) => transaction.getMeta("preventAutolink"));
      if (!docChanges || preventAutolink) {
        return;
      }
      const { tr: tr2 } = newState;
      const transform = combineTransactionSteps(oldState.doc, [...transactions]);
      const changes = getChangedRanges(transform);
      changes.forEach(({ newRange }) => {
        const nodesInChangedRanges = findChildrenInRange(newState.doc, newRange, (node) => node.isTextblock);
        let textBlock;
        let textBeforeWhitespace;
        if (nodesInChangedRanges.length > 1) {
          textBlock = nodesInChangedRanges[0];
          textBeforeWhitespace = newState.doc.textBetween(
            textBlock.pos,
            textBlock.pos + textBlock.node.nodeSize,
            void 0,
            " "
          );
        } else if (nodesInChangedRanges.length) {
          const endText = newState.doc.textBetween(newRange.from, newRange.to, " ", " ");
          if (!UNICODE_WHITESPACE_REGEX_END.test(endText)) {
            return;
          }
          textBlock = nodesInChangedRanges[0];
          textBeforeWhitespace = newState.doc.textBetween(textBlock.pos, newRange.to, void 0, " ");
        }
        if (textBlock && textBeforeWhitespace) {
          const wordsBeforeWhitespace = textBeforeWhitespace.split(UNICODE_WHITESPACE_REGEX).filter(Boolean);
          if (wordsBeforeWhitespace.length <= 0) {
            return false;
          }
          const lastWordBeforeSpace = wordsBeforeWhitespace[wordsBeforeWhitespace.length - 1];
          const lastWordAndBlockOffset = textBlock.pos + textBeforeWhitespace.lastIndexOf(lastWordBeforeSpace);
          if (!lastWordBeforeSpace) {
            return false;
          }
          const linksBeforeSpace = tokenize(lastWordBeforeSpace).map((t2) => t2.toObject(options.defaultProtocol));
          if (!isValidLinkStructure(linksBeforeSpace)) {
            return false;
          }
          linksBeforeSpace.filter((link) => link.isLink).map((link) => ({
            ...link,
            from: lastWordAndBlockOffset + link.start + 1,
            to: lastWordAndBlockOffset + link.end + 1
          })).filter((link) => {
            if (!newState.schema.marks.code) {
              return true;
            }
            return !newState.doc.rangeHasMark(link.from, link.to, newState.schema.marks.code);
          }).filter((link) => options.validate(link.value)).filter((link) => options.shouldAutoLink(link.value)).forEach((link) => {
            if (getMarksBetween(link.from, link.to, newState.doc).some((item) => item.mark.type === options.type)) {
              return;
            }
            tr2.addMark(
              link.from,
              link.to,
              options.type.create({
                href: link.href
              })
            );
          });
        }
      });
      if (!tr2.steps.length) {
        return;
      }
      return tr2;
    }
  });
}
function clickHandler(options) {
  return new Plugin({
    key: new PluginKey("handleClickLink"),
    props: {
      handleClick: (view, pos, event) => {
        var _a2, _b;
        if (event.button !== 0) {
          return false;
        }
        if (!view.editable) {
          return false;
        }
        let link = null;
        if (event.target instanceof HTMLAnchorElement) {
          link = event.target;
        } else {
          const target = event.target;
          if (!target) {
            return false;
          }
          const root = options.editor.view.dom;
          link = target.closest("a");
          if (link && !root.contains(link)) {
            link = null;
          }
        }
        if (!link) {
          return false;
        }
        let handled = false;
        if (options.enableClickSelection) {
          const commandResult = options.editor.commands.extendMarkRange(options.type.name);
          handled = commandResult;
        }
        if (options.openOnClick) {
          const attrs = getAttributes(view.state, options.type.name);
          const href = (_a2 = link.href) != null ? _a2 : attrs.href;
          const target = (_b = link.target) != null ? _b : attrs.target;
          if (href) {
            window.open(href, target);
            handled = true;
          }
        }
        return handled;
      }
    }
  });
}
function pasteHandler(options) {
  return new Plugin({
    key: new PluginKey("handlePasteLink"),
    props: {
      handlePaste: (view, _event, slice2) => {
        const { shouldAutoLink } = options;
        const { state } = view;
        const { selection } = state;
        const { empty: empty2 } = selection;
        if (empty2) {
          return false;
        }
        let textContent = "";
        slice2.content.forEach((node) => {
          textContent += node.textContent;
        });
        const link = find(textContent, { defaultProtocol: options.defaultProtocol }).find(
          (item) => item.isLink && item.value === textContent
        );
        if (!textContent || !link || shouldAutoLink !== void 0 && !shouldAutoLink(link.value)) {
          return false;
        }
        return options.editor.commands.setMark(options.type, {
          href: link.href
        });
      }
    }
  });
}
function isAllowedUri(uri, protocols) {
  const allowedProtocols = ["http", "https", "ftp", "ftps", "mailto", "tel", "callto", "sms", "cid", "xmpp"];
  if (protocols) {
    protocols.forEach((protocol) => {
      const nextProtocol = typeof protocol === "string" ? protocol : protocol.scheme;
      if (nextProtocol) {
        allowedProtocols.push(nextProtocol);
      }
    });
  }
  return !uri || uri.replace(UNICODE_WHITESPACE_REGEX_GLOBAL, "").match(
    new RegExp(
      // eslint-disable-next-line no-useless-escape
      `^(?:(?:${allowedProtocols.join("|")}):|[^a-z]|[a-z0-9+.-]+(?:[^a-z+.-:]|$))`,
      "i"
    )
  );
}
var Link2 = Mark2.create({
  name: "link",
  priority: 1e3,
  keepOnSplit: false,
  exitable: true,
  onCreate() {
    if (this.options.validate && !this.options.shouldAutoLink) {
      this.options.shouldAutoLink = this.options.validate;
      console.warn("The `validate` option is deprecated. Rename to the `shouldAutoLink` option instead.");
    }
    this.options.protocols.forEach((protocol) => {
      if (typeof protocol === "string") {
        registerCustomProtocol(protocol);
        return;
      }
      registerCustomProtocol(protocol.scheme, protocol.optionalSlashes);
    });
  },
  onDestroy() {
    reset();
  },
  inclusive() {
    return this.options.autolink;
  },
  addOptions() {
    return {
      openOnClick: true,
      enableClickSelection: false,
      linkOnPaste: true,
      autolink: true,
      protocols: [],
      defaultProtocol: "http",
      HTMLAttributes: {
        target: "_blank",
        rel: "noopener noreferrer nofollow",
        class: null
      },
      isAllowedUri: (url, ctx) => !!isAllowedUri(url, ctx.protocols),
      validate: (url) => !!url,
      shouldAutoLink: (url) => {
        const hasProtocol = /^[a-z][a-z0-9+.-]*:\/\//i.test(url);
        const hasMaybeProtocol = /^[a-z][a-z0-9+.-]*:/i.test(url);
        if (hasProtocol || hasMaybeProtocol && !url.includes("@")) {
          return true;
        }
        const urlWithoutUserinfo = url.includes("@") ? url.split("@").pop() : url;
        const hostname = urlWithoutUserinfo.split(/[/?#:]/)[0];
        if (/^\d{1,3}(\.\d{1,3}){3}$/.test(hostname)) {
          return false;
        }
        if (!/\./.test(hostname)) {
          return false;
        }
        return true;
      }
    };
  },
  addAttributes() {
    return {
      href: {
        default: null,
        parseHTML(element) {
          return element.getAttribute("href");
        }
      },
      target: {
        default: this.options.HTMLAttributes.target
      },
      rel: {
        default: this.options.HTMLAttributes.rel
      },
      class: {
        default: this.options.HTMLAttributes.class
      },
      title: {
        default: null
      }
    };
  },
  parseHTML() {
    return [
      {
        tag: "a[href]",
        getAttrs: (dom) => {
          const href = dom.getAttribute("href");
          if (!href || !this.options.isAllowedUri(href, {
            defaultValidate: (url) => !!isAllowedUri(url, this.options.protocols),
            protocols: this.options.protocols,
            defaultProtocol: this.options.defaultProtocol
          })) {
            return false;
          }
          return null;
        }
      }
    ];
  },
  renderHTML({ HTMLAttributes }) {
    if (!this.options.isAllowedUri(HTMLAttributes.href, {
      defaultValidate: (href) => !!isAllowedUri(href, this.options.protocols),
      protocols: this.options.protocols,
      defaultProtocol: this.options.defaultProtocol
    })) {
      return ["a", mergeAttributes(this.options.HTMLAttributes, { ...HTMLAttributes, href: "" }), 0];
    }
    return ["a", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
  },
  markdownTokenName: "link",
  parseMarkdown: (token2, helpers) => {
    return helpers.applyMark("link", helpers.parseInline(token2.tokens || []), {
      href: token2.href,
      title: token2.title || null
    });
  },
  renderMarkdown: (node, h2) => {
    var _a2, _b, _c, _d;
    const href = (_b = (_a2 = node.attrs) == null ? void 0 : _a2.href) != null ? _b : "";
    const title = (_d = (_c = node.attrs) == null ? void 0 : _c.title) != null ? _d : "";
    const text = h2.renderChildren(node);
    return title ? `[${text}](${href} "${title}")` : `[${text}](${href})`;
  },
  addCommands() {
    return {
      setLink: (attributes) => ({ chain }) => {
        const { href } = attributes;
        if (!this.options.isAllowedUri(href, {
          defaultValidate: (url) => !!isAllowedUri(url, this.options.protocols),
          protocols: this.options.protocols,
          defaultProtocol: this.options.defaultProtocol
        })) {
          return false;
        }
        return chain().setMark(this.name, attributes).setMeta("preventAutolink", true).run();
      },
      toggleLink: (attributes) => ({ chain }) => {
        const { href } = attributes || {};
        if (href && !this.options.isAllowedUri(href, {
          defaultValidate: (url) => !!isAllowedUri(url, this.options.protocols),
          protocols: this.options.protocols,
          defaultProtocol: this.options.defaultProtocol
        })) {
          return false;
        }
        return chain().toggleMark(this.name, attributes, { extendEmptyMarkRange: true }).setMeta("preventAutolink", true).run();
      },
      unsetLink: () => ({ chain }) => {
        return chain().unsetMark(this.name, { extendEmptyMarkRange: true }).setMeta("preventAutolink", true).run();
      }
    };
  },
  addPasteRules() {
    return [
      markPasteRule({
        find: (text) => {
          const foundLinks = [];
          if (text) {
            const { protocols, defaultProtocol } = this.options;
            const links = find(text).filter(
              (item) => item.isLink && this.options.isAllowedUri(item.value, {
                defaultValidate: (href) => !!isAllowedUri(href, protocols),
                protocols,
                defaultProtocol
              })
            );
            if (links.length) {
              links.forEach((link) => {
                if (!this.options.shouldAutoLink(link.value)) {
                  return;
                }
                foundLinks.push({
                  text: link.value,
                  data: {
                    href: link.href
                  },
                  index: link.start
                });
              });
            }
          }
          return foundLinks;
        },
        type: this.type,
        getAttributes: (match) => {
          var _a2;
          return {
            href: (_a2 = match.data) == null ? void 0 : _a2.href
          };
        }
      })
    ];
  },
  addProseMirrorPlugins() {
    const plugins = [];
    const { protocols, defaultProtocol } = this.options;
    if (this.options.autolink) {
      plugins.push(
        autolink({
          type: this.type,
          defaultProtocol: this.options.defaultProtocol,
          validate: (url) => this.options.isAllowedUri(url, {
            defaultValidate: (href) => !!isAllowedUri(href, protocols),
            protocols,
            defaultProtocol
          }),
          shouldAutoLink: this.options.shouldAutoLink
        })
      );
    }
    plugins.push(
      clickHandler({
        type: this.type,
        editor: this.editor,
        openOnClick: this.options.openOnClick === "whenNotEditable" ? true : this.options.openOnClick,
        enableClickSelection: this.options.enableClickSelection
      })
    );
    if (this.options.linkOnPaste) {
      plugins.push(
        pasteHandler({
          editor: this.editor,
          defaultProtocol: this.options.defaultProtocol,
          type: this.type,
          shouldAutoLink: this.options.shouldAutoLink
        })
      );
    }
    return plugins;
  }
});
var EMPTY_PARAGRAPH_MARKDOWN = "&nbsp;";
var NBSP_CHAR = " ";
var Paragraph = Node3.create({
  name: "paragraph",
  priority: 1e3,
  addOptions() {
    return {
      HTMLAttributes: {}
    };
  },
  group: "block",
  content: "inline*",
  parseHTML() {
    return [{ tag: "p" }];
  },
  renderHTML({ HTMLAttributes }) {
    return ["p", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
  },
  parseMarkdown: (token2, helpers) => {
    const tokens = token2.tokens || [];
    if (tokens.length === 1 && tokens[0].type === "image") {
      return helpers.parseChildren([tokens[0]]);
    }
    const content = helpers.parseInline(tokens);
    if (content.length === 1 && content[0].type === "text" && (content[0].text === EMPTY_PARAGRAPH_MARKDOWN || content[0].text === NBSP_CHAR)) {
      return helpers.createNode("paragraph", void 0, []);
    }
    return helpers.createNode("paragraph", void 0, content);
  },
  renderMarkdown: (node, h2) => {
    if (!node) {
      return "";
    }
    const content = Array.isArray(node.content) ? node.content : [];
    if (content.length === 0) {
      return EMPTY_PARAGRAPH_MARKDOWN;
    }
    return h2.renderChildren(content);
  },
  addCommands() {
    return {
      setParagraph: () => ({ commands }) => {
        return commands.setNode(this.name);
      }
    };
  },
  addKeyboardShortcuts() {
    return {
      "Mod-Alt-0": () => this.editor.commands.setParagraph()
    };
  }
});
var inputRegex = /(?:^|\s)(~~(?!\s+~~)((?:[^~]+))~~(?!\s+~~))$/;
var pasteRegex = /(?:^|\s)(~~(?!\s+~~)((?:[^~]+))~~(?!\s+~~))/g;
var Strike = Mark2.create({
  name: "strike",
  addOptions() {
    return {
      HTMLAttributes: {}
    };
  },
  parseHTML() {
    return [
      {
        tag: "s"
      },
      {
        tag: "del"
      },
      {
        tag: "strike"
      },
      {
        style: "text-decoration",
        consuming: false,
        getAttrs: (style2) => style2.includes("line-through") ? {} : false
      }
    ];
  },
  renderHTML({ HTMLAttributes }) {
    return ["s", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
  },
  markdownTokenName: "del",
  parseMarkdown: (token2, helpers) => {
    return helpers.applyMark("strike", helpers.parseInline(token2.tokens || []));
  },
  renderMarkdown: (node, h2) => {
    return `~~${h2.renderChildren(node)}~~`;
  },
  addCommands() {
    return {
      setStrike: () => ({ commands }) => {
        return commands.setMark(this.name);
      },
      toggleStrike: () => ({ commands }) => {
        return commands.toggleMark(this.name);
      },
      unsetStrike: () => ({ commands }) => {
        return commands.unsetMark(this.name);
      }
    };
  },
  addKeyboardShortcuts() {
    return {
      "Mod-Shift-s": () => this.editor.commands.toggleStrike()
    };
  },
  addInputRules() {
    return [
      markInputRule({
        find: inputRegex,
        type: this.type
      })
    ];
  },
  addPasteRules() {
    return [
      markPasteRule({
        find: pasteRegex,
        type: this.type
      })
    ];
  }
});
var Text = Node3.create({
  name: "text",
  group: "inline",
  parseMarkdown: (token2) => {
    return {
      type: "text",
      text: token2.text || ""
    };
  },
  renderMarkdown: (node) => node.text || ""
});
var Underline = Mark2.create({
  name: "underline",
  addOptions() {
    return {
      HTMLAttributes: {}
    };
  },
  parseHTML() {
    return [
      {
        tag: "u"
      },
      {
        style: "text-decoration",
        consuming: false,
        getAttrs: (style2) => style2.includes("underline") ? {} : false
      }
    ];
  },
  renderHTML({ HTMLAttributes }) {
    return ["u", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
  },
  parseMarkdown(token2, helpers) {
    return helpers.applyMark(this.name || "underline", helpers.parseInline(token2.tokens || []));
  },
  renderMarkdown(node, helpers) {
    return `++${helpers.renderChildren(node)}++`;
  },
  markdownTokenizer: {
    name: "underline",
    level: "inline",
    start(src) {
      return src.indexOf("++");
    },
    tokenize(src, _tokens, lexer) {
      const rule = /^(\+\+)([\s\S]+?)(\+\+)/;
      const match = rule.exec(src);
      if (!match) {
        return void 0;
      }
      const innerContent = match[2].trim();
      return {
        type: "underline",
        raw: match[0],
        text: innerContent,
        tokens: lexer.inlineTokens(innerContent)
      };
    }
  },
  addCommands() {
    return {
      setUnderline: () => ({ commands }) => {
        return commands.setMark(this.name);
      },
      toggleUnderline: () => ({ commands }) => {
        return commands.toggleMark(this.name);
      },
      unsetUnderline: () => ({ commands }) => {
        return commands.unsetMark(this.name);
      }
    };
  },
  addKeyboardShortcuts() {
    return {
      "Mod-u": () => this.editor.commands.toggleUnderline(),
      "Mod-U": () => this.editor.commands.toggleUnderline()
    };
  }
});
var StarterKit = Extension.create({
  name: "starterKit",
  addExtensions() {
    var _a2, _b, _c, _d;
    const extensions = [];
    if (this.options.bold !== false) {
      extensions.push(Bold.configure(this.options.bold));
    }
    if (this.options.blockquote !== false) {
      extensions.push(Blockquote.configure(this.options.blockquote));
    }
    if (this.options.bulletList !== false) {
      extensions.push(BulletList.configure(this.options.bulletList));
    }
    if (this.options.code !== false) {
      extensions.push(Code.configure(this.options.code));
    }
    if (this.options.codeBlock !== false) {
      extensions.push(CodeBlock.configure(this.options.codeBlock));
    }
    if (this.options.document !== false) {
      extensions.push(Document$1.configure(this.options.document));
    }
    if (this.options.dropcursor !== false) {
      extensions.push(Dropcursor.configure(this.options.dropcursor));
    }
    if (this.options.gapcursor !== false) {
      extensions.push(Gapcursor.configure(this.options.gapcursor));
    }
    if (this.options.hardBreak !== false) {
      extensions.push(HardBreak.configure(this.options.hardBreak));
    }
    if (this.options.heading !== false) {
      extensions.push(Heading.configure(this.options.heading));
    }
    if (this.options.undoRedo !== false) {
      extensions.push(UndoRedo.configure(this.options.undoRedo));
    }
    if (this.options.horizontalRule !== false) {
      extensions.push(HorizontalRule.configure(this.options.horizontalRule));
    }
    if (this.options.italic !== false) {
      extensions.push(Italic.configure(this.options.italic));
    }
    if (this.options.listItem !== false) {
      extensions.push(ListItem.configure(this.options.listItem));
    }
    if (this.options.listKeymap !== false) {
      extensions.push(ListKeymap.configure((_a2 = this.options) == null ? void 0 : _a2.listKeymap));
    }
    if (this.options.link !== false) {
      extensions.push(Link2.configure((_b = this.options) == null ? void 0 : _b.link));
    }
    if (this.options.orderedList !== false) {
      extensions.push(OrderedList.configure(this.options.orderedList));
    }
    if (this.options.paragraph !== false) {
      extensions.push(Paragraph.configure(this.options.paragraph));
    }
    if (this.options.strike !== false) {
      extensions.push(Strike.configure(this.options.strike));
    }
    if (this.options.text !== false) {
      extensions.push(Text.configure(this.options.text));
    }
    if (this.options.underline !== false) {
      extensions.push(Underline.configure((_c = this.options) == null ? void 0 : _c.underline));
    }
    if (this.options.trailingNode !== false) {
      extensions.push(TrailingNode.configure((_d = this.options) == null ? void 0 : _d.trailingNode));
    }
    return extensions;
  }
});
var index_default = StarterKit;
var now_1;
var hasRequiredNow;
function requireNow() {
  if (hasRequiredNow) return now_1;
  hasRequiredNow = 1;
  var root = require_root();
  var now = function() {
    return root.Date.now();
  };
  now_1 = now;
  return now_1;
}
var _trimmedEndIndex;
var hasRequired_trimmedEndIndex;
function require_trimmedEndIndex() {
  if (hasRequired_trimmedEndIndex) return _trimmedEndIndex;
  hasRequired_trimmedEndIndex = 1;
  var reWhitespace = /\s/;
  function trimmedEndIndex(string) {
    var index2 = string.length;
    while (index2-- && reWhitespace.test(string.charAt(index2))) {
    }
    return index2;
  }
  _trimmedEndIndex = trimmedEndIndex;
  return _trimmedEndIndex;
}
var _baseTrim;
var hasRequired_baseTrim;
function require_baseTrim() {
  if (hasRequired_baseTrim) return _baseTrim;
  hasRequired_baseTrim = 1;
  var trimmedEndIndex = require_trimmedEndIndex();
  var reTrimStart = /^\s+/;
  function baseTrim(string) {
    return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, "") : string;
  }
  _baseTrim = baseTrim;
  return _baseTrim;
}
var isSymbol_1;
var hasRequiredIsSymbol;
function requireIsSymbol() {
  if (hasRequiredIsSymbol) return isSymbol_1;
  hasRequiredIsSymbol = 1;
  var baseGetTag = require_baseGetTag(), isObjectLike = requireIsObjectLike();
  var symbolTag = "[object Symbol]";
  function isSymbol2(value) {
    return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag;
  }
  isSymbol_1 = isSymbol2;
  return isSymbol_1;
}
var toNumber_1;
var hasRequiredToNumber;
function requireToNumber() {
  if (hasRequiredToNumber) return toNumber_1;
  hasRequiredToNumber = 1;
  var baseTrim = require_baseTrim(), isObject2 = requireIsObject(), isSymbol2 = requireIsSymbol();
  var NAN = 0 / 0;
  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
  var reIsBinary = /^0b[01]+$/i;
  var reIsOctal = /^0o[0-7]+$/i;
  var freeParseInt = parseInt;
  function toNumber2(value) {
    if (typeof value == "number") {
      return value;
    }
    if (isSymbol2(value)) {
      return NAN;
    }
    if (isObject2(value)) {
      var other = typeof value.valueOf == "function" ? value.valueOf() : value;
      value = isObject2(other) ? other + "" : other;
    }
    if (typeof value != "string") {
      return value === 0 ? value : +value;
    }
    value = baseTrim(value);
    var isBinary = reIsBinary.test(value);
    return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
  }
  toNumber_1 = toNumber2;
  return toNumber_1;
}
var debounce_1;
var hasRequiredDebounce;
function requireDebounce() {
  if (hasRequiredDebounce) return debounce_1;
  hasRequiredDebounce = 1;
  var isObject2 = requireIsObject(), now = requireNow(), toNumber2 = requireToNumber();
  var FUNC_ERROR_TEXT = "Expected a function";
  var nativeMax = Math.max, nativeMin = Math.min;
  function debounce(func, wait, options) {
    var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true;
    if (typeof func != "function") {
      throw new TypeError(FUNC_ERROR_TEXT);
    }
    wait = toNumber2(wait) || 0;
    if (isObject2(options)) {
      leading = !!options.leading;
      maxing = "maxWait" in options;
      maxWait = maxing ? nativeMax(toNumber2(options.maxWait) || 0, wait) : maxWait;
      trailing = "trailing" in options ? !!options.trailing : trailing;
    }
    function invokeFunc(time) {
      var args = lastArgs, thisArg = lastThis;
      lastArgs = lastThis = void 0;
      lastInvokeTime = time;
      result = func.apply(thisArg, args);
      return result;
    }
    function leadingEdge(time) {
      lastInvokeTime = time;
      timerId = setTimeout(timerExpired, wait);
      return leading ? invokeFunc(time) : result;
    }
    function remainingWait(time) {
      var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall;
      return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;
    }
    function shouldInvoke(time) {
      var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime;
      return lastCallTime === void 0 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
    }
    function timerExpired() {
      var time = now();
      if (shouldInvoke(time)) {
        return trailingEdge(time);
      }
      timerId = setTimeout(timerExpired, remainingWait(time));
    }
    function trailingEdge(time) {
      timerId = void 0;
      if (trailing && lastArgs) {
        return invokeFunc(time);
      }
      lastArgs = lastThis = void 0;
      return result;
    }
    function cancel() {
      if (timerId !== void 0) {
        clearTimeout(timerId);
      }
      lastInvokeTime = 0;
      lastArgs = lastCallTime = lastThis = timerId = void 0;
    }
    function flush() {
      return timerId === void 0 ? result : trailingEdge(now());
    }
    function debounced() {
      var time = now(), isInvoking = shouldInvoke(time);
      lastArgs = arguments;
      lastThis = this;
      lastCallTime = time;
      if (isInvoking) {
        if (timerId === void 0) {
          return leadingEdge(lastCallTime);
        }
        if (maxing) {
          clearTimeout(timerId);
          timerId = setTimeout(timerExpired, wait);
          return invokeFunc(lastCallTime);
        }
      }
      if (timerId === void 0) {
        timerId = setTimeout(timerExpired, wait);
      }
      return result;
    }
    debounced.cancel = cancel;
    debounced.flush = flush;
    return debounced;
  }
  debounce_1 = debounce;
  return debounce_1;
}
var debounceExports = requireDebounce();
const _debounce = /* @__PURE__ */ getDefaultExportFromCjs(debounceExports);
const sides = ["top", "right", "bottom", "left"];
const alignments = ["start", "end"];
const placements = /* @__PURE__ */ sides.reduce((acc, side) => acc.concat(side, side + "-" + alignments[0], side + "-" + alignments[1]), []);
const min = Math.min;
const max = Math.max;
const round = Math.round;
const createCoords = (v2) => ({
  x: v2,
  y: v2
});
const oppositeSideMap = {
  left: "right",
  right: "left",
  bottom: "top",
  top: "bottom"
};
const oppositeAlignmentMap = {
  start: "end",
  end: "start"
};
function clamp(start, value, end) {
  return max(start, min(value, end));
}
function evaluate(value, param) {
  return typeof value === "function" ? value(param) : value;
}
function getSide(placement) {
  return placement.split("-")[0];
}
function getAlignment(placement) {
  return placement.split("-")[1];
}
function getOppositeAxis(axis) {
  return axis === "x" ? "y" : "x";
}
function getAxisLength(axis) {
  return axis === "y" ? "height" : "width";
}
const yAxisSides = /* @__PURE__ */ new Set(["top", "bottom"]);
function getSideAxis(placement) {
  return yAxisSides.has(getSide(placement)) ? "y" : "x";
}
function getAlignmentAxis(placement) {
  return getOppositeAxis(getSideAxis(placement));
}
function getAlignmentSides(placement, rects, rtl) {
  if (rtl === void 0) {
    rtl = false;
  }
  const alignment = getAlignment(placement);
  const alignmentAxis = getAlignmentAxis(placement);
  const length = getAxisLength(alignmentAxis);
  let mainAlignmentSide = alignmentAxis === "x" ? alignment === (rtl ? "end" : "start") ? "right" : "left" : alignment === "start" ? "bottom" : "top";
  if (rects.reference[length] > rects.floating[length]) {
    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);
  }
  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];
}
function getExpandedPlacements(placement) {
  const oppositePlacement = getOppositePlacement(placement);
  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];
}
function getOppositeAlignmentPlacement(placement) {
  return placement.replace(/start|end/g, (alignment) => oppositeAlignmentMap[alignment]);
}
const lrPlacement = ["left", "right"];
const rlPlacement = ["right", "left"];
const tbPlacement = ["top", "bottom"];
const btPlacement = ["bottom", "top"];
function getSideList(side, isStart, rtl) {
  switch (side) {
    case "top":
    case "bottom":
      if (rtl) return isStart ? rlPlacement : lrPlacement;
      return isStart ? lrPlacement : rlPlacement;
    case "left":
    case "right":
      return isStart ? tbPlacement : btPlacement;
    default:
      return [];
  }
}
function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {
  const alignment = getAlignment(placement);
  let list = getSideList(getSide(placement), direction === "start", rtl);
  if (alignment) {
    list = list.map((side) => side + "-" + alignment);
    if (flipAlignment) {
      list = list.concat(list.map(getOppositeAlignmentPlacement));
    }
  }
  return list;
}
function getOppositePlacement(placement) {
  return placement.replace(/left|right|bottom|top/g, (side) => oppositeSideMap[side]);
}
function expandPaddingObject(padding) {
  return {
    top: 0,
    right: 0,
    bottom: 0,
    left: 0,
    ...padding
  };
}
function getPaddingObject(padding) {
  return typeof padding !== "number" ? expandPaddingObject(padding) : {
    top: padding,
    right: padding,
    bottom: padding,
    left: padding
  };
}
function rectToClientRect(rect) {
  const {
    x: x2,
    y: y2,
    width,
    height
  } = rect;
  return {
    width,
    height,
    top: y2,
    left: x2,
    right: x2 + width,
    bottom: y2 + height,
    x: x2,
    y: y2
  };
}
function computeCoordsFromPlacement(_ref, placement, rtl) {
  let {
    reference,
    floating
  } = _ref;
  const sideAxis = getSideAxis(placement);
  const alignmentAxis = getAlignmentAxis(placement);
  const alignLength = getAxisLength(alignmentAxis);
  const side = getSide(placement);
  const isVertical = sideAxis === "y";
  const commonX = reference.x + reference.width / 2 - floating.width / 2;
  const commonY = reference.y + reference.height / 2 - floating.height / 2;
  const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;
  let coords;
  switch (side) {
    case "top":
      coords = {
        x: commonX,
        y: reference.y - floating.height
      };
      break;
    case "bottom":
      coords = {
        x: commonX,
        y: reference.y + reference.height
      };
      break;
    case "right":
      coords = {
        x: reference.x + reference.width,
        y: commonY
      };
      break;
    case "left":
      coords = {
        x: reference.x - floating.width,
        y: commonY
      };
      break;
    default:
      coords = {
        x: reference.x,
        y: reference.y
      };
  }
  switch (getAlignment(placement)) {
    case "start":
      coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);
      break;
    case "end":
      coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);
      break;
  }
  return coords;
}
async function detectOverflow(state, options) {
  var _await$platform$isEle;
  if (options === void 0) {
    options = {};
  }
  const {
    x: x2,
    y: y2,
    platform: platform2,
    rects,
    elements,
    strategy
  } = state;
  const {
    boundary = "clippingAncestors",
    rootBoundary = "viewport",
    elementContext = "floating",
    altBoundary = false,
    padding = 0
  } = evaluate(options, state);
  const paddingObject = getPaddingObject(padding);
  const altContext = elementContext === "floating" ? "reference" : "floating";
  const element = elements[altBoundary ? altContext : elementContext];
  const clippingClientRect = rectToClientRect(await platform2.getClippingRect({
    element: ((_await$platform$isEle = await (platform2.isElement == null ? void 0 : platform2.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || await (platform2.getDocumentElement == null ? void 0 : platform2.getDocumentElement(elements.floating)),
    boundary,
    rootBoundary,
    strategy
  }));
  const rect = elementContext === "floating" ? {
    x: x2,
    y: y2,
    width: rects.floating.width,
    height: rects.floating.height
  } : rects.reference;
  const offsetParent = await (platform2.getOffsetParent == null ? void 0 : platform2.getOffsetParent(elements.floating));
  const offsetScale = await (platform2.isElement == null ? void 0 : platform2.isElement(offsetParent)) ? await (platform2.getScale == null ? void 0 : platform2.getScale(offsetParent)) || {
    x: 1,
    y: 1
  } : {
    x: 1,
    y: 1
  };
  const elementClientRect = rectToClientRect(platform2.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform2.convertOffsetParentRelativeRectToViewportRelativeRect({
    elements,
    rect,
    offsetParent,
    strategy
  }) : rect);
  return {
    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,
    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,
    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,
    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x
  };
}
const computePosition$1 = async (reference, floating, config) => {
  const {
    placement = "bottom",
    strategy = "absolute",
    middleware = [],
    platform: platform2
  } = config;
  const validMiddleware = middleware.filter(Boolean);
  const rtl = await (platform2.isRTL == null ? void 0 : platform2.isRTL(floating));
  let rects = await platform2.getElementRects({
    reference,
    floating,
    strategy
  });
  let {
    x: x2,
    y: y2
  } = computeCoordsFromPlacement(rects, placement, rtl);
  let statefulPlacement = placement;
  let middlewareData = {};
  let resetCount = 0;
  for (let i = 0; i < validMiddleware.length; i++) {
    var _platform$detectOverf;
    const {
      name,
      fn
    } = validMiddleware[i];
    const {
      x: nextX,
      y: nextY,
      data,
      reset: reset2
    } = await fn({
      x: x2,
      y: y2,
      initialPlacement: placement,
      placement: statefulPlacement,
      strategy,
      middlewareData,
      rects,
      platform: {
        ...platform2,
        detectOverflow: (_platform$detectOverf = platform2.detectOverflow) != null ? _platform$detectOverf : detectOverflow
      },
      elements: {
        reference,
        floating
      }
    });
    x2 = nextX != null ? nextX : x2;
    y2 = nextY != null ? nextY : y2;
    middlewareData = {
      ...middlewareData,
      [name]: {
        ...middlewareData[name],
        ...data
      }
    };
    if (reset2 && resetCount <= 50) {
      resetCount++;
      if (typeof reset2 === "object") {
        if (reset2.placement) {
          statefulPlacement = reset2.placement;
        }
        if (reset2.rects) {
          rects = reset2.rects === true ? await platform2.getElementRects({
            reference,
            floating,
            strategy
          }) : reset2.rects;
        }
        ({
          x: x2,
          y: y2
        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));
      }
      i = -1;
    }
  }
  return {
    x: x2,
    y: y2,
    placement: statefulPlacement,
    strategy,
    middlewareData
  };
};
const arrow$2 = (options) => ({
  name: "arrow",
  options,
  async fn(state) {
    const {
      x: x2,
      y: y2,
      placement,
      rects,
      platform: platform2,
      elements,
      middlewareData
    } = state;
    const {
      element,
      padding = 0
    } = evaluate(options, state) || {};
    if (element == null) {
      return {};
    }
    const paddingObject = getPaddingObject(padding);
    const coords = {
      x: x2,
      y: y2
    };
    const axis = getAlignmentAxis(placement);
    const length = getAxisLength(axis);
    const arrowDimensions = await platform2.getDimensions(element);
    const isYAxis = axis === "y";
    const minProp = isYAxis ? "top" : "left";
    const maxProp = isYAxis ? "bottom" : "right";
    const clientProp = isYAxis ? "clientHeight" : "clientWidth";
    const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];
    const startDiff = coords[axis] - rects.reference[axis];
    const arrowOffsetParent = await (platform2.getOffsetParent == null ? void 0 : platform2.getOffsetParent(element));
    let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;
    if (!clientSize || !await (platform2.isElement == null ? void 0 : platform2.isElement(arrowOffsetParent))) {
      clientSize = elements.floating[clientProp] || rects.floating[length];
    }
    const centerToReference = endDiff / 2 - startDiff / 2;
    const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;
    const minPadding = min(paddingObject[minProp], largestPossiblePadding);
    const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);
    const min$1 = minPadding;
    const max2 = clientSize - arrowDimensions[length] - maxPadding;
    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;
    const offset2 = clamp(min$1, center, max2);
    const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset2 && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;
    const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max2 : 0;
    return {
      [axis]: coords[axis] + alignmentOffset,
      data: {
        [axis]: offset2,
        centerOffset: center - offset2 - alignmentOffset,
        ...shouldAddOffset && {
          alignmentOffset
        }
      },
      reset: shouldAddOffset
    };
  }
});
function getPlacementList(alignment, autoAlignment, allowedPlacements) {
  const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter((placement) => getAlignment(placement) === alignment), ...allowedPlacements.filter((placement) => getAlignment(placement) !== alignment)] : allowedPlacements.filter((placement) => getSide(placement) === placement);
  return allowedPlacementsSortedByAlignment.filter((placement) => {
    if (alignment) {
      return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);
    }
    return true;
  });
}
const autoPlacement$1 = function(options) {
  if (options === void 0) {
    options = {};
  }
  return {
    name: "autoPlacement",
    options,
    async fn(state) {
      var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;
      const {
        rects,
        middlewareData,
        placement,
        platform: platform2,
        elements
      } = state;
      const {
        crossAxis = false,
        alignment,
        allowedPlacements = placements,
        autoAlignment = true,
        ...detectOverflowOptions
      } = evaluate(options, state);
      const placements$1 = alignment !== void 0 || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;
      const overflow = await platform2.detectOverflow(state, detectOverflowOptions);
      const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;
      const currentPlacement = placements$1[currentIndex];
      if (currentPlacement == null) {
        return {};
      }
      const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform2.isRTL == null ? void 0 : platform2.isRTL(elements.floating)));
      if (placement !== currentPlacement) {
        return {
          reset: {
            placement: placements$1[0]
          }
        };
      }
      const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];
      const allOverflows = [...((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || [], {
        placement: currentPlacement,
        overflows: currentOverflows
      }];
      const nextPlacement = placements$1[currentIndex + 1];
      if (nextPlacement) {
        return {
          data: {
            index: currentIndex + 1,
            overflows: allOverflows
          },
          reset: {
            placement: nextPlacement
          }
        };
      }
      const placementsSortedByMostSpace = allOverflows.map((d2) => {
        const alignment2 = getAlignment(d2.placement);
        return [d2.placement, alignment2 && crossAxis ? (
          // Check along the mainAxis and main crossAxis side.
          d2.overflows.slice(0, 2).reduce((acc, v2) => acc + v2, 0)
        ) : (
          // Check only the mainAxis.
          d2.overflows[0]
        ), d2.overflows];
      }).sort((a2, b2) => a2[1] - b2[1]);
      const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter((d2) => d2[2].slice(
        0,
        // Aligned placements should not check their opposite crossAxis
        // side.
        getAlignment(d2[0]) ? 2 : 3
      ).every((v2) => v2 <= 0));
      const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];
      if (resetPlacement !== placement) {
        return {
          data: {
            index: currentIndex + 1,
            overflows: allOverflows
          },
          reset: {
            placement: resetPlacement
          }
        };
      }
      return {};
    }
  };
};
const flip$1 = function(options) {
  if (options === void 0) {
    options = {};
  }
  return {
    name: "flip",
    options,
    async fn(state) {
      var _middlewareData$arrow, _middlewareData$flip;
      const {
        placement,
        middlewareData,
        rects,
        initialPlacement,
        platform: platform2,
        elements
      } = state;
      const {
        mainAxis: checkMainAxis = true,
        crossAxis: checkCrossAxis = true,
        fallbackPlacements: specifiedFallbackPlacements,
        fallbackStrategy = "bestFit",
        fallbackAxisSideDirection = "none",
        flipAlignment = true,
        ...detectOverflowOptions
      } = evaluate(options, state);
      if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {
        return {};
      }
      const side = getSide(placement);
      const initialSideAxis = getSideAxis(initialPlacement);
      const isBasePlacement = getSide(initialPlacement) === initialPlacement;
      const rtl = await (platform2.isRTL == null ? void 0 : platform2.isRTL(elements.floating));
      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));
      const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== "none";
      if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {
        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));
      }
      const placements2 = [initialPlacement, ...fallbackPlacements];
      const overflow = await platform2.detectOverflow(state, detectOverflowOptions);
      const overflows = [];
      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];
      if (checkMainAxis) {
        overflows.push(overflow[side]);
      }
      if (checkCrossAxis) {
        const sides2 = getAlignmentSides(placement, rects, rtl);
        overflows.push(overflow[sides2[0]], overflow[sides2[1]]);
      }
      overflowsData = [...overflowsData, {
        placement,
        overflows
      }];
      if (!overflows.every((side2) => side2 <= 0)) {
        var _middlewareData$flip2, _overflowsData$filter;
        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;
        const nextPlacement = placements2[nextIndex];
        if (nextPlacement) {
          const ignoreCrossAxisOverflow = checkCrossAxis === "alignment" ? initialSideAxis !== getSideAxis(nextPlacement) : false;
          if (!ignoreCrossAxisOverflow || // We leave the current main axis only if every placement on that axis
          // overflows the main axis.
          overflowsData.every((d2) => getSideAxis(d2.placement) === initialSideAxis ? d2.overflows[0] > 0 : true)) {
            return {
              data: {
                index: nextIndex,
                overflows: overflowsData
              },
              reset: {
                placement: nextPlacement
              }
            };
          }
        }
        let resetPlacement = (_overflowsData$filter = overflowsData.filter((d2) => d2.overflows[0] <= 0).sort((a2, b2) => a2.overflows[1] - b2.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;
        if (!resetPlacement) {
          switch (fallbackStrategy) {
            case "bestFit": {
              var _overflowsData$filter2;
              const placement2 = (_overflowsData$filter2 = overflowsData.filter((d2) => {
                if (hasFallbackAxisSideDirection) {
                  const currentSideAxis = getSideAxis(d2.placement);
                  return currentSideAxis === initialSideAxis || // Create a bias to the `y` side axis due to horizontal
                  // reading directions favoring greater width.
                  currentSideAxis === "y";
                }
                return true;
              }).map((d2) => [d2.placement, d2.overflows.filter((overflow2) => overflow2 > 0).reduce((acc, overflow2) => acc + overflow2, 0)]).sort((a2, b2) => a2[1] - b2[1])[0]) == null ? void 0 : _overflowsData$filter2[0];
              if (placement2) {
                resetPlacement = placement2;
              }
              break;
            }
            case "initialPlacement":
              resetPlacement = initialPlacement;
              break;
          }
        }
        if (placement !== resetPlacement) {
          return {
            reset: {
              placement: resetPlacement
            }
          };
        }
      }
      return {};
    }
  };
};
function getSideOffsets(overflow, rect) {
  return {
    top: overflow.top - rect.height,
    right: overflow.right - rect.width,
    bottom: overflow.bottom - rect.height,
    left: overflow.left - rect.width
  };
}
function isAnySideFullyClipped(overflow) {
  return sides.some((side) => overflow[side] >= 0);
}
const hide$1 = function(options) {
  if (options === void 0) {
    options = {};
  }
  return {
    name: "hide",
    options,
    async fn(state) {
      const {
        rects,
        platform: platform2
      } = state;
      const {
        strategy = "referenceHidden",
        ...detectOverflowOptions
      } = evaluate(options, state);
      switch (strategy) {
        case "referenceHidden": {
          const overflow = await platform2.detectOverflow(state, {
            ...detectOverflowOptions,
            elementContext: "reference"
          });
          const offsets = getSideOffsets(overflow, rects.reference);
          return {
            data: {
              referenceHiddenOffsets: offsets,
              referenceHidden: isAnySideFullyClipped(offsets)
            }
          };
        }
        case "escaped": {
          const overflow = await platform2.detectOverflow(state, {
            ...detectOverflowOptions,
            altBoundary: true
          });
          const offsets = getSideOffsets(overflow, rects.floating);
          return {
            data: {
              escapedOffsets: offsets,
              escaped: isAnySideFullyClipped(offsets)
            }
          };
        }
        default: {
          return {};
        }
      }
    }
  };
};
function getBoundingRect(rects) {
  const minX = min(...rects.map((rect) => rect.left));
  const minY = min(...rects.map((rect) => rect.top));
  const maxX = max(...rects.map((rect) => rect.right));
  const maxY = max(...rects.map((rect) => rect.bottom));
  return {
    x: minX,
    y: minY,
    width: maxX - minX,
    height: maxY - minY
  };
}
function getRectsByLine(rects) {
  const sortedRects = rects.slice().sort((a2, b2) => a2.y - b2.y);
  const groups = [];
  let prevRect = null;
  for (let i = 0; i < sortedRects.length; i++) {
    const rect = sortedRects[i];
    if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {
      groups.push([rect]);
    } else {
      groups[groups.length - 1].push(rect);
    }
    prevRect = rect;
  }
  return groups.map((rect) => rectToClientRect(getBoundingRect(rect)));
}
const inline$1 = function(options) {
  if (options === void 0) {
    options = {};
  }
  return {
    name: "inline",
    options,
    async fn(state) {
      const {
        placement,
        elements,
        rects,
        platform: platform2,
        strategy
      } = state;
      const {
        padding = 2,
        x: x2,
        y: y2
      } = evaluate(options, state);
      const nativeClientRects = Array.from(await (platform2.getClientRects == null ? void 0 : platform2.getClientRects(elements.reference)) || []);
      const clientRects = getRectsByLine(nativeClientRects);
      const fallback = rectToClientRect(getBoundingRect(nativeClientRects));
      const paddingObject = getPaddingObject(padding);
      function getBoundingClientRect2() {
        if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x2 != null && y2 != null) {
          return clientRects.find((rect) => x2 > rect.left - paddingObject.left && x2 < rect.right + paddingObject.right && y2 > rect.top - paddingObject.top && y2 < rect.bottom + paddingObject.bottom) || fallback;
        }
        if (clientRects.length >= 2) {
          if (getSideAxis(placement) === "y") {
            const firstRect = clientRects[0];
            const lastRect = clientRects[clientRects.length - 1];
            const isTop = getSide(placement) === "top";
            const top2 = firstRect.top;
            const bottom2 = lastRect.bottom;
            const left2 = isTop ? firstRect.left : lastRect.left;
            const right2 = isTop ? firstRect.right : lastRect.right;
            const width2 = right2 - left2;
            const height2 = bottom2 - top2;
            return {
              top: top2,
              bottom: bottom2,
              left: left2,
              right: right2,
              width: width2,
              height: height2,
              x: left2,
              y: top2
            };
          }
          const isLeftSide = getSide(placement) === "left";
          const maxRight = max(...clientRects.map((rect) => rect.right));
          const minLeft = min(...clientRects.map((rect) => rect.left));
          const measureRects = clientRects.filter((rect) => isLeftSide ? rect.left === minLeft : rect.right === maxRight);
          const top = measureRects[0].top;
          const bottom = measureRects[measureRects.length - 1].bottom;
          const left = minLeft;
          const right = maxRight;
          const width = right - left;
          const height = bottom - top;
          return {
            top,
            bottom,
            left,
            right,
            width,
            height,
            x: left,
            y: top
          };
        }
        return fallback;
      }
      const resetRects = await platform2.getElementRects({
        reference: {
          getBoundingClientRect: getBoundingClientRect2
        },
        floating: elements.floating,
        strategy
      });
      if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {
        return {
          reset: {
            rects: resetRects
          }
        };
      }
      return {};
    }
  };
};
const originSides = /* @__PURE__ */ new Set(["left", "top"]);
async function convertValueToCoords(state, options) {
  const {
    placement,
    platform: platform2,
    elements
  } = state;
  const rtl = await (platform2.isRTL == null ? void 0 : platform2.isRTL(elements.floating));
  const side = getSide(placement);
  const alignment = getAlignment(placement);
  const isVertical = getSideAxis(placement) === "y";
  const mainAxisMulti = originSides.has(side) ? -1 : 1;
  const crossAxisMulti = rtl && isVertical ? -1 : 1;
  const rawValue = evaluate(options, state);
  let {
    mainAxis,
    crossAxis,
    alignmentAxis
  } = typeof rawValue === "number" ? {
    mainAxis: rawValue,
    crossAxis: 0,
    alignmentAxis: null
  } : {
    mainAxis: rawValue.mainAxis || 0,
    crossAxis: rawValue.crossAxis || 0,
    alignmentAxis: rawValue.alignmentAxis
  };
  if (alignment && typeof alignmentAxis === "number") {
    crossAxis = alignment === "end" ? alignmentAxis * -1 : alignmentAxis;
  }
  return isVertical ? {
    x: crossAxis * crossAxisMulti,
    y: mainAxis * mainAxisMulti
  } : {
    x: mainAxis * mainAxisMulti,
    y: crossAxis * crossAxisMulti
  };
}
const offset$1 = function(options) {
  if (options === void 0) {
    options = 0;
  }
  return {
    name: "offset",
    options,
    async fn(state) {
      var _middlewareData$offse, _middlewareData$arrow;
      const {
        x: x2,
        y: y2,
        placement,
        middlewareData
      } = state;
      const diffCoords = await convertValueToCoords(state, options);
      if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {
        return {};
      }
      return {
        x: x2 + diffCoords.x,
        y: y2 + diffCoords.y,
        data: {
          ...diffCoords,
          placement
        }
      };
    }
  };
};
const shift$1 = function(options) {
  if (options === void 0) {
    options = {};
  }
  return {
    name: "shift",
    options,
    async fn(state) {
      const {
        x: x2,
        y: y2,
        placement,
        platform: platform2
      } = state;
      const {
        mainAxis: checkMainAxis = true,
        crossAxis: checkCrossAxis = false,
        limiter = {
          fn: (_ref) => {
            let {
              x: x3,
              y: y3
            } = _ref;
            return {
              x: x3,
              y: y3
            };
          }
        },
        ...detectOverflowOptions
      } = evaluate(options, state);
      const coords = {
        x: x2,
        y: y2
      };
      const overflow = await platform2.detectOverflow(state, detectOverflowOptions);
      const crossAxis = getSideAxis(getSide(placement));
      const mainAxis = getOppositeAxis(crossAxis);
      let mainAxisCoord = coords[mainAxis];
      let crossAxisCoord = coords[crossAxis];
      if (checkMainAxis) {
        const minSide = mainAxis === "y" ? "top" : "left";
        const maxSide = mainAxis === "y" ? "bottom" : "right";
        const min2 = mainAxisCoord + overflow[minSide];
        const max2 = mainAxisCoord - overflow[maxSide];
        mainAxisCoord = clamp(min2, mainAxisCoord, max2);
      }
      if (checkCrossAxis) {
        const minSide = crossAxis === "y" ? "top" : "left";
        const maxSide = crossAxis === "y" ? "bottom" : "right";
        const min2 = crossAxisCoord + overflow[minSide];
        const max2 = crossAxisCoord - overflow[maxSide];
        crossAxisCoord = clamp(min2, crossAxisCoord, max2);
      }
      const limitedCoords = limiter.fn({
        ...state,
        [mainAxis]: mainAxisCoord,
        [crossAxis]: crossAxisCoord
      });
      return {
        ...limitedCoords,
        data: {
          x: limitedCoords.x - x2,
          y: limitedCoords.y - y2,
          enabled: {
            [mainAxis]: checkMainAxis,
            [crossAxis]: checkCrossAxis
          }
        }
      };
    }
  };
};
const size$1 = function(options) {
  if (options === void 0) {
    options = {};
  }
  return {
    name: "size",
    options,
    async fn(state) {
      var _state$middlewareData, _state$middlewareData2;
      const {
        placement,
        rects,
        platform: platform2,
        elements
      } = state;
      const {
        apply: apply2 = () => {
        },
        ...detectOverflowOptions
      } = evaluate(options, state);
      const overflow = await platform2.detectOverflow(state, detectOverflowOptions);
      const side = getSide(placement);
      const alignment = getAlignment(placement);
      const isYAxis = getSideAxis(placement) === "y";
      const {
        width,
        height
      } = rects.floating;
      let heightSide;
      let widthSide;
      if (side === "top" || side === "bottom") {
        heightSide = side;
        widthSide = alignment === (await (platform2.isRTL == null ? void 0 : platform2.isRTL(elements.floating)) ? "start" : "end") ? "left" : "right";
      } else {
        widthSide = side;
        heightSide = alignment === "end" ? "top" : "bottom";
      }
      const maximumClippingHeight = height - overflow.top - overflow.bottom;
      const maximumClippingWidth = width - overflow.left - overflow.right;
      const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);
      const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);
      const noShift = !state.middlewareData.shift;
      let availableHeight = overflowAvailableHeight;
      let availableWidth = overflowAvailableWidth;
      if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {
        availableWidth = maximumClippingWidth;
      }
      if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {
        availableHeight = maximumClippingHeight;
      }
      if (noShift && !alignment) {
        const xMin = max(overflow.left, 0);
        const xMax = max(overflow.right, 0);
        const yMin = max(overflow.top, 0);
        const yMax = max(overflow.bottom, 0);
        if (isYAxis) {
          availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));
        } else {
          availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));
        }
      }
      await apply2({
        ...state,
        availableWidth,
        availableHeight
      });
      const nextDimensions = await platform2.getDimensions(elements.floating);
      if (width !== nextDimensions.width || height !== nextDimensions.height) {
        return {
          reset: {
            rects: true
          }
        };
      }
      return {};
    }
  };
};
function hasWindow() {
  return typeof window !== "undefined";
}
function getNodeName(node) {
  if (isNode(node)) {
    return (node.nodeName || "").toLowerCase();
  }
  return "#document";
}
function getWindow(node) {
  var _node$ownerDocument;
  return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;
}
function getDocumentElement(node) {
  var _ref;
  return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;
}
function isNode(value) {
  if (!hasWindow()) {
    return false;
  }
  return value instanceof Node || value instanceof getWindow(value).Node;
}
function isElement(value) {
  if (!hasWindow()) {
    return false;
  }
  return value instanceof Element || value instanceof getWindow(value).Element;
}
function isHTMLElement(value) {
  if (!hasWindow()) {
    return false;
  }
  return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;
}
function isShadowRoot(value) {
  if (!hasWindow() || typeof ShadowRoot === "undefined") {
    return false;
  }
  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;
}
const invalidOverflowDisplayValues = /* @__PURE__ */ new Set(["inline", "contents"]);
function isOverflowElement(element) {
  const {
    overflow,
    overflowX,
    overflowY,
    display
  } = getComputedStyle$1(element);
  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display);
}
const tableElements = /* @__PURE__ */ new Set(["table", "td", "th"]);
function isTableElement(element) {
  return tableElements.has(getNodeName(element));
}
const topLayerSelectors = [":popover-open", ":modal"];
function isTopLayer(element) {
  return topLayerSelectors.some((selector) => {
    try {
      return element.matches(selector);
    } catch (_e2) {
      return false;
    }
  });
}
const transformProperties = ["transform", "translate", "scale", "rotate", "perspective"];
const willChangeValues = ["transform", "translate", "scale", "rotate", "perspective", "filter"];
const containValues = ["paint", "layout", "strict", "content"];
function isContainingBlock(elementOrCss) {
  const webkit2 = isWebKit();
  const css2 = isElement(elementOrCss) ? getComputedStyle$1(elementOrCss) : elementOrCss;
  return transformProperties.some((value) => css2[value] ? css2[value] !== "none" : false) || (css2.containerType ? css2.containerType !== "normal" : false) || !webkit2 && (css2.backdropFilter ? css2.backdropFilter !== "none" : false) || !webkit2 && (css2.filter ? css2.filter !== "none" : false) || willChangeValues.some((value) => (css2.willChange || "").includes(value)) || containValues.some((value) => (css2.contain || "").includes(value));
}
function getContainingBlock(element) {
  let currentNode = getParentNode(element);
  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {
    if (isContainingBlock(currentNode)) {
      return currentNode;
    } else if (isTopLayer(currentNode)) {
      return null;
    }
    currentNode = getParentNode(currentNode);
  }
  return null;
}
function isWebKit() {
  if (typeof CSS === "undefined" || !CSS.supports) return false;
  return CSS.supports("-webkit-backdrop-filter", "none");
}
const lastTraversableNodeNames = /* @__PURE__ */ new Set(["html", "body", "#document"]);
function isLastTraversableNode(node) {
  return lastTraversableNodeNames.has(getNodeName(node));
}
function getComputedStyle$1(element) {
  return getWindow(element).getComputedStyle(element);
}
function getNodeScroll(element) {
  if (isElement(element)) {
    return {
      scrollLeft: element.scrollLeft,
      scrollTop: element.scrollTop
    };
  }
  return {
    scrollLeft: element.scrollX,
    scrollTop: element.scrollY
  };
}
function getParentNode(node) {
  if (getNodeName(node) === "html") {
    return node;
  }
  const result = (
    // Step into the shadow DOM of the parent of a slotted node.
    node.assignedSlot || // DOM Element detected.
    node.parentNode || // ShadowRoot detected.
    isShadowRoot(node) && node.host || // Fallback.
    getDocumentElement(node)
  );
  return isShadowRoot(result) ? result.host : result;
}
function getNearestOverflowAncestor(node) {
  const parentNode2 = getParentNode(node);
  if (isLastTraversableNode(parentNode2)) {
    return node.ownerDocument ? node.ownerDocument.body : node.body;
  }
  if (isHTMLElement(parentNode2) && isOverflowElement(parentNode2)) {
    return parentNode2;
  }
  return getNearestOverflowAncestor(parentNode2);
}
function getOverflowAncestors(node, list, traverseIframes) {
  var _node$ownerDocument2;
  if (list === void 0) {
    list = [];
  }
  const scrollableAncestor = getNearestOverflowAncestor(node);
  const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);
  const win = getWindow(scrollableAncestor);
  if (isBody) {
    getFrameElement(win);
    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], []);
  }
  return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, []));
}
function getFrameElement(win) {
  return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;
}
function getCssDimensions(element) {
  const css2 = getComputedStyle$1(element);
  let width = parseFloat(css2.width) || 0;
  let height = parseFloat(css2.height) || 0;
  const hasOffset = isHTMLElement(element);
  const offsetWidth = hasOffset ? element.offsetWidth : width;
  const offsetHeight = hasOffset ? element.offsetHeight : height;
  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;
  if (shouldFallback) {
    width = offsetWidth;
    height = offsetHeight;
  }
  return {
    width,
    height,
    $: shouldFallback
  };
}
function unwrapElement(element) {
  return !isElement(element) ? element.contextElement : element;
}
function getScale(element) {
  const domElement = unwrapElement(element);
  if (!isHTMLElement(domElement)) {
    return createCoords(1);
  }
  const rect = domElement.getBoundingClientRect();
  const {
    width,
    height,
    $: $2
  } = getCssDimensions(domElement);
  let x2 = ($2 ? round(rect.width) : rect.width) / width;
  let y2 = ($2 ? round(rect.height) : rect.height) / height;
  if (!x2 || !Number.isFinite(x2)) {
    x2 = 1;
  }
  if (!y2 || !Number.isFinite(y2)) {
    y2 = 1;
  }
  return {
    x: x2,
    y: y2
  };
}
const noOffsets = /* @__PURE__ */ createCoords(0);
function getVisualOffsets(element) {
  const win = getWindow(element);
  if (!isWebKit() || !win.visualViewport) {
    return noOffsets;
  }
  return {
    x: win.visualViewport.offsetLeft,
    y: win.visualViewport.offsetTop
  };
}
function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {
  if (isFixed === void 0) {
    isFixed = false;
  }
  if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {
    return false;
  }
  return isFixed;
}
function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {
  if (includeScale === void 0) {
    includeScale = false;
  }
  if (isFixedStrategy === void 0) {
    isFixedStrategy = false;
  }
  const clientRect2 = element.getBoundingClientRect();
  const domElement = unwrapElement(element);
  let scale = createCoords(1);
  if (includeScale) {
    if (offsetParent) {
      if (isElement(offsetParent)) {
        scale = getScale(offsetParent);
      }
    } else {
      scale = getScale(element);
    }
  }
  const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);
  let x2 = (clientRect2.left + visualOffsets.x) / scale.x;
  let y2 = (clientRect2.top + visualOffsets.y) / scale.y;
  let width = clientRect2.width / scale.x;
  let height = clientRect2.height / scale.y;
  if (domElement) {
    const win = getWindow(domElement);
    const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;
    let currentWin = win;
    let currentIFrame = getFrameElement(currentWin);
    while (currentIFrame && offsetParent && offsetWin !== currentWin) {
      const iframeScale = getScale(currentIFrame);
      const iframeRect = currentIFrame.getBoundingClientRect();
      const css2 = getComputedStyle$1(currentIFrame);
      const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css2.paddingLeft)) * iframeScale.x;
      const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css2.paddingTop)) * iframeScale.y;
      x2 *= iframeScale.x;
      y2 *= iframeScale.y;
      width *= iframeScale.x;
      height *= iframeScale.y;
      x2 += left;
      y2 += top;
      currentWin = getWindow(currentIFrame);
      currentIFrame = getFrameElement(currentWin);
    }
  }
  return rectToClientRect({
    width,
    height,
    x: x2,
    y: y2
  });
}
function getWindowScrollBarX(element, rect) {
  const leftScroll = getNodeScroll(element).scrollLeft;
  if (!rect) {
    return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;
  }
  return rect.left + leftScroll;
}
function getHTMLOffset(documentElement, scroll) {
  const htmlRect = documentElement.getBoundingClientRect();
  const x2 = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);
  const y2 = htmlRect.top + scroll.scrollTop;
  return {
    x: x2,
    y: y2
  };
}
function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {
  let {
    elements,
    rect,
    offsetParent,
    strategy
  } = _ref;
  const isFixed = strategy === "fixed";
  const documentElement = getDocumentElement(offsetParent);
  const topLayer = elements ? isTopLayer(elements.floating) : false;
  if (offsetParent === documentElement || topLayer && isFixed) {
    return rect;
  }
  let scroll = {
    scrollLeft: 0,
    scrollTop: 0
  };
  let scale = createCoords(1);
  const offsets = createCoords(0);
  const isOffsetParentAnElement = isHTMLElement(offsetParent);
  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
    if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) {
      scroll = getNodeScroll(offsetParent);
    }
    if (isHTMLElement(offsetParent)) {
      const offsetRect = getBoundingClientRect(offsetParent);
      scale = getScale(offsetParent);
      offsets.x = offsetRect.x + offsetParent.clientLeft;
      offsets.y = offsetRect.y + offsetParent.clientTop;
    }
  }
  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
  return {
    width: rect.width * scale.x,
    height: rect.height * scale.y,
    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,
    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y
  };
}
function getClientRects(element) {
  return Array.from(element.getClientRects());
}
function getDocumentRect(element) {
  const html = getDocumentElement(element);
  const scroll = getNodeScroll(element);
  const body = element.ownerDocument.body;
  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);
  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);
  let x2 = -scroll.scrollLeft + getWindowScrollBarX(element);
  const y2 = -scroll.scrollTop;
  if (getComputedStyle$1(body).direction === "rtl") {
    x2 += max(html.clientWidth, body.clientWidth) - width;
  }
  return {
    width,
    height,
    x: x2,
    y: y2
  };
}
const SCROLLBAR_MAX = 25;
function getViewportRect(element, strategy) {
  const win = getWindow(element);
  const html = getDocumentElement(element);
  const visualViewport = win.visualViewport;
  let width = html.clientWidth;
  let height = html.clientHeight;
  let x2 = 0;
  let y2 = 0;
  if (visualViewport) {
    width = visualViewport.width;
    height = visualViewport.height;
    const visualViewportBased = isWebKit();
    if (!visualViewportBased || visualViewportBased && strategy === "fixed") {
      x2 = visualViewport.offsetLeft;
      y2 = visualViewport.offsetTop;
    }
  }
  const windowScrollbarX = getWindowScrollBarX(html);
  if (windowScrollbarX <= 0) {
    const doc2 = html.ownerDocument;
    const body = doc2.body;
    const bodyStyles = getComputedStyle(body);
    const bodyMarginInline = doc2.compatMode === "CSS1Compat" ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;
    const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);
    if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {
      width -= clippingStableScrollbarWidth;
    }
  } else if (windowScrollbarX <= SCROLLBAR_MAX) {
    width += windowScrollbarX;
  }
  return {
    width,
    height,
    x: x2,
    y: y2
  };
}
const absoluteOrFixed = /* @__PURE__ */ new Set(["absolute", "fixed"]);
function getInnerBoundingClientRect(element, strategy) {
  const clientRect2 = getBoundingClientRect(element, true, strategy === "fixed");
  const top = clientRect2.top + element.clientTop;
  const left = clientRect2.left + element.clientLeft;
  const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);
  const width = element.clientWidth * scale.x;
  const height = element.clientHeight * scale.y;
  const x2 = left * scale.x;
  const y2 = top * scale.y;
  return {
    width,
    height,
    x: x2,
    y: y2
  };
}
function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {
  let rect;
  if (clippingAncestor === "viewport") {
    rect = getViewportRect(element, strategy);
  } else if (clippingAncestor === "document") {
    rect = getDocumentRect(getDocumentElement(element));
  } else if (isElement(clippingAncestor)) {
    rect = getInnerBoundingClientRect(clippingAncestor, strategy);
  } else {
    const visualOffsets = getVisualOffsets(element);
    rect = {
      x: clippingAncestor.x - visualOffsets.x,
      y: clippingAncestor.y - visualOffsets.y,
      width: clippingAncestor.width,
      height: clippingAncestor.height
    };
  }
  return rectToClientRect(rect);
}
function hasFixedPositionAncestor(element, stopNode) {
  const parentNode2 = getParentNode(element);
  if (parentNode2 === stopNode || !isElement(parentNode2) || isLastTraversableNode(parentNode2)) {
    return false;
  }
  return getComputedStyle$1(parentNode2).position === "fixed" || hasFixedPositionAncestor(parentNode2, stopNode);
}
function getClippingElementAncestors(element, cache) {
  const cachedResult2 = cache.get(element);
  if (cachedResult2) {
    return cachedResult2;
  }
  let result = getOverflowAncestors(element, []).filter((el) => isElement(el) && getNodeName(el) !== "body");
  let currentContainingBlockComputedStyle = null;
  const elementIsFixed = getComputedStyle$1(element).position === "fixed";
  let currentNode = elementIsFixed ? getParentNode(element) : element;
  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {
    const computedStyle = getComputedStyle$1(currentNode);
    const currentNodeIsContaining = isContainingBlock(currentNode);
    if (!currentNodeIsContaining && computedStyle.position === "fixed") {
      currentContainingBlockComputedStyle = null;
    }
    const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === "static" && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);
    if (shouldDropCurrentNode) {
      result = result.filter((ancestor) => ancestor !== currentNode);
    } else {
      currentContainingBlockComputedStyle = computedStyle;
    }
    currentNode = getParentNode(currentNode);
  }
  cache.set(element, result);
  return result;
}
function getClippingRect(_ref) {
  let {
    element,
    boundary,
    rootBoundary,
    strategy
  } = _ref;
  const elementClippingAncestors = boundary === "clippingAncestors" ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);
  const clippingAncestors = [...elementClippingAncestors, rootBoundary];
  const firstClippingAncestor = clippingAncestors[0];
  const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {
    const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);
    accRect.top = max(rect.top, accRect.top);
    accRect.right = min(rect.right, accRect.right);
    accRect.bottom = min(rect.bottom, accRect.bottom);
    accRect.left = max(rect.left, accRect.left);
    return accRect;
  }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));
  return {
    width: clippingRect.right - clippingRect.left,
    height: clippingRect.bottom - clippingRect.top,
    x: clippingRect.left,
    y: clippingRect.top
  };
}
function getDimensions(element) {
  const {
    width,
    height
  } = getCssDimensions(element);
  return {
    width,
    height
  };
}
function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
  const isOffsetParentAnElement = isHTMLElement(offsetParent);
  const documentElement = getDocumentElement(offsetParent);
  const isFixed = strategy === "fixed";
  const rect = getBoundingClientRect(element, true, isFixed, offsetParent);
  let scroll = {
    scrollLeft: 0,
    scrollTop: 0
  };
  const offsets = createCoords(0);
  function setLeftRTLScrollbarOffset() {
    offsets.x = getWindowScrollBarX(documentElement);
  }
  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
    if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) {
      scroll = getNodeScroll(offsetParent);
    }
    if (isOffsetParentAnElement) {
      const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);
      offsets.x = offsetRect.x + offsetParent.clientLeft;
      offsets.y = offsetRect.y + offsetParent.clientTop;
    } else if (documentElement) {
      setLeftRTLScrollbarOffset();
    }
  }
  if (isFixed && !isOffsetParentAnElement && documentElement) {
    setLeftRTLScrollbarOffset();
  }
  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
  const x2 = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;
  const y2 = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;
  return {
    x: x2,
    y: y2,
    width: rect.width,
    height: rect.height
  };
}
function isStaticPositioned(element) {
  return getComputedStyle$1(element).position === "static";
}
function getTrueOffsetParent(element, polyfill) {
  if (!isHTMLElement(element) || getComputedStyle$1(element).position === "fixed") {
    return null;
  }
  if (polyfill) {
    return polyfill(element);
  }
  let rawOffsetParent = element.offsetParent;
  if (getDocumentElement(element) === rawOffsetParent) {
    rawOffsetParent = rawOffsetParent.ownerDocument.body;
  }
  return rawOffsetParent;
}
function getOffsetParent(element, polyfill) {
  const win = getWindow(element);
  if (isTopLayer(element)) {
    return win;
  }
  if (!isHTMLElement(element)) {
    let svgOffsetParent = getParentNode(element);
    while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {
      if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {
        return svgOffsetParent;
      }
      svgOffsetParent = getParentNode(svgOffsetParent);
    }
    return win;
  }
  let offsetParent = getTrueOffsetParent(element, polyfill);
  while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {
    offsetParent = getTrueOffsetParent(offsetParent, polyfill);
  }
  if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {
    return win;
  }
  return offsetParent || getContainingBlock(element) || win;
}
const getElementRects = async function(data) {
  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;
  const getDimensionsFn = this.getDimensions;
  const floatingDimensions = await getDimensionsFn(data.floating);
  return {
    reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),
    floating: {
      x: 0,
      y: 0,
      width: floatingDimensions.width,
      height: floatingDimensions.height
    }
  };
};
function isRTL(element) {
  return getComputedStyle$1(element).direction === "rtl";
}
const platform = {
  convertOffsetParentRelativeRectToViewportRelativeRect,
  getDocumentElement,
  getClippingRect,
  getOffsetParent,
  getElementRects,
  getClientRects,
  getDimensions,
  getScale,
  isElement,
  isRTL
};
const offset = offset$1;
const autoPlacement = autoPlacement$1;
const shift = shift$1;
const flip = flip$1;
const size = size$1;
const hide = hide$1;
const arrow$1 = arrow$2;
const inline = inline$1;
const computePosition = (reference, floating, options) => {
  const cache = /* @__PURE__ */ new Map();
  const mergedOptions = {
    platform,
    ...options
  };
  const platformWithCache = {
    ...mergedOptions.platform,
    _c: cache
  };
  return computePosition$1(reference, floating, {
    ...mergedOptions,
    platform: platformWithCache
  });
};
let readFromCache;
let addToCache;
if (typeof WeakMap != "undefined") {
  let cache = /* @__PURE__ */ new WeakMap();
  readFromCache = (key) => cache.get(key);
  addToCache = (key, value) => {
    cache.set(key, value);
    return value;
  };
} else {
  const cache = [];
  const cacheSize = 10;
  let cachePos = 0;
  readFromCache = (key) => {
    for (let i = 0; i < cache.length; i += 2) if (cache[i] == key) return cache[i + 1];
  };
  addToCache = (key, value) => {
    if (cachePos == cacheSize) cachePos = 0;
    cache[cachePos++] = key;
    return cache[cachePos++] = value;
  };
}
var TableMap = class {
  constructor(width, height, map2, problems) {
    this.width = width;
    this.height = height;
    this.map = map2;
    this.problems = problems;
  }
  findCell(pos) {
    for (let i = 0; i < this.map.length; i++) {
      const curPos = this.map[i];
      if (curPos != pos) continue;
      const left = i % this.width;
      const top = i / this.width | 0;
      let right = left + 1;
      let bottom = top + 1;
      for (let j2 = 1; right < this.width && this.map[i + j2] == curPos; j2++) right++;
      for (let j2 = 1; bottom < this.height && this.map[i + this.width * j2] == curPos; j2++) bottom++;
      return {
        left,
        top,
        right,
        bottom
      };
    }
    throw new RangeError(`No cell with offset ${pos} found`);
  }
  colCount(pos) {
    for (let i = 0; i < this.map.length; i++) if (this.map[i] == pos) return i % this.width;
    throw new RangeError(`No cell with offset ${pos} found`);
  }
  nextCell(pos, axis, dir) {
    const { left, right, top, bottom } = this.findCell(pos);
    if (axis == "horiz") {
      if (dir < 0 ? left == 0 : right == this.width) return null;
      return this.map[top * this.width + (dir < 0 ? left - 1 : right)];
    } else {
      if (dir < 0 ? top == 0 : bottom == this.height) return null;
      return this.map[left + this.width * (dir < 0 ? top - 1 : bottom)];
    }
  }
  rectBetween(a2, b2) {
    const { left: leftA, right: rightA, top: topA, bottom: bottomA } = this.findCell(a2);
    const { left: leftB, right: rightB, top: topB, bottom: bottomB } = this.findCell(b2);
    return {
      left: Math.min(leftA, leftB),
      top: Math.min(topA, topB),
      right: Math.max(rightA, rightB),
      bottom: Math.max(bottomA, bottomB)
    };
  }
  cellsInRect(rect) {
    const result = [];
    const seen2 = {};
    for (let row = rect.top; row < rect.bottom; row++) for (let col = rect.left; col < rect.right; col++) {
      const index2 = row * this.width + col;
      const pos = this.map[index2];
      if (seen2[pos]) continue;
      seen2[pos] = true;
      if (col == rect.left && col && this.map[index2 - 1] == pos || row == rect.top && row && this.map[index2 - this.width] == pos) continue;
      result.push(pos);
    }
    return result;
  }
  positionAt(row, col, table) {
    for (let i = 0, rowStart = 0; ; i++) {
      const rowEnd = rowStart + table.child(i).nodeSize;
      if (i == row) {
        let index2 = col + row * this.width;
        const rowEndIndex = (row + 1) * this.width;
        while (index2 < rowEndIndex && this.map[index2] < rowStart) index2++;
        return index2 == rowEndIndex ? rowEnd - 1 : this.map[index2];
      }
      rowStart = rowEnd;
    }
  }
  static get(table) {
    return readFromCache(table) || addToCache(table, computeMap(table));
  }
};
function computeMap(table) {
  if (table.type.spec.tableRole != "table") throw new RangeError("Not a table node: " + table.type.name);
  const width = findWidth(table), height = table.childCount;
  const map2 = [];
  let mapPos = 0;
  let problems = null;
  const colWidths = [];
  for (let i = 0, e = width * height; i < e; i++) map2[i] = 0;
  for (let row = 0, pos = 0; row < height; row++) {
    const rowNode = table.child(row);
    pos++;
    for (let i = 0; ; i++) {
      while (mapPos < map2.length && map2[mapPos] != 0) mapPos++;
      if (i == rowNode.childCount) break;
      const cellNode = rowNode.child(i);
      const { colspan, rowspan, colwidth } = cellNode.attrs;
      for (let h2 = 0; h2 < rowspan; h2++) {
        if (h2 + row >= height) {
          (problems || (problems = [])).push({
            type: "overlong_rowspan",
            pos,
            n: rowspan - h2
          });
          break;
        }
        const start = mapPos + h2 * width;
        for (let w2 = 0; w2 < colspan; w2++) {
          if (map2[start + w2] == 0) map2[start + w2] = pos;
          else (problems || (problems = [])).push({
            type: "collision",
            row,
            pos,
            n: colspan - w2
          });
          const colW = colwidth && colwidth[w2];
          if (colW) {
            const widthIndex = (start + w2) % width * 2, prev = colWidths[widthIndex];
            if (prev == null || prev != colW && colWidths[widthIndex + 1] == 1) {
              colWidths[widthIndex] = colW;
              colWidths[widthIndex + 1] = 1;
            } else if (prev == colW) colWidths[widthIndex + 1]++;
          }
        }
      }
      mapPos += colspan;
      pos += cellNode.nodeSize;
    }
    const expectedPos = (row + 1) * width;
    let missing = 0;
    while (mapPos < expectedPos) if (map2[mapPos++] == 0) missing++;
    if (missing) (problems || (problems = [])).push({
      type: "missing",
      row,
      n: missing
    });
    pos++;
  }
  if (width === 0 || height === 0) (problems || (problems = [])).push({ type: "zero_sized" });
  const tableMap = new TableMap(width, height, map2, problems);
  let badWidths = false;
  for (let i = 0; !badWidths && i < colWidths.length; i += 2) if (colWidths[i] != null && colWidths[i + 1] < height) badWidths = true;
  if (badWidths) findBadColWidths(tableMap, colWidths, table);
  return tableMap;
}
function findWidth(table) {
  let width = -1;
  let hasRowSpan = false;
  for (let row = 0; row < table.childCount; row++) {
    const rowNode = table.child(row);
    let rowWidth = 0;
    if (hasRowSpan) for (let j2 = 0; j2 < row; j2++) {
      const prevRow = table.child(j2);
      for (let i = 0; i < prevRow.childCount; i++) {
        const cell = prevRow.child(i);
        if (j2 + cell.attrs.rowspan > row) rowWidth += cell.attrs.colspan;
      }
    }
    for (let i = 0; i < rowNode.childCount; i++) {
      const cell = rowNode.child(i);
      rowWidth += cell.attrs.colspan;
      if (cell.attrs.rowspan > 1) hasRowSpan = true;
    }
    if (width == -1) width = rowWidth;
    else if (width != rowWidth) width = Math.max(width, rowWidth);
  }
  return width;
}
function findBadColWidths(map2, colWidths, table) {
  if (!map2.problems) map2.problems = [];
  const seen2 = {};
  for (let i = 0; i < map2.map.length; i++) {
    const pos = map2.map[i];
    if (seen2[pos]) continue;
    seen2[pos] = true;
    const node = table.nodeAt(pos);
    if (!node) throw new RangeError(`No cell with offset ${pos} found`);
    let updated = null;
    const attrs = node.attrs;
    for (let j2 = 0; j2 < attrs.colspan; j2++) {
      const colWidth = colWidths[(i + j2) % map2.width * 2];
      if (colWidth != null && (!attrs.colwidth || attrs.colwidth[j2] != colWidth)) (updated || (updated = freshColWidth(attrs)))[j2] = colWidth;
    }
    if (updated) map2.problems.unshift({
      type: "colwidth mismatch",
      pos,
      colwidth: updated
    });
  }
}
function freshColWidth(attrs) {
  if (attrs.colwidth) return attrs.colwidth.slice();
  const result = [];
  for (let i = 0; i < attrs.colspan; i++) result.push(0);
  return result;
}
function tableNodeTypes(schema) {
  let result = schema.cached.tableNodeTypes;
  if (!result) {
    result = schema.cached.tableNodeTypes = {};
    for (const name in schema.nodes) {
      const type = schema.nodes[name], role = type.spec.tableRole;
      if (role) result[role] = type;
    }
  }
  return result;
}
new PluginKey("selectingCells");
function cellAround($pos) {
  for (let d2 = $pos.depth - 1; d2 > 0; d2--) if ($pos.node(d2).type.spec.tableRole == "row") return $pos.node(0).resolve($pos.before(d2 + 1));
  return null;
}
function isInTable(state) {
  const $head = state.selection.$head;
  for (let d2 = $head.depth; d2 > 0; d2--) if ($head.node(d2).type.spec.tableRole == "row") return true;
  return false;
}
function selectionCell(state) {
  const sel = state.selection;
  if ("$anchorCell" in sel && sel.$anchorCell) return sel.$anchorCell.pos > sel.$headCell.pos ? sel.$anchorCell : sel.$headCell;
  else if ("node" in sel && sel.node && sel.node.type.spec.tableRole == "cell") return sel.$anchor;
  const $cell = cellAround(sel.$head) || cellNear(sel.$head);
  if ($cell) return $cell;
  throw new RangeError(`No cell found around position ${sel.head}`);
}
function cellNear($pos) {
  for (let after = $pos.nodeAfter, pos = $pos.pos; after; after = after.firstChild, pos++) {
    const role = after.type.spec.tableRole;
    if (role == "cell" || role == "header_cell") return $pos.doc.resolve(pos);
  }
  for (let before = $pos.nodeBefore, pos = $pos.pos; before; before = before.lastChild, pos--) {
    const role = before.type.spec.tableRole;
    if (role == "cell" || role == "header_cell") return $pos.doc.resolve(pos - before.nodeSize);
  }
}
function pointsAtCell($pos) {
  return $pos.parent.type.spec.tableRole == "row" && !!$pos.nodeAfter;
}
function inSameTable($cellA, $cellB) {
  return $cellA.depth == $cellB.depth && $cellA.pos >= $cellB.start(-1) && $cellA.pos <= $cellB.end(-1);
}
function nextCell($pos, axis, dir) {
  const table = $pos.node(-1);
  const map2 = TableMap.get(table);
  const tableStart = $pos.start(-1);
  const moved = map2.nextCell($pos.pos - tableStart, axis, dir);
  return moved == null ? null : $pos.node(0).resolve(tableStart + moved);
}
function removeColSpan(attrs, pos, n2 = 1) {
  const result = {
    ...attrs,
    colspan: attrs.colspan - n2
  };
  if (result.colwidth) {
    result.colwidth = result.colwidth.slice();
    result.colwidth.splice(pos, n2);
    if (!result.colwidth.some((w2) => w2 > 0)) result.colwidth = null;
  }
  return result;
}
var CellSelection = class CellSelection2 extends Selection {
  constructor($anchorCell, $headCell = $anchorCell) {
    const table = $anchorCell.node(-1);
    const map2 = TableMap.get(table);
    const tableStart = $anchorCell.start(-1);
    const rect = map2.rectBetween($anchorCell.pos - tableStart, $headCell.pos - tableStart);
    const doc2 = $anchorCell.node(0);
    const cells = map2.cellsInRect(rect).filter((p2) => p2 != $headCell.pos - tableStart);
    cells.unshift($headCell.pos - tableStart);
    const ranges = cells.map((pos) => {
      const cell = table.nodeAt(pos);
      if (!cell) throw new RangeError(`No cell with offset ${pos} found`);
      const from2 = tableStart + pos + 1;
      return new SelectionRange(doc2.resolve(from2), doc2.resolve(from2 + cell.content.size));
    });
    super(ranges[0].$from, ranges[0].$to, ranges);
    this.$anchorCell = $anchorCell;
    this.$headCell = $headCell;
  }
  map(doc2, mapping) {
    const $anchorCell = doc2.resolve(mapping.map(this.$anchorCell.pos));
    const $headCell = doc2.resolve(mapping.map(this.$headCell.pos));
    if (pointsAtCell($anchorCell) && pointsAtCell($headCell) && inSameTable($anchorCell, $headCell)) {
      const tableChanged = this.$anchorCell.node(-1) != $anchorCell.node(-1);
      if (tableChanged && this.isRowSelection()) return CellSelection2.rowSelection($anchorCell, $headCell);
      else if (tableChanged && this.isColSelection()) return CellSelection2.colSelection($anchorCell, $headCell);
      else return new CellSelection2($anchorCell, $headCell);
    }
    return TextSelection.between($anchorCell, $headCell);
  }
  content() {
    const table = this.$anchorCell.node(-1);
    const map2 = TableMap.get(table);
    const tableStart = this.$anchorCell.start(-1);
    const rect = map2.rectBetween(this.$anchorCell.pos - tableStart, this.$headCell.pos - tableStart);
    const seen2 = {};
    const rows = [];
    for (let row = rect.top; row < rect.bottom; row++) {
      const rowContent = [];
      for (let index2 = row * map2.width + rect.left, col = rect.left; col < rect.right; col++, index2++) {
        const pos = map2.map[index2];
        if (seen2[pos]) continue;
        seen2[pos] = true;
        const cellRect = map2.findCell(pos);
        let cell = table.nodeAt(pos);
        if (!cell) throw new RangeError(`No cell with offset ${pos} found`);
        const extraLeft = rect.left - cellRect.left;
        const extraRight = cellRect.right - rect.right;
        if (extraLeft > 0 || extraRight > 0) {
          let attrs = cell.attrs;
          if (extraLeft > 0) attrs = removeColSpan(attrs, 0, extraLeft);
          if (extraRight > 0) attrs = removeColSpan(attrs, attrs.colspan - extraRight, extraRight);
          if (cellRect.left < rect.left) {
            cell = cell.type.createAndFill(attrs);
            if (!cell) throw new RangeError(`Could not create cell with attrs ${JSON.stringify(attrs)}`);
          } else cell = cell.type.create(attrs, cell.content);
        }
        if (cellRect.top < rect.top || cellRect.bottom > rect.bottom) {
          const attrs = {
            ...cell.attrs,
            rowspan: Math.min(cellRect.bottom, rect.bottom) - Math.max(cellRect.top, rect.top)
          };
          if (cellRect.top < rect.top) cell = cell.type.createAndFill(attrs);
          else cell = cell.type.create(attrs, cell.content);
        }
        rowContent.push(cell);
      }
      rows.push(table.child(row).copy(Fragment.from(rowContent)));
    }
    const fragment = this.isColSelection() && this.isRowSelection() ? table : rows;
    return new Slice(Fragment.from(fragment), 1, 1);
  }
  replace(tr2, content = Slice.empty) {
    const mapFrom = tr2.steps.length, ranges = this.ranges;
    for (let i = 0; i < ranges.length; i++) {
      const { $from, $to } = ranges[i], mapping = tr2.mapping.slice(mapFrom);
      tr2.replace(mapping.map($from.pos), mapping.map($to.pos), i ? Slice.empty : content);
    }
    const sel = Selection.findFrom(tr2.doc.resolve(tr2.mapping.slice(mapFrom).map(this.to)), -1);
    if (sel) tr2.setSelection(sel);
  }
  replaceWith(tr2, node) {
    this.replace(tr2, new Slice(Fragment.from(node), 0, 0));
  }
  forEachCell(f2) {
    const table = this.$anchorCell.node(-1);
    const map2 = TableMap.get(table);
    const tableStart = this.$anchorCell.start(-1);
    const cells = map2.cellsInRect(map2.rectBetween(this.$anchorCell.pos - tableStart, this.$headCell.pos - tableStart));
    for (let i = 0; i < cells.length; i++) f2(table.nodeAt(cells[i]), tableStart + cells[i]);
  }
  isColSelection() {
    const anchorTop = this.$anchorCell.index(-1);
    const headTop = this.$headCell.index(-1);
    if (Math.min(anchorTop, headTop) > 0) return false;
    const anchorBottom = anchorTop + this.$anchorCell.nodeAfter.attrs.rowspan;
    const headBottom = headTop + this.$headCell.nodeAfter.attrs.rowspan;
    return Math.max(anchorBottom, headBottom) == this.$headCell.node(-1).childCount;
  }
  static colSelection($anchorCell, $headCell = $anchorCell) {
    const table = $anchorCell.node(-1);
    const map2 = TableMap.get(table);
    const tableStart = $anchorCell.start(-1);
    const anchorRect = map2.findCell($anchorCell.pos - tableStart);
    const headRect = map2.findCell($headCell.pos - tableStart);
    const doc2 = $anchorCell.node(0);
    if (anchorRect.top <= headRect.top) {
      if (anchorRect.top > 0) $anchorCell = doc2.resolve(tableStart + map2.map[anchorRect.left]);
      if (headRect.bottom < map2.height) $headCell = doc2.resolve(tableStart + map2.map[map2.width * (map2.height - 1) + headRect.right - 1]);
    } else {
      if (headRect.top > 0) $headCell = doc2.resolve(tableStart + map2.map[headRect.left]);
      if (anchorRect.bottom < map2.height) $anchorCell = doc2.resolve(tableStart + map2.map[map2.width * (map2.height - 1) + anchorRect.right - 1]);
    }
    return new CellSelection2($anchorCell, $headCell);
  }
  isRowSelection() {
    const table = this.$anchorCell.node(-1);
    const map2 = TableMap.get(table);
    const tableStart = this.$anchorCell.start(-1);
    const anchorLeft = map2.colCount(this.$anchorCell.pos - tableStart);
    const headLeft = map2.colCount(this.$headCell.pos - tableStart);
    if (Math.min(anchorLeft, headLeft) > 0) return false;
    const anchorRight = anchorLeft + this.$anchorCell.nodeAfter.attrs.colspan;
    const headRight = headLeft + this.$headCell.nodeAfter.attrs.colspan;
    return Math.max(anchorRight, headRight) == map2.width;
  }
  eq(other) {
    return other instanceof CellSelection2 && other.$anchorCell.pos == this.$anchorCell.pos && other.$headCell.pos == this.$headCell.pos;
  }
  static rowSelection($anchorCell, $headCell = $anchorCell) {
    const table = $anchorCell.node(-1);
    const map2 = TableMap.get(table);
    const tableStart = $anchorCell.start(-1);
    const anchorRect = map2.findCell($anchorCell.pos - tableStart);
    const headRect = map2.findCell($headCell.pos - tableStart);
    const doc2 = $anchorCell.node(0);
    if (anchorRect.left <= headRect.left) {
      if (anchorRect.left > 0) $anchorCell = doc2.resolve(tableStart + map2.map[anchorRect.top * map2.width]);
      if (headRect.right < map2.width) $headCell = doc2.resolve(tableStart + map2.map[map2.width * (headRect.top + 1) - 1]);
    } else {
      if (headRect.left > 0) $headCell = doc2.resolve(tableStart + map2.map[headRect.top * map2.width]);
      if (anchorRect.right < map2.width) $anchorCell = doc2.resolve(tableStart + map2.map[map2.width * (anchorRect.top + 1) - 1]);
    }
    return new CellSelection2($anchorCell, $headCell);
  }
  toJSON() {
    return {
      type: "cell",
      anchor: this.$anchorCell.pos,
      head: this.$headCell.pos
    };
  }
  static fromJSON(doc2, json2) {
    return new CellSelection2(doc2.resolve(json2.anchor), doc2.resolve(json2.head));
  }
  static create(doc2, anchorCell, headCell = anchorCell) {
    return new CellSelection2(doc2.resolve(anchorCell), doc2.resolve(headCell));
  }
  getBookmark() {
    return new CellBookmark(this.$anchorCell.pos, this.$headCell.pos);
  }
};
CellSelection.prototype.visible = false;
Selection.jsonID("cell", CellSelection);
var CellBookmark = class CellBookmark2 {
  constructor(anchor, head) {
    this.anchor = anchor;
    this.head = head;
  }
  map(mapping) {
    return new CellBookmark2(mapping.map(this.anchor), mapping.map(this.head));
  }
  resolve(doc2) {
    const $anchorCell = doc2.resolve(this.anchor), $headCell = doc2.resolve(this.head);
    if ($anchorCell.parent.type.spec.tableRole == "row" && $headCell.parent.type.spec.tableRole == "row" && $anchorCell.index() < $anchorCell.parent.childCount && $headCell.index() < $headCell.parent.childCount && inSameTable($anchorCell, $headCell)) return new CellSelection($anchorCell, $headCell);
    else return Selection.near($headCell, 1);
  }
};
new PluginKey("fix-tables");
function selectedRect(state) {
  const sel = state.selection;
  const $pos = selectionCell(state);
  const table = $pos.node(-1);
  const tableStart = $pos.start(-1);
  const map2 = TableMap.get(table);
  return {
    ...sel instanceof CellSelection ? map2.rectBetween(sel.$anchorCell.pos - tableStart, sel.$headCell.pos - tableStart) : map2.findCell($pos.pos - tableStart),
    tableStart,
    map: map2,
    table
  };
}
function deprecated_toggleHeader(type) {
  return function(state, dispatch) {
    if (!isInTable(state)) return false;
    if (dispatch) {
      const types = tableNodeTypes(state.schema);
      const rect = selectedRect(state), tr2 = state.tr;
      const cells = rect.map.cellsInRect(type == "column" ? {
        left: rect.left,
        top: 0,
        right: rect.right,
        bottom: rect.map.height
      } : type == "row" ? {
        left: 0,
        top: rect.top,
        right: rect.map.width,
        bottom: rect.bottom
      } : rect);
      const nodes = cells.map((pos) => rect.table.nodeAt(pos));
      for (let i = 0; i < cells.length; i++) if (nodes[i].type == types.header_cell) tr2.setNodeMarkup(rect.tableStart + cells[i], types.cell, nodes[i].attrs);
      if (tr2.steps.length === 0) for (let i = 0; i < cells.length; i++) tr2.setNodeMarkup(rect.tableStart + cells[i], types.header_cell, nodes[i].attrs);
      dispatch(tr2);
    }
    return true;
  };
}
function isHeaderEnabledByType(type, rect, types) {
  const cellPositions = rect.map.cellsInRect({
    left: 0,
    top: 0,
    right: type == "row" ? rect.map.width : 1,
    bottom: type == "column" ? rect.map.height : 1
  });
  for (let i = 0; i < cellPositions.length; i++) {
    const cell = rect.table.nodeAt(cellPositions[i]);
    if (cell && cell.type !== types.header_cell) return false;
  }
  return true;
}
function toggleHeader(type, options) {
  options = options || { useDeprecatedLogic: false };
  if (options.useDeprecatedLogic) return deprecated_toggleHeader(type);
  return function(state, dispatch) {
    if (!isInTable(state)) return false;
    if (dispatch) {
      const types = tableNodeTypes(state.schema);
      const rect = selectedRect(state), tr2 = state.tr;
      const isHeaderRowEnabled = isHeaderEnabledByType("row", rect, types);
      const isHeaderColumnEnabled = isHeaderEnabledByType("column", rect, types);
      const selectionStartsAt = (type === "column" ? isHeaderRowEnabled : type === "row" ? isHeaderColumnEnabled : false) ? 1 : 0;
      const cellsRect = type == "column" ? {
        left: 0,
        top: selectionStartsAt,
        right: 1,
        bottom: rect.map.height
      } : type == "row" ? {
        left: selectionStartsAt,
        top: 0,
        right: rect.map.width,
        bottom: 1
      } : rect;
      const newType = type == "column" ? isHeaderColumnEnabled ? types.cell : types.header_cell : type == "row" ? isHeaderRowEnabled ? types.cell : types.header_cell : types.cell;
      rect.map.cellsInRect(cellsRect).forEach((relativeCellPos) => {
        const cellPos = relativeCellPos + rect.tableStart;
        const cell = tr2.doc.nodeAt(cellPos);
        if (cell) tr2.setNodeMarkup(cellPos, newType, cell.attrs);
      });
      dispatch(tr2);
    }
    return true;
  };
}
toggleHeader("row", { useDeprecatedLogic: true });
toggleHeader("column", { useDeprecatedLogic: true });
toggleHeader("cell", { useDeprecatedLogic: true });
function deleteCellSelection(state, dispatch) {
  const sel = state.selection;
  if (!(sel instanceof CellSelection)) return false;
  if (dispatch) {
    const tr2 = state.tr;
    const baseContent = tableNodeTypes(state.schema).cell.createAndFill().content;
    sel.forEachCell((cell, pos) => {
      if (!cell.content.eq(baseContent)) tr2.replace(tr2.mapping.map(pos + 1), tr2.mapping.map(pos + cell.nodeSize - 1), new Slice(baseContent, 0, 0));
    });
    if (tr2.docChanged) dispatch(tr2);
  }
  return true;
}
keydownHandler({
  ArrowLeft: arrow("horiz", -1),
  ArrowRight: arrow("horiz", 1),
  ArrowUp: arrow("vert", -1),
  ArrowDown: arrow("vert", 1),
  "Shift-ArrowLeft": shiftArrow("horiz", -1),
  "Shift-ArrowRight": shiftArrow("horiz", 1),
  "Shift-ArrowUp": shiftArrow("vert", -1),
  "Shift-ArrowDown": shiftArrow("vert", 1),
  Backspace: deleteCellSelection,
  "Mod-Backspace": deleteCellSelection,
  Delete: deleteCellSelection,
  "Mod-Delete": deleteCellSelection
});
function maybeSetSelection(state, dispatch, selection) {
  if (selection.eq(state.selection)) return false;
  if (dispatch) dispatch(state.tr.setSelection(selection).scrollIntoView());
  return true;
}
function arrow(axis, dir) {
  return (state, dispatch, view) => {
    if (!view) return false;
    const sel = state.selection;
    if (sel instanceof CellSelection) return maybeSetSelection(state, dispatch, Selection.near(sel.$headCell, dir));
    if (axis != "horiz" && !sel.empty) return false;
    const end = atEndOfCell(view, axis, dir);
    if (end == null) return false;
    if (axis == "horiz") return maybeSetSelection(state, dispatch, Selection.near(state.doc.resolve(sel.head + dir), dir));
    else {
      const $cell = state.doc.resolve(end);
      const $next = nextCell($cell, axis, dir);
      let newSel;
      if ($next) newSel = Selection.near($next, 1);
      else if (dir < 0) newSel = Selection.near(state.doc.resolve($cell.before(-1)), -1);
      else newSel = Selection.near(state.doc.resolve($cell.after(-1)), 1);
      return maybeSetSelection(state, dispatch, newSel);
    }
  };
}
function shiftArrow(axis, dir) {
  return (state, dispatch, view) => {
    if (!view) return false;
    const sel = state.selection;
    let cellSel;
    if (sel instanceof CellSelection) cellSel = sel;
    else {
      const end = atEndOfCell(view, axis, dir);
      if (end == null) return false;
      cellSel = new CellSelection(state.doc.resolve(end));
    }
    const $head = nextCell(cellSel.$headCell, axis, dir);
    if (!$head) return false;
    return maybeSetSelection(state, dispatch, new CellSelection(cellSel.$anchorCell, $head));
  };
}
function atEndOfCell(view, axis, dir) {
  if (!(view.state.selection instanceof TextSelection)) return null;
  const { $head } = view.state.selection;
  for (let d2 = $head.depth - 1; d2 >= 0; d2--) {
    const parent = $head.node(d2);
    if ((dir < 0 ? $head.index(d2) : $head.indexAfter(d2)) != (dir < 0 ? 0 : parent.childCount)) return null;
    if (parent.type.spec.tableRole == "cell" || parent.type.spec.tableRole == "header_cell") {
      const cellPos = $head.before(d2);
      const dirStr = axis == "vert" ? dir > 0 ? "down" : "up" : dir > 0 ? "right" : "left";
      return view.endOfTextblock(dirStr) ? cellPos : null;
    }
  }
  return null;
}
new PluginKey("tableColumnResizing");
function combineDOMRects(rect1, rect2) {
  const top = Math.min(rect1.top, rect2.top);
  const bottom = Math.max(rect1.bottom, rect2.bottom);
  const left = Math.min(rect1.left, rect2.left);
  const right = Math.max(rect1.right, rect2.right);
  const width = right - left;
  const height = bottom - top;
  const x2 = left;
  const y2 = top;
  return new DOMRect(x2, y2, width, height);
}
var BubbleMenuView = class {
  constructor({
    editor,
    element,
    view,
    updateDelay = 250,
    resizeDelay = 60,
    shouldShow,
    appendTo,
    getReferencedVirtualElement,
    options
  }) {
    this.preventHide = false;
    this.isVisible = false;
    this.scrollTarget = window;
    this.floatingUIOptions = {
      strategy: "absolute",
      placement: "top",
      offset: 8,
      flip: {},
      shift: {},
      arrow: false,
      size: false,
      autoPlacement: false,
      hide: false,
      inline: false,
      onShow: void 0,
      onHide: void 0,
      onUpdate: void 0,
      onDestroy: void 0
    };
    this.shouldShow = ({ view: view2, state, from: from2, to }) => {
      const { doc: doc2, selection } = state;
      const { empty: empty2 } = selection;
      const isEmptyTextBlock = !doc2.textBetween(from2, to).length && isTextSelection(state.selection);
      const isChildOfMenu = this.element.contains(document.activeElement);
      const hasEditorFocus = view2.hasFocus() || isChildOfMenu;
      if (!hasEditorFocus || empty2 || isEmptyTextBlock || !this.editor.isEditable) {
        return false;
      }
      return true;
    };
    this.mousedownHandler = () => {
      this.preventHide = true;
    };
    this.dragstartHandler = () => {
      this.hide();
    };
    this.resizeHandler = () => {
      if (this.resizeDebounceTimer) {
        clearTimeout(this.resizeDebounceTimer);
      }
      this.resizeDebounceTimer = window.setTimeout(() => {
        this.updatePosition();
      }, this.resizeDelay);
    };
    this.focusHandler = () => {
      setTimeout(() => this.update(this.editor.view));
    };
    this.blurHandler = ({ event }) => {
      var _a3;
      if (this.editor.isDestroyed) {
        this.destroy();
        return;
      }
      if (this.preventHide) {
        this.preventHide = false;
        return;
      }
      if ((event == null ? void 0 : event.relatedTarget) && ((_a3 = this.element.parentNode) == null ? void 0 : _a3.contains(event.relatedTarget))) {
        return;
      }
      if ((event == null ? void 0 : event.relatedTarget) === this.editor.view.dom) {
        return;
      }
      this.hide();
    };
    this.handleDebouncedUpdate = (view2, oldState) => {
      const selectionChanged = !(oldState == null ? void 0 : oldState.selection.eq(view2.state.selection));
      const docChanged = !(oldState == null ? void 0 : oldState.doc.eq(view2.state.doc));
      if (!selectionChanged && !docChanged) {
        return;
      }
      if (this.updateDebounceTimer) {
        clearTimeout(this.updateDebounceTimer);
      }
      this.updateDebounceTimer = window.setTimeout(() => {
        this.updateHandler(view2, selectionChanged, docChanged, oldState);
      }, this.updateDelay);
    };
    this.updateHandler = (view2, selectionChanged, docChanged, oldState) => {
      const { composing } = view2;
      const isSame = !selectionChanged && !docChanged;
      if (composing || isSame) {
        return;
      }
      const shouldShow2 = this.getShouldShow(oldState);
      if (!shouldShow2) {
        this.hide();
        return;
      }
      this.updatePosition();
      this.show();
    };
    this.transactionHandler = ({ transaction: tr2 }) => {
      const meta = tr2.getMeta("bubbleMenu");
      if (meta === "updatePosition") {
        this.updatePosition();
      } else if (meta && typeof meta === "object" && meta.type === "updateOptions") {
        this.updateOptions(meta.options);
      }
    };
    var _a2;
    this.editor = editor;
    this.element = element;
    this.view = view;
    this.updateDelay = updateDelay;
    this.resizeDelay = resizeDelay;
    this.appendTo = appendTo;
    this.scrollTarget = (_a2 = options == null ? void 0 : options.scrollTarget) != null ? _a2 : window;
    this.getReferencedVirtualElement = getReferencedVirtualElement;
    this.floatingUIOptions = {
      ...this.floatingUIOptions,
      ...options
    };
    this.element.tabIndex = 0;
    if (shouldShow) {
      this.shouldShow = shouldShow;
    }
    this.element.addEventListener("mousedown", this.mousedownHandler, { capture: true });
    this.view.dom.addEventListener("dragstart", this.dragstartHandler);
    this.editor.on("focus", this.focusHandler);
    this.editor.on("blur", this.blurHandler);
    this.editor.on("transaction", this.transactionHandler);
    window.addEventListener("resize", this.resizeHandler);
    this.scrollTarget.addEventListener("scroll", this.resizeHandler);
    this.update(view, view.state);
    if (this.getShouldShow()) {
      this.show();
      this.updatePosition();
    }
  }
  get middlewares() {
    const middlewares = [];
    if (this.floatingUIOptions.flip) {
      middlewares.push(flip(typeof this.floatingUIOptions.flip !== "boolean" ? this.floatingUIOptions.flip : void 0));
    }
    if (this.floatingUIOptions.shift) {
      middlewares.push(
        shift(typeof this.floatingUIOptions.shift !== "boolean" ? this.floatingUIOptions.shift : void 0)
      );
    }
    if (this.floatingUIOptions.offset) {
      middlewares.push(
        offset(typeof this.floatingUIOptions.offset !== "boolean" ? this.floatingUIOptions.offset : void 0)
      );
    }
    if (this.floatingUIOptions.arrow) {
      middlewares.push(arrow$1(this.floatingUIOptions.arrow));
    }
    if (this.floatingUIOptions.size) {
      middlewares.push(size(typeof this.floatingUIOptions.size !== "boolean" ? this.floatingUIOptions.size : void 0));
    }
    if (this.floatingUIOptions.autoPlacement) {
      middlewares.push(
        autoPlacement(
          typeof this.floatingUIOptions.autoPlacement !== "boolean" ? this.floatingUIOptions.autoPlacement : void 0
        )
      );
    }
    if (this.floatingUIOptions.hide) {
      middlewares.push(hide(typeof this.floatingUIOptions.hide !== "boolean" ? this.floatingUIOptions.hide : void 0));
    }
    if (this.floatingUIOptions.inline) {
      middlewares.push(
        inline(typeof this.floatingUIOptions.inline !== "boolean" ? this.floatingUIOptions.inline : void 0)
      );
    }
    return middlewares;
  }
  get virtualElement() {
    var _a2, _b, _c;
    const { selection } = this.editor.state;
    const referencedVirtualElement = (_a2 = this.getReferencedVirtualElement) == null ? void 0 : _a2.call(this);
    if (referencedVirtualElement) {
      return referencedVirtualElement;
    }
    if (!((_c = (_b = this.view) == null ? void 0 : _b.dom) == null ? void 0 : _c.parentNode)) {
      return;
    }
    const domRect = posToDOMRect(this.view, selection.from, selection.to);
    let virtualElement = {
      getBoundingClientRect: () => domRect,
      getClientRects: () => [domRect]
    };
    if (selection instanceof NodeSelection) {
      let node = this.view.nodeDOM(selection.from);
      const nodeViewWrapper = node.dataset.nodeViewWrapper ? node : node.querySelector("[data-node-view-wrapper]");
      if (nodeViewWrapper) {
        node = nodeViewWrapper;
      }
      if (node) {
        virtualElement = {
          getBoundingClientRect: () => node.getBoundingClientRect(),
          getClientRects: () => [node.getBoundingClientRect()]
        };
      }
    }
    if (selection instanceof CellSelection) {
      const { $anchorCell, $headCell } = selection;
      const from2 = $anchorCell ? $anchorCell.pos : $headCell.pos;
      const to = $headCell ? $headCell.pos : $anchorCell.pos;
      const fromDOM = this.view.nodeDOM(from2);
      const toDOM = this.view.nodeDOM(to);
      if (!fromDOM || !toDOM) {
        return;
      }
      const clientRect2 = fromDOM === toDOM ? fromDOM.getBoundingClientRect() : combineDOMRects(
        fromDOM.getBoundingClientRect(),
        toDOM.getBoundingClientRect()
      );
      virtualElement = {
        getBoundingClientRect: () => clientRect2,
        getClientRects: () => [clientRect2]
      };
    }
    return virtualElement;
  }
  updatePosition() {
    const virtualElement = this.virtualElement;
    if (!virtualElement) {
      return;
    }
    computePosition(virtualElement, this.element, {
      placement: this.floatingUIOptions.placement,
      strategy: this.floatingUIOptions.strategy,
      middleware: this.middlewares
    }).then(({ x: x2, y: y2, strategy, middlewareData }) => {
      var _a2, _b;
      if (((_a2 = middlewareData.hide) == null ? void 0 : _a2.referenceHidden) || ((_b = middlewareData.hide) == null ? void 0 : _b.escaped)) {
        this.element.style.visibility = "hidden";
        return;
      }
      this.element.style.visibility = "visible";
      this.element.style.width = "max-content";
      this.element.style.position = strategy;
      this.element.style.left = `${x2}px`;
      this.element.style.top = `${y2}px`;
      if (this.isVisible && this.floatingUIOptions.onUpdate) {
        this.floatingUIOptions.onUpdate();
      }
    });
  }
  update(view, oldState) {
    const { state } = view;
    const hasValidSelection = state.selection.from !== state.selection.to;
    if (this.updateDelay > 0 && hasValidSelection) {
      this.handleDebouncedUpdate(view, oldState);
      return;
    }
    const selectionChanged = !(oldState == null ? void 0 : oldState.selection.eq(view.state.selection));
    const docChanged = !(oldState == null ? void 0 : oldState.doc.eq(view.state.doc));
    this.updateHandler(view, selectionChanged, docChanged, oldState);
  }
  getShouldShow(oldState) {
    var _a2;
    const { state } = this.view;
    const { selection } = state;
    const { ranges } = selection;
    const from2 = Math.min(...ranges.map((range) => range.$from.pos));
    const to = Math.max(...ranges.map((range) => range.$to.pos));
    const shouldShow = (_a2 = this.shouldShow) == null ? void 0 : _a2.call(this, {
      editor: this.editor,
      element: this.element,
      view: this.view,
      state,
      oldState,
      from: from2,
      to
    });
    return shouldShow || false;
  }
  show() {
    var _a2;
    if (this.isVisible) {
      return;
    }
    this.element.style.visibility = "visible";
    this.element.style.opacity = "1";
    const appendToElement = typeof this.appendTo === "function" ? this.appendTo() : this.appendTo;
    (_a2 = appendToElement != null ? appendToElement : this.view.dom.parentElement) == null ? void 0 : _a2.appendChild(this.element);
    if (this.floatingUIOptions.onShow) {
      this.floatingUIOptions.onShow();
    }
    this.isVisible = true;
  }
  hide() {
    if (!this.isVisible) {
      return;
    }
    this.element.style.visibility = "hidden";
    this.element.style.opacity = "0";
    this.element.remove();
    if (this.floatingUIOptions.onHide) {
      this.floatingUIOptions.onHide();
    }
    this.isVisible = false;
  }
  updateOptions(newProps) {
    var _a2;
    if (newProps.updateDelay !== void 0) {
      this.updateDelay = newProps.updateDelay;
    }
    if (newProps.resizeDelay !== void 0) {
      this.resizeDelay = newProps.resizeDelay;
    }
    if (newProps.appendTo !== void 0) {
      this.appendTo = newProps.appendTo;
    }
    if (newProps.getReferencedVirtualElement !== void 0) {
      this.getReferencedVirtualElement = newProps.getReferencedVirtualElement;
    }
    if (newProps.shouldShow !== void 0) {
      if (newProps.shouldShow) {
        this.shouldShow = newProps.shouldShow;
      }
    }
    if (newProps.options !== void 0) {
      const newScrollTarget = (_a2 = newProps.options.scrollTarget) != null ? _a2 : window;
      if (newScrollTarget !== this.scrollTarget) {
        this.scrollTarget.removeEventListener("scroll", this.resizeHandler);
        this.scrollTarget = newScrollTarget;
        this.scrollTarget.addEventListener("scroll", this.resizeHandler);
      }
      this.floatingUIOptions = {
        ...this.floatingUIOptions,
        ...newProps.options
      };
    }
  }
  destroy() {
    this.hide();
    this.element.removeEventListener("mousedown", this.mousedownHandler, { capture: true });
    this.view.dom.removeEventListener("dragstart", this.dragstartHandler);
    window.removeEventListener("resize", this.resizeHandler);
    this.scrollTarget.removeEventListener("scroll", this.resizeHandler);
    this.editor.off("focus", this.focusHandler);
    this.editor.off("blur", this.blurHandler);
    this.editor.off("transaction", this.transactionHandler);
    if (this.floatingUIOptions.onDestroy) {
      this.floatingUIOptions.onDestroy();
    }
  }
};
var BubbleMenuPlugin = (options) => {
  return new Plugin({
    key: typeof options.pluginKey === "string" ? new PluginKey(options.pluginKey) : options.pluginKey,
    view: (view) => new BubbleMenuView({ view, ...options })
  });
};
var BubbleMenu = /* @__PURE__ */ defineComponent({
  name: "BubbleMenu",
  inheritAttrs: false,
  props: {
    pluginKey: {
      type: [String, Object],
      default: "bubbleMenu"
    },
    editor: {
      type: Object,
      required: true
    },
    updateDelay: {
      type: Number,
      default: void 0
    },
    resizeDelay: {
      type: Number,
      default: void 0
    },
    options: {
      type: Object,
      default: () => ({})
    },
    appendTo: {
      type: [Object, Function],
      default: void 0
    },
    shouldShow: {
      type: Function,
      default: null
    },
    getReferencedVirtualElement: {
      type: Function,
      default: void 0
    }
  },
  setup(props, { slots, attrs }) {
    const root = /* @__PURE__ */ ref(null);
    onMounted(() => {
      const {
        editor,
        options,
        pluginKey,
        resizeDelay,
        appendTo,
        shouldShow,
        getReferencedVirtualElement,
        updateDelay
      } = props;
      const el = root.value;
      if (!el) {
        return;
      }
      el.style.visibility = "hidden";
      el.style.position = "absolute";
      el.remove();
      nextTick(() => {
        editor.registerPlugin(
          BubbleMenuPlugin({
            editor,
            element: el,
            options,
            pluginKey,
            resizeDelay,
            appendTo,
            shouldShow,
            getReferencedVirtualElement,
            updateDelay
          })
        );
      });
    });
    onBeforeUnmount(() => {
      const { pluginKey, editor } = props;
      editor.unregisterPlugin(pluginKey);
    });
    return () => {
      var _a2;
      return h$2("div", { ref: root, ...attrs }, (_a2 = slots.default) == null ? void 0 : _a2.call(slots));
    };
  }
});
const _hoisted_1$6 = { class: "note-menu" };
const _sfc_main$6 = {
  __name: "Menu",
  props: {
    editor: {
      type: Object,
      required: true
    }
  },
  setup(__props) {
    return (_ctx, _cache) => {
      return __props.editor ? (openBlock(), createBlock(unref(BubbleMenu), {
        key: 0,
        editor: __props.editor
      }, {
        default: withCtx(() => [
          createBaseVNode("div", _hoisted_1$6, [
            createBaseVNode("button", {
              onClick: _cache[0] || (_cache[0] = ($event) => __props.editor.chain().focus().toggleBold().run()),
              class: normalizeClass({ active: __props.editor.isActive("bold") })
            }, " Bold ", 2),
            createBaseVNode("button", {
              onClick: _cache[1] || (_cache[1] = ($event) => __props.editor.chain().focus().toggleItalic().run()),
              class: normalizeClass({ active: __props.editor.isActive("italic") })
            }, " Italic ", 2),
            createBaseVNode("button", {
              onClick: _cache[2] || (_cache[2] = ($event) => __props.editor.chain().focus().toggleHighlight().run()),
              class: normalizeClass({ active: __props.editor.isActive("highlight") })
            }, " Highlight ", 2)
          ])
        ]),
        _: 1
      }, 8, ["editor"])) : createCommentVNode("", true);
    };
  }
};
const _hoisted_1$5 = {
  key: 0,
  class: "note-editor"
};
const _sfc_main$5 = {
  __name: "Editor",
  props: {
    id: {
      type: String,
      required: true
    }
  },
  setup(__props) {
    const props = __props;
    const editor = /* @__PURE__ */ shallowRef();
    const { loadNote, updateNoteContent, updateNoteMetadata } = useNotes();
    const updateNote = _debounce(async ({ editor: editor2 }) => {
      const json2 = editor2.getJSON();
      const text = editor2.getText();
      await updateNoteContent(props.id, json2, text);
      updateTitle(editor2);
    }, 300);
    let lastTitle;
    const updateTitle = _debounce(async (editor2) => {
      const doc2 = editor2.state.doc;
      const firstNode = doc2.firstChild;
      if (!firstNode || firstNode.type.name !== "heading") return;
      const newTitle = firstNode.textContent.trim() || "Untitled";
      if (newTitle === lastTitle) return;
      lastTitle = newTitle;
      await updateNoteMetadata(props.id, { title: newTitle });
    }, 300);
    onMounted(async () => {
      const note = await loadNote(props.id);
      lastTitle = note.title;
      const lowlight = createLowlight(grammars);
      const CustomDocument = index_default$1.extend({
        content: "heading block*"
      });
      editor.value = new Editor2({
        extensions: [
          CustomDocument,
          index_default.configure({
            document: false,
            heading: { levels: [1] },
            trailingNode: {
              node: "paragraph"
            }
          }),
          Placeholder.configure({
            placeholder: ({ node }) => {
              if (node.type.name === "heading") {
                return "Title";
              }
            }
          }),
          TaskList,
          TaskItem,
          Highlight,
          index_default$2.configure({
            lowlight,
            enableTabIndentation: true
          })
        ],
        content: note.content || [],
        onUpdate: updateNote
      });
    });
    onBeforeUnmount(() => {
      editor.value?.destroy?.();
    });
    return (_ctx, _cache) => {
      return editor.value ? (openBlock(), createElementBlock("div", _hoisted_1$5, [
        createVNode(unref(EditorContent), {
          editor: editor.value,
          class: "editor-wrap"
        }, null, 8, ["editor"]),
        createVNode(_sfc_main$6, { editor: editor.value }, null, 8, ["editor"])
      ])) : createCommentVNode("", true);
    };
  }
};
const _hoisted_1$4 = { class: "note layout-block" };
const _sfc_main$4 = {
  __name: "Note",
  setup(__props) {
    const route = useRoute();
    const id = route.params.id;
    const { ctrl, f: f2 } = useMagicKeys();
    watchEffect(() => {
      if (ctrl.value && f2.value) {
        console.log("find");
      }
    });
    return (_ctx, _cache) => {
      return openBlock(), createElementBlock("main", _hoisted_1$4, [
        createVNode(_sfc_main$5, { id: unref(id) }, null, 8, ["id"])
      ]);
    };
  }
};
const _hoisted_1$3 = { class: "create-category layout-block" };
const _sfc_main$3 = {
  __name: "CreateCategory",
  setup(__props) {
    const router2 = useRouter();
    const onCategoryEdited = (name) => {
      router2.push({ name: "category", params: { id: name } });
    };
    return (_ctx, _cache) => {
      return openBlock(), createElementBlock("main", _hoisted_1$3, [
        createVNode(_sfc_main$9, {
          index: 1,
          editable: "",
          onEdited: onCategoryEdited
        })
      ]);
    };
  }
};
const _hoisted_1$2 = { class: "category layout-block" };
const _hoisted_2$1 = { class: "notes" };
const _sfc_main$2 = {
  __name: "Category",
  setup(__props) {
    const route = useRoute();
    const id = route.params?.id;
    const router2 = useRouter();
    const { categories: categories2, loadCategoryNotes, updateCategory, notesChangeCount: notesChangeCount2 } = useNotes();
    const notes = /* @__PURE__ */ ref();
    async function refreshNotes() {
      if (id) {
        notes.value = await loadCategoryNotes(id);
      }
    }
    onMounted(async () => {
      await refreshNotes();
    });
    watch(notesChangeCount2, async () => {
      await refreshNotes();
    });
    const onCategoryEdited = async (editedCategory) => {
      await updateCategory(id, editedCategory);
      router2.push({ name: "category", params: { id: editedCategory } });
    };
    const categoryIndex = computed(() => {
      return categories2.value?.findIndex((category) => category === id) || 1;
    });
    return (_ctx, _cache) => {
      const _component_router_link = resolveComponent("router-link");
      return openBlock(), createElementBlock("main", _hoisted_1$2, [
        createVNode(_component_router_link, {
          class: "back",
          to: "/"
        }, {
          default: withCtx(() => [..._cache[0] || (_cache[0] = [
            createTextVNode("<- Go Back", -1)
          ])]),
          _: 1
        }),
        createVNode(_sfc_main$9, {
          index: categoryIndex.value,
          category: unref(id),
          editable: "",
          onEdited: onCategoryEdited
        }, null, 8, ["index", "category"]),
        createBaseVNode("div", _hoisted_2$1, [
          (openBlock(true), createElementBlock(Fragment$1, null, renderList(notes.value, (note) => {
            return openBlock(), createBlock(_sfc_main$8, {
              note,
              key: note.id
            }, null, 8, ["note"]);
          }), 128))
        ]),
        createVNode(_sfc_main$f, { category: unref(id) }, null, 8, ["category"])
      ]);
    };
  }
};
const _export_sfc = (sfc, props) => {
  const target = sfc.__vccOpts || sfc;
  for (const [key, val] of props) {
    target[key] = val;
  }
  return target;
};
const _sfc_main$1 = {};
const _hoisted_1$1 = { class: "instructions layout-block" };
function _sfc_render(_ctx, _cache) {
  const _component_router_link = resolveComponent("router-link");
  return openBlock(), createElementBlock("main", _hoisted_1$1, [
    createVNode(_component_router_link, {
      class: "back-link",
      to: "/"
    }, {
      default: withCtx(() => [..._cache[0] || (_cache[0] = [
        createTextVNode("<- Go Back", -1)
      ])]),
      _: 1
    }),
    _cache[1] || (_cache[1] = createBaseVNode("p", null, " Medieval Translation Nota = Note Capitulum = Category Intructio = Instructions Tabula = Index/Overview *This can be disabled via toolbar -------------------------------------------- Program Key Commands cmd + s = save cmd + t = new capitulum cmd + n = new nota cmd + x = close window dbl click = change name / open nota paste hyperlink twice = activated url -------------------------------------------- Text Markdowns cmd + b = Bold cmd + u = underline --- = ---------- (ruled line break) /*text*/ = Desaturated text ", -1)),
    _cache[2] || (_cache[2] = createBaseVNode("p", null, " Medieval Translation Nota = Note Capitulum = Category Intructio = Instructions Tabula = Index/Overview *This can be disabled via toolbar -------------------------------------------- Program Key Commands cmd + s = save cmd + t = new capitulum cmd + n = new nota cmd + x = close window dbl click = change name / open nota paste hyperlink twice = activated url -------------------------------------------- Text Markdowns cmd + b = Bold cmd + u = underline --- = ---------- (ruled line break) /*text*/ = Desaturated text ", -1)),
    _cache[3] || (_cache[3] = createBaseVNode("p", null, " Medieval Translation Nota = Note Capitulum = Category Intructio = Instructions Tabula = Index/Overview *This can be disabled via toolbar -------------------------------------------- Program Key Commands cmd + s = save cmd + t = new capitulum cmd + n = new nota cmd + x = close window dbl click = change name / open nota paste hyperlink twice = activated url -------------------------------------------- Text Markdowns cmd + b = Bold cmd + u = underline --- = ---------- (ruled line break) /*text*/ = Desaturated text ", -1)),
    _cache[4] || (_cache[4] = createBaseVNode("p", null, " Medieval Translation Nota = Note Capitulum = Category Intructio = Instructions Tabula = Index/Overview *This can be disabled via toolbar -------------------------------------------- Program Key Commands cmd + s = save cmd + t = new capitulum cmd + n = new nota cmd + x = close window dbl click = change name / open nota paste hyperlink twice = activated url -------------------------------------------- Text Markdowns cmd + b = Bold cmd + u = underline --- = ---------- (ruled line break) /*text*/ = Desaturated text ", -1)),
    _cache[5] || (_cache[5] = createBaseVNode("p", null, " Medieval Translation Nota = Note Capitulum = Category Intructio = Instructions Tabula = Index/Overview *This can be disabled via toolbar -------------------------------------------- Program Key Commands cmd + s = save cmd + t = new capitulum cmd + n = new nota cmd + x = close window dbl click = change name / open nota paste hyperlink twice = activated url -------------------------------------------- Text Markdowns cmd + b = Bold cmd + u = underline --- = ---------- (ruled line break) /*text*/ = Desaturated text ", -1))
  ]);
}
const Instructions = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render]]);
const _hoisted_1 = { class: "search layout-block" };
const _hoisted_2 = { class: "input-wrap" };
const _hoisted_3 = { class: "results" };
const _sfc_main = {
  __name: "Search",
  setup(__props) {
    const query = /* @__PURE__ */ ref("");
    const searchInput = /* @__PURE__ */ ref();
    const { search, searchResults: searchResults2 } = useNotes();
    onMounted(async () => {
      await new Promise((resolve2) => setTimeout(resolve2, 100));
      searchInput.value?.focus();
    });
    const onSearch = async () => {
      await search(query.value);
    };
    return (_ctx, _cache) => {
      const _component_router_link = resolveComponent("router-link");
      return openBlock(), createElementBlock("main", _hoisted_1, [
        createVNode(_component_router_link, {
          class: "back",
          to: "/"
        }, {
          default: withCtx(() => [..._cache[1] || (_cache[1] = [
            createTextVNode("<- Back", -1)
          ])]),
          _: 1
        }),
        createBaseVNode("form", {
          onSubmit: withModifiers(onSearch, ["prevent"])
        }, [
          createBaseVNode("div", _hoisted_2, [
            withDirectives(createBaseVNode("input", {
              "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => query.value = $event),
              type: "text",
              placeholder: "Search",
              ref_key: "searchInput",
              ref: searchInput
            }, null, 512), [
              [vModelText, query.value]
            ])
          ])
        ], 32),
        createBaseVNode("div", _hoisted_3, [
          (openBlock(true), createElementBlock(Fragment$1, null, renderList(unref(searchResults2), (note) => {
            return openBlock(), createBlock(_sfc_main$8, {
              key: note.id,
              note
            }, null, 8, ["note"]);
          }), 128))
        ])
      ]);
    };
  }
};
const routes = [
  { path: "/", name: "directory", component: _sfc_main$7 },
  { path: "/note/:id", name: "note", component: _sfc_main$4 },
  { path: "/category", name: "create-category", component: _sfc_main$3 },
  { path: "/category/:id", name: "category", component: _sfc_main$2 },
  { path: "/instructions", name: "instructions", component: Instructions },
  { path: "/search", name: "search", component: _sfc_main }
];
const router = createRouter({
  history: createWebHashHistory(),
  routes
});
const app = createApp(_sfc_main$a);
app.use(router);
app.mount("#app");
